Verilog 2001的位宽vector[msb:lsb]写法

 如果把向量的位选取写成 vector[msb:lsb] 这种形式,下标 msb 和 lsb 中是不能出现变量的,但是Verilog 2001支持如下写法

错误的写法:

assign out=in[addr*8+7:addr*8];

正确的写法:
(1) assign out = {……, in[addr*8 + 3], in[addr*8 + 2], in[addr*8 + 1], in[addr*8]};
(2)assign out = in[addr*8+:8];//从addr*8开始,选择比特序号大于等于addr*8的8位bit,相当于[addr*8+7:addr*8]
(3)assign out = in[(addr*8+7)-:8];//从addr*8+7开始,选择比特序号小于等于addr*8+7的8位bit,相当于[addr*8+7:addr*8]


 [base_expr +: width_expr] //positive offset
 [base_expr -: width_expr] //negative offset

// 其中base_expr可以是变量,而width_expr必须是常量。+:表示由base_expr向上增长width_expr位,-:表示由base_expr向上递减width_expr位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值