(VHDL) Два компонента в сущности верхнего уровня, но только один рабочий - PullRequest
0 голосов
/ 08 апреля 2019

Я программирую на VHDL 1993 под QUARTUS II, и я только что создал два компонента, чтобы попытаться решить проблему, которую я собираюсь представить, поскольку они не были решением. Перед этим файлы компонентов включены в проект и работают по одному за раз.

Таким образом, в моем основном приложении я пытаюсь выполнить две работы, одна из которых - мигать светодиодом и включить другой светодиод, управляемый переключателем, когда я объявляю оба компонента только одним, управляющим светодиодом с переключателем, затем когда я объявил компонент светодиодного переключателя и его сигналы в элементе верхнего уровня, мигалка работает, я думаю, что это проблема с объявлениями сигналов на объекте верхнего уровня "test2", но я не понимаю, почему он работает только когда я использую одну вещь за раз, то, что я закодировал в сущности верхнего уровня:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity test2 is
    port(   clk_cpu, K2: in std_logic;
            led1, led2: out std_logic);
end test2;

architecture struct of test2 is

    component tmp_toogler
        port(   clk: in std_logic;
            led: out std_logic);
    end component;

    component yes_driver
        port(   input: in std_logic;
            output: out std_logic);
    end component;

begin

    instanciaD: yes_driver PORT MAP(
        K2, led2
    );

    instancia1: tmp_toogler PORT MAP(
        clk_cpu, led1
    );

end struct;

Компонент мигалки:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity tmp_toogler is
    port(   clk: in std_logic;
            led: out std_logic);
end tmp_toogler;

architecture struct of tmp_toogler is

signal counter: integer range 0 to 50000000;
signal state : std_logic := '1';

begin
    process(clk)

    begin
        if(rising_edge(clk)) then
        counter <= counter + 1;
        end if;

        if(counter = 50000000) then
        counter <= 0;
            if(state = '0') then 
            led <= '1';
            state <= '1';
            else
            led <= '0';
            state <= '0';
            end if;
        end if;
    end process;

end struct;

Светодиодный выключатель:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity yes_driver is
    port(   input: in std_logic;
            output: out std_logic);
end yes_driver;

architecture struct of yes_driver is
begin
    process(input)
    begin
    output <= input;
    end process;
end struct;

Я чувствую, что это очень простой вопрос о выполнении нескольких задач, поэтому я прошу помощи, заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...