我在它的方面描述圖像的文本文件的RGB分量我要加載的FPGA該文件產生RGB信號,因此,如果您能好心開導我,我將感謝如何在VHDL中的RAM上加載文本文件?
歐凱所以這是我想出來的,但是這個綜合需要永久完成,所以你認爲這裏的問題是什麼?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use STD.TEXTIO.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity RGB_Gen is
port(CLK : in STD_LOGIC;
EN : in STD_LOGIC;
R,G,B : out STD_LOGIC);
end RGB_Gen;
architecture Behavioral of RGB_Gen is
Type ram is array (0 to 611) of BIT_VECTOR(203 downto 0);
impure function InitRamFromFile(Filename : in string) return ram is
File readFile : text is in Filename;
Variable lineRead : Line;
Variable my_ram : ram;
begin
for i in ram'range loop
readline(readFile, lineRead);
read(lineRead, my_ram(i));
end loop;
return my_ram;
end function;
function toSTD(B : in Bit) return STD_LOGIC is
begin
if B = '1' then
return '1';
else
return '0';
end if;
end function;
Signal my_ram : ram := InitRamFromFile("C:\Users\Mos_X\Desktop\output.txt");
begin
process(CLK)
Variable X : Integer := 0;
Variable Y : Integer := 0;
begin
if rising_edge(CLK) then
if EN = '0' then
R <= '0';
G <= '0';
B <= '0';
else
R <= toSTD((my_ram(Y)(X)));
G <= toSTD((my_ram(Y + 204)(X)));
G <= toSTD((my_ram(Y + 408)(X)));
end if;
if X = 203 then
X := 0;
if Y = 203 then
Y := 0;
else
Y := Y + 1;
end if;
else
X := X + 1;
end if;
end if;
end process;
end Behavioral;
如果綜合速度很慢,你會問它做了一些艱難的事情,一個三端口RAM(ROM)機智h 204位寬端口。您有一個包含三個204位到1位多路複用器的進程。考慮三個RAM(ROM)1位寬或浪費一點內存並使用4位寬的東西。 – user1155120
是否有將線讀取轉換爲STD_LOGIC_VECTOR的方法?我想我在那裏使用read(lineRead,my_ram(i))是不正確的。綜合性問題現在對我來說不是什麼大問題,我的首要任務就是讓它工作。 – Mostafa
從RAM中讀取時,您正在分配'G'兩次。這是打算?你正在使用哪個綜合工具? –