---
# System prepended metadata

title: 軟硬體協同設計

---

# 軟硬體協同設計
#### ●　作業標題：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的方式表達。也感謝身旁有同學願意與我一同討論，讓我不致於手忙腳亂地在面對一切。
五. 參考文獻
數位積體電路設計─夏大維