Verilog信息打印

發(fā)布時(shí)間:2010-10-13 12:05    發(fā)布者:techshare
關(guān)鍵詞: verilog , 打印
Verilog本質(zhì)上也是一門(mén)高級語(yǔ)言,因而也提供了豐富打印信息、輸出信息的系統函數。

Verilog提供的打印系統函數分為三類(lèi):

顯示/寫(xiě)系統函數(Display and Write tasks)
脈沖選擇監視系統函數(strobed monitoring tasks)
連續監視系統函數(continuous monitoring tasks)

顯示/寫(xiě)系統函數

這類(lèi)函數包括$display、$displayb、$displayo、$displayh、$write、$writeb、$ writeo、$writeh等八個(gè)函數。其使用語(yǔ)法如下:

系統函數名(變量列表);

變量列表就是需要輸出的信息,該變量列表可以是變量名、表達式、雙引號括起來(lái)的字符串、以及這三種形式的組合。變量列表也可以為空。這時(shí),$display會(huì )輸出一個(gè)回車(chē)符(就是開(kāi)始新的一行),而$write則相當于不進(jìn)行任何操作。

$display 系列和$write系列除了一點(diǎn)差別外完全一致,其差異在于$display會(huì )在變量列表后面自動(dòng)增加一個(gè)回車(chē)符,而$write則沒(méi)有該功能,完全按照變量列表指示的內容輸出。當變量列表為空時(shí),$display輸出一個(gè)回車(chē)符,而$write則相當于不進(jìn)行任何操作。

Verilog的這些打印系統函數的使用同其他高級語(yǔ)言比如C中的打印函數很類(lèi)似。這些函數支持“格式化輸出”,也是在雙引號括起來(lái)的變量中加入轉義符號實(shí)現的。對于變量列表中的變量或者常量,當指定了輸出格式時(shí),這八個(gè)函數沒(méi)有差別,都將以指定格式輸出其值;當沒(méi)有指定輸出格式時(shí),各函數以默認的形式輸出該變量或者常量的值。

下表給出各個(gè)函數默認的輸出格式:

系統函數 默認制式 例子(a[7:0]=31)
$display、$write 十進(jìn)制 $write(12,” and ”, a[7:0]);
$displayb、$writeb 二進(jìn)制 $writeb(12, ” and ”, a[7:0]);
$displayo、$writeo 八進(jìn)制 $writeo(12, ” and ”, a[7:0]);
$displayh、$writeh 十六進(jìn)制 $writeh(12, ” and ”, a[7:0]);

“格式化輸出”功能需要使用轉義符。除了增加部分跟硬件設計相關(guān)的轉義符外,Verilog的這些系統函數中的轉義符同其他高級語(yǔ)言中的定義和使用基本相同。 Verilog的轉義符分為兩大類(lèi):以”\\”引導的和以”%”引導的。通常,以”%”引導的轉義符用于指定變量列表中的變量、常量、表達式的格式化輸出;以”\\”引導的表示其他的一些格式化輸出功能,通常是比較“特殊”的功能,比如輸出一個(gè)“TAB”,或者輸出”\\”本身,以及輸出”%”本身等。

下表給出了Verilog中基本的轉義符定義和意義說(shuō)明:

轉義符 意義說(shuō)明
%d 以及 %D 以十進(jìn)制格式輸出
%b 以及 %B 以二進(jìn)制格式輸出
%o 以及 %O 以八進(jìn)制格式輸出
%h 以及 %H 以十六進(jìn)制格式輸出
%s 以及 %S 以字符串格式輸出
%c 以及 %C 以ASCII碼格式輸出
%v 以及 %V 輸出線(xiàn)網(wǎng)類(lèi)型變量的強度
%m 以及 %M 輸出層次名
%t 以及 %T 以當前時(shí)間格式輸出
%e 以及 %E 以指數表示方式輸出實(shí)數(real型)
%f 以及 %F 以十進(jìn)制數表示方式輸出實(shí)數(real型)
%g 以及 %G 以十進(jìn)制數或者以指數表示方式輸出實(shí)數。兩種輸出格式中,哪種占用更少的寬度,就使用哪一種。

\\n 開(kāi)始新行(“回車(chē)”功能)
\\t 輸出一個(gè) TAB
\\” 輸出 ” 本身
\\\\ 輸出 \\ 本身
%% 輸出 % 本身
\\xyz xyz表示一個(gè)八進(jìn)制數。\\xyz表示輸出八進(jìn)制數xyz的值對應的ASCII碼符號。比如,”\\123”,應該輸出的為符號“S”。

例子2-1給出了這些轉義符的基本使用:

// Filename: exe_2_1.v
// This module is writen by YiTurn Zhao
// Module Purpose : $display 和 $write的基本用法
module exe_2_1();
//
reg [7:0] a;
initial begin
a = 31;
abcd = 50;
$display(" Using $display, a = ",a, " And 12 = ",12);
$displayb(" Using $displayb, a = ",a, " And 12 = ",12);
$displayo(" Using $displayo, a = ",a, " And 12 = ",12);
$displayh(" Using $displayh, a = ",a, " And 12 = ",12);
$writeo(" \\nUsing Formatted $writeh, a = %d And 12 = %H",a,12);
$writeh(" Using Formatted $writeh, a = %d",a, " And 12 = %H",12,"\\n");
$display("Print \\"%%\\",\\t\\"%%%%\\" should be used.");
$display("Use %%C or %%c: a's value %d %C",a,a);
$display("Use %%S or %%s: a's value %d %s",a,a);
$display("Use %%E or %%e: 10000.8 can be writen as %e ",10000.8);
$display("Use %%F or %%f: 1.023E+8 can be writen as %f ",1.023E+8);
$display("Use %%G or %%g: 1.023E+8 can be writen as %g ",1.023E+8);
$display("Use \\\\xyz : Character \\101's ASCII value is 3'O101");
$display("Use \\\\xyz : Character \\053's ASCII value is 3'O53");
#200 $finish;
end

