Verilog语法-向量位选择和部分选择寻址(+:,-:)

一、语法介绍

在verilog中对向量net、向量reg、integer、time变量以及parameter中选取一个单独的位,被叫做位选择(bit-selects)。位向量可以被寻址参与表达式中。如果位选择在地址边界之外或者被选择的位是x值或者z值,则返回的参考值是x值。

在verilog中对向量net、向量reg、integer、time变量以及parameter中选取一个几个连续的位,被叫做部分选择(part-selects)。有两种部分选择类型,常数部分选择和索引部分选择。reg和net常数的索引语法为:

  vect[msb_expr : lsb_expr]

msb_expr和lsb_expr都是整形常数表达式。

向量net、向量reg、integer、time变量以及parameter的索引部分选择语法为:

reg [15:0] big_event;
reg [0:15] little_event;

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]

代码1-1

msb_base_expr 和 lsb_base_expr 是整型表达式,表示部分索引的基地址;width_expr是正整型常数表达式,表示向量部分选择的范围。msb_base_expr 和 lsb_base_expr的值在运行过程中可以改变。“+:”表示在基值上增加width_expr,“+:”表示在基值上减去width_expr。

对于两种部分选择类型来说,如果寻址范围全在地址界限外,则读操作会返回X值,写操作不会对原来存储的值产生任何影响。对于部分在界限外部分选择来说,在界限外的部分读操作会返回X值,写操作只会形象在界限内那部分的存储值。

二、语法举例

reg [31:0] big_vect;
reg [0:31] little_vect;
reg [63:0] dword;
integer sel;

big_vect [0 +: 8]     // == big_vect[7:0]
big_vect [15 -: 8]    // == big_vect[15:8]

little_vect [0 +:8]   // == little_vect[0:7]
little_vect [15 -: 8] // == little_vect[8:15]

dword [8*sel +: 8]    //variable part-select with fixd width

代码2-1

代码1-1和代码2-1均为IEEE STD 1364-2005中的例子。通过代码2-2中的例子可以很清楚的显示2-1中msb/lsb_base_expr的含义就是索引部分选择的基值,以此为基准进行位宽的增加和减少,然后再按照大端模式或者小端模式的形式可以映射为注释符后面的形式。dword部分表明索引部分选择的基值表达式可以是变量表达式而不是常数表达式,从而可以进行位宽固定,机制可以变化的部分选择寻址。

三、参考资料

1. IEEE STD 1364-2005 5.2.1章节。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值