完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
module id( ...... ); reg[`InstWidth] cur_inst; //48字节的指令存放空间,后面的分析根据 reg[`InstBus] cur_pos; //cur_inst[cur_pos: 0] ........ always @ (*) begin //---------------------------------------------------- 区域1: //将本次获得的指令赋给 cur_inst cur_inst[cur_pos : ((cur_pos + 1) - `Num32)] = inst_i[`InstBus]; ** Error: C:/id.v(89): Range must be bounded by constant expressions. 注: `define InstWidth 383:0 `define Num32 32 `define InstBus 31:0 问题1: 按照错误提示,应该是 cur_inst[a:b]内的表达式 a、b 都应该为常量表达式,是这样吗? 如果是的话,那假设我需要使用变量,该如何修改? 详细一点的说,我的意图是,cur_inst[]是48字节大小的,每次对它增加的内容是不定长的, 因此每次的起始位置也是不定的,例如: 1)第一次, cur_pos: 383,即cur_inst[]的最高位。如果这次需要填充的内容为4字节, 即inst_i[31:0],则 cur_pos 会变更为 383 + 1 -32 = 352 2)第二次, cur_pos: 352, 如果这次需要填充的内容为2字节,即inst_i[15:0], 则 cur_pos 会变更为 352 + 1 -16 = 336 ...... 可见,cur_inst[]所填充内容的位置由 cur_pos 决定。这是动态的,不可能是常量表达式。 那如何解决? 注: 本例中的inst_i[`InstBus]虽然是固定4字节的填充内容,但实际在程序中还是有2字节 的填充,且编译时也已报错(错误提示的内容跟这里的一样),只是篇幅所限没有列出 //---------------------------------------------------- end ...... endmodule |
|
相关推荐
1个回答
|
|
一般FPGA不建议这样写,太浪费资源,你定义这么长一串数据,如果一定要用,可以定义成二维的,或者建议你用移位的方式来解决这个问题,定义一个临时变量,取好数据之后移位到对应位置给长数据。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求FPGA 驱动控制ltc2271 或者 ltc2180 或者 ltc2190或者 ltc2202 的代码
1241 浏览 0 评论
399 浏览 0 评论
求助:遇见诡异问题,FPGA模块A输出端口连接模块B输入后,模块A不能正常工作的
1395 浏览 1 评论
456 浏览 0 评论
1345 浏览 1 评论
4244 浏览 94 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-14 21:22 , Processed in 0.445239 second(s), Total 73, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号