在其他通用参数中使用VHDL通用值

4
我希望能够以一种通用的方式指定一定数量的通道,并使用这个来指定包含进一步参数的数组的范围。在编译时,我的Aldec编译器告诉我“num_chan”无法被引用,直到接口列表完成为止。
有人知道实现这个目标的方法吗?
ENTITY deframer IS
    generic (
      num_chan : integer                      := 2;            
      ch_low   : int_arr(num_chan-1 downto 0) := (  1, 189);   
      ch_hi    : int_arr(num_chan-1 downto 0) := (127, 189));

2
请注意,该语言允许您在此处使用无限制的数组。如果您正在进行综合,则您的综合工具可能无法支持 - 您需要尝试一下。 - Jim Lewis
1个回答

5
在VHDL-2002(以及更早版本)中,给定通用列表中声明的正式通用无法用于声明该列表中的其他通用,这就是您看到错误的原因。
在VHDL-2008中,这是可能的,因此如果所需工具支持VHDL-2008和该功能(“在通用列表中引用通用”),则可以指示工具使用VHDL-2008。
针对VHDL-2002的解决方案是使ch_low和ch_hi数组足够大,以适应任何num_chan值,并使用虚拟值填充未使用的部分(假设num_chan最多为10,使用-1作为虚拟值)。
generic(
  num_chan : integer            := 2;
  ch_low   : int_arr_t(1 to 10) := (  1, 189, others => -1);
  ch_hi    : int_arr_t(1 to 10) := (127, 189, others => -1));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接