日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Verilog HDL语言总结(全)

發(fā)布時間:2023/12/20 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Verilog HDL语言总结(全) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

1 、Verilog HDL基本結構

2 、數(shù)據類型

(1)寄存器型

(2)線型

(3)符號常量

(4)寄存器數(shù)組

3 、 運算符

(1)算術運算符

(2)邏輯運算符

?(3)按位運算符

(4)關系運算符

(5)等式運算符

(6)移位運算符

(7)條件運算符

(8)拼位運算符

?4 、語句

(1)賦值語句

?(2)結構說明語句(always+initial)

(3)if語句?

?(4)case語句

?(5)循環(huán)語句(repeat+forever+while+for)


1 、Verilog HDL基本結構

1. Verilog HDL程序是由模塊構成的。每個模塊嵌套在module和endmodule聲明語句中。

2 每個Verilog HDL源文件中只有一個頂層模塊,其他為子模塊。可以每個模塊寫一個文件。

3.每個模塊要進行端口定義,并說明輸入輸出端口,然后對模塊的功能進行行為邏輯描述。

4.模塊中的時序邏輯部分在always塊的內部,在always塊中只能對寄存器變量賦值。

5.模塊中對端口或其他wire型變量的賦值,必須在always塊的外部使用assign語句,通常是將寄存器的值送出

6.程序書寫格式自由,一行可以寫幾個語句,一個語句也可以分多行寫。

7. 除了endmodule語句、begin_end語句和fork_join語句外,每個語句和數(shù)據定義的最后都要加分號

8.可用/*.....*/和//...對程序的任何部分作注釋。加上必要的注釋,可以增強程序的可讀性

2 、數(shù)據類型

首先對數(shù)的表示方式進行講解,Verilog只能表示二進制的邏輯值,可以為0,1,高阻,未知

如下圖所示, 數(shù)在Verilog里面有3種表示

Verilog的數(shù)據類型分為 寄存器型(reg) 線型(wire) 符號常量(parameter) 寄存器數(shù)組

(1)寄存器型

之所以reg叫做寄存器型,是因為數(shù)字電路中的觸發(fā)器只在時鐘有效邊沿到來的時候,保存的值才能夠發(fā)生改變。

reg型信號的定義格式如下:
定義一個n位的寄存器變量 : reg [n-1:0]變量名;
定義m個n位的寄存器變量 : reg [n-1:0]變量名1,變量名2,....變量名m;

下面給出2個例子:
reg [7:0] a, b, c;? ? //a, b, c都是位寬為8位的寄存器
reg d;? ?//1位的寄存器d
?

(2)線型

wire型信號的定義格式如下:

定義一個n位的wire變量 : wire [n-1:0]變量名;

定義m個n位的wire變量 : wire [n-1:0]變量名1,變量名2,.變量名m;

下面給出2個例子:

wire [7:0] a, b, c;? ?// a, b, c都是位寬為8位的wire

wire d;? ? //d是1位的wire

(3)符號常量

如果用關鍵詞parameter來定義一個標識符,代表一個常量,這個常量就被稱為符號常量。

例如: parameter width=3;//符號常量width的值是3,如果未進行重定義,當在程序中出現(xiàn)width時就用3代替。

同樣的,可以一次性定義多個符號常量,parameter idle=1,one=2,two=3,stop=4;//定義了4個符號常量。如果未進行重定義,當代碼中出現(xiàn)idle就用1代替,出現(xiàn)one就用2代替,出現(xiàn)tow就用3代替,出現(xiàn)stop就用4代替。

但是符號常量可以被重定義,使用#即可

如下圖,一開始time_delay=5? time_count=10,重定義之后time_delay=4? time_count=8

?

(4)寄存器數(shù)組

存儲器實際上是一個寄存器數(shù)組。

存儲器使用如下方式定義reg [ msb: lsb] memory1 [ upper: lower]?

(upper:lower)代表寄存器個數(shù),(msb是最高有效位,lsb是最低有效位)代表每個寄存器的位數(shù)?

例如:

reg[3:0] mymem1[63:0];? ? ? ?//mymem1為64個4位寄存器的數(shù)組。

reg dog [1:5];? ? ? ? ?//dog為5個1位寄存器的數(shù)組。

