[英]VHDL / How to initialize my signal?
我是VHDL的初學者,我有一個基本的問題。
讓我們考慮以下輸入:
A : in std_logic_vector(22 downto 0);
這個信號:
signal dummyA : std_logic_vector(47 downto 0);
我想用A初始化dummyA所以我做的是:
dummyA <= A;
它是否正確 ? 我的意思是它相當於:
dummyA <= "0000000000000000000000000" & A;
? 或者我應該像這樣明確地添加0。
你不能使用dummyA <= A;
因為存在類型不匹配,任何好的VHDL編譯器都會拒絕它。
你可以使用類似的東西
dummyA <= (A'RANGE => A, OTHERS => '0');
或(僅在順序上下文中)
dummyA <= (OTHERS => '0');
dummyA(A'RANGE) <= A;
要么
FOR i IN dummyA'RANGE LOOP
IF i >= A'LOW AND i <= A'HIGH THEN
dummyA(i) <= A(i);
ELSE
dummyA(i) <= '0';
END IF;
END LOOP;
在並發上下文中,您可以使用
FOR i IN dummyA'RANGE GENERATE
IF i >= A'LOW AND i <= A'HIGH GENERATE
dummyA(i) <= A(i);
END GENERATE;
-- ELSE
IF i < A'LOW OR i > A'HIGH GENERATE
dummyA(i) <= '0';
END GENERATE;
END GENERATE;
所有上述保證dummyA(i)
加載A(i)
。 但是"00000" & A
可能導致錯配,如果他們的范圍不同意低端。
使用ieee.numeric_std
的標准函數,您可以執行以下操作來填充MSB:
dummyA <= std_logic_vector(resize(unsigned(A), dummyA'length));
雖然你沒有要求這個,但也可以像這樣簽名擴展:
dummyA <= std_logic_vector(resize(signed(A), dummyA'length));
雖然我認為在這種情況下用戶應該為A和dummyA使用簽名數據類型,如果他們給出算術解釋
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.