# 數位系統 第三次實驗報告
###### tags: `digital system`
姓名:高聖傑
系級:資工113
學號:B093040016
實驗日期:2021/10/18
## 實驗一
### 內容
- 目標 & 要求
- 找出 sum of minterm as $F_1$
- 找出 product of maxterm as $F_2$
- 根據模擬結果的波形圖,驗證 $F_1$ 等效於 $F_2$
### 過程
$F_1$, sum of minterm(先找 True , 再對全部取 OR ):
$=w'x'y'z+ w'x'yz'+ w'x'yz+ w'xyz'+ wx'yz+ wxy'z'+ wxyz'+ wxyz$
$=\Sigma(m_1, m_2, m_3, m_6, m_{11}, m_{12}, m_{14}, m_{15})$
$F_2$, product of maxterm(先找 False , 再對全部取 AND ):
$=( w+x+y+z)( w+x'+y+z)(w+x'+y+z')(w+x'+y'+z)\\(w'+x+y+z)(w'+x+y+z')(w'+x+y'+z)(w'+x'+y+z')$
$=\Pi(M_0, M_4, M_5, M_7, M_8, M_9, M_{10}, M_{13})$
```verilog=
`timescale 1ns / 1ps
module exe1_1(w, x, y, z, res);
input w, x, y, z;
output res;
assign res =
(~w&~x&~y&z) | (~w&~x&y&~z) | (~w&~x&y&z) | (~w&x&y&~z)
| (w&~x&y&z) | ( w&x&~y&~z) | ( w&x&y&~z) | ( w&x&y&z);
endmodule
module exe1_2(w, x, y, z, res);
input w, x, y, z;
output res;
assign res =
( w|x|y|z) & ( w|~x|y|z) & (w|~x|y|~z) & (w|~x|~y|~z)
& (~w|x|y|z) & (~w|x|y|~z) & (~w|x|~y|z) & (~w|~x|y|~z);
endmodule
```
### 模擬結果
| w | x | y | z | res |
|:---:|:---:|:---:|:---:|:---:|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 1 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 1 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
$F_1$ → res1, $F_2$ → res2

兩個 function 所產生的波形圖一樣,因此可證明 $F_1, F_2$ 等效,
且 $F_1, F_2$ 在 canonical form 表示法中,挑出的數字為補集。
## 實驗二
### 內容
- 目標 & 要求
- 使用德摩根定律,算出下列
- $(x↓y)↓z=(x+y)z'$
- $z↓(y↓x)=z'(x+y)$
- $x↓(y↓z)=x'(y+z)$
- 利用 Structural level modeling,模擬以下 boolean function
- $F_1 = (x↓y)↓z$
- $F_2 = z↓(y↓x)$
- $F_3 = x↓(y↓z)$
- 根據模擬結果的波形圖,驗證 $F_1$ 等效於 $F_2$,且 $F_1,F_3$ 並非等效邏輯
### 過程
### $(x↓y)↓z=(x+y)z'$
$(x↓y)↓z$
$=(x↓y)'z'$
$=(x+y)z'$
### $z↓(y↓x)=z'(x+y)$
$z↓(y↓x)$
$=z'(x↓y)'$
$=z'(x+y)$
### $x↓(y↓z)=x'(y+z)$
$x↓(y↓z)$
$=x'(y↓z)'$
$=x'(y+z)$
```verilog=
`timescale 1ns / 1ps
module exe2_1(x, y, z, res);
input x, y, z;
output res;
wire nor1;
nor(nor1, x, y);
nor(res, nor1, z);
endmodule
module exe2_2(x, y, z, res);
input x, y, z;
output res;
wire nor1;
nor(nor1, y, x);
nor(res, z, nor1);
endmodule
module exe2_3(x, y, z, res);
input x, y, z;
output res;
wire nor1;
nor(nor1, z, y);
nor(res, nor1, x);
endmodule
```
> 其實不難發現,$z↓(y↓x)$ 只是刮號內左右互換的 $(x↓y)↓z$ ...
### 模擬結果
$(x↓y)↓z$ → res1, $z↓(y↓x)$ → res2, $x↓(y↓z)$→ res3

三個 function 所產生的波形圖裡,
$(x↓y)↓z, z↓(y↓x)$ 輸出相同,因此可證明 $(x↓y)↓z, z↓(y↓x)$ 等效。
$(x↓y)↓z, x↓(y↓z)$ 輸出有異,說明其為非等效邏輯
## 實驗三
### 內容
- 目標 & 要求
- 求出 F(w, x, y, z) 的真值表
- 利用 Structural level modeling,模擬以下 boolean function
- $F_1 = (w⊕x)⊕(y⊕z)$
- $F_2 = w⊕(x⊕(y⊕z))$
- $F_3 = w⊕x⊕y⊕z$
- 根據模擬結果的波形圖,驗證 $F_1,F_2,F_3$ 等效
### 過程
```verilog=
`timescale 1ns / 1ps
module exe3_1(x, y, z, res);
input w, x, y, z;
output res;
wire x1, x2;
xor(x1, w, x);
xor(x2, y, z);
xor(res, x1, x2);
endmodule
module exe3_2(x, y, z, res);
input w, x, y, z;
output res;
wire x1, x2;
xor(x1, y, z);
xor(x2, x, x1);
xor(res, w, x2);
endmodule
module exe3_3(x, y, z, res);
input w, x, y, z;
output res;
xor(res, w, x, y, z);
endmodule
```
- truth table
| w | x | y | z | F |
|:---:|:---:|:---:|:---:|:---:|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 1 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 0 |
| 0 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 1 | 1 |
| 1 | 1 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 0 |
### 模擬結果
$F_1$ → res1, $F_2$ → res2, $F_3$ → res3

三個 function 所產生的波形圖皆一樣,因此可證明 $F_1, F_2, F_3$ 等效,且觀察到 XOR 邏輯閘只有在輸入奇數個 1 會輸出 1,**輸入數量或順序不影響其結果**。
## 實驗心得
> 這次的實驗主要是練習 verilog 程式碼。
> 第一個實驗中,使用 dataflow level 觀察在同個 truth table 中 sum of minterm & product of maxterm 是否相同。我看到有同學的程式碼是全部擠在一起的,這樣若要 debug 會造成閱讀上的困難,可見排版的重要性。
> 第二個實驗是觀察 NOR 邏輯閘是否符合結合率。
> 第三個實驗是觀察 XOR 邏輯閘在不同的輸入數量或順序時,結果有無差異,最後是觀察到, XOR 邏輯閘只有在輸入奇數個 1 會輸出 1。
> 此外,在助教的指導下,我學會如何一次同步模擬多個 module,這樣在比較不同 module 間的輸出更為方便,也不用花時間創建一大堆專案,時間效率提升了不少。
> 在整體上,我已經大致熟悉 vivado 的流程,這次出現一點命名錯誤之類的小 bug,可以快速解掉,可說是一回生,二回熟,希望以後還是能這麼順利。