提问人:Sre M 提问时间:9/24/2021 最后编辑:Renaud PacaletSre M 更新时间:9/24/2021 访问量:290
具有不同大小的 2D 阵列分配问题 VHDL
2D Array assign problem VHDL having different size
问:
我有两个 2D 数组,定义如下
type ram_1300_block is array (1300 downto 0) of std_logic_vector(7 downto 0);
type ram_2700_block is array (2700 downto 0) of std_logic_vector(7 downto 0);
rx_ram : ram_1300_block;
Q1_ram : ram_2700_block;
然后,我在代码中使用了以下赋值语句:
Q1_ram(1300 downto 1) <= rx_ram(1341 downto 42);
在合成时,我在 vivado 2015.3 中出现以下错误
Synth 8-2234 indexed name is not a ram_3700 block?
有什么解决方法吗?
由于资源限制,我不想增加小数组大小。
答:
1赞
Tricky
9/24/2021
#1
这是因为 VHDL 是一种 stronly 类型语言。这里和是不同的类型,因此不能直接分配给彼此。更困难的是,由于您已为类型指定了大小,因此无法进行类型转换,因为切片没有可命名用于密切相关类型转换的不同类型。rx_ram
Q1_ram
我建议您创建一个不受约束的类型,该类型在创建信号时受到约束,因此可以相互分配。如果您愿意,您甚至可以创建命名子类型:
type ram_block_t is array(natural range <>) of std_logic_vector(7 downto 0);
subtype ram_1300_block is ram_block_t(1300 downto 0);
subtype ram_2700_block is ram_block_t(2700 downto 0);
signal rx_ram : ram_2700_block ;
signal Q1_ram : ram_1300_block;
Q1_ram(1300 downto 1) <= rx_ram(1341 downto 42);
注意1:我假设您在原始帖子中的类型有误,因为使用的索引超出了该类型的范围。rx_ram(1341 downto 42)
注意2:信号和类型的名称可能很糟糕,因为我不知道有任何工具可以推断出具有如此大分配的RAM。
评论
0赞
Sre M
9/29/2021
使用自然工作。多谢。
评论