完善资料让更多小伙伴认识你,还能领取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不建议这样写,太浪费资源,你定义这么长一串数据,如果一定要用,可以定义成二维的,或者建议你用移位的方式来解决这个问题,定义一个临时变量,取好数据之后移位到对应位置给长数据。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
NVMe高速传输之摆脱XDMA设计50:主要功能测试结果与分析2 nvmePCIe高速存储
252 浏览 0 评论
NVMe高速传输之摆脱XDMA设计49:主要功能测试结果与分析1
1501 浏览 0 评论
907 浏览 0 评论
855 浏览 0 评论
658 浏览 0 评论
4427 浏览 63 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 05:24 , Processed in 0.610425 second(s), Total 73, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1331