---
# System prepended metadata

title: 數位系統實驗報告一

---

# 數位系統實驗報告一

:::info
學號: B093040044
系級: 資工二
姓名: 蔡明軒
:::

## 實驗一

### 內容
- 目標
    - 使用vivado的Block Design功能拉出輸出輸入都是1bit的2對一OR閘
- 要求
    - 完成synthesis並且模擬結果正確
    - 測試內容必須包含A=0、B=0，A=0、B=1，A=1、B=0，A=1、B=1
### 過程
1. 新增一個utility vector logic
2. 創建S,Op1,Op2共三個port
3. 將port連線至design物件，生成Block Design )
![](https://i.imgur.com/87cSSvN.png =400x)
4. 創建HDL Wrapper
5. 新增Testbench source
6. synthesis & simulation

- Testbench code
```verilog=
`timescale 1ns / 1ps

module tb();
 reg a,b;
 wire s;
 design_1_wrapper UO(.Op1(a),.Op2(b),.S(s));
 initial
 begin
    a<=1'b0;
    b<=1'b0;
    
    #10
    
    a<=1'b0;
    b<=1'b1;
    
    #10
    
    a<=1'b1;
    b<=1'b0;
    
    #10
    
    a<=1'b1;
    b<=1'b1;
    
    #10
    $finish;
end
endmodule

```
### 結果
![](https://i.imgur.com/a98LOfk.png =500x)


## 實驗二

### 內容
- 目標
    - 使用Verilog將上課的範例full_adder從Behavior Level修改成DataFlow Level 
- 要求
    - 完成synthesis並且模擬結果正確
### 過程

1. 下載網大的檔案
2. 將f_add_tb.v加入simulation source，f_add.v加入design source
3. 將Behavior Level 修改成 DataFlow Level
4. synthesis & simulation

- source code
```verilog=
`timescale 1ns / 1ps

module f_add(
    input wire [2:0] a,
    input wire [2:0] b,
    input wire cin,
    output wire [2:0] sum,
    output wire cout
    );
    assign  {cout, sum} = a + b + cin;
endmodule
```

### 結果

![](https://i.imgur.com/lQbsa9H.png =600x)


## 實驗心得
這次的實驗主要是要讓我們熟悉一下vivado的環境。
- 實驗一

    第一個實驗是要使用Block Design直接拉OR Gate，一開始synthesis成功的時候讓我高興一下，以為自己完成了，但在模擬的時候卻出現報錯訊息，原來是自己的Testbench的變數命名有誤，除錯後再重新synthesis後，確認結果是正確的，便完成了人生中第一次的數位電路電路模擬。
    
- 實驗二
    
    第二個實驗主要的問題是我不清楚怎麼把外界的source檔案放入專案中，研究一陣子後，我發現介面左上角有一個'+'的按鈕，點進去後看到有三個選項，其中一個可以放電路的source，另一個可以放模擬的source，將網大提供的檔案導入後，照著要求把Behavior level改成Dataflow level並synthesis後，按下模擬鍵確認結果無誤後即順利完成第二個實驗。