Verilog RTL 代码设计示例
實驗一.做一個4選1的mux,并且進行波形仿真和2選1的mux對比,觀察資源消耗的變化
四選一mux代碼如下:
RTL視圖如下:
波形仿真如下:
2選1的mux資源消耗情況:
4選1的mux資源消耗情況:
4選1比2選1消耗資源更多。
實驗二.編寫一個4X4路交叉開關的RTL,然后編譯,看RTL View 比較2x2與4x4之間消耗資源的區別。通過對比資源,你有什么結論?
4X4路交叉開關實驗代碼設計如下:
4X4路交叉開關RTL視圖如下:
2X2路交叉開關RTL視圖如下:
2X2路交叉開關資源消耗情況:
4X4路交叉開關資源消耗情況:
可見4X4的交叉開關消耗資源成倍的增長了。
實驗三.編寫一個8輸入的優先編碼器,然后編譯,看RTL View
實驗四.
4-16譯碼器實驗代碼如下:
資源消耗變化如下:
3-8譯碼器資源消耗:
4-16譯碼器資源消耗:
輸入多了一位、輸出多了八位的情況下資源消耗幾乎多了一倍,可見資源消耗主要與輸出位數正相關。
實驗五.
1.把加法器的輸出信號改成4比特位寬,程序如下:
波形仿真如下:
可見當輸出信號位寬下降時,不能完整的實現其功能,當輸出值大于15之后就會出錯。
2.把加法器的輸入信號改成8比特位寬,程序如下:
仿真波形圖如下:
可見其輸出時延稍大于4輸入的無符號加法器。
實驗六.
1.把加法器的輸出信號改成4比特位寬:
2.把加法器的輸入信號改成8比特位寬:
實驗七.
不改變流水線的級數,把加法器的輸入信號改成8比特位寬,編譯,波形仿真,和不帶流水線的情況對比一下,你有什么結論?
在8比特輸入位寬的情況下,在輸入上再添加一級流水線,觀察編譯和仿真的結果,你有什么結論?
分析:
純粹的加法器是一堆組合邏輯門構成的,這些組合邏輯的計算延遲較大,如果加法器電路的前極或后級電路也是一個規模較大的組合邏輯,那么它們會和加法器電路合并成為一個更大的組合邏輯,從而帶來更大的組合邏輯計算延遲。
每一個D觸發器都有其所容許的最小的建立與保持時間,當兩個D觸發器之間的組合電路邏輯延遲變得更大的時候,會導致電路只能工作在更低的時鐘頻率,為了讓電路能夠工作在更高的時鐘頻率,需要用D觸發器來把大塊的組合邏輯分割為小塊,這就是流水線技術。(建議自行Google 關鍵字 D觸發器 建立與保持時間)
與不加流水線的加法器相比,帶流水線的加法器即在加法器的輸入與輸出都連接了D觸發器,有效的減少了組合邏輯的競爭與冒險,從而明顯減少了“毛刺”的長度。而流水線的級數越高,毛刺也隨之越短,但輸出的時延也會相應的多一個時鐘周期。
1.不改變流水線的級數,把加法器的輸入信號改成8比特位寬,代碼:
與不加流水線的加法器相比,帶流水線的加法器即在加法器的輸入與輸出都連接了D觸發器,有效的減少了組合邏輯的競爭與冒險,從而明顯減少了“毛刺”的長度。
2.在8比特輸入位寬的情況下,在輸入上再添加一級流水線:
可以發現流水線的級數越高,毛刺也隨之越短,但輸出的時延也會相應的多一個時鐘周期。
實驗八.
1.改變乘法器的輸入位寬為8比特,編譯,波形仿真,觀察信號毛刺的時間長度。
2.選一款沒有硬件乘法器的FPGA芯片(例如Cyclone EP1C6)對比8比特的乘法器和加法器兩者編譯之后的資源開銷(LogicCell的數目)
乘法器資源消耗
加法器資源消耗
3.編寫一個輸入和輸出都有D觸發器的流水線乘法器代碼,編譯后波形仿真,觀察組合邏輯延遲和毛刺的時間,和不帶流水線的情況下對比。
實驗九
- 設計一個最簡單的計數器,只有一個CLK輸入和一個OVerflow輸出,當計數到最大值的時鐘周期CLK輸出1
- 設計復雜的計數器,和本例相似,帶有多種信號,其中同步清零CLR的優先級最高,使能EN次之,LOAD最低。
1.設計一個最簡單的計數器,只有一個CLK輸入和一個OVerflow輸出,當計數到最大值的時鐘周期CLK輸出1
2.設計復雜的計數器,和本例相似,帶有多種信號,其中同步清零CLR的優先級最高,使能EN次之,LOAD最低。
實驗十
設計一個用于識別2進制序列“1011”的狀態機
- 基本要求: 電路每個時鐘周期輸入1比特數據,當捕獲到1011的時鐘周期,電路輸出1,否則輸出0
使用序列101011010作為輸出的測試序列 - 擴展要求:給你的電路添加輸入使能端口,只有輸入使能EN為1的時鐘周期,才從輸入的數據端口向內部獲取1比特序列數據。
實驗分析:因為要捕獲的是“1011”序列,從最低位開始進行匹配,匹配成功跳轉到下一狀態匹配更高一位,只要有一位匹配錯誤就應該跳轉至狀態0重新開始。而加上使能信號后,只有EN為1才從輸入端讀入輸入數據進行匹配。 - 狀態跳轉邏輯表:
| ST0 | IN==0 | ST0 |
| ST0 | IN==1 | ST1 |
| ST1 | IN==0 | ST2 |
| ST1 | IN==1 | ST0 |
| ST2 | IN==0 | ST0 |
| ST2 | IN==1 | ST3 |
| ST3 | IN==0 | ST0 |
| ST3 | IN==1 | ST4 |
| ST4 | DONOT CARE | ST0 |
- 輸出邏輯表:
| ST0 | 0 |
| ST1 | 0 |
| ST2 | 0 |
| ST3 | 0 |
| ST4 | 1 |
代碼及仿真波形圖如下:
實驗十一
設計一個如本節“電路描述”部分的“帶加載使能和移位使能的并入串出”的移位寄存器,電路的RTL結構圖如“電路描述”部分的RTL結構圖所示。
實驗分析:所謂“串入并出”的移位寄存器,及輸入一個1位輸入信號,移位寄存器將這個一位數據存入第0位,并將原本的后3位一同前移1位,最后從高到低并行輸出四位數據。而“并入串出”的移位寄存器是指,輸入一個4位輸入信號,存入移位寄存器,若移位使能有效,則將最高位輸出,移位寄存器后三3同時前移1位,最低位存入0;若加載時能有效,則從輸入端重新讀入4位數據。
總結
以上是生活随笔為你收集整理的Verilog RTL 代码设计示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高速电路EDA设计第一次实验
- 下一篇: FPGA实验——译码器原理及实现