verilog中reg,integer的使用規則

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 

仿真時變量值顯示如下:
在這裏插入圖片描述

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