完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>
標(biāo)簽 > Verilog HDL
Verilog HDL是一種硬件描述語言(HDL:Hardware Description Language),以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。
Verilog HDL是一種硬件描述語言(HDL:Hardware Description Language),以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。 Verilog HDL和VHDL是世界上最流行的兩種硬件描述語言,都是在20世紀(jì)80年代中期開發(fā)出來的。前者由Gateway Design Automation公司(該公司于1989年被Cadence公司收購)開發(fā)。兩種HDL均為IEEE標(biāo)準(zhǔn)。
Verilog HDL是一種硬件描述語言(HDL:Hardware Description Language),以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。 Verilog HDL和VHDL是世界上最流行的兩種硬件描述語言,都是在20世紀(jì)80年代中期開發(fā)出來的。前者由Gateway Design Automation公司(該公司于1989年被Cadence公司收購)開發(fā)。兩種HDL均為IEEE標(biāo)準(zhǔn)。
以模塊為基礎(chǔ)的設(shè)計
描述復(fù)雜的硬件電路,設(shè)計人員總是將復(fù)雜的功能劃分為簡單的功能,模塊是提供每個簡單功能的基本結(jié)構(gòu)。設(shè)計人員可以采取“自頂向下”的思路,將復(fù)雜的功能模塊劃分為低層次的模塊。這一步通常是由系統(tǒng)級的總設(shè)計師完成,而低層次的模塊則由下一級的設(shè)計人員完成。自頂向下的設(shè)計方式有利于系統(tǒng)級別層次劃分和管理,并提高了效率、降低了成本。“自底向上”方式是“自頂向下”方式的逆過程。
使用Verilog描述硬件的基本設(shè)計單元是模塊(module)。構(gòu)建復(fù)雜的電子電路,主要是通過模塊的相互連接調(diào)用來實現(xiàn)的。模塊被包含在關(guān)鍵字module、endmodule之內(nèi)。實際的電路元件。Verilog中的模塊類似C語言中的函數(shù),它能夠提供輸入、輸出端口,可以實例調(diào)用其他模塊,也可以被其他模塊實例調(diào)用。模塊中可以包括組合邏輯部分、過程時序部分。例如,四選一的多路選擇器,就可以用模塊進(jìn)行描述。它具有兩個位選輸入信號、四個數(shù)據(jù)輸入,一個輸出端,在Verilog中可以表示為:
module mux (out, select, in0, in1, in2, in3);output out;input [1:0] select;input in0, in1, in2, in3;//具體的寄存器傳輸級代碼endmodule
設(shè)計人員可以使用一個頂層模塊,通過實例調(diào)用上面這個模塊的方式來進(jìn)行測試。這個頂層模塊常被稱為“測試平臺(Testbench)”。為了最大程度地對電路的邏輯進(jìn)行功能驗證,測試代碼需要盡可能多地覆蓋系統(tǒng)所涉及的語句、分支、條件、路徑、觸發(fā)、狀態(tài)機狀態(tài),驗證人員需要在測試平臺里創(chuàng)建足夠多的輸入激勵,并連接到被測模塊的輸入端,然后檢測其輸出端的表現(xiàn)是否符合預(yù)期(諸如SystemVerilog的硬件驗證語言能夠提供針對驗證專門優(yōu)化的數(shù)據(jù)結(jié)構(gòu),以隨機測試的方式進(jìn)行驗證,這對于高度復(fù)雜的集成電路設(shè)計驗證可以起到關(guān)鍵作用)。實例調(diào)用模塊時,需要將端口的連接情況按照這個模塊聲明時的順序排列。這個頂層模塊由于不需要再被外界調(diào)用,因此沒有輸入輸出端口:
module tester;reg [1:0] SELECT;reg IN0, IN1, IN2, IN3;wire OUT;mux my_mux (OUT, SELECT, IN0, IN1, IN2, IN3); //實例調(diào)用mux模塊,這個實例被命名為my_muxinitial //需要仿真的激勵代碼 begin endendmodule
在這個測試平臺模塊里,設(shè)計人員可以設(shè)定仿真時的輸入信號以及信號監(jiān)視程序,然后觀察仿真時的輸出情況是否符合要求,這樣就可以了解設(shè)計是否達(dá)到了預(yù)期。
示例中的對模塊進(jìn)行實例引用時,按照原模塊聲明時的順序羅列了輸入變量。除此之外,還可以使用或者采用命名端口連接的方式。使用這種方式,端口的排列順序可以與原模塊聲明時不同,甚至可以不連接某些端口:
mux my_mux (.out(OUT), .select(SELECT), .in0(IN0), .in1(IN1), .in2(IN2), .in3(IN3));//使用命名端口連接,括號外面是模塊聲明時的端口,括號內(nèi)是實際的端口連接//括號外相當(dāng)于C語言的形式參數(shù),括號內(nèi)相當(dāng)于實際參數(shù)endmodule
上面所述的情況是,測試平臺頂層模塊的測試變量直接連接了所設(shè)計的功能模塊。測試平臺還可以是另一種形式,即測試平臺并不直接連接所設(shè)計的功能模塊,而是在這個測試平臺之下,將激勵模塊和功能模塊以相同的抽象級別,通過線網(wǎng)相互連接。這兩種形式的測試平臺都可以完成對功能模塊的測試。大型的電路系統(tǒng),正是由各個層次不同模塊之間的連接、調(diào)用,來實現(xiàn)復(fù)雜的功能的。
Verilog HDL 快速入門
Verilog HDL是一種硬件描述語言(HDL:Hardware Description Language),它是以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言。 世界上最流行的兩種硬件描述語言是Verilog HDL和VHDL。
注意,VerilogHDL是一種描述語言,它和常見的編程語言C有根本的不同。C語言,讓計算機的CPU從上往下按順序執(zhí)行每一條指令,執(zhí)行完程序就結(jié)束了。
而,VerilogHDL主要是描述了一個數(shù)字模塊的結(jié)構(gòu),或者行為。有點像商業(yè)合同,合同里面也會描述產(chǎn)品的結(jié)構(gòu),產(chǎn)品的功能等等。合同的每一個條款,并不需要嚴(yán)格的先后順序,只要把項目的方方面面都考慮完整,寫下來就OK了。VerilogHDL也是這樣。
我們用VerilogHDL描述數(shù)字模塊的功能,剩下的交給編譯器(如,Quartus),編譯器會根據(jù)我們的要求設(shè)計重構(gòu)FPGA內(nèi)部硬件。對于大批懶人來說,這技術(shù)簡直碉堡了。這就是EDA(Electronic Design Automation,電子設(shè)計自動化)。
好,下面就來認(rèn)識一下VerilogHDL
我們先設(shè)計一個“數(shù)據(jù)選擇器”:
s是數(shù)據(jù)選擇控制端,
a,b是輸入信號,y是輸出信號
代碼如下:
module mux2_1(a, b, s, y); //模塊名、模塊接口名
input a, b, s; // 定義輸入端口
output y; // 定義輸出端口
/* s為0時,選擇a輸出;
s為1時,選擇b輸出。*/
assign y = (s == 0) ? a : b; //輸出信號
endmodule12345678
每個Verilog文件中都有一個module 開始,endmodule 結(jié)束的代碼塊。
這個代碼塊的定義了一個名字叫 mux2_1 的模塊,模塊名后面緊跟的括號內(nèi)寫明了該模塊的接口信號,相當(dāng)于數(shù)字器件的引腳。
但是括號內(nèi)沒有說明接口的信號方向,所以緊跟著另起一行用input 和output 再說明一下。注釋和C語法一樣,可以用// 或 /* */ 。
assign 是Verilog的關(guān)鍵詞,書上稱為連續(xù)賦值。我一般把他視為“連線”操作,assign后面的緊跟的 y 在硬件上是一根導(dǎo)線(或輸出引腳)。
assign y = (s == 0) ? a : b;
這句話的意思是:s如果為0,那么等號左邊就是a,否則就是b。將這個表達(dá)式的輸出結(jié)果接在輸出引腳 y 上。
這就是一個簡單的Verilog程序,不需要我們?nèi)ピO(shè)計與非門,直接表達(dá)你的你想要的功能就好了。然后,編譯下載到FPGA,功能就實現(xiàn)了。
要注意的是,assign 后面永遠(yuǎn)跟著一個 =,它們是一起使用的。
即,assign xx = zz;
上面的2選1數(shù)據(jù)選擇器,內(nèi)部實現(xiàn)結(jié)構(gòu)如下:
所以,上面的assign語句還可以這樣寫,直接使用邏輯表達(dá)式:
assign y = (a & (~ s)) | (b & s);
這個是在門級對邏輯關(guān)系進(jìn)行描述,所以不屬于行為描述,算是結(jié)構(gòu)描述吧。下面這種描述方式,叫做門原語,算結(jié)構(gòu)描述。這里的關(guān)鍵詞wire 表示電路中的導(dǎo)線(信號線)。
module mux2_1(a, b, s, y);
input a, b, s;
output y;
wire ns, as, bs;
not(ns, s);//這里使用了一個非門,輸出是ns,輸入是s
and(as, a, ns);//使用一個與門,輸出as,輸入a和ns
and(bs, b, s);//使用與門,輸出bs,輸入b和s
or(y, as, bs);//使用或門,輸出y,輸入as和bs
endmodule12345678910
看,這是告訴我們電路中有什么元器件,又是怎么連接的,所以這個屬于結(jié)構(gòu)描述。
很明顯,有時候結(jié)構(gòu)描述比行為描述要費力得多,而且不太容易理解程序功能。
另外,上面的這個程序中,這4個邏輯門的順序,可以隨便寫,不用管先后順序。
這個數(shù)據(jù)選擇器,還可以使用如下行為描述方法:
module mux2_1(a, b, s, y);
input a, b, s;
output y;
reg y; //reg 表示寄存器
always @(a, b, s)
begin
if(!s) y = a;
else y = b;
end
endmodule1234567891011
這里reg表示寄存器(存儲器),需要提醒一下的是,assign后面只能接wire型,不能接reg型。(當(dāng)然output從物理上也是wire)
為什么不能?因為寄存器的賦值除了需要輸入信號,還需要觸發(fā)信號(例如D觸發(fā)器寄存器),assign?sorry,he can’t。
always @(a, b, s)中,括號里面的輸入信號a,b,s表示敏感信號。
always @( ) 是連在一起使用的。
這句話的意思是,敏感信號列表中的任何一個信號發(fā)生變化,將會引發(fā)
begin …… end 之間的行為。
Verilog用begin和end包圍代碼段,相當(dāng)于c語言中的大括號{ }的功能。
if(!s) y = a;
這里的“=”單獨使用,叫做“阻塞賦值”。我把他理解為“串行賦值”。
比如,有這么一段代碼:
b=a;
c=b;
那么最后,c的值就等于a,這個行為在描述的時候,語句的先后順序,決定了賦值的先后。
在Verilog中,和它對應(yīng)的還有一個“非阻塞賦值”,表示方法是 《=,我把這種賦值稱為“并行賦值”。具體區(qū)別,請參考另一篇短文阻塞賦值和非阻塞賦值。
HDL是一種硬件描述語言,以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。 ...
2020-08-26 標(biāo)簽:vhdlVerilog HDL 6.2萬 0
Verilog HDL和VHDL是目前兩種最常用的硬件描述語言,同時也都是IEEE標(biāo)準(zhǔn)化的HDL語言。
2020-08-25 標(biāo)簽:HDLvhdlVerilog HDL 9190 0
Verilog HDL是一種硬件描述語言,以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完...
2019-11-20 標(biāo)簽:電路圖硬件verilog hdl 5407 0
Verilog HDL應(yīng)用及數(shù)字IC設(shè)計與流程概述
一、HDL的概念和特征 HDL,Hard Discrimination Language的縮寫,翻譯過來就是硬件描述語言。那么什么是硬件描述語言呢?為什...
2020-10-21 標(biāo)簽:fpgaIC設(shè)計Verilog HDL 4356 0
基于FPGA的SOC在嵌入式系統(tǒng)應(yīng)用越來越廣了,往往一個復(fù)雜系統(tǒng)使用一個單芯片基于FPGA的SOC就搞定了。比較流行的方案主要有Altera/xilin...
2020-09-01 標(biāo)簽:C語言Verilog HDL 4336 0
針對代碼自動生成問題,對于頂層模塊來說,承擔(dān)的功能是自動地將底層數(shù)十個模塊連接起來。對于底層模塊來說,需要根據(jù)不同的功能定制需求,來自動化地生成所有功能...
2019-10-08 標(biāo)簽:Verilog代碼Verilog HDL 3956 0
Verilog HDL是一種硬件描述語言,以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完...
2019-11-13 標(biāo)簽:電路圖vhdlverilog hdl 3314 0
數(shù)字設(shè)計FPGA應(yīng)用:Verilog HDL語言基本結(jié)構(gòu)
本課程以目前流行的Xilinx 7系列FPGA的開發(fā)為主線,全面講解FPGA的原理及電路設(shè)計、Verilog HDL語言及VIVADO的應(yīng)用,并循序漸進(jìn)...
2019-12-02 標(biāo)簽:fpga邏輯verilog hdl 3144 0
Verilog HDL是一種用于數(shù)字系統(tǒng)設(shè)計的語言。用Verilog HDL描述的電路設(shè)計就是該電路的Verilog HDL模型也稱為模塊。Verilo...
2022-12-08 標(biāo)簽:fpgaVerilogVerilog HDL 2639 0
41
1
已結(jié)束-【蓋樓送書NO.10】Verilog HDL與FPGA數(shù)字系統(tǒng)設(shè)計 第2版
標(biāo)簽:FPGAVerilog HDL 50338 41
24
9
FPGA Verilog HDL 設(shè)計實例系列連載------步進(jìn)電機驅(qū)動控制
標(biāo)簽:步進(jìn)電機驅(qū)動控制Verilog HDL 11331 24
3
1
每日推薦 | 第十期蓋樓送書活動,全志開發(fā)板 Linux-RT內(nèi)核應(yīng)用開發(fā)教程
標(biāo)簽:FPGALinuxVerilog HDL 10114 3
28
3
Verilog HDL相關(guān)應(yīng)用程序設(shè)計實例精講和經(jīng)典黑金資料(入門教程+實例精講+百例設(shè)計)
標(biāo)簽:VerilogVerilog HDL 7177 28
6
1
我正在學(xué)習(xí)基于FPGA的數(shù)據(jù)采集系統(tǒng),請各位大神提供些有關(guān)這方面的資料(Verilog HDL代碼),謝謝!
標(biāo)簽:數(shù)據(jù)采集Verilog HDL 6641 6
設(shè)計與驗證:Verilog HDL(清晰PDF)立即下載
類別:FPGA/ASIC 2016-10-10 標(biāo)簽:Verilog HDL
設(shè)計與驗證Verilog HDL(吳繼華)立即下載
類別:可編程邏輯 2012-11-28 標(biāo)簽:Verilog HDLHDL語言
Verilog超詳細(xì)教程-數(shù)字集成電路設(shè)計入門.pdf立即下載
類別:FPGA/ASIC 2015-02-03 標(biāo)簽:FPGA數(shù)字集成電路Verilog HDL
Verilog HDL 數(shù)字設(shè)計教程(賀敬凱)立即下載
類別:可編程邏輯 2012-11-28 標(biāo)簽:CPU數(shù)字電路Verilog HDL
Verilog HDL應(yīng)用程序設(shè)計實例精講立即下載
類別:FPGA/ASIC 2016-05-20 標(biāo)簽:Verilog HDL
Verilog HDL程序設(shè)計教程_王金明立即下載
類別:電子書籍 2011-09-22 標(biāo)簽:VHDLVerilog HDL
類別:FPGA/ASIC 2012-10-08 標(biāo)簽:電路數(shù)字邏輯電路Verilog HDL
Verilog HDL入門教程-Verilog HDL的基本語法立即下載
類別:FPGA/ASIC 2022-01-07 標(biāo)簽:Verilog HDL
類別:FPGA/ASIC 2015-02-03 標(biāo)簽:FPGAVerilog HDL按鍵消抖
Verilog HDL電路設(shè)計指導(dǎo)書—華為立即下載
類別:電子教材 2011-09-07 標(biāo)簽:電路華為Verilog HDL
電子發(fā)燒友網(wǎng)核心提示: 本例程是Verilog HDL源代碼:關(guān)于基本組合邏輯功能中7段譯碼器的功能實現(xiàn)源代碼。注意:程序運行在不同軟件平臺可能要作一些...
2012-10-15 標(biāo)簽:譯碼器Verilog HDLHDL源代碼 2.3萬 0
多路選擇器(MUX)功能實現(xiàn)Verilog HDL源代碼
電子發(fā)燒友網(wǎng)核心提示: 本例程是Verilog HDL源代碼:關(guān)于基本組合邏輯功能中多路選擇器(MUX)的功能實現(xiàn)源代碼。注意:程序運行在不同軟件平臺可...
2012-10-15 標(biāo)簽:Verilog HDLHDL源代碼 2.2萬 0
Verilog HDL verilog hdl和vhdl的區(qū)別
Verilog HDL是一種以文本形式描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的硬件描述語言,也可描述邏輯電路圖、邏輯表達(dá)式等。Verilog HDL和VHDL是目...
2021-07-23 標(biāo)簽:VHDLVerilog HDL 1.1萬 0
基于Verilog HDL語言的CAN總線控制器設(shè)計及驗證
在此利用Verilog HDL設(shè)計了一款CAN總線控制器,首先根據(jù)協(xié)議把整個CAN總線控制器劃分為接口邏輯管理、寄存器邏輯和CAN核心模塊3個模塊,然后...
基于Verilog HDL描述語言實現(xiàn)交通燈系統(tǒng)控制器的設(shè)計
EDA技術(shù)是依靠功能強大的電子計算機,在EDA工具軟件平臺上,對以硬件描述語言HDL(Hardware Description Language)為系...
2020-07-21 標(biāo)簽:交通燈系統(tǒng)控制器Verilog HDL 7925 0
二進(jìn)制到BCD碼轉(zhuǎn)換的Verilog HDL源代碼
電子發(fā)燒友網(wǎng)核心提示: 本例程是Verilog HDL源代碼:關(guān)于基本組合邏輯功能中二進(jìn)制到BCD碼轉(zhuǎn)換的功能實現(xiàn)源代碼。注意:程序運行在不同軟件平臺可...
2012-10-15 標(biāo)簽:Verilog HDLHDL源代碼 6875 0
根據(jù)業(yè)界通用的SPI總線的標(biāo)準(zhǔn),本文設(shè)計一種可復(fù)用的高速SPI總線。設(shè)計過程中很多變量都采用參數(shù)形式,具體應(yīng)用于工程實踐時根據(jù)實際需要更改參數(shù)即可,充分...
2012-09-04 標(biāo)簽:FPGASPI接口Verilog HDL 6541 0
電子發(fā)燒友網(wǎng)核心提示 :目前,硬件描述語言(HDL)可謂是百花齊放,有VHDL、Superlog、Verilog、SystemC、Cynlib C++、...
在數(shù)字信號的傳輸過程中,有時需要從多路輸入數(shù)據(jù)中選出某一路數(shù)據(jù),完成此功能的邏輯器件稱為數(shù)據(jù)選擇器,即所謂多路開關(guān),簡稱MUX(Multiplexer)...
2020-07-20 標(biāo)簽:Verilog HDL多路選擇器 4543 0
FPGA、Verilog HDL與VHDL的優(yōu)缺點
Verilog HDL 優(yōu)點:類似C語言,上手容易,靈活。大小寫敏感。在寫激勵和建模方面有優(yōu)勢。 缺點:很多錯誤在編譯的時候不能被發(fā)現(xiàn)。 VHDL 優(yōu)點...
編輯推薦廠商產(chǎn)品技術(shù)軟件/工具OS/語言教程專題
電機控制 | DSP | 氮化鎵 | 功率放大器 | ChatGPT | 自動駕駛 | TI | 瑞薩電子 |
BLDC | PLC | 碳化硅 | 二極管 | OpenAI | 元宇宙 | 安森美 | ADI |
無刷電機 | FOC | IGBT | 逆變器 | 文心一言 | 5G | 英飛凌 | 羅姆 |
直流電機 | PID | MOSFET | 傳感器 | 人工智能 | 物聯(lián)網(wǎng) | NXP | 賽靈思 |
步進(jìn)電機 | SPWM | 充電樁 | IPM | 機器視覺 | 無人機 | 三菱電機 | ST |
伺服電機 | SVPWM | 光伏發(fā)電 | UPS | AR | 智能電網(wǎng) | 國民技術(shù) | Microchip |
Arduino | BeagleBone | 樹莓派 | STM32 | MSP430 | EFM32 | ARM mbed | EDA |
示波器 | LPC | imx8 | PSoC | Altium Designer | Allegro | Mentor | Pads |
OrCAD | Cadence | AutoCAD | 華秋DFM | Keil | MATLAB | MPLAB | Quartus |
C++ | Java | Python | JavaScript | node.js | RISC-V | verilog | Tensorflow |
Android | iOS | linux | RTOS | FreeRTOS | LiteOS | RT-THread | uCOS |
DuerOS | Brillo | Windows11 | HarmonyOS |