dog[4]= 1;? ? ? ? ? ? //合法賦值語句,對其中一個1位寄存器賦值。

dog[1:51]= 0;? ? ? //合法賦值語句,對存儲器大范圍賦值。

3 、 運算符

(1)算術運算符

算術運算符說明
+
-
*
/
%取模(余數(shù))

在進行整數(shù)的除法運算時,結果要略去小數(shù)部分,只取整數(shù)部分;

進行取模運算時( %)?結果的符號位采用模運算符中第一個操作數(shù)的符號。例如,-10%3結果-1,11%-3 結果為2。

在進行算術運算時,如果某一個操作數(shù)有不確定的值x,則整個結果也為不確定值x。

(2)邏輯運算符

邏輯運算符說明
&&邏輯與
||邏輯或
邏輯非

邏輯運算最常用于條件判斷語句。邏輯運算只區(qū)分真假,而不管是什么數(shù)值。邏輯運算的輸入4'ha1和4'h01是沒有區(qū)別的,都是邏輯真,而0為邏輯假。一般來說,邏輯運算的結果要么為真(1)要么為假(0)

特例是如果有一個輸入為未知X,那么結果也是X。

例如,4'ha1&&4h01是1,4'ha1&&4h00是0。

■對于邏輯與或:只有兩個輸入都是0的時候,邏輯或的結果才是0。
■對于邏輯非:當輸入為非0值,輸出就是0。

?(3)按位運算符

按位運算符說明
&按位與
|按位或
~按位取反
^按位異或
~^? ?^~按位同或

按位運算符是對照數(shù)據的每一位進行運算,?例如0101&1100=0100,0101|1100=1101

ps:異或是指如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。

同或是指如果a、b兩個值不相同,則同或結果為0。如果a、b兩個值相同,同或結果為1。

(4)關系運算符

關系運算符說明
<小于
<=小于等于
>大于
>=大于等于

關系運算符和邏輯運算符一般用于條件判斷語句。

關系運算結果為1位的邏輯值1(真)或0(假),但也可能是x(未知)。關系運算符根據關系運算的結果是真還是假,用于條件判斷。

關系運算時,若關系為真,則返回值為1;若聲明的關系為假,則返回值為0;若某操作數(shù)為不定值x,則返回值也一定為x。

(5)等式運算符

等式運算符說明
==等于
!=不等于
===全等于
!==全不等于

"=="和"!="稱作邏輯等式運算符,其結果由兩個操作數(shù)的值決定。由于操作數(shù)可能是x或z,其結果可能為x。

"==="和"!=="常用于case表達式的判別,又稱作case等式運算符。其結果只能為0和1。如果操作數(shù)中存在x和z,那么操作數(shù)必須完全相同結果才為1,否則為0。

注意"=="和"="是完全不同的,"="是對寄存器賦值使用的。

(6)移位運算符

移位運算符說明
<<左移
>>右移

a>>n中a代表要進行向右移位的操作數(shù),n代表要移幾位。a<<n表示將a邏輯左移n位。

這兩種移位運算都用0來填補移出的空位。

例如a是一個5位的寄存器,那么a=4'b1001<<1,a的結果就是5'b10010。但是當a是一個4位的寄存器,那么a=4'b1001<<1,a的結果就是4'b0010。

(7)條件運算符

用法: assign wire類型變量=條件?表達式1:表達式2;

如果滿足條件,變量=表達式1,否則,變量=表達式2

(8)拼位運算符

使用拼接運算符可以將變量任意組合后輸出或送給另一個變量。

用法:{信號1的某幾位,信號2的某幾位,......信號n的某幾位}

{m,-a,b[3:0],w,3'b101}等同于{a,b[3],b[2],b[1],b[0],w,1b'[1],1'b[0],1'b[1]}

{4{w}}等同于{w,w,w,w}

{b{3{a,b}}等同于{b,a,b,a,b,a,b}

?4 、語句

(1)賦值語句

?(2)結構說明語句(always+initial)

?

?ps:

?

(3)if語句?

?

?

?(4)case語句

?

?

?(5)循環(huán)語句(repeat+forever+while+for)

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的Verilog HDL语言总结(全)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。