2016-10-26 2 views
1

Мне нужно создать последовательность VHDL, которая принимает только входной тактовый сигнал и выводит последовательность 5 светодиодов see picture Я правильно понимаю, что используя std_logic_vector, я могу подключить каждый векторный вывод к одному светодиоду в чтобы создать эту последовательность или я пропустил интерпретацию использования std_logic_vector?VHDL CLOCK SEQUENCE Q3

код я использовал это

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_unsigned.all; 
use ieee.numeric_std.all; -- i have used this package as my CLK-CNT signal counts in integer format rather than binary and i am performing an ADD sum of the CLK_CNT 


entity REG_LED is 
PORT(CLK:  IN std_logic;    -- CLK input 
    LEDS:  Out std_logic_vector (4 downto 0)); -- initialise output 
End REG_LED; 

ARCHITECTURE behavioral OF REG_LED IS 
SIGNAL CLK_CNT:  integer range 0 to 9:= 0; -- initailise comparison signal used for counting clock pulses. 
-- This signal will be used by the program to recognise where in the sequnce the program is and thus determine the next state required for the sequence. 
BEGIN 

    CLK_Process: PROCESS (CLK) -- begin the CLK_CNT Process 
    BEGIN 

    if rising_edge(CLK) Then 
     if CLK_CNT = 8 then 
      CLK_CNT <= 0; -- this resets the clock pulse count to 0 
     else 
      CLK_CNT <= CLK_CNT + 1 ; -- used to count each clock pulse upto the reset 
     End if; 
-- this process has been kept seperate to the LED output process in order to isolate the event from the output process and limit the possiblities of errors   
    END IF; 

    END PROCESS ; 

    LED_PROCESS: Process (CLK_CNT) -- LED Outputs based on Temp count 

    BEGIN -- begin the output sequence 

     Case CLK_CNT is 
-- i use a case statement to compare the value of the CLK_CNT signal and produce the required LEDS output 
-- this ensures the 
      When 0 => 
       LEDS <= "11111"; -- S0 when clock count is 0 
      When 1 => 
       LEDS <= "00001"; -- S1 when clock count is 1 
      When 2 =>  
       LEDS <= "00001"; -- S2 when clock count is 2 
      When 3 => 
       LEDS <= "11111"; -- S3 when clock count is 3 
      When 4 => 
       LEDS <= "00000"; -- S4 when clock count is 4 
      When 5 => 
       LEDS <= "11111"; -- S5 when clock count is 5 
      When 6 => 
       LEDS <= "00100"; -- S6 when clock count is 6 
      When 7 => 
       LEDS <= "01010"; -- S7 when clock count is 7 
      When 8 => 
       LEDS <= "10001"; -- S8 when clock count is 8 this is the final clock count state 

      When others => 
       LEDS <= "11111"; -- Restart Sequence 

     End Case;    

    End Process; 
END behavioral; 

я смоделировал форму волны и производит 5 выходов в соответствии с требованиями последовательностью, но может этот выход beused для привода 5 различных светодиодов или это просто быть 5 битное слово, которое выводится на один порт? im new для VHDL, поэтому любая помощь будет оценена

+0

Если вы подключите один светодиод к каждому биту порта, он будет управлять 5 светодиодами. –

ответ

1

Ваш код выглядит отлично, и если ваша симуляция показывает, что он функционирует в соответствии с тем, что вам нужно, вам почти приятно идти.

A std_logic_vector действительно много проводов (автобус). Вы должны думать о том, что это физически означает, потому что это действительно происходит, когда вы программируете FPGA. Так что да, вы можете разделить (или разбить) шину на отдельные линии. Это может быть сделано следующим образом:

signal LED_LINE_0 : std_logic; 
signal LED_LINE_1 : std_logic; 
LED_LINE_0 <= LEDS(0); 
LED_LINE_1 <= LEDS(1); 

... и так далее. Это прерывает один провод за раз. Вы также можете разделить шину на более мелкие автобусы, разрывая несколько проводов за раз. например

signal small_bus_1 : std_logic_vector(1 downto 0); 
signal small_bus_2 : std_logic_vector(1 downto 0); 
signal big_bus : std_logic_vector(3 downto 0); 

small_bus_1 <= big_bus(3 downto 2); 
small_bus_2 <= big_bus(1 downto 0); 

Вы можете написать в файле ограничений (или использовать графический интерфейс в IDE вашего FPGA марки), чтобы указать, какой пин на FPGA вы хотите каждый из этих std_logic быть назначен (что диски светодиод вам нужен).

+0

Благодарим вас за отзыв, это для моей курсовой работы, поэтому я не буду программировать fpga для этого, но я хочу показать правильные шаги. где бы я помещал код, чтобы разделить автобус? в объявлении объекта или в структуре архитектуры модели? мой лектор действительно не очень помог нам в этом вопросе, просто дал нам книгу и сказал, что она трескается в основном. –

+0

Подумайте о том, что такое сущность и архитектура. Файл vhdl указывает «поле», в котором часть объекта сообщает вам, что входит и выходит из окна (и что используется в поле), в то время как часть архитектуры определяет архитектуру (как все подключается) внутри коробки. – Wizongod