在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文詳解Verilog HDL

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

一、Verilog HDL 概述

1、Verilog HDL 是什么

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

2、Verilog HDL產生的背景

第一只晶體管出現后,數字集成電路設計密度越來越大、電路越來越復雜,傳統的畫圖或連線的設計方法已不再適用。

例如:設計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

由上例可直觀發現,Verilog HDL可用較少的語句描述較為復雜的電路和靈活的可擴展性,為數字集成電路設計帶來了極大的便捷。

3、Verilog HDL 和 VHDL的區別

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

Verilog HDL:

語法靈活、寬松,多被思維活躍的美國人采用。因Verilog HDL 語法寬松,其不適合對系統要求層次嚴格的大規模設計。

VHDL:

語法結構緊湊、嚴謹,多被思維歐洲人采用。VHDL在大規模數字集成電路設計中具有一定優勢。

注:

Verilog基于C語言發展而來,語法靈活、寬松,且國內開發人員多采用Verilog,對初學者較為友好。

二、Verilog HDL 基礎知識

1、Verilog HDL 語言要素

1.1、命名規則

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

注:標識符中字母區分大小寫,且第一個字必須是字母或下劃線。

1.2、注釋符

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

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

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

例如:

非法多行注釋:

/*注釋內容/*多行注釋嵌套多行注釋*/注釋內容*/

合法多行注釋:

/*注釋內容//多行注釋嵌套單行注釋*/

1.3、關鍵字

Verilog HDL 內部已經使用的詞成為關鍵字或保留字,是事先定義好的確認符,用來組織語言結構。

注:Verilog HDL中所有的關鍵字都是小寫的。

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

1.4、數值

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

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

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

例如:

8’b00110010 與8’b0011_0010的數值大小相等。

1.4.1、整數及其表示

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

整數的表示形式:

+/-'

(1)“+/-”:正數和負數的標識。

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

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

(4)base_format:基數符號。

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

例如:

4'b0011

7'd32

8'hfd

1.4.2、實數及其表示

(1)十進制表示法。

(2)科學計數發。例如:758.4e2 的值為75840.0,3e-3的值為0.003。

1.4.3、字符串及其表示

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

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

2、數據類型

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

2.1、線網型(wire)

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

例如:

wire data_out ;

wire flag ;

assign data_out = data_in ;

assign flag = 1'b1 ;

2.2、寄存器型(reg)

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

例如:

reg data0;

reg data1;

reg [4:0] data2;

2.3、存儲器型(memory)

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

聲明格式:

reg

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

(2)range2:寄存器的個數,缺省時為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、整數型(integer)

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

例如:

reg [31:0] data1 ;

reg [3:0] byte1 [7:0]; //數組變量,后續介紹

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

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 型變量,對仿真時間進行保存。其寬度一般為 64 bit,通過調用系統函數 $time 獲取當前仿真時間。

例如

time current_time ;

initial begin

#100 ;

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

end

2.6、實數型(real)

實數用關鍵字 real 來聲明,可用十進制或科學計數法來表示。實數聲明不能帶有范圍,默認值為 0。如果將一個實數賦值給一個整數,則只有實數的整數部分會賦值給整數。

例如:

real data1 ;

integer temp ;

initial begin

data1 = 2e3 ;

data1 = 3.75 ;

end

initial begin

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

end

2.7、參數型

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

3、運算符

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

3.1、算術運算符

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

注:

算術表達式結果的長度由最長的操作數決定。在賦值語句下,算術結果的長度由等號操作符左端的目標長度決定。

3.2、關系運算符

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

3.3、相等關系運算符

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

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

3.4、邏輯運算符

邏輯運算符有三種,分別為邏輯與(&&)、邏輯或(||)、邏輯非(!)。其中邏輯與、邏輯或是雙目運算符,邏輯非為單目運算符。

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

3.5、按位運算符

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

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

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

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

3.6、歸約運算符

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

