# 軟硬體協同設計 #### ● 作業標題:4-bit full adder #### ● 學號姓名:A1085118 劉茗凱 #### ● 授課老師:林宏益教授 一、實驗內容: 使用全加器製作4位元的加法器 二、實驗步驟: 1. 先做出1位元的全加器 (fulladder.v) ``` module my_full_adder( input A, input B, input CIN, output S, output COUT ); assign S = A^B^CIN; assign COUT = (A&B) | (CIN&(A^B)); endmodule ``` 2. 使用階層式設計將1位元的全加器寫成4位元全加器 ``` `include "full_adder.v" module four_bit_adder( input [3:0] A, input [3:0] B, input C0, output [3:0] S, output C4 ); wire C1,C2,C3; my_full_adder fa0 (A[0],B[0],C0,S[0],C1); my_full_adder fa1 (A[1],B[1],C1,S[1],C2); my_full_adder fa2 (A[2],B[2],C2,S[2],C3); my_full_adder fa3 (A[3],B[3],C3,S[3],C4); endmodule ``` 3. 設定testbench檢查程式是否有誤 ``` `timescale 1ns/100ps //`include "full_adder.v" //`include "four_bit__adder.v" module test_4_bit; reg [3:0] A; reg [3:0] B; reg C0;//carry_in wire [3:0] S; wire C4;//carry_out four_bit_adder dut(A,B,C0,S,C4); initial begin $dumpfile("hw20231004.vcd"); $dumpvars(0, test_4_bit); $monitor("A = %b, B = %b, SUM = %b, COUT = %b", A, B, S, C4); C0=1'b0; A = 4'b0011;B=4'b0011; #10; A = 4'b1011;B=4'b0111; #10; A = 4'b1111;B=4'b1001; #10; A = 4'b1100;B=4'b0110; #10; A = 4'b1101;B=4'b0111; #10; A = 4'b1111;B=4'b1011; #10; A = 4'b0011;B=4'b0011; #10; A = 4'b1011;B=4'b0111; #10; A = 4'b1101;B=4'b1000; #10; A = 4'b0011;B=4'b0011; #10; A = 4'b1011;B=4'b0111; #10; A = 4'b0111;B=4'b1111; #10; A = 4'b0000;B=4'b0011; #10; A = 4'b1011;B=4'b0101; #10; A = 4'b1111;B=4'b1111; #10; end endmodule ``` 4. 立用lcarus Verilog經過編譯器產生vcd檔,並使用gtkwave查看simulation波型結果 5. Xilinx Vivado 並進行 Synthesis for FPGA 三. 實驗結果 schematic ![](https://hackmd.io/_uploads/B1JGy5Yx6.jpg) ![](https://hackmd.io/_uploads/B1Rz1qKxT.jpg) 波型 ![](https://hackmd.io/_uploads/rkSr1cKxp.jpg) 四. 實驗心得 這次作業是我第一次接觸有關Verilog的內容,在了解每個指令時用掉我不少的時間。在面對編譯器等工具時,因為對於其操作介面並不熟悉,因此在使用上也是有遇到許多的困難。還好這次的內容是有關全加器的設計,它的內容以及邏輯在之前就已經有先了解過,因此只需要將其使用Verilog的方式表達。也感謝身旁有同學願意與我一同討論,讓我不致於手忙腳亂地在面對一切。 五. 參考文獻 數位積體電路設計─夏大維