---
# System prepended metadata

title: BCD上數非同步計數器

---

#    BCD上數非同步計數器
![](https://i.imgur.com/IofcDNi.png)

* 班　　級：資工二2
* 姓　　名：黃柏諭
* 指導老師：林宏益

---

# 實驗內容
* **實驗目的：** 設計一個BCD上數計數器，且必須包含非同步清除功能。
* **運用軟體：** VS Code & GTKWAVE
* **實驗步驟：**
    1. 撰寫簡報RTL Code中，if的程式碼。
    2. 按照輸入、輸出、時脈與rst，撰寫testbench。
    3. 運用Makefile產生.vcd檔。
    4. 使用GTKWAVE產生波形圖。

---

# 程式碼
* BCD_Counter.v
{%gist 0d1662d6f1e4155c2b7022a66f353fd8 %}
* BCD_Counter_tb.v
{%gist 25f697fac01f6e0d67b90795b7035328 %}
* Makefile
{%gist a22cbda966a136aa782688c840e233d2 %}

---

# 實驗結果
![](https://i.imgur.com/c3Bnon2.png)

---

# 結論心得
經過上次寫過testbench，有了經驗之後，感覺這次的作業變得挺容易了，而這次也運用到之前Blocking寫過的clk程式碼，而由於我目前沒有必要去改變設定好的值，因此我的週期直接給定常數。

比較需要注意的部分是在設定rst觸發的時機，因為我們是設計非同步清除，因此必須設定其在非正緣(依題目而定，有可能是負緣觸發)的情況下觸發，因此我才在BCD_Counter_tb.v第16行給定一個很隨便的數值。

如果剛好將值定在正緣處(16行改成#40)，則會無法判斷是同步或非同步清除。
[GitHub](https://github.com/Midorante/BCD_Counter.git)