integer是什么 vivado_VHDL:Vivado 2016.4:通用映射中需要的常量表达式

在Vivado 2016.4中,作者遇到一个关于VHDL数组字符串类型的问题。问题源于数组元素的长度不正确。通过调整字符串长度,从`string(1 to 32)`改为`string(1 to 6)`,并确保字符串具有自然索引范围,解决了问题。在合成过程中,Vivado会尝试串联数组元素,如果总字符数超过单个元素的长度,会导致错误。通过控制数组元素的数量,可以避免这种错误。
摘要由CSDN通过智能技术生成

正如user1155120在评论中指出的那样,问题是由于数组元素类型的长度不正确,并且我实际上是先尝试过模拟,我会受到一些非常有用的错误消息的欢迎:

因此,改变线

type lnx1_rom_names is array (integer range <>) of string(1 to 32);

type lnx1_rom_names is array (integer range <>) of string(1 to 6);

删除所有错误并模拟产生预期结果 .

此外,字符串必须具有自然索引范围,因此 string(0 to n) 无效,应为 string(1 to n) ;以下所有代码均已相应修改 .

由于我投入(或者可能浪费了)这么多时间来处理这个问题,我认为至少记录我关于字符串连接的发现是不浪费的 .

在合成期间,Vivado决定连接尽可能多的顺序数组元素,以便在尝试将数组元素作为参数传递给错误大小的数组元素时,在本例中为 generic map 成员:

...

type lnx1_rom_names is array (integer range <>) of string(1 to 32);

constant rom_path: lnx1_rom_names := (

0 => "r0.hex",

1 => "r1.hex",

2 => "r2.hex",

3 => "r3.hex",

4 => "r4.hex",

5 => "r5.hex",

6 => "r6.hex",

7 => "r7.hex",

8 => "r8.hex",

);

begin

ucgen: for i in rom_path'range generate

rom0: lnx1_romblk

generic map (

file_name => rom_path(i) -- << rom_path(i) evalues to "r0.hexr1.hexr2.hex ... "

) port map (

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值