您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何用Verilog Basics設(shè)計(jì)一個(gè)仲裁器”,在日常操作中,相信很多人在如何用Verilog Basics設(shè)計(jì)一個(gè)仲裁器問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何用Verilog Basics設(shè)計(jì)一個(gè)仲裁器”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
Introduction
每個(gè)Verilog初學(xué)者的夢(mèng)想是在一天內(nèi)理解它,至少到達(dá)足夠使用的程度。接下來(lái)的Verilog Basics的幾篇文章將會(huì)讓這個(gè)夢(mèng)想成為現(xiàn)實(shí)。
盡管Verilog是并行地執(zhí)行不同的代碼塊,但它和大多數(shù)順序執(zhí)行的編程語(yǔ)言仍有許多相似之處。我們需要的只是一些數(shù)字電路的基礎(chǔ)。
在Verilog出現(xiàn)之前,電路設(shè)計(jì)者使用原理圖進(jìn)行電路設(shè)計(jì)。無(wú)論復(fù)雜程度如何,每個(gè)設(shè)計(jì)都是通過(guò)原理圖設(shè)計(jì)的。這使得設(shè)計(jì)難以驗(yàn)證并且容易出錯(cuò),導(dǎo)致設(shè)計(jì)...驗(yàn)證,設(shè)計(jì)...驗(yàn)證,設(shè)計(jì)...驗(yàn)證,設(shè)計(jì)...驗(yàn)證。。。繁瑣的迭代。
當(dāng)Verilog出現(xiàn)時(shí),我們對(duì)數(shù)字電路設(shè)計(jì)有了不同的思維方式。使用Verilog進(jìn)行數(shù)字電路的功能設(shè)計(jì)周期類似于傳統(tǒng)的程序開(kāi)發(fā)周期。
Specifications (specs)
High level design
Low level (micro) design
RTL coding
Verification
Synthesis.
首先我們需要一個(gè)specifications,列出我們對(duì)設(shè)計(jì)的限制(restrictions )和要求(requirements)
本教程,我們將設(shè)計(jì)一個(gè)仲裁器(arbiter),以下是仲裁器的一些規(guī)范。
兩個(gè)agent
異步復(fù)位,高有效
固定優(yōu)先級(jí),agent0優(yōu)先于agent1
在我們有了規(guī)范之后,我們就可以繪制框圖,即設(shè)計(jì)數(shù)據(jù)流的黑匣子。
Block diagram of arbiter
如果沒(méi)有Verilog,下一步我們需要開(kāi)始繪制狀態(tài)機(jī)。我們制作一個(gè)具有狀態(tài)轉(zhuǎn)換的真值表,然后繪制卡諾圖并化簡(jiǎn)優(yōu)化電路。
每個(gè)圓圈表示狀態(tài)可能處于的狀態(tài)。每個(gè)狀態(tài)都有相對(duì)應(yīng)的輸出。狀態(tài)之間的箭頭是不同事件導(dǎo)致的狀態(tài)轉(zhuǎn)換。
例如,最左邊的橙色箭頭表示如果機(jī)器處于GNT0狀態(tài)(輸出對(duì)應(yīng)于GNT0的信號(hào))并接收到!req_0的輸入,則狀態(tài)機(jī)移動(dòng)到狀態(tài)IDLE并輸出與之對(duì)應(yīng)的信號(hào)。
這種設(shè)計(jì)方法適用于小型設(shè)計(jì),但對(duì)于大型設(shè)計(jì),這種流程變得復(fù)雜且容易出錯(cuò)。這就是Verilog的用武之地。
Modules
在仲裁塊的框圖中,我們可以看到它有一個(gè)名字(“arbiter”)和輸入/輸出端口(req_0,req_1,gnt_0和gnt_1)。
在Verilog中,我們使用module 來(lái)描述這個(gè)具有相同輸入和輸出的黑匣子。
此代碼如下所示。
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
在硬件中存在兩種數(shù)據(jù)類型
1、可以存儲(chǔ)值的數(shù)據(jù)類型(例如:flip-flop)。
2、無(wú)法存儲(chǔ)值的數(shù)據(jù)類型,但可以連接兩個(gè)點(diǎn)(例如:wire)。
第一種類型在Verilog中稱為reg(“register”的縮寫(xiě))。第二種數(shù)據(jù)類型稱為導(dǎo)線(“wire”)。
例如:
wire and_gate_output; reg d_flip_flop_output; reg [7:0] address_bus;
Operators
Verilog中的運(yùn)算符與其他編程語(yǔ)言幾乎相同。
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;
到此,關(guān)于“如何用Verilog Basics設(shè)計(jì)一個(gè)仲裁器”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。