我可以在VHDL中使用条件常量吗?

时间:2012-06-05 04:17:41

标签: vhdl

我有一个具有通用整数参数fs_in_khz的实体,可以是5,10或2:

entity test_control_source is
    generic(
        -- This should only be 5, 10 or 20
        fs_in_khz : integer := 20
    );

如果我可以利用VHDL的功能并简单地将类型限制为这些值,那将是很好的,可能使用类似的东西:

type control_source_freq is (F5_KHZ, F10_KHZ, F20_KHZ);
...
entity test_control_source is
generic(
    -- This should only be 5, 10 or 20
    fs_in_khz : control_source_freq := F20_KHZ
);

然而,稍后在这个实体的架构中,我有

architecture source_behaviour of test_control_source is
    constant cs_period : integer := 5000 * clock_rate / fs_in_khz;
begin
    ...

我更喜欢在使用它的进程之外计算此参数,而是在需要的任何地方重复计算。我可以限制fs_in_khz通用参数的允许值,使我的常量cs_period在使用过程中保持不变吗?

2 个答案:

答案 0 :(得分:4)

按照建议

在包中创建枚举类型

同时创建一个名为calculate_period的函数,该函数接收clock_ratefs类型并返回相应的整数。

或者,使用该泛型向组件添加一些assert语句,并验证它是否具有正确的值。使用您的综合工具对此进行测试,看看如果断言触发会发生什么 - 通常,即使您使用severity failure,它也会发出警告!

答案 1 :(得分:1)

一种可能的解决方案是在中声明常量F_KHZ,并在声明cs_period后计算同一包中的常量F_KHZ。但是,这不会限制F_KHZ的值,但您只需在一个位置更改它,从而导致错误的可能性很小。当然,假设您需要F_KHZ常量在整个体系结构中保持不变。