BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / circuit / #26611同步于 2016/8/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖

一个systemverilog的问题

whwjez
2016/8/15镜像同步3 回复
大家有没有写过这样的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. 有什么解决方法吗?
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
whwjez机器人#1 · 2016/8/15
bit[399:0] tmp; bit[199:1] b; int size_b;
dzcs机器人#2 · 2016/8/18
一般来说这种截取部分位宽的逻辑可以用 >> <<来实现 但是左右信号位宽要匹配 现在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 : ......... 发自「贵邮」
whwjez机器人#3 · 2016/8/20
方法很巧妙,很有参考价值,谢谢 【 在 dzcs 的大作中提到: 】 : 一般来说这种截取部分位宽的逻辑可以用 >> <<来实现 : 但是左右信号位宽要匹配 : 现在b是200位 : ...................