導航:首頁 > 源碼編譯 > verilog條件編譯用法

verilog條件編譯用法

發布時間:2022-01-29 23:34:41

㈠ verilog 2001 port 能用localparam 嗎

2001年3月IEEE正式批准了Verilog‐2001標准(IEEE1364‐2001),與Verilog‐1995相比主要有以下提高。

1、模塊聲明的擴展

(1) Verilog‐2001允許將埠聲明和數據類型聲明放在同一條語句中,例子如下:

(2)Verilog‐2001中增加了ANSIC風格的輸入輸出埠聲明,可以用於mole,task和function。例子如下:

(3)對於含有parameter的mole,例子如下:

2、帶有初始化的寄存器類型變數聲明

Verilog‐2001中允許在聲明變數的同時對其進行初始化賦值,他是在initial語句中的0時刻開始執行。例子如下:

3、敏感表的改進

(1)逗號分開敏感列表

在敏感表中的變數可以用逗號「,」分開,當然,當然or也是可以的。例子如下:

always@(posedge clk,negedge rst)也是可以的。

(2)組合邏輯的電平敏感@* //@(*) is also ok

「*」代表了邏輯塊中每個被賦值的變數,例子如下:

4、有符號算數運算的擴展

(1)net型和reg型可以聲明為帶符號的變數

(2)函數的返回值可以是有符號數

(3)Literal integer numbers可以定義為有符號的

(4)增加算數右移左移(>>>,<<<)

操作符「>>>」和「<<<」。對於有符號數,執行算術移位操作時,將符號位填補移出的位。例子如下:

(5)增加系統函數$signed,$unsigned

用於在無符號和有符號數之間的轉換

5、可變向量域的選擇

[<starting_bit>+」:width]從起始位開始遞增,位寬為width

[<starting_bit>‐」:width]從起始位開始遞減,位寬為width

其中,起始位可以是變數,但位寬必須是整數。因此可以用可變域選擇,用循環語句選取一個很長的向量所有位。

6、多維數組的建立

Verilog‐1995中只允許對reg,integer和time建立一維的數組,常用於RAM,ROM的建模。Verilog‐2001中可以對net和variable建立多維數組。

7、多維數組的賦值

Verilog‐1995不允許直接訪問矩陣字的某一位或某幾位,必須將整個矩陣字復制到另一個暫存變數中,從暫存中訪問。

Verilog‐2001可以直接訪問矩陣的某一維或某幾位。

8、乘方運算符

增加乘方運算(power operate),運算符是**,如果其中有一個操作數是real類型的,返回值將是real類型。兩個操作數都是integer類型,返回才是integer類型。

9、自動(可重入)任務和自動(遞歸)函數

(1)可重入任務

任務本質上是靜態的,同時並發執行的多個任務共享存儲區。當某個任務在模塊中的多個地方被同時調用,則這兩個任務對同一塊地址空間進行操作,結果可能是錯誤的。Verilog‐2001中增加了關鍵字automatic,內存空間是動態分配的,使任務成為可重入的。

(2)遞歸函數

10、自動寬度擴展

Verilog‐1995中對於不指定位數的位寬超過32為的匯流排賦高阻時,只會對低32位賦值為高阻,高位將為0。

Verilog‐2001將高阻或不定態賦值給未指定位寬的信號時,可以自動擴展到整個位寬范圍。

11、常數函數

Verilog語法規定必須使用數值或常數表達式來定義向量的位寬和陣列的規模。

Verilog‐1995中要求上述表達式必須為算數操作。

Verilog‐2001中可以使用函數,成為常數函數。他的數值在編譯或詳細描述中被確定。

12、增加了文件輸入輸出操作

Verilog‐1995中在文件的輸入/輸出操作方面功能非常有限,文件操作經常藉助於Verilog PLI(編程語言介面),通過與C語言的文件輸入/輸出庫的訪問來處理。並且規定同時打開的I/O文件數不能多於31個。

Verilog‐2001增加了新的系統任務和函數,並且規定同時打開的文件數目為230個。

13、顯式的參數重載

Verilog‐1995中參數重載有兩種方法。一種是defparam語句顯式的重新定義。第二種是在模塊實體調用時使用#符號隱式的重新定義參數。

Verilog‐2001中增加了一種新的方法,成為顯式參數重載。

14、generate語句

Verilog‐2001新增了語句「generate」,通過generate循環,可以產生一個對象(比如一個元件或一個模塊等)的多個例化,為可變尺度的設計提供了方便。

