0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文詳解Verilog HDL

FPGA設(shè)計論壇 ? 來源:FPGA設(shè)計論壇 ? 2025-03-17 15:17 ? 次閱讀

一、Verilog HDL 概述

1、Verilog HDL 是什么

Verilog HDL(Hardware Description Language)是一種硬件描述語言,用于從算法級、門級到開關(guān)級的多種抽象設(shè)計層次的數(shù)字系統(tǒng)建模?,F(xiàn)實生活中多用于專用集成電路(Application Specific Integrated Circuit,ASIC)和現(xiàn)場可編程門陣列(Field Programmabl Gate Array,FPGA)的實現(xiàn)。

2、Verilog HDL產(chǎn)生的背景

第一只晶體管出現(xiàn)后,數(shù)字集成電路設(shè)計密度越來越大、電路越來越復(fù)雜,傳統(tǒng)的畫圖或連線的設(shè)計方法已不再適用。

例如:設(shè)計4位移位寄存器,僅需簡短幾行代碼完成。

be53f734-ffc1-11ef-9310-92fbcf53809c.jpg

module register_four(

input clk,

input Reset,

input din,

output reg [3:0] qout

);

always @(posedge clk or posedge Reset)begin

if(Reset)

qout <= 4'b0;

else

qout <= {qout[2:0],din};

end

endmodule

若要將4位移位寄存器改為8位移位寄存器,僅需修改少量代碼。

be64e0ee-ffc1-11ef-9310-92fbcf53809c.jpg

module register_eight(

input clk,

input Reset,

input din,

output reg [7:0] qout

);

always @(posedge clk or posedge Reset)begin

if(Reset)

qout <= 8'b0000_0000;

else

qout <= {qout[6:0],din};

end

endmodule

由上例可直觀發(fā)現(xiàn),Verilog HDL可用較少的語句描述較為復(fù)雜的電路和靈活的可擴(kuò)展性,為數(shù)字集成電路設(shè)計帶來了極大的便捷。

3、Verilog HDL 和 VHDL的區(qū)別

目前,Verilog HDL 和 VHDL(VHSIC Hardware Description Language,VHSIC 為 Very High Speed Integrated Circuit)是最為常用的硬件描述語音。

Verilog HDL:

語法靈活、寬松,多被思維活躍的美國人采用。因Verilog HDL 語法寬松,其不適合對系統(tǒng)要求層次嚴(yán)格的大規(guī)模設(shè)計。

VHDL:

語法結(jié)構(gòu)緊湊、嚴(yán)謹(jǐn),多被思維歐洲人采用。VHDL在大規(guī)模數(shù)字集成電路設(shè)計中具有一定優(yōu)勢。

注:

Verilog基于C語言發(fā)展而來,語法靈活、寬松,且國內(nèi)開發(fā)人員多采用Verilog,對初學(xué)者較為友好。

二、Verilog HDL 基礎(chǔ)知識

1、Verilog HDL 語言要素

1.1、命名規(guī)則

在Verilog HDL 中,標(biāo)識符背用來命名信號、模塊、參數(shù)等,它可以是任意一組字母、數(shù)字、$符號和_(下劃線)符號的組合。

注:標(biāo)識符中字母區(qū)分大小寫,且第一個字必須是字母或下劃線。

1.2、注釋符

單行注釋:單行注釋以“//”開始,Verilog HDL忽略此處到行尾的內(nèi)容。

多行注釋:多行注釋采用“/**/”,從“/”開始,到“/”結(jié)束,Verilog HDL忽略其中注釋的內(nèi)容。

注:多行注釋不允許嵌套,但單行注釋可以嵌套在多行注釋中。

例如:

非法多行注釋:

/*注釋內(nèi)容/*多行注釋嵌套多行注釋*/注釋內(nèi)容*/

合法多行注釋:

/*注釋內(nèi)容//多行注釋嵌套單行注釋*/

1.3、關(guān)鍵字

