返回信息流大家有没有写过这样的systemverilog代码:
tmp = {1'b1, b[size_b-1:0]};
其中size_b是变量
编译报错:
The range of part select is illegal:
b[size_b-1]
"size_b-1"
Cannot elaluate the expression in left slicing expression.
The expression must be compiletime constant.
有什么解决方法吗?
这是一条镜像帖。来源:北邮人论坛 / circuit / #26611同步于 2016/8/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖
一个systemverilog的问题
whwjez
2016/8/15镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
一般来说这种截取部分位宽的逻辑可以用 >> <<来实现
但是左右信号位宽要匹配
现在b是200位
tmp是400位
size_b不确定
这个等式没说明逻辑上tmp多余size_b+1的位怎么生成
给个例子
wire [199:0] tmp_0 = {200{1'b1}} >> (200-size_b);
wire [199:0] tmp_1 = {200{1'b1}} >> (200-size_b-1);
wire [199:0] tmp = ( b[199:0] & tmp_0[199:0] ) | ( tmp_0[199:0] ^ tmp_1[199:0] );
以上代码把200bit的b生成了200bit的tmp
其中tmp的低size_b个bit与b相同
tmp的size_b号bit为1
这段代码只考虑size_b为0~199的情况
上面这段代码是可以综合的
【 在 whwjez 的大作中提到: 】
: 大家有没有写过这样的systemverilog代码:
: tmp = {1'b1, b[size_b-1:0]};
: 其中size_b是变量
:
: 编译报错:
: The range of pa
: .........
发自「贵邮」
方法很巧妙,很有参考价值,谢谢
【 在 dzcs 的大作中提到: 】
: 一般来说这种截取部分位宽的逻辑可以用 >> <<来实现
: 但是左右信号位宽要匹配
: 现在b是200位
: ...................