VHDL:Проблема сдвига на семисегментных индикаторах

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
tugric
Родился
Сообщения: 2
Зарегистрирован: Вс май 22, 2011 21:40:25

VHDL:Проблема сдвига на семисегментных индикаторах

Сообщение tugric »

Доброго времени суток!
Совсем недавно начал изучать ПЛИС,VHDL и квартус.
И при выполнении следующей задачки возникли проблемы.
С клавиатуры вводятся цифры.Введенные цифры должны отображаться на семисегментных индикаторах HEX3 – HEX0,
причем на HEX3 отображается последняя нажатая клавиша, на HEX2—предпоследняя и
т. д.
Ввод цифр с клавиатуры реализовать получилось. А вот сдвиг на семисегментниках никак не получается:(

Код: Выделить всё

LIBRARY ieee;
  USE ieee.std_logic_1164.ALL;
--------------------------------------------- --
    Entity PS2SIMPL is
--------------------------------------------- --
      Port ( Clk      : In  std_logic;
             Reset    : In  std_logic;
             D7SEG_L : Out std_logic_vector (0 to 6);
			 D7SEG_H  : Out std_logic_vector (0 to 6);
			 D7SEG_2  : Out std_logic_vector (0 to 6);
             D7SEG_3  : Out std_logic_vector (0 to 6);
             PS2_Data : In  std_logic;
             PS2_Clk  : In  std_logic;
             nLED     : Out std_logic );
end PS2SIMPL;
--------------------------------------------- --
    Architecture SCHEMATIC of PS2SIMPL is
--------------------------------------------- --
  component SEVENSEG
     port(data_in: in std_logic_vector (3 downto 0);
		
		data_out: out std_logic_vector (6 downto 0));
  end component;
  component PS2_CTRL
  Generic ( FILTERSIZE : POSITIVE := 8 );
     Port (     Clk : in  std_logic;
             DoRead : in  std_logic;
            PS2_Clk : in  std_logic;
           PS2_Data : in  std_logic;
              Reset : in  std_logic;
          Scan_Code : out std_logic_vector (7 downto 0);
           Scan_DAV : out std_logic;
           Scan_Err : out std_logic );
  end component;
  signal Gnd,Vcc : std_logic;
----------------------------------------------------------------------------------------- 
 signal a,first,second,third,fourth : std_logic_vector (3 downto 0);
-------------------------------------------------------------------------------------------
  signal LED     : std_logic;
  --signal count     : integer:=0;
  signal count     : integer:=0;
  signal DoRead  : std_logic;
  signal Code    : std_logic_vector (7 downto 0);
  
  
  begin
  Gnd <= '0';  Vcc <= '1';
  PS2_CTRL_i : PS2_CTRL
    Generic Map ( FILTERSIZE => 8 )
    Port Map ( Clk=>Clk, Reset=>Reset, DoRead=>DoRead,
               PS2_Clk=>PS2_Clk, PS2_Data=>PS2_Data,
               Scan_Code=>Code, Scan_DAV=>DoRead, Scan_Err=>LED );
  -- Note: use Pol=>Gnd if display is active high type.

 process(Code,count,first,second,third,fourth)
begin
	
	case Code is
		when "00010110" =>a<="0001";--1
		when "00011110" =>a<="0010";--2
		when "00100110" =>a<="0011";
		when "00100101" =>a<="0100";
		when "00101110" =>a<="0101";
		when "00110110" =>a<="0110";
		when "00111101" =>a<="0111";--7
		when "00111110" =>a<="1000";
		when "01000110" =>a<="1001";
		when "01000101" =>a<="0000";
		when others=> null;
		
	end case;
        ---------------БЛОК СДВИГА--------------------------------------------------------
	-----------------------------------------------------------------------------------------
        case count is
		when 0 =>
			first<=a;
			count<=count+1;
		when 1 =>
			second<=first;
			first<=a;
			count<=count+1;
		when 2 =>
			third<=second;
			second<=first;
			first<=a;
			count<=count+1;
		when 3 =>
			fourth<=third;
			third<=second;
			second<=first;
			first<=a;
			count<=0;
		when others=> null;
		end case;
		
	--------------------------------------------------------------------------------
end process;

 
 
	
	Dec7Seg0 : SEVENSEG
     Port Map ( data_in => first, data_out => D7SEG_H );
	  Dec7Seg1 : SEVENSEG
     Port Map ( data_in => second,  data_out => D7SEG_L );
	  Dec7Seg2 : SEVENSEG
     Port Map ( data_in => third,  data_out => D7SEG_2 );
	  Dec7Seg3 : SEVENSEG
     Port Map ( data_in => fourth,  data_out => D7SEG_3 );
При выполнении данного кода значения индикаторов становятся одинаковы...
Подскажите в чем может быть проблема.
Реклама
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: VHDL:Проблема сдвига на семисегментных индикаторах

Сообщение Meteor »

Всем выходным линиям присваиваете одно значение
data_in => third, data_out => D7SEG_2
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Реклама
tugric
Родился
Сообщения: 2
Зарегистрирован: Вс май 22, 2011 21:40:25

Re: VHDL:Проблема сдвига на семисегментных индикаторах

Сообщение tugric »

Ну правильно:
Hex0 - D7SEG_H
Hex1 - D7SEG_L
Hex2 - D7SEG_2
Hex3 - D7SEG_3
Аватара пользователя
nick17
Встал на лапы
Сообщения: 134
Зарегистрирован: Пт июн 26, 2009 06:40:07
Контактная информация:

Re: VHDL:Проблема сдвига на семисегментных индикаторах

Сообщение nick17 »

---------------БЛОК СДВИГА--------------------------------------------------------
-----------------------------------------------------------------------------------------
case count is
when 0 =>
first<=a;
count<=count+1;
when 1 =>
second<=first;
first<=a;
count<=count+1;
when 2 =>
third<=second;
second<=first;
first<=a;
count<=count+1;
when 3 =>
fourth<=third;
third<=second;
second<=first;
first<=a;
count<=0;
when others=> null;
end case;

--------------------------------------------------------------------------------
end process;
Вот это вот что такое???Это не сдвиговый регистр, а мультиплексор, да еще с его помощью вы заставляете считать счетчик асинхронно. Неправильный подход. Делайте синхронную схему
Подсказка

process(clk)
begin
if(clk'event and clk='1') then
проверка тактового с клавиатуры
...........
сдвиговым регистром сдвигаем бит
.....
...
....
end if;
end process


и если не использовать компоненты, можно уложить все в один процесс, выкинется половина текста.
Реклама
Эиком - электронные компоненты и радиодетали
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»