Verilog HDL 內(nèi)部已經(jīng)使用的詞成為關(guān)鍵字或保留字,是事先定義好的確認(rèn)符,用來組織語言結(jié)構(gòu)。

注:Verilog HDL中所有的關(guān)鍵字都是小寫的。

be746028-ffc1-11ef-9310-92fbcf53809c.png

1.4、數(shù)值

Verilog HDL 有四種基本的電平邏輯數(shù)值狀態(tài),用數(shù)字或字符表達(dá)數(shù)字電路中傳送的邏輯狀態(tài)和存儲信息。Verilog HDL邏輯數(shù)值中,“x”和“z”都不區(qū)分大小寫,即0x1z與0X1Z等價。

be8d683e-ffc1-11ef-9310-92fbcf53809c.jpg

在數(shù)值中,下劃線符號“_”除不能放于首位外,可隨意用在整數(shù)與實數(shù)中,對數(shù)值的大小無影響,僅為提高可讀性。

例如:

8’b00110010 與8’b0011_0010的數(shù)值大小相等。

1.4.1、整數(shù)及其表示

bea05ebc-ffc1-11ef-9310-92fbcf53809c.jpg

整數(shù)的表示形式:

+/-'

(1)“+/-”:正數(shù)和負(fù)數(shù)的標(biāo)識。

(2)size:換算過后二進(jìn)制的寬度。

(3)“ ’ ”:為基數(shù)格式表示固有字符,該字符不能缺省,否則為非法表示形式。

(4)base_format:基數(shù)符號。

(5)number:可使用的數(shù)字字符集。

例如:

4'b0011

7'd32

8'hfd

1.4.2、實數(shù)及其表示

(1)十進(jìn)制表示法。

(2)科學(xué)計數(shù)發(fā)。例如:758.4e2 的值為75840.0,3e-3的值為0.003。

1.4.3、字符串及其表示

注:字符串必須包含在同一行中,不能分行書寫。

字符串在Verilog HDL中看做8位的ASCII值序列,即一個字符對應(yīng)8位的ASCII值。

2、數(shù)據(jù)類型

按抽象程度 Verilog HDL數(shù)據(jù)類型可分為:物理數(shù)據(jù)類型(主要包括線網(wǎng)型及寄存器型)和抽象數(shù)據(jù)類型(主要包括整數(shù)型、時間型、實數(shù)型及參數(shù)型)。抽象數(shù)據(jù)類型主要用于輔助設(shè)計和驗證。

2.1、線網(wǎng)型(wire)

wire 類型表示硬件單元之間的物理連線,由其連接的器件輸出端連續(xù)驅(qū)動。如果沒有驅(qū)動元件連接到 wire 型變量,缺省值一般為 “Z”。對wire 類型賦值用“assign”。

例如:

wire data_out ;

wire flag ;

assign data_out = data_in ;

assign flag = 1'b1 ;

2.2、寄存器型(reg)

reg 用來表示存儲單元,它的數(shù)據(jù)會保持最后一次賦值,直到被改寫。reg 默認(rèn)初始值為不定值“x”,缺省是數(shù)據(jù)位寬為1位。reg 一般為無符號數(shù),若將一個負(fù)數(shù)賦值給 reg 型變量,則制動轉(zhuǎn)換其二進(jìn)制補碼形式。

例如:

reg data0;

reg data1;

reg [4:0] data2;

2.3、存儲器型(memory)

存儲器型本質(zhì)上還是寄存器型變量陣列,可以描述RAM型、ROM型存儲器以及reg文件。存儲器中的每一個單元通過索引進(jìn)行尋址。

聲明格式:

reg

(1) range1:存儲器中寄存器的位寬,缺省,時為1,格式為[msb:lsb]。

(2)range2:寄存器的個數(shù),缺省時為1,格式為[msb:lsb]。

(3)name_of_register:變量名稱列表,一次可以定義多個名稱,之間用逗號分開。

例如:

reg [7:0] mem1[255:0];//定義了一個有256個8位的存儲器

