簡體   English   中英

如何使用Verilog將RGB圖片最有效地導入FPGA

[英]How to get a rgb picture into FPGA most efficiently, using verilog

我正在嘗試編寫用於FPGA編程的Verilog代碼,我將在其中實現VGA應用程序。 我使用Quartus II和Altera DE2。

目前,我的目標是在編譯過程中獲得640x480 rgb圖像(方法無關緊要,只要它有效且有效即可)。 我想出的最好的解決方案是使用matlab將圖片轉換為rgb十六進制文件,並使用$ readmemh將其保存到寄存器中。

但正如這里討論的那樣: 對於50x50像素的rgb圖像,verilog $ readmemh花費了太多時間

它花費了太多時間,顯然使用這種方法無法解決。 如果只是時間,但是也存在尺寸問題,那將是很好的,640x480幾乎會花費大部分可用空間。

我希望的是一些系統功能或可變類型的Verilog,它將以不同的方式拍攝和存儲圖片,因此尺寸不再是問題。 我已經檢查了verilog和quartus網頁的解決方案,但我相信應該有一種更快的方法來執行此常規任務,而不是從頭開始編寫東西。

200x200 readmemh嘗試的編譯報告: 200x200編譯報告

根據您的編譯報告,建議您使用塊ROM(或RAM)存儲器,而不是使用寄存器來存儲映像。

現在,您正在使用分布式RAM,即FPGA的每個小邏輯塊內部可用的存儲器。 這使得分布式RAM非常適合小型內存。 但是,對於大容量存儲器,這可能會導致額外的布線延遲並增加合成時間(合成器需要對所有這些模塊進行布線)。

另一方面,Block RAM是專用的兩端口內存,其中包含幾千位的RAM(取決於您的設備和制造商)。 這就是為什么您應該將Block RAM用於大型存儲器,而將分布式RAM用於FIFO或小型存儲器。 Cyclone IV EP4CE115F29(在DE2-115中可用)具有432個M9K存儲塊(3981312個存儲位)。

一件重要的事情,對於分布式RAM來說READ操作是異步的(一旦給定地址,就會從內存中讀取數據,而不必等待時鍾沿),而對於Block RAM則是同步的。

單端口ROM存儲器示例(Quartus II Verilog模板):

module single_port_rom
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=8)
(
    input [(ADDR_WIDTH-1):0] addr,
    input clk, 
    output reg [(DATA_WIDTH-1):0] q
);

    // Declare the ROM variable
    reg [DATA_WIDTH-1:0] rom[2**ADDR_WIDTH-1:0];

    initial
    begin
        $readmemh("single_port_rom_init.txt", rom);
    end

    always @ (posedge clk)
    begin
        q <= rom[addr];
    end

endmodule

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM