verilog中reg,integer的使用規則
1. verilog中常用的數據類型
Verilog中共有19種數據類型。
1)基本的四種類型:
reg型、wire型、integer型、parameter型。
其他類型:large型、medium型、small型、scalared型、time型、tri型、trio型、tril型、triand型、trior型、trireg型、vectored型、wand型和wor型。
這14中數據類型除time外都與基本邏輯單元建庫有關。
2)四種基本類型區別:
reg 無符號整數變量,可以選擇不同的位寬。
integer 有符號整數變量,32位寬,算術運算可產生2的補碼。
real 有符號的浮點數,雙精度。
time 無符號整數變量,64位寬(Verilog-XL仿真工具用64位的正數來記錄仿真時刻)
用 reg 描述邏輯,integer 描述循環變量和計算, real 在系統模型中使用,time 和 realtime 保存測試裝置的仿真時間。
2.integer使用規則
1)reg是無符號整形變量,integer是有符號類型
2)integer定義爲32bit的總線
3)for循環變量需要使用integer類型
請小心使用小型寬度的 reg 作爲循環變量 測試負值的 reg 也要非常小心 如果重複的加 減運算和reg 的值都作爲無符號數處理 循環表達式就永遠不會出錯
reg [2:0] i; // i 的值永遠在 0 到 7 之間
...
for ( i=0; i<8; i=i+1 ) // 循環不會停止
...
for ( i=-4; i<0; i=i+1 ) // 不會執行
...
在像上面的情況中 循環變量 i 應該用 integer 類型
下面的代碼顯示reg和integer的一般用法:
integer i;
reg [15:0] V;
reg Parity;
always @(V)
for ( i = 0; i <= 15; i = i + 1 )
Parity = Parity ^ V[i];
4)文件讀寫時使用integer類型來簡化代碼操作
///save data to files1
parameter N = 4;
integer file_ceo_id [N-1:0]; //注意此處變量正確定義方式
initial begin
file_ceo_id[0] = $fopen("./ctrl_data0.txt","w");
file_ceo_id[1] = $fopen("./ctrl_data1.txt","w");
file_ceo_id[2] = $fopen("./ctrl_data2.txt","w");
file_ceo_id[3] = $fopen("./ctrl_data3.txt","w");
end
genvar i;
generate
for (i=0;i<N;i=i+1)
begin:W_FILES ///
always@( posedge clk)
begin
if (rd_valid == 1'b1)
begin
$fdisplay(file_ceo_id[i], "%h", out_fifo_rdata);
end
end
end
endgenerate
仿真時變量值顯示如下: