📄 headers_beh.vhd
字号:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity headers_beh is
Port (
clk : in std_logic;
rstL : in std_logic;
start : in std_logic;
paletteProgDone : in std_logic;
readData : in std_logic_vector(15 downto 0);
addr : out std_logic_vector(19 downto 0);
writeData : out std_logic_vector(15 downto 0);
oen : out std_logic;
wen : out std_logic;
height : out std_logic_vector(9 downto 0);
width : out std_logic_vector(9 downto 0);
codesize : out std_logic_vector(3 downto 0);
coltablecode : out std_logic_vector(2 downto 0);
startPaletteProg : out std_logic;
done : out std_logic
);
end headers_beh;
architecture Behavioral of headers_beh is
begin
process
variable inaddr, outaddr : std_logic_vector(19 downto 0);
variable data, blksize : std_logic_vector(7 downto 0);
begin
oen <= '0';
wen <= '1';
startPaletteProg <= '0';
done <= '0';
writeData <= x"0000";
wait until start = '1';
inaddr := x"8000a";
outaddr := x"00000";
addr <= inaddr;
wait for 20 ns;
data := readData(7 downto 0);
inaddr := inaddr + 3;
if data(7) = '1' then
coltablecode <= data(2 downto 0);
startPaletteProg <= '1';
wait for 20 ns;
startPaletteProg <= '0';
wait until paletteProgDone = '1';
inaddr := inaddr + SHL("0000000001", data(2 downto 0) + 1);
inaddr := inaddr + SHL("0000000001", data(2 downto 0) + 1);
inaddr := inaddr + SHL("0000000001", data(2 downto 0) + 1);
end if;
outer : loop
addr <= inaddr;
wait for 20 ns;
data := readData(7 downto 0);
if data = x"21" then
inaddr := inaddr + 2;
inner : loop
addr <= inaddr;
wait for 20 ns;
data := readData(7 downto 0);
if data = x"00" then
exit inner;
end if;
inaddr := inaddr + data + 1;
end loop;
inaddr := inaddr + 1;
else
exit outer;
end if;
end loop;
inaddr := inaddr + 5;
addr <= inaddr;
wait for 20 ns;
width(7 downto 0) <= readData(7 downto 0);
inaddr := inaddr + 1;
addr <= inaddr;
wait for 20 ns;
width(9 downto 8) <= readData(1 downto 0);
inaddr := inaddr + 1;
addr <= inaddr;
wait for 20 ns;
height(7 downto 0) <= readData(7 downto 0);
inaddr := inaddr + 1;
addr <= inaddr;
wait for 20 ns;
height(9 downto 8) <= readData(1 downto 0);
inaddr := inaddr + 1;
addr <= inaddr;
wait for 20 ns;
data := readData(7 downto 0);
inaddr := inaddr + 1;
if data(7) = '1' then
coltablecode <= data(2 downto 0);
startPaletteProg <= '1';
wait for 20 ns;
startPaletteProg <= '0';
wait until paletteProgDone = '1';
inaddr := inaddr + SHL("0000000001", data(2 downto 0) + 1);
inaddr := inaddr + SHL("0000000001", data(2 downto 0) + 1);
inaddr := inaddr + SHL("0000000001", data(2 downto 0) + 1);
end if;
addr <= inaddr;
wait for 20 ns;
codesize <= readData(3 downto 0);
inaddr := inaddr + 1;
image : loop
addr <= inaddr;
wait for 20 ns;
blksize := readData(7 downto 0);
inaddr := inaddr + 1;
if blksize = x"00" then
exit image;
end if;
subblock : loop
addr <= inaddr;
wait for 20 ns;
data := readData(7 downto 0);
inaddr := inaddr + 1;
writeData <= x"00" & data;
addr <= outaddr;
wen <= '0';
wait for 20 ns;
wen <= '1';
wait for 20 ns;
outaddr := outaddr + 1;
blksize := blksize - 1;
if blksize = x"00" then
exit subblock;
end if;
end loop;
inaddr := inaddr + 1;
end loop;
done <= '1';
wait for 20 ns;
done <= '0';
end process;
end Behavioral;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -