User Tag List

Показано с 1 по 10 из 83

Тема: Помогите с ПЛИС, начинающему разобраться.

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    Регистрация
    04.12.2008
    Адрес
    г. Черкассы, Украина
    Сообщений
    957
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    8 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот для примера сделал реализацию простого интерфейса опроса клавиатуры:

    Схема:
    Вложение 33296
    Код:
    library IEEE;
    use IEEE.STD_LOGIC_1164.all;
    
    entity keyb is
      port(
        CLK    : in std_logic;
        C      : in std_logic_vector(3 downto 0);
        R      : out std_logic_vector(3 downto 0);
        SCAN0  : out std_logic_vector(7 downto 0);
        SCAN1  : out std_logic_vector(7 downto 0);
        KEY    : out std_logic
      );
    end keyb;
    
    architecture keyb of keyb is
      type state_t is (s_idle, s0, s1, s2, s3);
      signal state  : state_t := s_idle;
      signal row    : std_logic_vector(3 downto 0) := "0000";
      signal data0  : std_logic_vector(3 downto 0) := "1111";
      signal data1  : std_logic_vector(3 downto 0) := "1111";
      signal data2  : std_logic_vector(3 downto 0) := "1111";
      signal data3  : std_logic_vector(3 downto 0) := "1111";
      signal K      : std_logic;
      
    begin
      process  (CLK)
      begin
        if CLK'event and CLK = '1' then
          if state = s_idle then
            row <= "0000";
            data0 <= "1111";
            data1 <= "1111";
            data2 <= "1111";
            data3 <= "1111";
            if K /= '1' then
              row <= "1110";
              state <= s0;
            end if;
          elsif state = s0 then
            if K /= '1' then
              data0 <= C;
            end if;
            row <= "1101";
            state <= s1;
          elsif state = s1 then
            if K /= '1' then
              data1 <= C;
            end if;
            row <= "1011";
            state <= s2;
          elsif state = s2 then
            if K /= '1' then
              data2 <= C;
            end if;
            row <= "0111";
            state <= s3;
          elsif state = s3 then
            if K /= '1' then
              data3 <= C;
            end if;
            row <= "0000";
            state <= s_idle;
          end if;
        end if;
      end process;
      K     <= C(3) and C(2) and C(1) and C(0);
      R     <= row;
      SCAN0 <= data0 & data1;
      SCAN1 <= data2 & data3;
      KEY   <= K;
    end keyb;
    Моделирование:
    Вложение 33297
    Последний раз редактировалось vlad; 01.03.2012 в 01:02.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Помогите разобраться с ПЗУ
    от elker в разделе Для начинающих
    Ответов: 4
    Последнее: 19.04.2009, 15:03
  2. Помогите советом начинающему...:)
    от 6o6ep в разделе Несортированное железо
    Ответов: 26
    Последнее: 23.05.2006, 18:46
  3. Помогите начинающему с кодами.
    от Black1980 в разделе Программирование
    Ответов: 31
    Последнее: 11.04.2006, 07:28
  4. Помогите разобраться...
    от Striker в разделе Несортированное железо
    Ответов: 8
    Последнее: 24.05.2005, 14:59
  5. Помогите начинающему
    от Striker в разделе Музыка
    Ответов: 1
    Последнее: 25.03.2005, 13:25

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •