我使用 Xilinx 工具已经有一段时间了,它们非常适合使用如下代码:
ENTITY Example IS
GENERIC(
g_Mode : STRING := "Normal"); -- "Normal", "Test"
PORT(
Clk : IN STD_LOGIC;
-- ETC
);
END Example;
ARCHITECTURE rtl OF Example IS
Normal_g : IF g_Mode = "Normal" GENERATE
-- Normal Operation Code Here
END GENERATE Normal_g;
Test_g : IF g_Mode = "Test" GENERATE
-- Test Operation Code Here
END GENERATE Test_g;
但是,我最近切换到使用 Lattice Tools,第二次检查 g_Mode 时出现错误。错误是“不等长数组之间的比较总是返回 FALSE”。所以这两个 generate 语句之一似乎永远不会执行。我的问题是,这是合法的 VHDL 语法,因此是 Lattice 工具的问题吗?或者我的代码样式应该更改为不使用字符串作为泛型?
最佳答案
将字符串用于泛型是合法的。但是看看实际的错误消息:它非常清楚。
一种解决方案是使所有字符串的长度相同。 Test_g : IF g_Mode = "Testxx" GENERATE
应该按预期编译和工作。
一个更好的解决方案——因为字符串比较在这里没有增加真正的值(value)——可能是声明一个枚举类型 type Mode is (Normal, Test, Special);
在一个包中,并使您的泛型类型为 Mode。 (这也避免了例如拼写错误的事故)
或者,如果只有两种模式,则将泛型设为 bool 值 Testing
.那么正常情况变成if not Testing generate...
关于VHDL 是在 Generic 中使用字符串的有效语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28412900/