想象一下,你想整數轉換爲字符串在VHDL顯示VGA顯示器上。您不能使用ieee 2008標準,因爲您必須使用xilinx ISE 14.7。我有以下代碼整數類型轉換爲字符串類型,但我得到「非靜態環超限」錯誤while循環和for循環:VHDL整數字符串
-- convert integer to string using specified base
-- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
function str(int: integer; base: integer) return string is
variable temp: string(1 to 10);
variable num: integer;
variable abs_int: integer;
variable len: integer := 1;
variable power: integer := 1;
begin
-- bug fix for negative numbers
abs_int := abs(int);
num := abs_int;
while num >= base loop -- Determine how many
len := len + 1; -- characters required
num := num/base; -- to represent the
end loop ; -- number.
for i in len downto 1 loop -- Convert the number to
temp(i) := chr(abs_int/power mod base); -- a string starting
power := power * base; -- with the right hand
end loop ; -- side.
-- return result and add sign if required
if int < 0 then
return '-'& temp(1 to len);
else
return temp(1 to len);
end if;
end str;
我「解決」的錯誤的變形它是這個怪物:
-- convert integer to string using specified base
-- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
function str(int: integer; base: integer) return string is
variable temp: string(1 to 9);
variable num: integer;
variable abs_int: integer;
variable len: integer := 1;
variable power: integer := 1;
begin
-- bug fix for negative numbers
abs_int := abs(int);
num := abs_int;
for i in 0 to 100 loop
if (num >= base) then -- Determine how many
len := len + 1; -- characters required
num := num/base; -- to represent the
else -- number.
exit;
end if;
end loop ;
for i in 9 downto 1 loop -- Convert the number to
if (i <= len) then
temp(i) := chr(abs_int/power mod base); -- a string starting
power := power * base; -- with the right hand
else
exit;
end if;
end loop ; -- side.
-- return result and add sign if required
if int < 0 then
return '-'& temp(1 to len);
else
return temp(1 to len);
end if;
end str;
是否有一個非延遲的方式來將整數轉換爲字符串?
聽起來好像你正在嘗試使用用於合成的''image()'函數和'string'類型(以其無限制形式)。這不起作用。一個小小的軟處理器似乎最適合這樣的任務(例如xilinx picoblaze)。它也可以在FPGA邏輯中完成,但它不會是有史以來最好的資源利用方式。 – damage
我認爲你需要一個查找表。但爲什麼你需要一個VGA字符串?監視器僅顯示像素。字符很可能通過圖形緩衝區操作顯示。 – Paebbels
我可以很容易地在屏幕上顯示的字符串,所以我去了整數轉換爲字符串,這樣我也能顯示他們的下一個合乎邏輯的步驟。上述函數和integer'image()都不適用於可變整數。將變量ints轉換爲字符串的常見簡單方法是什麼? – John