📄 ledarray_disp.vhd
字号:
--design to generate addressout signals,including beginning address and offset
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity ledarray_disp is
port(
char_in: in std_logic_vector(3 downto 0);
colsel_in: in std_logic_vector(3 downto 0);
addr_out: out std_logic_vector(7 downto 0)
);
end ledarray_disp;
architecture a of ledarray_disp is
signal char: std_logic_vector(3 downto 0);
signal colsel: std_logic_vector(3 downto 0);
begin
char<=char_in;
colsel<=colsel_in;
process(char,colsel)
variable addr,addr_start: std_logic_vector(7 downto 0);
begin
case char is
when "0000" =>
addr_start:="00000000"; --certify the starting address
case colsel is
when "0000" => addr:=addr_start; --according to colsel,certify the offset address
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "0001" =>
addr_start:="00010000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "0010" =>
addr_start:="00100000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "0011" =>
addr_start:="00110000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "0100" =>
addr_start:="01000000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "0101" =>
addr_start:="01010000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "0110" =>
addr_start:="01100000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "0111" =>
addr_start:="01110000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "1000" =>
addr_start:="10000000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "1001" =>
addr_start:="10010000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "1010" =>
addr_start:="10100000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "1011" =>
addr_start:="10110000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "1100" =>
addr_start:="11000000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "1101" =>
addr_start:="11010000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "1110" =>
addr_start:="11100000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when "1111" =>
addr_start:="11110000";
case colsel is
when "0000" => addr:=addr_start;
when "0001" => addr:=addr_start+1;
when "0010" => addr:=addr_start+2;
when "0011" => addr:=addr_start+3;
when "0100" => addr:=addr_start+4;
when "0101" => addr:=addr_start+5;
when "0110" => addr:=addr_start+6;
when "0111" => addr:=addr_start+7;
when "1000" => addr:=addr_start+8;
when "1001" => addr:=addr_start+9;
when "1010" => addr:=addr_start+10;
when "1011" => addr:=addr_start+11;
when "1100" => addr:=addr_start+12;
when "1101" => addr:=addr_start+13;
when "1110" => addr:=addr_start+14;
when "1111" => addr:=addr_start+15;
when others => null;
end case;
when others => null;
end case;
addr_out<=addr;
end process;
end a;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -