3

如何编写一个代码段来评估泛型并相应地创建(或不创建)属性?

例子 :

if G_MY_GENERIC then
    attribute my_attribute_typ : string;
    attribute my_attribute_typ of signal_having_an_attr : signal is "value";
else
    --nothing is created
end if;
4

4 回答 4

5

完全可以编写类似的东西,但该属性仅在生成语句的范围内可见。

g_something: if test_condition generate
   attribute my_attribute_typ : string;
   attribute an_attribute of my_attribute_typ: signal is "value";
begin
    -- attribute is visible in this scope

    p_my_process: process(clk)
    begin
        -- attribute is also visible here
    end process;
end generate;

-- but not here
于 2013-07-05T16:59:04.130 回答
3

相反,您必须使用类似以下的内容来有条件地设置属性(很麻烦,但可以实现结果):

  signal asvRam : svRam_at(0 to gc_nFifoDepth-1) := (others => (others => '0'));

  type svStr_at is array(boolean) of string(0 to 10);
  constant c_svRamStyle : svStr_at := (false => "           ", true => "distributed");
  attribute ram_style : string;
  attribute ram_style of asvRam : signal is c_svRamStyle(gc_bDistributedRam);
于 2019-04-10T14:50:33.217 回答
2

我们在IEEE VHDL 工作组中讨论了更通用的条件编译。辩论很激烈。有些人想要一种编译时方法(类似于“C”),有些人想要一种精化时方法。编译时方法在 C 中运行良好,因为常量也是编译时对象,但是,在 VHDL 中,编译时方法无法理解 VHDL 环境中的内容,因此,使用泛型不是一种选择。OTOH,编译时间选项可能会给你供应商名称、工具类型(模拟器、综合......),......

我已将您的代码作为要求添加到提案页面。它位于:http ://www.eda.org/twiki/bin/view.cgi/P1076/ConditionalCompilation

如果您愿意分享有关您的应用程序的更多见解,我也想将其添加到提案中。

于 2013-07-05T18:02:21.117 回答
-2

基本上:这正是 VHDL 不起作用原因。在 VHDL 中,您声明使用特定硬件位的意图,然后合成器尝试连接这些硬件位。任何像循环一样动态创建硬件的表象for ... generate本质上只是表象:消除痛苦的语法糖。

您可以做的是有条件地分配给信号/变量:

process (sig1, sig2, enable) is
begin
  if enable = '1'
  then
    out <= sig1;
  else
    out <= sig2;
  end if;
end process;
于 2013-07-05T16:27:50.357 回答