首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译时quartus_map.exe上的Quartus堆栈溢出

编译时quartus_map.exe上的Quartus堆栈溢出
EN

Stack Overflow用户
提问于 2017-11-24 05:36:59
回答 1查看 755关注 0票数 0

在编译我的VHDL VGA-Project时,请给我以下答复:

代码语言:javascript
复制
[Error-Message while compiling PRoject][1]

在报告中,我可以找到以下信息:

问题详细信息错误:

代码语言:javascript
复制
*** 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

从互联网到这个问题的信息是罕见的。

我想的理由是,我打算用FPGA在VGA上绘制文本,用字符形状的信息绘制长数组。每个字符(约100)包含一个带有加法运算符的80x22d数组,例如:

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)....

当我试图在屏幕上显示两行文本(大约80个字符)时,所有内容都可以正常工作,但它也给了我一个警告:

组合逻辑的深度超过6000,这可能导致堆栈溢出.

编译器崩溃超过2行,并给出错误报告.

也许一种解决方案是将位置数组写得更短,但如何编写呢?有人有想法吗?

你好马丁。

EN

回答 1

Stack Overflow用户

发布于 2017-11-26 14:01:32

您只是生成了太多的组合存储。这里有两个问题:

  1. 没有东西是定时的,所以你产生了大量的组合逻辑。您将需要了解同步设计和时钟过程。我不想在这里教这个。
  2. 你要在这里存储每一个动作(位图中的位,顶点图中的顶点),这是非常昂贵的。回到在位图图形以合理的成本变得实用之前的文本处理方式:一个字符生成器。

这里的洞察力(或人为施加的约束)是,您绘制的每一个"A“看起来都是相同的;因此,您可以重用绘制它所需的顶点。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47466953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档