如何编写一个代码段来评估泛型并相应地创建(或不创建)属性?
例子 :
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;
如何编写一个代码段来评估泛型并相应地创建(或不创建)属性?
例子 :
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;
完全可以编写类似的东西,但该属性仅在生成语句的范围内可见。
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
相反,您必须使用类似以下的内容来有条件地设置属性(很麻烦,但可以实现结果):
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);
我们在IEEE VHDL 工作组中讨论了更通用的条件编译。辩论很激烈。有些人想要一种编译时方法(类似于“C”),有些人想要一种精化时方法。编译时方法在 C 中运行良好,因为常量也是编译时对象,但是,在 VHDL 中,编译时方法无法理解 VHDL 环境中的内容,因此,使用泛型不是一种选择。OTOH,编译时间选项可能会给你供应商名称、工具类型(模拟器、综合......),......
我已将您的代码作为要求添加到提案页面。它位于:http ://www.eda.org/twiki/bin/view.cgi/P1076/ConditionalCompilation
如果您愿意分享有关您的应用程序的更多见解,我也想将其添加到提案中。
基本上:这正是 VHDL 不起作用的原因。在 VHDL 中,您声明使用特定硬件位的意图,然后合成器尝试连接这些硬件位。任何像循环一样动态创建硬件的表象for ... generate
本质上只是表象:消除痛苦的语法糖。
您可以做的是有条件地分配给信号/变量:
process (sig1, sig2, enable) is
begin
if enable = '1'
then
out <= sig1;
else
out <= sig2;
end if;
end process;