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 

仿真时变量值显示如下:
在这里插入图片描述

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