我面臨這個問題,我被要求在VHDL中實現一個函數,它接受一個整數並返回一個bit_vector,假設這個整數由4位表示。VHDL編碼..從整數轉換爲bit_vector
我不想使用已經內置的函數,我必須編寫函數。
我做了一個函數來從bit_vector轉換爲整數,是還挺容易的,但我在這裏堅持:S
任何想法我怎麼能做到這一點?
我面臨這個問題,我被要求在VHDL中實現一個函數,它接受一個整數並返回一個bit_vector,假設這個整數由4位表示。VHDL編碼..從整數轉換爲bit_vector
我不想使用已經內置的函數,我必須編寫函數。
我做了一個函數來從bit_vector轉換爲整數,是還挺容易的,但我在這裏堅持:S
任何想法我怎麼能做到這一點?
的VHDL標準封裝是用於家庭釀造功能很好的啓示,並且numeric_bit
包定義爲natural
類型的轉換to_unsigned
功能unsigned
類型,這是函數VHDL實際上使用用於轉化爲bit_vector
。功能是這樣實現的:
function TO_UNSIGNED (ARG, SIZE: NATURAL) return UNSIGNED is
variable RESULT: UNSIGNED(SIZE-1 downto 0);
variable I_VAL: NATURAL := ARG;
begin
if (SIZE < 1) then return NAU;
end if;
for I in 0 to RESULT'LEFT loop
if (I_VAL mod 2) = 0 then
RESULT(I) := '0';
else
RESULT(I) := '1';
end if;
I_VAL := I_VAL/2;
end loop;
if not(I_VAL =0) then
assert NO_WARNING
report "NUMERIC_BIT.TO_UNSIGNED: vector truncated"
severity WARNING;
end if;
return RESULT;
end TO_UNSIGNED;
初始if (SIZE < 1)
和最終if not(I_VAL =0)
檢查可以被移除,如果已知該函數從未使用與值,使支票相關的。
這留下了for I in 0 to RESULT'LEFT loop
,每次迭代創建一個結果位。
基於Brian的回答,不斷LUT可以使用TO_UNSIGNED
功能,避免了手寫文字進行初始化:
function to_bv(n, size : natural) return bit_vector is
type bv_arr_t is array (0 to 2 ** size - 1) of bit_vector(size - 1 downto 0);
function bv_arr_init(size : natural) return bv_arr_t is
variable res_v : bv_arr_t;
begin
for i in 0 to 2 ** size - 1 loop
res_v(i) := bit_vector(TO_UNSIGNED(i, size));
end loop;
return res_v;
end function;
constant LUT : bv_arr_t := bv_arr_init(size);
begin
return LUT(n);
end to_bv;
莫滕的是正確的答案,但它有時是值得的開放替代方法..
由於問題涉及一個小的(4位)範圍,所以查找表變得很有吸引力:我假設了無符號整數,但它很容易適應。
subtype bv4 is bit_vector(3 downto 0);
constant LUT : array(0 to 15) of bv4 := (
"0000", "0001", "0010", "0011", "0100, "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100, "1101", "1110", "1111");
function to_bv(n : natural) return bit_vector is
begin
return LUT(n);
end to_bv;
這將正常合成,因爲你會希望,而不是實際上創建一個ROM!
是的,這一個是正確的,我試過了,但它當它超過4位時不是很有用,但是感謝配合:) – 2014-10-27 21:25:27
你的回答確實幫了我很多,非常感謝你的朋友,但你能告訴我你是如何從ise庫中得到這段代碼嗎? – 2014-10-27 21:27:20
從函數初始化LUT也是非常有用的技巧。我的觀點是,在這種情況下,顯式文字可能更簡單,工作也更少! – 2014-10-27 21:34:34
@MSherin:包的源文件可以在[VHDL補充材料](http://standards.ieee.org/downloads/1076/1076.2-1996/)中找到 – 2014-10-28 19:18:16