# HW1 vivado usage (4-bit full adder )
---
[TOC]
## 1.實驗目的
此次實驗的目的是使用FPGA,模擬4-bit的full adder,讓我學會除了Cell-Based流程外,還兼具跑過整套FPGA的流程,這兩者的經驗。
## 2.電路設計與驗證
4bit Full Adder電路的設計,是利用四個1bit full adder串接,組成一個4bit full adder電路。
### (A).1bit_adder
1bit full adder的電路圖如下:

由A、B、Cin作為輸入,並輸出S和進位Cout。
以下為1bit full adder的Verilog Code:
```
module fadd (
a,
b,
cin,
s,
cout
);
input a,b,cin;
output s,cout;
wire s,cout;
assign {cout,s} = a + b + cin;
endmodule
```
### (B).4bit_adder
4bit_full adder電路圖如下:

由四個1bit full adder串聯所組成,Top Module輸入為4bit的 r1 , r2 和1bit的 cin ,輸出為4bit的 sum 還有進位 cout,使用4個 1bit full adder Sub Module組成
以下為4bit full adder的Verilog Code。
```
module add4_implict (
s,
cout,
r1,
r2,
ci
);
input [3:0] r1, r2;
input ci;
output [3:0] s;
output cout;
wire [3:0] r1,r2;
wire ci;
wire [3:0] s;
wire cout,c1,c2,c3;
fadd u0(
.a (r1[0]),
.b (r2[0]),
.cin (ci),
.s (s[0]),
.cout (c1)
);
fadd u1(
.a (r1[1]),
.b (r2[1]),
.cin (c1),
.s (s[1]),
.cout (c2)
);
fadd u2(
.a (r1[2]),
.b (r2[2]),
.cin (c2),
.s (s[2]),
.cout (c3)
);
fadd u4(
.a (r1[3]),
.b (r2[3]),
.cin (c3),
.s (s[3]),
.cout (cout)
);
endmodule
```
### (C ).電路驗證
testbench的設計上,利用迴圈來驗證輸出結果的正確性。
testbench驗證部分的Verilog Code如下:
```
integer i,j,k;
initial
begin
#0 data_a = 4'd0;
data_b = 4'd0;
cin = 1'b0;
$monitor("data_a = %b ,data_b = %b ,cin =%b ,sum = %b ,cout = %b",data_a,data_b,cin,
sum,cout);
for(k=0 ; k<2 ; k++)
begin
for( i=0 ; i<16 ; i++ )
begin
for (j=0 ; j<16 ; j++ )
begin
#10 data_b = data_b + 4'b1;
end
data_a = data_a + 4'b1;
end
cin = cin + 1'b1;
end
end
```
驗證的結果圖,從Top Module 輸入 r1 , r2 , cin 皆為為 bit'0,到
r1 , r2 , cin 皆為bit'1中止,驗證圖如下:

從輸入每一Bit皆為0開始模擬

模擬至輸入每一Bit皆為1
並且使用gtkwave進行波型的模擬。
波型圖如下:

綠色波型為輸入r1,r2
橘色波型為輸入cin
黃色波型為輸出sum
紅色波型為進位cout
## 3.FPGA模擬
在設計完電路的Verilog和驗證後,接下來把Verilog Code和testbench丟進Vivado,來進行FPGA的模擬。
一開始丟進Vivado後,也可以在Vivado內觀測電路波型,如下圖:

模擬完波型後,就可以進行RTL分析了,觀察Elaborate Design。而什麼是Elaborate呢?
Elaborate就是單純對RTL Code的設計上進行電路分析。
Elaborate Design開啟後,可以觀察到Default Layout,I/O Planning,Floor Planning.如下圖

圖a.Defalut Layout

圖b.Default Layout內部電路圖

圖c. I/O Planning

圖d. Floor Planning
觀察完RTL後,就可以進入邏輯合成(Synthesis)的分析了。
再跑完Synthesis後,就可以看到最佳化邏輯閘的實體電路了,如下圖:

同時,也能觀察到Power timing等等,例如Power觀測,如下圖:

## 4.實驗心得
初次FPGA學習體驗讓我深刻的體會到了使用FPGA來跑模擬的速度真的比Cell-Based來得快許多,並且還能夠直接下到FPGA版上去做模擬!這比起等待晶片下線的速度快上許多。
這次的實驗也讓我有了對FPGA的基本知識,讓我能夠跑完一次簡易的FPGA流程,但如同Cell-Based一般,還有許多的Constraint需要去做設定與調整,所以還有很多的經驗需要去繼續續學習。