$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的調用可以重用這一位。