我有一个具有通用整数参数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
在使用过程中保持不变吗?
答案 0 :(得分:4)
按照建议
在包中创建枚举类型同时创建一个名为calculate_period
的函数,该函数接收clock_rate
和fs
类型并返回相应的整数。
或者,使用该泛型向组件添加一些assert
语句,并验证它是否具有正确的值。使用您的综合工具对此进行测试,看看如果断言触发会发生什么 - 通常,即使您使用severity failure
,它也会发出警告!
答案 1 :(得分:1)
一种可能的解决方案是在包中声明常量F_KHZ
,并在声明cs_period
后计算同一包中的常量F_KHZ
。但是,这不会限制F_KHZ
的值,但您只需在一个位置更改它,从而导致错误的可能性很小。当然,假设您需要F_KHZ
常量在整个体系结构中保持不变。