编译我的VHDL VGA-Project Quartus时给出了以下响应:
[Error-Message while compiling PRoject][1]
在报告中,我可以找到以下信息:
问题详情 错误:
*** Fatal Error: Stack Overflow
Module: quartus_map.exe
Stack Trace:
0xc9dbb: vrfx_add_to_extractor_migration_report + 0x1e00b (synth_vrfx)
0xca52a: vrfx_add_to_extractor_migration_report + 0x1e77a (synth_vrfx)
0xca52a: vrfx_add_to_extractor_migration_report + 0x1e77a (synth_vrfx)
....100 times the same
End-trace
Executable: quartus_map
Comment:
None
System Information
Platform: windows64
OS name: Windows 7
OS version: 6.2
Quartus II Information
Address bits: 64
Version: 14.1.0
Build: 186
Edition: Web Edition
互联网对此问题的信息很少见。
我正在考虑的是我打算用VGA和带有char形状信息的长数组在VGA上绘制文本。 每个char(大约100个)包含一个带有加法运算符的80x2 2d数组,例如:
when '0' => temp := ((4 + X, 4 + Y), (4 + X, 5 + Y), (4 + X, 6 + Y), (4 + X, 7 + Y), (4 + X, 8 + Y), (5 + X, 3 + Y)....
当我尝试在屏幕上显示2行文字(大约80个字符)时,工作正常,但它也给了我一个警告:
组合逻辑的深度超过6000,这可能导致堆栈溢出。
编译器崩溃超过2行,并提供错误报告。
也许一种解决方案是将位置数组写得更短,但是如何?任何人都有理想吗?
问候马丁。
答案 0 :(得分:0)
您只是产生了太多的组合存储空间。这里有两个问题:
这里的洞察力(或人为强加的约束)是每个" A"你画的看起来一样;因此,您可以重复使用绘制它所需的顶点。
type CHAR_SET is ('A','B','C','1','2','3');
-- you may find a suitable character set like ASCII or LATIN-1 already declared in library STANDARD
type ARRAY_CHAR is array (67 downto 0, 1 downto 0) of integer;
--defines how to draw a single character, relative to its own origin
type ARRAY_CHAR_SET is array (CHAR_SET) of ARRAY_CHAR;
--Character Generator, defines how to draw every character
constant CHARACTER_SET : ARRAY_CHAR_SET := ( ...);
-- or signal ... more than one CHARACTER_SET would allow more fonts
type ARRAY_TEXT is array (natural range <>) of CHAR_SET;
-- for each position on screen, defines which character to draw. For a character set with less than 256 chars, this needs only one byte per character.
function DRAW_CHAR (location) return ARRAY_CHAR is
variable Char : CHAR_SET;
begin
-- lookup which char to draw
Char := ARRAY_TEXT(location);
-- offset its origin to the on-screen location
return OFFSET_ORIGIN(location, CHARACTER_SET(Char));
end DRAW;