2012-06-05 110 views
1

我有了一個通用的整型參數fs_in_khz,可以是一個實體5,10或2:VHDL中可以有條件常量嗎?

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

在一個包中創建您的枚舉類型,你建議

另外創建一個名爲calculate_period功能,這需要在clock_rate和你fs類型,並返回相應的整數。

或者,使用該泛型向組件添加一些assert語句,並驗證它是否具有正確的值。用你的綜合工具測試一下,看看會發生什麼事情,如果斷言觸發雖然 - 即使你使用severity failure它只會給出警告!

+0

創建一個帶有'enum'和函數的小包,完美工作,併爲分解其他硬件設置進行測試打下基礎。 – detly

1

一種可能的解決辦法是聲明恆定F_KHZF_KHZ聲明之後計算在同一個包的恆定cs_period。但是,這並不會限制F_KHZ的值,但是您只需要在一個地方更改它,這樣就不太可能發生錯誤。這當然假定你需要你的F_KHZ常量在整個架構中是相同的。

相關問題