# 軟硬體協同設計
#### ● 作業標題: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


波型

四. 實驗心得
這次作業是我第一次接觸有關Verilog的內容,在了解每個指令時用掉我不少的時間。在面對編譯器等工具時,因為對於其操作介面並不熟悉,因此在使用上也是有遇到許多的困難。還好這次的內容是有關全加器的設計,它的內容以及邏輯在之前就已經有先了解過,因此只需要將其使用Verilog的方式表達。也感謝身旁有同學願意與我一同討論,讓我不致於手忙腳亂地在面對一切。
五. 參考文獻
數位積體電路設計─夏大維