Verilog學習筆記基本語法篇(十)········ 常用系統函數

$display 和 $write 任務

格式:

$display (p1,p2,...,pn);

$write (p1,p2,..,pn);

這兩個函數和系統的任務作用是用來輸出信息,即將參數p2到pn按照參數p1給的格式輸出。參數1通常稱作“格式控制”,參數p2至pn通常稱作輸出表列。這兩個任務的作用基本相同,但是$display自動的在輸出後進行換行,而$write卻不是這樣。如果想在一行內輸出多個信息,可以使用$write。

注意:其輸出格式控制是用雙引號括起來的字符串,可以包含以下兩種信息:

1)格式說明,由“%”和格式字符組成。它的作用是將輸出的數據轉換成指定的格式輸出。格式說明總是從%開始的。常見的幾種輸出格式

輸出格式 說明 輸出格式 說明
%h或%H 以十六進制形式輸出 %d或%D 以十進制形式輸出
%o或%O 以八進制形式輸出 %b或%B 以二進制形式輸出
%c或%C 以ASCII碼形式輸出 %v或%V 輸出網格型數據信號輕度
%m或%M 輸出等級層次名字 %s或%S 以字符串的形式輸出
%e或%E 以指數形式輸出實型數 %f或%F 以十進制的形式輸出實型數
%g或%G

以指數或者十進制數輸出實型數,但是

無論何種格式都以較短的結果輸出 

%t或%T 輸出當前的時間格式

 

 

 

 

 

 

 

 

 

2)普通字符,即需要原樣輸出的字符。其中一些特殊的字符可以通過轉換序列來輸出:

換碼序列 功能 換碼序列 功能
\n 換行 \'' 雙引號字符"
\t 橫向跳格 \o 1-3位八進制數代表的字符
\\ 反斜槓字符 %% 百分符號%

 

 

 

 

例:

$display("\\\t%%\n\"\123")             其輸出結果爲:  \%

                                                                          "S

val=101;

$display("val=%h hex val=%d decimal",val,val);

$display("val=%o otal val=%b binary",val,val);

其輸出的結果爲:

val=00000065  hex  val=101 decimal

val=00000000145 otal val=00000000000000000000000001100101 binary

由上式可見,在$siaplay顯示中,輸出列表中的數據顯示寬度是按照輸出的格式進行自動調整的。在顯示十進制時,輸出結果前面的0值用空格來代替。對於其他禁止,輸出結果前面的0仍然顯示出來。爲了消去其他進制有效數字前面的0,可以在%和表示進制的字符串中間插入一個0自動調整顯示輸出數據寬度的方式。如上式中的$display("val=%0b binary",val); 顯示的結果就爲val=101

如果在輸出列表中表達式的值包含不確定的值或高阻值,其結果遵循以下規則:

1)輸出爲十進制的情況下:

a)如果表達式值的所有位均爲不定值,則輸出結果爲小寫的x;

b)如果表達式中所有的位均爲高阻值,則輸出結果爲小寫的z;

c)如果表達式值的部分位爲不定值,則輸出結果爲大寫的X;

d)如果表達式值的部分爲高阻值,則輸出的結果位大寫的Z;

2)輸出爲十六進制和八進制的情況下:

a)每4位二進制數爲一組代表一位十六進制數,每3位二進制數爲一組代表一位八進制數。

b)如果表達式值相對應的某進制的所有位均爲不定值,則輸出爲小寫的x;

c)如果表達式值相對應的某進制數的所有位均爲高阻值,則輸出小寫的z;

d)如果表達式值相對應的某進制數的部分位爲不定值,則該位輸出的結果爲大寫的X;

e)如果表達式值相對性的某進制數的部分位位高阻值,則該位輸出的結果爲大寫的Z;

3)對於二進制的情況:

表達式的值每一位的輸出結果都用0,1,x,z表示。

和$display 和 $write相似的還有$strobe,這個任務除了與$display有一點區別外,其他的非常相似。如果許多其他語句和$display在同一個時間單位執行,那麼這些語句與$display任務的執行順序是不確定的。如果使用$strobe,該語句總是在相同時刻的其他賦值語句執行完之後才執行,因此$strobe提供了一種同步機制,它可以在同一時鐘沿賦值的其他語句在執行之後纔會顯示數據。

 

文件輸出

1)打開文件:

文件可以用系統任務$fopen打開,用法:

文件句柄=$fopen("文件名");

任務$fopen返回一個被稱作多通道描述符(multichannel descriptor)的32位值。多通道描述符中只有一位被設置成1。標準輸出有一個多通道描述符,其最低位(第0位)被設置成1.標準輸出也稱作通道0,標準輸出一直是開放的。以後對$fopen的每一次調用開闢一個新的通道,並且返回一個設置了第一位,第二位等,直到32位描述符的第30位。第31位是保留爲。信號通道與多通道描述符中被設置爲1的位相對應。

2)寫文件:

寫文件可以利用$fdisplay、$fmonitor實現。用法:

$fdisplay(文件描述符,p1,p2,..pn)

$fmonitor(文件描述符,p1,p2,...pn)

p1,p2,pn可以是變量,信號名或者帶引號的字符串。文件描述符是一個多通道描述符,他可以是一個文件句柄或者多個文件句柄的按位組合。Verilog會把輸出寫到與文件描述符中值爲1 的文件中。

Ex;

 文件描述

3)關閉文件

 文件可以用系統任務$fclose來關閉。用法:

$fclose(文件描述符);  如:$fclose(handle1);文件一旦被關閉,多通道描述符中的相應位被設置爲0,下一次的fopen的調用可以重用這一位。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章