2013-05-07 152 views
4

我有一個設計是我正在寫入/讀取/從RAM中讀取值並對其執行一些計算。在某些情況下,我從RAM位置讀取了我尚未寫入任何內容的值。這是故意的,因爲在這種情況發生的情況下,未初始化的值不會影響計算:在這些情況下,未初始化值乘以0在VHDL函數中生成隨機值

然而,乘以它包含'U'位結果的unsigned/signed類型在一個「不關心」輸出中(即乘法輸出的所有位是'X'),即使另一個操作數是0.因此,我無法檢查我的測試平臺中的最終計算輸出,因爲它變得「不在乎「(看起來」不關心「輸出被解釋爲0)。

爲了避免這個問題,我寫的是解決了一個std_logic_vector'0'任何'U''X'位的功能。功能如下所示

function f(x : std_logic_vector) return std_logic_vector is 
    variable y : std_logic_vector (x'range); 
begin 
    y := x; 
    -- pragma synthesis off 
    for i in 0 to x'length-1 loop 
    case x(i) is 
     when 'U' | 'X' => y(i) := '0'; 
     when others => y(i) := x(i); 
    end case; 
    end loop; -- i 
    -- pragma synthesis on 
    return y; 
end; 

現在,我想,不僅設置'X''U''0'擴展功能,但隨機設置他們要麼'0''1'。我試過在f內使用uniform函數。問題在於,當我在函數中定義兩個種子時,每次調用函數f時,都會返回相同的std_logic_vector(當它被賦予相同的std_logic_vector時)。當我從uniform函數描述中獲取它時,我應該從函數f之外傳遞兩個種子,因爲它們被uniform函數修改,用於下一次調用uniform

有沒有可能使用函數來實現這個功能?

回答

6

這裏有一個很好的隨機庫作爲開源VHDL驗證方法的一部分。這裏有一個描述和下載鏈接。

http://www.synthworks.com/blog/osvvm/

它可以讓你比隨機化浮點數的只是一個簡單的均勻分佈等等。以及將您從注意到的狀態存儲問題中隔離出來。

關於你提到的具體情況:

當我把它從統一的功能描述,我應該從函數f外界傳遞兩號種子,因爲它們被均勻功能統一下一次調用修改。

是的,你應該。就像這樣:

PROCESS 
    VARIABLE seed1, seed2: positive; -- Seed and state values for random generator 
    VARIABLE rand: real;    -- Random real-number value in range 0 to 1.0 
BEGIN 
    UNIFORM(seed1, seed2, rand);  

所以你的情況,你必須通過這些「狀態」變量分爲(進出)的功能太 - 這在實踐中意味着它必須是一個過程。

或者使用上面鏈接的OSVVM庫,它允許您有一個受保護類型的共享變量,您可以從各種地方使用它。這使它自己的狀態保持在受保護類型的「內部」。

+0

感謝您的提示。目前,簡單的均勻分佈足以滿足我的需求。如果我將種子傳遞給函數,我將不得不再次返回它們,以在下一次調用函數時將修改後的種子傳遞給函數。我可以使用函數來實現這個功能還是必須使用一個程序? – simon 2013-05-07 14:42:24

+1

儘管你對Uniform感到滿意,但我仍然認爲使用OSVVM軟件包是值得的。否則,你最終會在這個地方傳播大量的種子,並且它會變得不愉快(最終)讓你想做它:)回答提到,爲了製作種子inouts,你需要一個程序。 – 2013-05-08 08:57:07

1

我可以使用函數來實現這個功能還是必須使用一個程序?

函數不允許參數爲inout,指針或受保護的類型。 這限制了你的選擇。 OSVVM的randompkg使用受保護的類型來隱藏種子並使用不純的函數來訪問它。使用 很容易。只需從http://www.synthworks.com/downloads 下載軟件包,然後查看RandomPkg_user_guide.pdf。

你可能會得到你想要做的工作,但是,它將會是一個挑戰。您可以在封裝中定義一個信號或一對信號 ,並使用不純功能(YMMV,我只在受保護類型中使用不純功能 )。你可以在 的信號聲明中初始化種子。

即使使用OSVVM,您也需要使用不純的函數,並將 隨機化對象聲明爲共享變量。

吉姆