您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何用Verilog Basics設計一個仲裁器”,在日常操作中,相信很多人在如何用Verilog Basics設計一個仲裁器問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何用Verilog Basics設計一個仲裁器”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Introduction
每個Verilog初學者的夢想是在一天內理解它,至少到達足夠使用的程度。接下來的Verilog Basics的幾篇文章將會讓這個夢想成為現實。
盡管Verilog是并行地執行不同的代碼塊,但它和大多數順序執行的編程語言仍有許多相似之處。我們需要的只是一些數字電路的基礎。
在Verilog出現之前,電路設計者使用原理圖進行電路設計。無論復雜程度如何,每個設計都是通過原理圖設計的。這使得設計難以驗證并且容易出錯,導致設計...驗證,設計...驗證,設計...驗證,設計...驗證。。。繁瑣的迭代。
當Verilog出現時,我們對數字電路設計有了不同的思維方式。使用Verilog進行數字電路的功能設計周期類似于傳統的程序開發周期。
Specifications (specs)
High level design
Low level (micro) design
RTL coding
Verification
Synthesis.
首先我們需要一個specifications,列出我們對設計的限制(restrictions )和要求(requirements)
本教程,我們將設計一個仲裁器(arbiter),以下是仲裁器的一些規范。
兩個agent
異步復位,高有效
固定優先級,agent0優先于agent1
在我們有了規范之后,我們就可以繪制框圖,即設計數據流的黑匣子。
Block diagram of arbiter
如果沒有Verilog,下一步我們需要開始繪制狀態機。我們制作一個具有狀態轉換的真值表,然后繪制卡諾圖并化簡優化電路。
每個圓圈表示狀態可能處于的狀態。每個狀態都有相對應的輸出。狀態之間的箭頭是不同事件導致的狀態轉換。
例如,最左邊的橙色箭頭表示如果機器處于GNT0狀態(輸出對應于GNT0的信號)并接收到!req_0的輸入,則狀態機移動到狀態IDLE并輸出與之對應的信號。
這種設計方法適用于小型設計,但對于大型設計,這種流程變得復雜且容易出錯。這就是Verilog的用武之地。
Modules
在仲裁塊的框圖中,我們可以看到它有一個名字(“arbiter”)和輸入/輸出端口(req_0,req_1,gnt_0和gnt_1)。
在Verilog中,我們使用module 來描述這個具有相同輸入和輸出的黑匣子。
此代碼如下所示。
module arbiter (// Two slashes make a comment line.clock , // clockreset , // Active high, syn resetreq_0 , // Request 0req_1 , // Request 1gnt_0 , // Grant 0gnt_1 // Grant 1);//-------------Input Ports-----------------------------// Note : all commands are semicolon-delimitedinput clock ;input reset ;input req_0 ;input req_1 ;//-------------Output Ports----------------------------output gnt_0 ;output gnt_1 ;
Data Type
在硬件中存在兩種數據類型
1、可以存儲值的數據類型(例如:flip-flop)。
2、無法存儲值的數據類型,但可以連接兩個點(例如:wire)。
第一種類型在Verilog中稱為reg(“register”的縮寫)。第二種數據類型稱為導線(“wire”)。
例如:
wire and_gate_output; reg d_flip_flop_output; reg [7:0] address_bus;
Operators
Verilog中的運算符與其他編程語言幾乎相同。
Operator Type | Operator Symbol | Operation Performed |
Arithmetic | * | Multiply |
/ | Division | |
+ | Add | |
- | Subtract | |
% | Modulus | |
+ | Unary plus | |
- | Unary minus | |
Logical | ! | Logical negation |
&& | Logical and | |
|| | Logical or | |
Relational | > | Greater than |
< | Less than | |
>= | Greater than or equal | |
<= | Less than or equal | |
Equality | == | Equality |
!= | inequality | |
Reduction | ~ | Bitwise negation |
~& | nand | |
| | or | |
~| | nor | |
^ | xor | |
^~ | xnor | |
~^ | xnor | |
Shift | >> | Right shift |
<< | Left shift | |
Concatenation | { } | Concatenation |
Conditional | ? | conditional |
例如:
a = b + c; a = 1 << 5; a =!b; a = ~b;
到此,關于“如何用Verilog Basics設計一個仲裁器”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。