完善資料讓更多小伙伴認(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è)計(jì)
描述復(fù)雜的硬件電路,設(shè)計(jì)人員總是將復(fù)雜的功能劃分為簡單的功能,模塊是提供每個簡單功能的基本結(jié)構(gòu)。設(shè)計(jì)人員可以采取“自頂向下”的思路,將復(fù)雜的功能模塊劃分為低層次的模塊。這一步通常是由系統(tǒng)級的總設(shè)計(jì)師完成,而低層次的模塊則由下一級的設(shè)計(jì)人員完成。自頂向下的設(shè)計(jì)方式有利于系統(tǒng)級別層次劃分和管理,并提高了效率、降低了成本。“自底向上”方式是“自頂向下”方式的逆過程。
使用Verilog描述硬件的基本設(shè)計(jì)單元是模塊(module)。構(gòu)建復(fù)雜的電子電路,主要是通過模塊的相互連接調(diào)用來實(shí)現(xiàn)的。模塊被包含在關(guān)鍵字module、endmodule之內(nèi)。實(shí)際的電路元件。Verilog中的模塊類似C語言中的函數(shù),它能夠提供輸入、輸出端口,可以實(shí)例調(diào)用其他模塊,也可以被其他模塊實(shí)例調(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è)計(jì)人員可以使用一個頂層模塊,通過實(shí)例調(diào)用上面這個模塊的方式來進(jìn)行測試。這個頂層模塊常被稱為“測試平臺(Testbench)”。為了最大程度地對電路的邏輯進(jìn)行功能驗(yàn)證,測試代碼需要盡可能多地覆蓋系統(tǒng)所涉及的語句、分支、條件、路徑、觸發(fā)、狀態(tài)機(jī)狀態(tài),驗(yàn)證人員需要在測試平臺里創(chuàng)建足夠多的輸入激勵,并連接到被測模塊的輸入端,然后檢測其輸出端的表現(xiàn)是否符合預(yù)期(諸如SystemVerilog的硬件驗(yàn)證語言能夠提供針對驗(yàn)證專門優(yōu)化的數(shù)據(jù)結(jié)構(gòu),以隨機(jī)測試的方式進(jìn)行驗(yàn)證,這對于高度復(fù)雜的集成電路設(shè)計(jì)驗(yàn)證可以起到關(guān)鍵作用)。實(shí)例調(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); //實(shí)例調(diào)用mux模塊,這個實(shí)例被命名為my_muxinitial //需要仿真的激勵代碼 begin endendmodule
在這個測試平臺模塊里,設(shè)計(jì)人員可以設(shè)定仿真時的輸入信號以及信號監(jiān)視程序,然后觀察仿真時的輸出情況是否符合要求,這樣就可以了解設(shè)計(jì)是否達(dá)到了預(yù)期。
示例中的對模塊進(jìn)行實(shí)例引用時,按照原模塊聲明時的順序羅列了輸入變量。除此之外,還可以使用或者采用命名端口連接的方式。使用這種方式,端口的排列順序可以與原模塊聲明時不同,甚至可以不連接某些端口:
mux my_mux (.out(OUT), .select(SELECT), .in0(IN0), .in1(IN1), .in2(IN2), .in3(IN3));//使用命名端口連接,括號外面是模塊聲明時的端口,括號內(nèi)是實(shí)際的端口連接//括號外相當(dāng)于C語言的形式參數(shù),括號內(nèi)相當(dāng)于實(shí)際參數(shù)endmodule
上面所述的情況是,測試平臺頂層模塊的測試變量直接連接了所設(shè)計(jì)的功能模塊。測試平臺還可以是另一種形式,即測試平臺并不直接連接所設(shè)計(jì)的功能模塊,而是在這個測試平臺之下,將激勵模塊和功能模塊以相同的抽象級別,通過線網(wǎng)相互連接。這兩種形式的測試平臺都可以完成對功能模塊的測試。大型的電路系統(tǒng),正是由各個層次不同模塊之間的連接、調(diào)用,來實(shí)現(xiàn)復(fù)雜的功能的。
Verilog HDL 快速入門
Verilog HDL是一種硬件描述語言(HDL:Hardware Description Language),它是以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言。 世界上最流行的兩種硬件描述語言是Verilog HDL和VHDL。
注意,VerilogHDL是一種描述語言,它和常見的編程語言C有根本的不同。C語言,讓計(jì)算機(jī)的CPU從上往下按順序執(zhí)行每一條指令,執(zhí)行完程序就結(jié)束了。
而,VerilogHDL主要是描述了一個數(shù)字模塊的結(jié)構(gòu),或者行為。有點(diǎn)像商業(yè)合同,合同里面也會描述產(chǎn)品的結(jié)構(gòu),產(chǎn)品的功能等等。合同的每一個條款,并不需要嚴(yán)格的先后順序,只要把項(xiàng)目的方方面面都考慮完整,寫下來就OK了。VerilogHDL也是這樣。
我們用VerilogHDL描述數(shù)字模塊的功能,剩下的交給編譯器(如,Quartus),編譯器會根據(jù)我們的要求設(shè)計(jì)重構(gòu)FPGA內(nèi)部硬件。對于大批懶人來說,這技術(shù)簡直碉堡了。這就是EDA(Electronic Design Automation,電子設(shè)計(jì)自動化)。
好,下面就來認(rèn)識一下VerilogHDL
我們先設(shè)計(jì)一個“數(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è)計(jì)與非門,直接表達(dá)你的你想要的功能就好了。然后,編譯下載到FPGA,功能就實(shí)現(xiàn)了。
要注意的是,assign 后面永遠(yuǎn)跟著一個 =,它們是一起使用的。
即,assign xx = zz;
上面的2選1數(shù)據(jù)選擇器,內(nèi)部實(shí)現(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)描述比行為描述要費(fèi)力得多,而且不太容易理解程序功能。
另外,上面的這個程序中,這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)
為什么不能?因?yàn)榧拇嫫鞯馁x值除了需要輸入信號,還需要觸發(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;
這里的“=”單獨(dú)使用,叫做“阻塞賦值”。我把他理解為“串行賦值”。
比如,有這么一段代碼:
b=a;
c=b;
那么最后,c的值就等于a,這個行為在描述的時候,語句的先后順序,決定了賦值的先后。
在Verilog中,和它對應(yīng)的還有一個“非阻塞賦值”,表示方法是 《=,我把這種賦值稱為“并行賦值”。具體區(qū)別,請參考另一篇短文阻塞賦值和非阻塞賦值。
Verilog HDL是一種硬件描述語言,以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完...
2023-12-07 標(biāo)簽:fpgaVerilogVerilog HDL 2663 0
prj為工程文件存放目錄;rtl為verilog可綜合代碼存放目錄;tb為測試文件存放目錄;image為設(shè)計(jì)相關(guān)圖片存放目錄;doc為設(shè)計(jì)相關(guān)文檔存放目...
2023-01-10 標(biāo)簽:fpgaFPGA芯片Verilog HDL 503 0
Verilog HDL是一種用于數(shù)字系統(tǒng)設(shè)計(jì)的語言。用Verilog HDL描述的電路設(shè)計(jì)就是該電路的Verilog HDL模型也稱為模塊。Verilo...
2022-12-08 標(biāo)簽:fpgaVerilogVerilog HDL 2663 0
一般情況下,系統(tǒng)中統(tǒng)一用posedge避免用negedge,降低設(shè)計(jì)的復(fù)雜度,可減少出錯。
2022-07-27 標(biāo)簽:fpga時序邏輯Verilog HDL 983 0
今天給大俠帶來的是一周掌握FPGA Verilog HDL 語法,今天開啟第二天。上一篇提到了整數(shù)型以及參數(shù)型,此篇我們繼續(xù)來看變量以及后續(xù)其他內(nèi)容,結(jié)...
2022-07-18 標(biāo)簽:fpga變量Verilog HDL 1579 0
Verilog HDL應(yīng)用及數(shù)字IC設(shè)計(jì)與流程概述
一、HDL的概念和特征 HDL,Hard Discrimination Language的縮寫,翻譯過來就是硬件描述語言。那么什么是硬件描述語言呢?為什...
2020-10-21 標(biāo)簽:fpgaIC設(shè)計(jì)Verilog HDL 4378 0
基于FPGA的SOC在嵌入式系統(tǒng)應(yīng)用越來越廣了,往往一個復(fù)雜系統(tǒng)使用一個單芯片基于FPGA的SOC就搞定了。比較流行的方案主要有Altera/xilin...
2020-09-01 標(biāo)簽:C語言Verilog HDL 4352 0
Verilog HDL的程序結(jié)構(gòu)_veriloghdl的關(guān)鍵字
首先我們不開始講Verilog HDL的語法,我們從Verilog HDL的程序結(jié)構(gòu)出發(fā)。相信大家都看過芯片吧,它有個名字,有個外殼,外殼向外伸出有引腳...
2020-08-27 標(biāo)簽:VerilogVerilog HDL 2473 0
HDL是一種硬件描述語言,以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。 ...
2020-08-26 標(biāo)簽:vhdlVerilog HDL 6.2萬 0
3
1
每日推薦 | 第十期蓋樓送書活動,全志開發(fā)板 Linux-RT內(nèi)核應(yīng)用開發(fā)教程
標(biāo)簽:FPGALinuxVerilog HDL 10126 3
41
1
已結(jié)束-【蓋樓送書NO.10】Verilog HDL與FPGA數(shù)字系統(tǒng)設(shè)計(jì) 第2版
標(biāo)簽:FPGAVerilog HDL 50372 41
1
0
怎樣使用Verilog HDL去設(shè)計(jì)一個三相六拍步進(jìn)電機(jī)脈沖分配器?
標(biāo)簽:步進(jìn)電機(jī)分配器Verilog HDL 2356 1
一種具有實(shí)用價(jià)值的OFDM幀同步方法立即下載
類別:電子資料 2023-11-08 標(biāo)簽:fpgaofdmVerilog HDL
基于FPGA的模式匹配系統(tǒng)設(shè)計(jì)立即下載
類別:電子資料 2023-11-08 標(biāo)簽:fpga函數(shù)Verilog HDL
Verilog HDL語言的發(fā)展歷史和主要能力立即下載
類別:電子資料 2023-08-29 標(biāo)簽:Verilog HDL硬件描述語言
在Verilog HDL中使用分頻器的8位計(jì)數(shù)器的設(shè)計(jì)立即下載
類別:電子資料 2023-06-15 標(biāo)簽:fpga計(jì)數(shù)器Verilog HDL
類別:電子資料 2023-02-10 標(biāo)簽:vhdlVerilog HDL
Verilator高性能Verilog HDL模擬器與lint系統(tǒng)立即下載
類別:電子資料 2022-04-14 標(biāo)簽:C++模擬器Verilog HDL
Verilog HDL入門教程-Verilog HDL的基本語法立即下載
類別:FPGA/ASIC 2022-01-07 標(biāo)簽:Verilog HDL
Verilog HDL語言的發(fā)展歷史和能力綜述立即下載
類別:C語言|源代碼 2021-08-13 標(biāo)簽:編程Verilog HDL
類別:VHDL/Verilog/EDA源碼 2021-05-06 標(biāo)簽:仿真Verilog HDL
Verilog HDL的禮物-Verilog HDL掃盲文下載立即下載
類別:FPGA/ASIC 2021-04-30 標(biāo)簽:FPGAVerilog HDL
Verilog HDL語言的數(shù)據(jù)類型和運(yùn)算符
標(biāo)識符可以是一組字母、數(shù)字、下劃線和$符號的組合,且標(biāo)識符的第一個字符必須是字母或者下劃線。
2022-07-04 標(biāo)簽:寄存器運(yùn)算符Verilog HDL 1324 0
原文標(biāo)題:非常詳細(xì)的Verilog講義教程 文章出處:【微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。 ? ? ? 審核編輯:彭靜
2022-07-04 標(biāo)簽:軟件Verilog HDL 778 0
FPGA、Verilog HDL與VHDL的優(yōu)缺點(diǎn)
Verilog HDL 優(yōu)點(diǎn):類似C語言,上手容易,靈活。大小寫敏感。在寫激勵和建模方面有優(yōu)勢。 缺點(diǎn):很多錯誤在編譯的時候不能被發(fā)現(xiàn)。 VHDL 優(yōu)點(diǎn)...
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中定義的26個有關(guān)門級的關(guān)鍵字中常用的有哪些?
1、結(jié)構(gòu)描述形式 從電路結(jié)構(gòu)的角度來描述電路模塊,稱為結(jié)構(gòu)描述形式。 Verilog HDL中定義了26個有關(guān)門級的關(guān)鍵字,比較常用的有8個: and ...
2021-07-02 標(biāo)簽:Verilog HDL 2996 0
Verilog HDL中的結(jié)構(gòu)建模方式細(xì)述
模塊的端口可以是輸入端口、輸出端口或雙向端口。
2021-03-14 標(biāo)簽:UDP端口Verilog HDL 3408 0
基于Verilog HDL描述語言實(shí)現(xiàn)交通燈系統(tǒng)控制器的設(shè)計(jì)
EDA技術(shù)是依靠功能強(qiáng)大的電子計(jì)算機(jī),在EDA工具軟件平臺上,對以硬件描述語言HDL(Hardware Description Language)為系...
2020-07-21 標(biāo)簽:交通燈系統(tǒng)控制器Verilog HDL 7996 0
Verilog HDL語言在FPGA/CPLD中的應(yīng)用
通常設(shè)計(jì)數(shù)字電路大都采用自頂向下將系統(tǒng)按功能逐層分割的層次化設(shè)計(jì)方法,這比傳統(tǒng)自下向上的EDA設(shè)計(jì)方法有更明顯的優(yōu)勢(當(dāng)時的主要設(shè)計(jì)文件是電路圖)。因?yàn)?..
2020-07-20 標(biāo)簽:fpgaedaVerilog HDL 1999 0
在數(shù)字信號的傳輸過程中,有時需要從多路輸入數(shù)據(jù)中選出某一路數(shù)據(jù),完成此功能的邏輯器件稱為數(shù)據(jù)選擇器,即所謂多路開關(guān),簡稱MUX(Multiplexer)...
2020-07-20 標(biāo)簽:Verilog HDL多路選擇器 4619 0
電子發(fā)燒友網(wǎng)核心提示: 本例程是Verilog HDL源代碼:關(guān)于基本組合邏輯功能中7段譯碼器的功能實(shí)現(xiàn)源代碼。注意:程序運(yùn)行在不同軟件平臺可能要作一些...
2012-10-15 標(biāo)簽:譯碼器Verilog HDLHDL源代碼 2.3萬 0
編輯推薦廠商產(chǎn)品技術(shù)軟件/工具OS/語言教程專題
電機(jī)控制 | DSP | 氮化鎵 | 功率放大器 | ChatGPT | 自動駕駛 | TI | 瑞薩電子 |
BLDC | PLC | 碳化硅 | 二極管 | OpenAI | 元宇宙 | 安森美 | ADI |
無刷電機(jī) | FOC | IGBT | 逆變器 | 文心一言 | 5G | 英飛凌 | 羅姆 |
直流電機(jī) | PID | MOSFET | 傳感器 | 人工智能 | 物聯(lián)網(wǎng) | NXP | 賽靈思 |
步進(jìn)電機(jī) | SPWM | 充電樁 | IPM | 機(jī)器視覺 | 無人機(jī) | 三菱電機(jī) | ST |
伺服電機(jī) | 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 |