我正在尝试编译用于 FPGA 编程的 verilog 代码,我将在其中实现 VGA 应用程序。我使用 QuartusII 和 Altera。我正在尝试正确使用 readmemh 来逐像素获取图片。
现在,我已经使用 matlab 将图片转换为 RGB 文本。每个都具有以下格式,没有其他内容(示例):
03 A0 15 B7 ...
目前我没有收到任何语法错误,但是我必须定义三个寄存器,每个寄存器都有 50x50 = 2500 位,并且编译速度相当慢,并且我收到“未满足时序要求”警告。
当我想使用具有更好分辨率的文件时(640x480 很好,但似乎是不受限制的),情况要糟糕得多。获取 200x200 像素图像需要 15 分钟,.sof 文件约为 6MB。
没有办法对大输入使用 readmemh 吗?
这就是我所做的阅读
...
reg [7:0] mem_R[0:2499];
reg [7:0] mem_G[0:2499];
reg [7:0] mem_B[0:2499];
initial begin
...
$readmemh("menuR.txt", mem_R);
$readmemh("menuG.txt", mem_G);
$readmemh("menuB.txt", mem_B);
end
我按如下方式访问它
if( mem_R[total_current-127510] > 0)
begin
menu_red = 1;
end
首先,一些背景:
由于图像的大小,您可能会收到“未满足时序要求”的信息 - 50x50x8x3 是相当数量的存储位,如果它试图将它们存储到逻辑而不是片上 RAM 中,更是如此。
640x480 图像为 900 kB,因此只有最大的 FPGA 才能存储它们,即使在片上 RAM 中也是如此 - 例如,最大的 Cyclone IV 只有 810 kB 的嵌入式内存。如果您打算使用这种大小的图像,请考虑连接片外 RAM。
您在启动时看到的映像可能是存储在 EPCS 中的映像 - EPCS 是一种 2MB 到 16MB 闪存,用于在启动时加载默认配置。它加载配置(就像通过 USB 编程一样)和任何片上存储器。如果您使用的是 Altera DE 系列板之一,则启动图像不会存储为 640x480 - 它会由硬件放大到该分辨率。
另外,你提到的15分钟是指编译时间还是将.sof加载到芯片所需的时间?请注意,如果您指的是 HDL 编译,那么 HDL 编译并非不合理。 Quartus 不仅需要编译 HDL,还需要确定它需要哪些逻辑元件、将它们放置在芯片上的位置以及如何连接它们。大型设计可能需要数小时或更长时间才能完成。
最后,对于您的问题,您可能还需要研究 .mif(内存初始化文件)和/或 .hex 文件与片内/片外 RAM IP 核的结合,因为它们可能更适合您的需求。看:http://quartushelp.altera.com/14.1/master.htm#mergedProjects/reference/glossary/def_mif.htm http://quartushelp.altera.com/14.1/master.htm#mergedProjects/reference/glossary/def_mif.htm
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)