generate語句一般在循環和條件語句中使用。Verilog‐2001增加了四個關鍵字generate、endgenerate、genvar和localparam,其中genvar是一個新的數據類型,用在generate循環中的標尺變數必須定義為genvar型數據。

15、register變為variable

自1998年的Verilog一來,register一直用來描述一種變數的類型,這常常給初學者帶來困擾,誤認為register和硬體中的寄存器一致。在Verilog‐2001參考手冊中將register變為variable。

16、對條件編譯的改進

Verilog‐1995中支持`ifdef、`else、`endif、`undef進行條件編譯,Verilog‐2001中增加了`ifndef和`elseif

17、文件和行編譯顯示

Verilog需要不斷的跟蹤源代碼的行號和文件名,可編程語言介面(PLII)可以取得並利用行號和源文件的信息,以標記運行是的錯誤。但如果Verilog代碼經過其他工具的處理,源碼的行號和文件名可能丟失。故在Verilog‐2001中增加了`line,用來標定源碼的行號和文件名。

18、屬性

隨著模擬器之外的其他工具把Verilog作為設計輸入,這些工具需要Verilog語言能夠加入跟指定工具有關的信息和命令

Verilog沒有定義標準的屬性,屬性的名字和數值由工具廠商或其他標准來定義。目前尚無指定的標准。

19、設計管理——Verilog配置

Verilog‐1995標准將設計管理工作交給軟體來承擔,但各模擬工具的設計管理方法各不相同,不利於設計的共享。為了更好地在設計人員之間共享Verilog設計,並且提高某個特定模擬的可重用性,Verilog‐‐2001標准增加了對設計內容的配置這部分內容。

增加關鍵字config、endconfig、design、instance、cell、use和liblist。

配置塊位於模塊定義之外,可以指定每一個Verilog模塊的版本及其源代碼的位置。Verilog程序設計從頂層模塊開始執行,找到在頂層模塊中實例化的模塊,進而確定其源代碼的位置,照此順序,直到確定整個設計的源程序。

configcfg4 ///給配置塊命名

designrtlLib.top ///指定從哪裡找到頂層模塊

defaultliblistrtlLibgateLib; ///設置查找實例模塊的默認順序

instancetest.t.a2liblistggateLib; //明確指定模塊實例使用哪一個庫

endconfig

20、系統任務和系統函數的擴展

Verilog‐2001增加了17個文件輸入/輸出任務:$fgetc、$ungetc、$fflush、$ferror、$fgets、$rewind、$swrite、$swriteb、$swriteo、$swriteh、$sformat、$sdf_annotate、$ffscanf、$sscanf、$fread、$ftell、$fseek。

增加了兩個轉換函數:$signed和$unsigned。

增加了命令行輸入任務:$test$plusargs和$value$plusargs。

21、VCD文件的擴展

VCD文件用於存儲選定的變數數值變化的信息,信息的記錄由VCD系統任務來完成。

在Verilog‐1995標准中只有一種類型的VCD文件,即四狀態類型,這種類型的VCD文件只記錄變數在0、1、x和z狀態之間的變化,而且不記錄信號強度信息。而在Verilog‐2001標准中增加了一種擴展類型的VCD文件,能夠記錄變數在所有狀態之間的轉換,同時記錄信號強度信息。

擴展型VCD系統任務$mpports、$mpportsoff、$mpportson、$mpportsall、$mpportslimit、$mpportsflush、$vcdclose

22、其他

(1)提高了ASIC/FPGA應用的正確性

①檢測脈沖的傳播錯誤

②負脈沖檢測

③新的時序約束檢查

④負時序約束

⑤提高了對SDF(標准延時文件)的支持

(2)編程語言介面PLI方面有所改進

㈡ 請教:verilog語句parameter的用法。

你寫出來的程序別人是要讀懂的,你把你所有的狀態劃分都用數字表示,我看到了我知道什麼?
通過定義讀你程序的人一下就知道你這個狀態干什麼,那個狀態干什麼。
至於說哪個是1,哪個是2都無所謂,如果狀態轉移基本都是順序切換的,你也可以按照格雷編碼的方式,保證每次狀態切換只有一個比特位變化,比如0,1,3,2,6,4,5,7等等。

㈢ Verilog語言 if 語句

三種形式的if語句:
1)if(表達式)語句。如
if(a>b)
out1 = int1;
2)if(表達式)
語句;
else
語句;如
if(a>b)
out1 = int1;
else
out1 = int2;
3)if(表達式1)
語句1;
else if(表達式2) 語句2;
else if(表達式3) 語句3;
…………………...
else if(表達式m) 語句m;
else 語句n;
條件語句必須在過程塊語句中是用(initial和always語句),除了這兩個語句引導的bedin end塊中可以編寫條件語句外,模塊中的其他地方都不能編寫。

㈣ 在verilog中#的用法

# 是延遲的意思,井號後面數字是延遲的數量,延遲的單位由`timescale控制
比如有:`timescale 1ns/1ps 意思就是時間單位為1ns,精度是1ps
那麼,#10.5 就是延遲10.5ns的意思
在同步時序數字邏輯電路的verilog代碼中,不能加入「#」進行延遲,這不是代碼編寫階段能決定的

㈤ 在VHDL語言中怎樣實現條件編譯

可以用硬體語言編寫測試文件,對目標系統進行模擬

㈥ verilog怎樣控制 ifdefine的編譯

條件編譯
一般情況下,源程序中的所有的行都參加編譯。但是有時希望對其中一部分內容只在一定條件下進行編譯,當條件不滿足則編譯另一組語句
#ifdef 標識符
程序段1
#else
程序段2
#endif
作用:已經被#define命令定義過,則在程序編譯階段只編譯程序段1,否則編譯程序段2

例子:
#define N 10
main() {
#ifdef N
printf("N defined!\n");
//程序段一
#else
printf("N isn't defined!\n");

㈦ verilog條件生成和條件編譯的區別

充分條件:有甲這個條件一定會推出乙這個結果,有乙這個結果不一定是甲這唯一個條件.關聯詞是只要……就…… 如只要天下雨,地就會濕。 有「下雨」這個條件就一定有「地濕」這個結果,但「地濕」這個結果不一定就是「天下雨」造成的,也許還可能有其他的條件原因,如灑水車灑的、別人噴的等等。 必要條件:有甲這個條件不一定能推出乙這個結果,但乙這個結果一定要有甲這個條件。關聯詞是只有……才…… 如只有陽光充足,菜才能長得好。有「陽光充足」這個條件「菜」不一定就長得好,還需要施肥、澆水等其他條件。但「菜」要長得好一定要有「陽光充足」這個條件。 充要條件:即充分必要條件。或者說是無條件的。 關聯詞是不論(不管)……都……如不論天氣如何,他都按時到校。就是說「天氣如何」無所謂什麼條件,都會有「按時到校」的結果的。反過來「按時到校」也不需要什麼「天氣」。不知道這樣解釋能否明白這三者間的關系。

㈧ verilog 語法中的ifdef用法

可以嵌套使用的。
就是`ifdef I2C
`ifdef MASTER
.........
`endif
`endif
其實就相當於與的關系,都定義~~~

㈨ verilog里&的用法

&(|)放在前面代表這個向量的所有位與(或)操作,這是單目操作,放在中間代表則是雙目操作,第一句表示A向量的所有位與操作,與它所有位的或操作再相與。

㈩ verilog中的case語法使用,求助!

是不是沒寫endcase啊, 每個加上begin end

case(iHex)
4'b0000:
begin
seg1=7'b1100110;
seg2=7'b0111111;
seg3...
end
4'b0001:
begin
seg1=7'b1100110;
seg2=7'b0111111;
seg3...
end
endcase
閱讀全文

與verilog條件編譯用法相關的資料

熱點內容
哪些系統盤文件夾大 瀏覽:335
pdf朗讀軟體手機 瀏覽:221
ug編程實例教程 瀏覽:985
cad輸入命令時滑鼠卡頓 瀏覽:795
php過濾文件 瀏覽:757
linux配置ip命令 瀏覽:903
命令的英文怎麼讀 瀏覽:353
哪個app是自己彈音樂的 瀏覽:655
安卓變是什麼意思 瀏覽:612
qq五子棋在哪裡找app 瀏覽:837
圖片活碼二維碼生成器網站源碼 瀏覽:186
國美手機聯系人加密 瀏覽:883
成交量彩色源碼 瀏覽:118
演算法最根本的評價標准 瀏覽:366
個人資源app哪個好用 瀏覽:580
這也能切為什麼沒有安卓 瀏覽:675
可可64山寨源碼 瀏覽:641
怎麼自己解壓和釋放 瀏覽:991
思路與演算法的區別 瀏覽:156
日誌帶源碼 瀏覽:137