reg [15:0] mem2[127:0],reg1,reg2;//定義了一個具有128個16位的寄存器mem2

//2個16位的寄存器reg1和reg2

mem1[2] = 0; //給mem1存儲器中的第三個存儲單元賦值為0

2.4、整數(shù)型(integer)

整數(shù)類型用關(guān)鍵字 integer 來聲明。聲明時不用指明位寬,位寬和編譯器有關(guān),一般為32 bit。reg 型變量為無符號數(shù),而 integer 型變量為有符號數(shù)。

例如:

reg [31:0] data1 ;

reg [3:0] byte1 [7:0]; //數(shù)組變量,后續(xù)介紹

integer j ; //整型變量,用來輔助生成數(shù)字電路

always@* begin

for (j=0; j<=3;j=j+1) begin

byte1[j] = data1[(j+1)*8-1 : j*8]; //把data1[7:0]…data1[31:24]依次賦值給byte1[0][7:0]…byte[3][7:0]

end

end

2.5、時間型(time)

Verilog 使用特殊的時間寄存器 time 型變量,對仿真時間進(jìn)行保存。其寬度一般為 64 bit,通過調(diào)用系統(tǒng)函數(shù) $time 獲取當(dāng)前仿真時間。

例如

time current_time ;

initial begin

#100 ;

current_time = $time ; //current_time 的大小為 100

end

2.6、實數(shù)型(real)

實數(shù)用關(guān)鍵字 real 來聲明,可用十進(jìn)制或科學(xué)計數(shù)法來表示。實數(shù)聲明不能帶有范圍,默認(rèn)值為 0。如果將一個實數(shù)賦值給一個整數(shù),則只有實數(shù)的整數(shù)部分會賦值給整數(shù)。

例如:

real data1 ;

integer temp ;

initial begin

data1 = 2e3 ;

data1 = 3.75 ;

end

initial begin

temp = data1 ; //temp 值的大小為3

end

2.7、參數(shù)型

參數(shù)用來表示常量,用關(guān)鍵字parameter聲明,只能賦值一次,但可通過實例化的方式更改參數(shù)在模塊中的值。局部參數(shù)用localparam聲明,其作用和用法與parameter相同,區(qū)別在于它的值不能改變。所以當(dāng)參數(shù)在本模塊中調(diào)用時,可以用localparam來說明。

3、運算符

beb0d3be-ffc1-11ef-9310-92fbcf53809c.jpg

3.1、算術(shù)運算符

Verilog HDL中常用的算術(shù)運算符主要有五種,分別是加法(+)、減法(-)、乘法(*)、除法(/)和取模(%)。

注:

算術(shù)表達(dá)式結(jié)果的長度由最長的操作數(shù)決定。在賦值語句下,算術(shù)結(jié)果的長度由等號操作符左端的目標(biāo)長度決定。

3.2、關(guān)系運算符

關(guān)系運算符也是雙目運算符,是對兩個操作數(shù)的大小進(jìn)行比較。關(guān)系運算符有大于(>)、小于(<)、大于等于(>=)和小于等于(<=)幾種。

3.3、相等關(guān)系運算符

相等關(guān)系運算符是對兩個操作數(shù)進(jìn)行比較,比較結(jié)果有三種,即真(1)、假(0)和不定值(x)。Verilog HDL 中有四種相等關(guān)系運算符:等于(==)、不等于(!=)、全等(===)、非全等(!==)。

bec4cb3a-ffc1-11ef-9310-92fbcf53809c.jpg

3.4、邏輯運算符