例如:

A = 4'b1010 ;

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

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

^A ; //結果為 1 ^ 0 ^ 1 ^ 0 = 1'b0

3.7、移位運算符

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

A = 4'b1100 ;

B = 4'b0010 ;

A = A >> 2 ; //結果為 4'b0011

A = A << 1; ? ? ? ? //結果為 4'b1000

A = A <<< 1 ; ? ? ? //結果為 4'b1000

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

3.8、連接運算符

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

例如:

A = 4'b1010 ;

B = 1'b1 ;

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

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1637

    文章

    21848

    瀏覽量

    608737
  • 寄存器
    +關注

    關注

    31

    文章

    5393

    瀏覽量

    121975
  • Verilog
    +關注

    關注

    28

    文章

    1356

    瀏覽量

    110901
  • 晶體管
    +關注

    關注

    77

    文章

    9848

    瀏覽量

    139569
  • HDL
    HDL
    +關注

    關注

    8

    文章

    329

    瀏覽量

    47573

原文標題:Verilog HDL 入門教程

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Verilog HDL語言100例詳解

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

    Verilog HDL詳細資料合集!

    本合集資料包括:1.Verilog HDL程序設計實例詳解2.Verilog HDL經典教程3.Veri
    發表于 08-21 10:06

    Verilog-HDL實踐與應用系統設計

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

    Verilog HDL華為入門教程

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

    什么是Verilog HDL

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

    Verilog HDL程序基本結構與程序入門

    Verilog HDL程序基本結構與程序入門 Verilog HDL程序基本結構  Verilog
    發表于 02-08 11:43 ?2359次閱讀

    Verilog HDL語言簡介

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

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

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

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

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

    Verilog HDL程序設計與實踐

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

    Verilog HDL入門教程

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

    Verilog HDL入門教程之Verilog HDL數字系統設計教程

    本文檔的主要內容詳細介紹的是Verilog HDL入門教程之Verilog HDL數字系統設計教程。
    發表于 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>數字系統設計教程

    Verilog HDL入門教程

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

    Verilog HDL verilog hdl和vhdl的區別

    Verilog HDL種以文本形式描述數字系統硬件的結構和行為的硬件描述語言,也可描述邏輯電路圖、邏輯表達式等。Verilog HDL
    的頭像 發表于 07-23 14:36 ?1.1w次閱讀

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

    Verilog HDL入門教程-Verilog HDL的基本語法
    發表于 01-07 09:23 ?179次下載
    主站蜘蛛池模板: 亚洲国产精品久久久久婷婷软件 | 日本黄色免费一级片 | 伊人男人天堂 | 在线a人片免费观看不卡 | 一级大片免费看 | 国产在线欧美精品卡通动漫 | 亚洲人成网站色7799在线观看 | 男人的天堂免费网站 | www.91在线| caoporn97人人做人人爱最新 | 天堂va欧美ⅴa亚洲va一国产 | 婷婷激情小说 | 奇米福利视频 | 国产午夜精品理论片在线 | 未满十八18周岁禁止免费国产 | 一区二区三区在线播放 | 免费在线黄网 | 99草视频| 亚洲综合国产一区二区三区 | 黄 色 片 在 线 看 | 在线高清视频大全 | 国产全黄三级三级 | 嘿嘿午夜| 新版天堂中文资源官网 | 日本三级免费观看 | 免费啪视频在线观看 | 天天操天天插 | 日日夜夜操天天干 | 国产精品入口免费视频 | 中国黄色一级毛片 | 亚洲综合久久综合激情久久 | 午夜剧j| 久久精品国产精品亚洲人人 | 天堂资源在线官网资源 | 久久久免费的精品 | 五月综合激情久久婷婷 | 天堂tv亚洲tv日本tv欧美人tv | 亚洲色图综合图区 | 美女一级毛片免费观看 | 日本最猛黑人xxxx猛交 | 辣h高h肉h激h超h |