溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何用Verilog Basics設(shè)計(jì)一個(gè)仲裁器

發(fā)布時(shí)間:2021-12-17 16:38:14 來(lái)源:億速云 閱讀:191 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹“如何用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

如何用Verilog Basics設(shè)計(jì)一個(gè)仲裁器

如果沒(méi)有Verilog,下一步我們需要開(kāi)始繪制狀態(tài)機(jī)。我們制作一個(gè)具有狀態(tài)轉(zhuǎn)換的真值表,然后繪制卡諾圖并化簡(jiǎn)優(yōu)化電路。

如何用Verilog Basics設(shè)計(jì)一個(gè)仲裁器

每個(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í)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI