VHDL 是在 Generic 中使用字符串的有效语法吗?

标签 vhdl

我使用 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/

相关文章:

vhdl - 通过 VHDL 中不同进程的程序驱动记录元素

vhdl - 将 n 个长位逻辑向量拆分为 n 个单独的二进制值

VHDL:组件端口映射中的索引

vhdl - VHDL 的 IEEE 库中的可合成定点/浮点

vhdl - 是否需要初始化?

keyboard - FF/Latch 和其他警告

VHDL : for loop, 索引算术不起作用

vhdl - 如何获取枚举类型中的元素数量

vhdl - VHDL 中的可选端口?

封装程序需要测试台刺激