endmodule

注意:

1,在Verilog中,轉義符一定是使用在雙引號括起來(lái)的字符串中!

2,”\\” 和”%”后跟的不是前述指定的符號時(shí),行為跟仿真器的設計有關(guān)。比如,“\\N”實(shí)現的不是換行功能,但不同仿真器對其解釋不同。同樣,對于” \\%”、”%\\”等1364-2001標準未規定的格式,不同仿真器也可能進(jìn)行不同的處理。嚴格的說(shuō),沒(méi)有規定的轉義表達式應該不能使用,比如“ \\%”這一形式。一旦使用,應該通不過(guò)編譯,并報告錯誤信息。但是通過(guò)幾個(gè)仿真器的仿真發(fā)現,通常,”\\%”是允許的,推廣之,發(fā)現”\\”后跟的如果不是表格中規定的轉義符,”\\”將被忽略,而直接輸出之后的信息。比如”\\%”就輸出”%”符號,”\\N”就輸出”N”符號。但是”%\\”是不允許的,推廣之,發(fā)現”%”后跟的如果不是表格中規定的轉義符,將報告錯誤。

3,除”%%”外,”%”引導的轉義符的使用必須和對應的變量、或者表達式匹配使用。對應于某一個(gè)轉義符的變量為空時(shí),可以用兩個(gè)”,”將的空格來(lái)表示。參見(jiàn)例2-2。

4,”%C”、”%S”、”\\xyz” 等形式的轉義符都跟ASCII碼有關(guān)!盶\xyz”輸出值為八進(jìn)制數”xyz”的ASCII碼,它不需要對應的變量(或者常量)列表!%C”、”%s”也是輸出一個(gè)ASCII符號,其值為變量列表中對應的變量、常量或者表達式的值,因此需要在變量列表中提供相應的變量、常量或者表達式。

同其他高級語(yǔ)言相比,Verilog提供了幾種跟硬件設計相關(guān)的特殊輸出格式轉義符:%v、%m、%t。

%v用于打印一個(gè)線(xiàn)網(wǎng)類(lèi)型變量的信號強度,它不能打印矢量變量的信號強度,而只能打印標量變量,或者矢量變量的指定位的信號強度。信號強度用3個(gè)符號輸出表示,前兩個(gè)符號表示信號強度,而第三個(gè)符號表示信號的邏輯值。信號強度和邏輯值的意義分別如下面兩個(gè)表所示:

信號邏輯值表示:

邏輯值 表示意義
0 表示邏輯0值
1 表示邏輯1值
X 表示邏輯不定態(tài)
Z 表示邏輯高阻態(tài)
L 表示邏輯0值,或者邏輯高阻態(tài)
H 表示邏輯1值,或者邏輯高阻態(tài)

信號強度表示:

標記符 強度名 強度值表示
Su 電源級驅動(dòng)(Supply drive) 7
St 強驅動(dòng)(Strong drive) 6
Pu 上拉級驅動(dòng)(Pull drive) 5
La 大容性(Large capacitor) 4
We 弱驅動(dòng)(Weak drive) 3
Me 中級容性(Medium capacitor) 2
Sm 小容性(Small capacitor) 1
Hi 高容性(High capacitor) 0

用%v打印一個(gè)信號的強度時(shí),前兩個(gè)符號除了用上表中的信號強度“標志符”表示信號強度外,也可以用兩個(gè)數字表示信號強度。關(guān)于信號強度和邏輯值的建模在后續章節進(jìn)行詳細介紹。

使用%m,可以打印當前打印語(yǔ)句所在的模塊層次。

%t 通常用于打印當前的仿真時(shí)間,當然也可以用于打印其他數據。該轉義符表示把對應的變量使用當前使用的時(shí)間表示格式進(jìn)行打印。Verilog提供系統函數$time獲得當前的仿真時(shí)間信息,該系統函數輸出值為64比特表示的整數。Verilog還提供系統函數$timeformat用于設定當前的時(shí)間格式。關(guān)于$time和$timeformat的使用也放在后續章節說(shuō)明。

例2-3為這幾個(gè)轉義符簡(jiǎn)單使用的一個(gè)例子。

// Filename: exe_2_3.v
// This module is writen by YiTurn Zhao
// Module Purpose : $display 和 $write的部分特殊功能

module exe_2_3();

reg [7:0] a;
integer i;
wire x;
pulldown(x);
initial begin
#2;
$display("%m");
$display("Simulation Time now is : %t",$time);
$display("%%t Usage 2:%t",200);
$display("x's strength is : %v",x);
end

exe_2_3_sub exe_2_3_sub();

endmodule

module exe_2_3_sub;
wire [1:0] x;
initial begin
# 4;
$display("%m");
$display("Simulation Time now is : %t",$time);
$display("x's strngth is :%v",x);
end
endmodule
[em07][em07][em07][em07][em07]
本文地址:http://selenalain.com/thread-32090-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页