邏輯運算符有三種,分別為邏輯與(&&)、邏輯或(||)、邏輯非(?。F渲羞壿嬇c、邏輯或是雙目運算符,邏輯非為單目運算符。

bee0ba84-ffc1-11ef-9310-92fbcf53809c.jpg

3.5、按位運算符

Verilog HDL 提供了五種類型位運算符:按位取反(~)、按位與(&)、按位或(|)、按位異或(^ )、按位同或(^~),按位運算符對其自變量的每一位進(jìn)行操作。

bef09666-ffc1-11ef-9310-92fbcf53809c.jpg

bf001852-ffc1-11ef-9310-92fbcf53809c.jpg

bf112444-ffc1-11ef-9310-92fbcf53809c.jpg

3.6、歸約運算符

歸約操作符包括:歸約與(&),歸約與非(~&),歸約或(|),歸約或非(~|),歸約異或(^),歸約同或(~^)。歸約操作符只有一個操作數(shù),它對這個向量操作數(shù)逐位進(jìn)行操作,最終產(chǎn)生一個 1bit 結(jié)果。邏輯操作符、按位操作符和歸約操作符都使用相同的符號表示,因此有時候容易混淆。區(qū)分這些操作符的關(guān)鍵是分清操作數(shù)的數(shù)目,和計算結(jié)果的規(guī)則。

例如:

A = 4'b1010 ;

&A ; //結(jié)果為 1 & 0 & 1 & 0 = 1'b0,可用來判斷變量A是否全1

~|A ; //結(jié)果為 ~(1 | 0 | 1 | 0) = 1'b0, 可用來判斷變量A是否為全0

^A ; //結(jié)果為 1 ^ 0 ^ 1 ^ 0 = 1'b0

3.7、移位運算符

移位操作符包括左移(<<),右移(>>),算術(shù)左移(<<<),算術(shù)右移(>>>)。移位操作符是雙目操作符,兩個操作數(shù)分別表示要進(jìn)行移位的向量信號(操作符左側(cè))與移動的位數(shù)(操作符右側(cè))。算術(shù)左移和邏輯左移時,右邊低位會補 0。邏輯右移時,左邊高位會補 0;而算術(shù)右移時,左邊高位會補充符號位,以保證數(shù)據(jù)縮小后值的正確性。

A = 4'b1100 ;

B = 4'b0010 ;

A = A >> 2 ; //結(jié)果為 4'b0011

A = A << 1; ? ? ? ? //結(jié)果為 4'b1000

A = A <<< 1 ; ? ? ? //結(jié)果為 4'b1000

C = B + (A>>>2); //結(jié)果為 2 + (-4/4) = 1, 4'b0001

3.8、連接運算符

拼接操作符用大括號 {,} 來表示,用于將多個操作數(shù)(向量)拼接成新的操作數(shù)(向量),信號間用逗號隔開。拼接符操作數(shù)必須指定位寬,常數(shù)的話也需要指定位寬。

例如:

A = 4'b1010 ;

B = 1'b1 ;

Y1 = {B, A[3:2], A[0], 4'h3 }; //結(jié)果為Y1='b1100_0011

Y2 = {4{B}, 3'd4}; //結(jié)果為 Y2=7'b111_1100

Y3 = {32{1'b0}}; //結(jié)果為 Y3=32h0,常用作寄存器初始化時匹配位寬的賦初值

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1637

    文章

    21848

    瀏覽量

    608769
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5393

    瀏覽量

    121988
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1356

    瀏覽量

    110911
  • 晶體管
    +關(guān)注

    關(guān)注

    77

    文章

    9848

    瀏覽量

    139577
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    329

    瀏覽量

    47573

原文標(biāo)題:Verilog HDL 入門教程

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Verilog HDL語言100例詳解

    Verilog HDL語言100例詳解希望對大家有所幫助
    發(fā)表于 09-01 15:58

    Verilog HDL詳細(xì)資料合集!

    本合集資料包括:1.Verilog HDL程序設(shè)計實例詳解2.Verilog HDL經(jīng)典教程3.Veri
    發(fā)表于 08-21 10:06

    Verilog-HDL實踐與應(yīng)用系統(tǒng)設(shè)計

    Verilog-HDL實踐與應(yīng)用系統(tǒng)設(shè)計本書從實用的角度介紹了硬件描述語言Verilog-HDL。通過動手實踐,體驗Verilog-HDL的語法結(jié)構(gòu)、功能等內(nèi)涵。在前五章,以簡單的實例列舉了V
    發(fā)表于 11-14 22:57 ?147次下載
    <b class='flag-5'>Verilog-HDL</b>實踐與應(yīng)用系統(tǒng)設(shè)計

    Verilog HDL華為入門教程

    Verilog HDL 華為入門教程 本文主要介紹了Verilog HDL 語言的些基本知識,目的是使初學(xué)者能夠迅速掌握
    發(fā)表于 02-11 08:35 ?141次下載

    什么是Verilog HDL

    什么是Verilog HDL? Verilog HDL種硬件描述語言,用于從算法級、門級到開關(guān)級的多種抽象設(shè)計層次的數(shù)字系統(tǒng)建模。被建
    發(fā)表于 01-18 14:53 ?4236次閱讀
    什么是<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>?

    Verilog HDL程序基本結(jié)構(gòu)與程序入門

    Verilog HDL程序基本結(jié)構(gòu)與程序入門 Verilog HDL程序基本結(jié)構(gòu)  Verilog
    發(fā)表于 02-08 11:43 ?2361次閱讀

    Verilog HDL語言簡介

    Verilog HDL語言簡介 1.什么是Verilog HDLVerilog HDL是硬件描述語言的種,用于數(shù)
    發(fā)表于 02-09 08:59 ?3957次閱讀

    Verilog_HDL的基本語法詳解(夏宇聞版)

    Verilog_HDL的基本語法詳解(夏宇聞版):Verilog HDL種用于數(shù)字邏輯電路設(shè)計的語言。用
    發(fā)表于 10-08 14:48 ?0次下載
    <b class='flag-5'>Verilog_HDL</b>的基本語法<b class='flag-5'>詳解</b>(夏宇聞版)

    詳解Verilog HDL數(shù)字設(shè)計與綜合 夏宇聞譯(第二版)

    電子發(fā)燒友網(wǎng)站提供《詳解Verilog HDL數(shù)字設(shè)計與綜合 夏宇聞譯(第二版).txt》資料免費下載
    發(fā)表于 09-25 22:19 ?0次下載

    Verilog HDL程序設(shè)計與實踐

    Verilog HDL程序設(shè)計與實踐著重介紹了Verilog HDL語言
    發(fā)表于 10-29 14:45 ?21次下載

    Verilog HDL入門教程

    本文主要介紹了Verilog HDL 語言的些基本知識,目的是使初學(xué)者能夠迅速掌握HDL設(shè)計方法,初步了解并掌握Verilog
    發(fā)表于 07-15 15:27 ?0次下載

    Verilog HDL入門教程之Verilog HDL數(shù)字系統(tǒng)設(shè)計教程

    本文檔的主要內(nèi)容詳細(xì)介紹的是Verilog HDL入門教程之Verilog HDL數(shù)字系統(tǒng)設(shè)計教程。
    發(fā)表于 09-20 15:51 ?83次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>入門教程之<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>數(shù)字系統(tǒng)設(shè)計教程

    Verilog HDL入門教程

    本文主要介紹了Verilog HDL 語言的些基本知識,目的是使初學(xué)者能夠迅速掌握HDL 設(shè)計方法,初步了解并掌握Verilog
    發(fā)表于 02-11 08:00 ?99次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>入門教程

    Verilog HDL的基礎(chǔ)知識詳細(xì)說明

    硬件描述語言基本語法和實踐 (1)VHDL 和Verilog HDL的各自特點和應(yīng)用范圍 (2)Verilog HDL基本結(jié)構(gòu)語言要素與語法規(guī)則 (3)
    發(fā)表于 07-03 17:36 ?54次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>的基礎(chǔ)知識詳細(xì)說明

    Verilog HDL入門教程-Verilog HDL的基本語法

    Verilog HDL入門教程-Verilog HDL的基本語法
    發(fā)表于 01-07 09:23 ?179次下載