verilog语法中+:和-:主要用来进行位选择。
位选择从向量net、向量 reg、整数变量或时间变量中提取特定位。可以使用表达式寻址该位。如果位选择超出地址边界或位选择为 x 或 z,则引用返回的值应为 x。声明为实时或实时的变量的位选择或部分选择应被视为非法。 向量net、向量 reg、整数变量或时间变量中的几个连续位可以被寻址,称为部分选择。有两种类型的部分选择,常量部分选择和索引部分选择。
向量 reg 或 net 的常量部分选择由以下语法给出: vect[msb_expr:lsb_expr] 例如: vect[31:0] 两个表达式都应为常量表达式。第一个表达式必须处理比第二个表达式更重要的位。如果部分选择超出地址边界或部分选择是 x 或 z,则引用返回的值应为 x。 向量网络、向量 reg、整数变量或时间变量的索引部分选择使用以下语法给出:
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]
width_expr 应该是一个常量表达式。它也不受运行时参数分配的影响。 lsb_base_expr 和 msb_base_expr 可以在运行时变化。前两个示例选择从基数开始并递增位范围的位。选择的位数等于宽度表达式。后两个示例选择从基数开始并降序到位范围的位。部分选择寻址的位范围完全超出网络、reg、整数或时间的地址边界,或者当部分选择是 x 或 z 时,读取时应产生值 x,并且应具有写入时对存储的数据没有影响。 部分超出范围的部分选择应在读取时为超出范围的位返回 x,并且 写入时仅影响范围内的位。
例子:
reg [31:0] big_vect;
reg [0:31] little_vect;
reg [63:0] dword;
integer sel;
initial begin
if ( big_vect[0 +:8] == big_vect[7 : 0]) begin end
if (little_vect[0 +:8] == little_vect[0 : 7]) begin end
if ( big_vect[15 -:8] == big_vect[15 : 8]) begin end
if (little_vect[15 -:8] == little_vect[8 :15]) begin end
if (sel >0 && sel < 8) dword[8sel +:8] = big_vect[7:0];
// Replace the byte selected.*
前四个 if 语句显示了两部分 select 构造之间的同一性。最后一个显示了可索引的性质。
区分一下大小端:
大端序是我们常用的描述位宽的方式,reg [31:0] big_vect;低位在右边,高位在左边。
小端序比如reg [0:31] little_vect;高位在右边,低位在左边。
位选则等效如下:文章来源:https://www.toymoban.com/news/detail-574071.html
reg [31:0] big_vect;为大端,那么转化后的也一定是大端,**形式不变**
big_vect[0 +:8]转化后一定是 big_vect[较大的数值 **:** 较小的数值]
little_vect[0 +:8] 转化后一定是 little_vect[较小的数值 **:** 较大的数值]
big_vect [0 +: 8] 从0 开始,升序,位宽为8 ======》》》》》big_vect [7 :0]
little_vect [0 +: 8] 从0 开始,升序,位宽为8 ======》》》》》little_vect [0 :7]
big_vect [15 -: 8] 从15开始,降序,位宽为8 ======》》》》》big_vect [15 :8]
little_vect [15 -: 8] 从15开始,降序,位宽为8 ======》》》》》little_vect [8:15]
参考Verilog语法+:的说明_相顾无言_40994893的博客-CSDN博客_+: verilog文章来源地址https://www.toymoban.com/news/detail-574071.html
到了这里,关于verilog语法中+:和-:用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!