⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ledarray_disp.vhd

📁 led 点阵显示led——rom实现
💻 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 + -