色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取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

    瀏覽量

    608777
  • 寄存器
    +關注

    關注

    31

    文章

    5393

    瀏覽量

    121990
  • Verilog
    +關注

    關注

    28

    文章

    1356

    瀏覽量

    110911
  • 晶體管
    +關注

    關注

    77

    文章

    9854

    瀏覽量

    139579
  • HDL
    HDL
    +關注

    關注

    8

    文章

    329

    瀏覽量

    47574

原文標題:Verilog HDL 入門教程

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

收藏 1人收藏
  • fffsamet1

評論

相關推薦

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 ?2362次閱讀

Verilog HDL語言簡介

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

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次下載
主站蜘蛛池模板: 18禁无遮挡羞羞污污污污免费 | 免费无遮挡又黄又爽网站 | 国产一级毛片在线 | 含羞草国产亚洲精品岁国产精品 | 色-情-伦-理一区二区三区 | 特黄特色大片免费播放器9 特黄特黄aaaa级毛片免费看 | 少妇无码吹潮久久精品AV | 欧美高清video mr.sexo | aaa级黄影片 | 刺激性视频黄页 | 久久re热在线视频精69 | 高H黄暴NP辣H一女多男 | 亚洲va精品中文字幕 | 小货SAO边洗澡边CAO你动漫 | 欧美性XXXXX极品娇小 | 日本人添下面的全过程 | 三级黄色视屏 | 日本久久道一区二区三区 | 久久视频精品38线视频在线观看 | 日日噜噜夜夜狠狠扒开双腿 | 日产2021免费一二三四区在线 | 亚洲精品一区二区在线看片 | 亚洲欧美中文字幕先锋 | 欧美一区二区视频97色伦 | 日夜啪啪一区二区三区 | 国产成人在线网站 | 稚嫩挤奶h调教h | 一个色夫导航 | 日韩欧美中文字幕一区 | 久久久久亚洲日日精品 | 视频一区国产在线二区 | 亚洲精品无码AV中文字幕蜜桃 | 国内精品不卡一区二区三区 | 秋霞伦理电影在2017韩国在线伦 | 动漫女主被扒开双腿羞辱 | 久久精品天天中文字幕 | 飘雪在线观看免费完整版 | 国产乱色伦影片在线观看 | 欧美高清 videos sexo | 亚洲人成人毛片无遮挡 | ebc5恐怖5a26房间 |

電子發燒友

中國電子工程師最喜歡的網站

  • 2931785位工程師會員交流學習
  • 獲取您個性化的科技前沿技術信息
  • 參加活動獲取豐厚的禮品