verilog 向量位的选择
在Verilog中,经常需要使用到寄存器或者线网向量的某一位或者某几位。对于向量位的选择,通常使用如下方法:
reg [7:0] data; //定义一个8位的reg型变量
//always block
x1=data[7]; //将8位reg型向量的最高位赋值给x1
x1=data[3:0]; //将8位reg型变量的低四位赋值给x2
此处,对向量的定义如下
vect [msb_expr:lsb_expr];
//msb_expr和lsb_expr必须为常量表达式。
正因为msb_expr和lsb_expr必须为常量,所以导致某些时候不方便,比如在移位或者使用for循环初始化。
除了用常量指定向量位选择外,还有另一种方法
reg [15:0] big_vect;
reg [0:15] little_vect;
// big_vect[lsb_base_expr +: width_expr];
// little_vect[msb_base_expr +: width_expr];
// big_vect[msb_base_expr -: width_expr];
// little_vect[lsb_base_expr -: width_expr];
在上面的定义中,lsb_base_expr和msb_base_expr可以是变量,width_expr必须是常量表达式
例如,定义 reg [31:0] big_vect
那么
big_vect[0 +:8]和big_vect [7:0]是等价的
big_vect[15 -:8]和big_v

本文详细介绍了在Verilog中如何对寄存器或线网向量进行位选择,包括使用常量表达式和变量基表达式的方法,以及如何在循环中应用这些技巧。
5603

被折叠的 条评论
为什么被折叠?



