我有一個設計是我正在寫入/讀取/從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
。
有沒有可能使用函數來實現這個功能?
感謝您的提示。目前,簡單的均勻分佈足以滿足我的需求。如果我將種子傳遞給函數,我將不得不再次返回它們,以在下一次調用函數時將修改後的種子傳遞給函數。我可以使用函數來實現這個功能還是必須使用一個程序? – simon 2013-05-07 14:42:24
儘管你對Uniform感到滿意,但我仍然認爲使用OSVVM軟件包是值得的。否則,你最終會在這個地方傳播大量的種子,並且它會變得不愉快(最終)讓你想做它:)回答提到,爲了製作種子inouts,你需要一個程序。 – 2013-05-08 08:57:07