在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 10194|回复: 11

[求助] verilog里面位拼接问题

[复制链接]
发表于 2013-9-17 16:04:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
大家好,我在写verilog时遇到一个问题:首先我定义了一个24位的reg型变量。
reg[23:0] data;
然后在一个always块中根据地址取其中的一位:
always (....)
...
rdata[0] = data[{2'b00,addr[3:1]}];

addr是一个八位的,我只要用其中的3:1位。这样写的时候。quartus会有警告:
“index expression is not wide enough to address all of the elements in the array”

我测试时把它改成:
rdata[0] = data[{2'b00,3'b001}];
不会报错,
rdata[0] = data[addr[5:1]];
也不会有警告

请问我这个是什么问题?我应该怎么改?
谢谢!!!!!!!!!!!!!!!!!!!!!!
发表于 2013-9-17 16:38:10 | 显示全部楼层
你知道为什么那么多人看了,都没人回答你吗?
写代码之前还是稍微看一眼verilog语法,不要眼高手低
 楼主| 发表于 2013-9-17 17:37:30 | 显示全部楼层
回复 2# windflood


   我初学verilog,可能问题很弱智。请赐教!!!
发表于 2013-9-17 21:24:38 | 显示全部楼层
你的data允许的地址范围是[23:0]的,也就是24'h00_0000~24'hFF_FFFF,
但{2'b00,addr[3:1]}能覆盖的范围只有5'h00~5'h1F,所以不能覆盖data的全部地址范围。
这个warning就是告诉你这事儿。你要觉得没问题,这就是你想要的结果,就无视它好了。
不过既然你的地址是24位的,那至少最好写成{21'h0_0000,addr[3:1]}。
 楼主| 发表于 2013-9-17 21:50:28 | 显示全部楼层
回复 4# orlye
应该不是这个问题吧。5位已经可寻址到31了。也就是说可以到data[31]。而且我用data[{2'b00,3'b001}]的时候没有警告。
后面我换成data[{2'b10,addr[3:1]}]也不会有警告。
如果是data[{2'b01,addr[3:1]}]会有警告。
给我的感觉是quartus将{2'b00,addr[3:1]}高两位的0优化掉了。
我试过data[{21'b0,addr[3:]}],仍然有报警。
发表于 2013-9-18 09:28:08 | 显示全部楼层
为什么不这样写
case (addr[3:1])
    3'h0: rdata[0] <= data[0];
    3'h1: rdata[0] <= data[1];
    …………
    3'h7: rdata[0] <= data[7];
    default: rdata[0] <= data[0];
endcase
发表于 2013-9-18 09:34:01 | 显示全部楼层
查看一下RTL电路就OK了,这种语句生成是译码器。data[{2'b01,addr[3:1]}] ,有效的信号只有低4位,编译器会生成一个4选16译码器,而data[{2'b10,addr[3:1]}],有效的信号有5位,能选择32位。至于data[{21'b0,addr[3:1]}], 这个就更不能用了.  对于初学者,应该了解语句生成什么样的电路。
 楼主| 发表于 2013-9-18 09:44:24 | 显示全部楼层
回复 7# fxl090305002


   有没有什么方法能够避免这个报警?我现在能想到的是定义一个wire型,然后将{2`b00,addr[3:1]}赋给它再寻址。
发表于 2013-9-18 10:59:18 | 显示全部楼层
回复 8# scan


    报警并不是错误,应当弄清楚为什么会报警,关键还是要看你要实现什么功能(当输入一定条件之后能得到固定结果),要知道去掉报警并不是去掉错误。
发表于 2013-9-18 12:22:55 | 显示全部楼层
本帖最后由 my2817 于 2013-9-18 12:25 编辑

回复 1# scan


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-6 21:35 , Processed in 0.027907 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表