1

我有一个实体,它有一个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排除在使用它的过程之外吗?

4

2 回答 2

4

按照您的建议,在包中创建您的枚举类型

还要创建一个名为的函数,该函数calculate_period接受clock_rate您的fs类型并返回适当的整数。

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

于 2012-06-05T10:24:22.600 回答
1

一种可能的解决方案是F_KHZ在一个中声明常量,并cs_period在声明F_KHZ. 但是,这不会限制 的值F_KHZ,但您只需在一个地方更改它,就不太可能出错。这当然是假设你需要你的F_KHZ常量在整个架构中是相同的。

于 2012-06-05T07:22:48.853 回答