Verilog 三种变量类型

1. nets型变量

输出始终随输入变化的变量nets
重点关注wire型的使用

  • 常用于和assign语句使用表示组合逻辑
  • 模块中的输入/输出信号类型都为wire型
  • 定义方法:
wire param;
// 同时定义m个wire类型变量
wire [n:1] name1, name2, ..., name_m;		// 每条总线位宽为n
wire [n-1:0] name1, name2, ..., name_m;

2. register型变量

对应具有状态保持效果的元件,如触发器、寄存器等
常用来表示过程块语句(initial, always, task, function)中的指定信号
register
register型和wire型的区别:

  • register类型需要明确地被赋值,并且在被重新赋值之前一直保持原值
  • register类型变量必须通过 过程赋值语句 赋值,不能直接使用assign语句赋值
  • 过程块中每个被赋值的信号都必须是register类型

重点关注reg型的使用

  • 定义方法
reg r;	// 不指定位宽默认为1
reg[n:1] rr;	// 位宽是n
reg[n-1:0] r1, r2, ..., rm;	// 同时定义多个reg型变量

3. memory型变量

memory型变量由 多个reg型 变量组成的数组

  • 通过memory型变量来描述存储器
  • memory型变量可以描述RAM, ROM, 和reg文件

定义方法:

// 定义含m个存储单元的memory型变量,每个单元位宽为1
reg name[m-1:0];

// 定义含有m个存储单元的memory型变量,每个单元位宽为n
reg[n-1:0] name[m:1];

注意的地方
(1)区分reg和memory的定义代码

reg [n-1:0] r;
reg r[m-1:0];
reg[n-1:0] r[m-1:0];

(2)对n位的reg型可以使用一个赋值语句完成赋值,而对于memory型的存储器不能使用一句话就完成赋值,需要指明单元存储器中的地址

设有

reg[7:0] rr;
reg[3:0] mm[7:0];

要区分下列语句:

rr = 8'b0001_1110;	// 合法
mm = 4'b1111;		// 非法赋值,没有指明单元地址
mm[1] = 4'b1111;	// 合法
mm[7:4] = 4'b0110;	// 合法
发布了145 篇原创文章 · 获赞 21 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43826242/article/details/103839273
今日推荐