我已经使用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;
Run Code Online (Sandbox Code Playgroud)
但是我最近切换到使用莱迪思工具,第二次检查g_Mode时出现错误.错误是,"不等长度数组之间的比较总是返回FALSE".所以似乎两个生成语句中的一个永远不会执行.我的问题是,这是合法的VHDL语法,因此莱迪思工具存在问题吗?或者我的代码样式是否应该更改为不使用字符串作为泛型?
使用字符串作为泛型是合法的.但是请查看实际的错误消息:它非常清楚.
一种解决方案是使所有字符串具有相同的长度.Test_g : IF g_Mode = "Testxx" GENERATE应按预期编译和工作.
一个更好的解决方案 - 因为字符串比较在这里没有增加真正的价值 - 可能是type Mode is (Normal, Test, Special);在包中声明一个枚举类型,并使你的通用类型为Mode.(这也避免了例如错误拼写的事故)
或者,如果只有两种模式,则将泛型称为布尔值Testing.那么正常情况就变成了if not Testing generate...
| 归档时间: |
|
| 查看次数: |
4673 次 |
| 最近记录: |