这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 换逻辑分析仪+VerilogHDL变量知识分享

共2条 1/1 1 跳转至

换逻辑分析仪+VerilogHDL变量知识分享

工程师
2024-09-25 19:48:41   被打赏 20 分(兑奖)     打赏

在Verilog HDL(硬件描述语言)中,变量是构建数字逻辑设计的基础,用于表示和存储数据。

结合Verilog HDL的变量类型及其相关知识,进行详细的分享,特别是关于逻辑分析仪与Verilog HDL变量知识的结合应用(尽管逻辑分析仪主要是一种工具,用于捕获和显示数字电路中的信号,但其使用与理解Verilog HDL中的变量密切相关)。

一、Verilog HDL变量类型

Verilog HDL中的变量主要分为两大类:线网(net)类型和寄存器(register)类型,以及一些特殊类型如整数(integer)、时间(time)等。

线网(net)类型wire:最常用的线网类型,用于表示物理连线,如逻辑单元之间的连接。wire类型变量只能由assign语句或连续赋值语句赋值,且赋值机会通常只有一次(除非在模块实例化时重新赋值)。

其他线网类型还包括tri(三态线网)、tri0、tri1、trireg等,但wire是最常用的。

寄存器(register)类型reg:用于表示存储单元,如触发器或锁存器。reg类型变量可以在过程块(如always块或initial块)中被多次赋值,且其值会保持直到下一次被改写。

reg类型变量在仿真中非常重要,因为它们可以模拟硬件中的存储元件。

特殊类型integer:用于存储整数值,常用于仿真中的计数、循环控制、算术运算等。integer类型变量不能在硬件描述中的线网连接中使用,因为它们的值在仿真过程中会变化。

time:用于存储时间值,常用于仿真中的时间控制、延迟和测量。

real 和 realtime:这些类型在纯Verilog中并不直接作为变量类型出现,但在SystemVerilog中被引入,用于存储浮点数和时间间隔的浮点数表示。

二、Verilog HDL变量声明与赋值变量声明:变量在使用前必须先声明,声明时指定其类型和(可选的)位宽。
reg [3:0] ext_bus; // 声明一个4位无符号reg变量  
integer counter;    // 声明一个整数变量
变量赋值:连续赋值:适用于net类型变量,使用assign语句。assign out = in1 & in2;过程赋值:适用于variable类型变量,在过程块中赋值。过程赋值有两种形式:阻塞赋值(=)和非阻塞赋值(<=)。
always @(posedge clk) begin  
    counter = counter + 1; // 阻塞赋值  
    ma <= a; // 非阻塞赋值  
end
三、逻辑分析仪与Verilog HDL变量的关系

逻辑分析仪主要用于捕获和显示数字电路中的信号波形,帮助开发者分析和调试硬件设计。在使用逻辑分析仪时,开发者需要理解Verilog HDL中的变量类型及其行为,以便正确设置逻辑分析仪的捕获点和分析参数。

捕获点设置:开发者可以根据Verilog HDL中的变量声明和赋值,设置逻辑分析仪的捕获点,以捕获特定信号的变化情况。

信号分析:通过分析逻辑分析仪捕获的信号波形,开发者可以验证Verilog HDL代码的正确性,检查硬件设计中是否存在问题。


四、整数型(integer)变量

整数型(简称整型)变量包含整数值。整型变量可以作为普通变量使用,通常用于高层次行为建模。下面对整型变量声明语句的格式作以下说明

integer integerl,integer2,...intergerN[msb:1sb;]

msb和Isb是指定整型数组范围的常量表达式,数组范围的定义是可选的。注意不定义整型数组的范围是允许的。一个整型数至少有32位。具体实现时,可提供更多的位。下面举例说明整型变量的声明。

integer a,b,c;//3个整型变量
integer hist[3:6];//一个由4个整型数组成的数组

整型变量可存储有符号数,且算术运算可提供用2的补码表示的运算结果整型数能被当作位向量存取。整型变量被当作有符号的reg变量,其最小位的索引为0。例如,对上面的整型变量b的声明语句而言,b6]和b20:10]是允许的。下面举例声明:

reg【31:0sel_reg;
integer sel int;
......
//sel_int[6]和sel_int[20:10]是允许的。
sel_reg =sel int;

上面的例子展示了如何通过简单的赋值语句,将整型数转换为位向量。类型的转换是自动完成的,不必使用专用的函数。从位向量到整型数的转换也可以通过一条赋值语句完成.

下面举几个例子加以说明:

integer j;
reg[3 :0]bcq;
j= 6;    //j的值为 32'b0000...00110
bcq =j;    //bcq 的值为4'b0110

bcq=4'b0101:
j = bcq;    //j的值为32'b0000...00101
j= -6;       //j的值为 32'b1111...11010
bcq=j;      //bcq的值为4'b1010

请注意:赋值总是从最右端的位起,至最左边的位;任何多余的位被截断。若能够记得整型数是被表示成2的补码的位向量,则很容易理解这种数型的转换。下面举一个整型数组的例子,展示整型数的声明、赋值及其用法

module mod int array;
localparam ARRAY SIZE=8:
integer int array0:ARRAY SIZE-1;
initial
begin
end
endmodule
int_array[0]= 56 ;int_array[1]=12;int_array[2]= int_array[0]/2;$display("int_array[2]is t d",int_array[2]);


时间(time)变量

时间变量用于存储和处理时间值。时间变量的声明格式如下:time time_id1,time_id2,...,time_idN[msb :lsb;

其中msb和1sb是常量表达式,定义数的位宽。若未定义数的位宽,则每个标识符存储的时间值至少为64位。时间变量只能存储无符号数。下面举例说明时间变量的声明:

time events0:31;//时间变量数组
time curr time://curr_time存储一个时间值

实型(real)和实型时间(realtime)变量

实型变量(或实型时间变量)可以用如下格式声明://实型变量的声明:

real realregl,real_reg2,...,real_regN;//实型时间变量的声明:
realtime realtime reg1,realtime_reg2,,realtime regN;

实型时间(realtime)变量与实型(real)变量完全相同。下面举几个例子

real swing_margin,top_mark;
realtime curr time in real;

实型(real)变量的缺省值为0。实型变量的声明中不允许对位宽或字界做任何指定若将值x和z赋予实型变量,则这些值将被当作0处理。

real amr_count;
.......
amr count='b01x1Z;
amr_count 赋值后的值为'b01010.


总结:

在Verilog HDL中,变量是构建和模拟数字逻辑设计的基础。变量类型主要分为线网(如wire)和寄存器(如reg)两大类,以及特殊类型如integer、time、real和realtime等。理解这些变量类型及其声明、赋值方式对于编写有效的Verilog代码至关重要。逻辑分析仪作为调试工具,依赖于对Verilog HDL变量行为的深入理解,以便准确设置捕获点和分析参数。整型变量常用于计数、循环和算术运算,时间变量用于存储和处理时间值,而实型变量则支持浮点数运算。通过合理使用这些变量类型,开发者可以构建出高效、可靠的数字逻辑设计,并利用逻辑分析仪进行精确的调试和分析。最终,这种对Verilog HDL变量知识的全面掌握将促进数字电路设计的成功实现。











专家
2024-09-25 22:22:38     打赏
2楼

谢谢分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]