Генерация импульсов VHDL с внешним триггером и выходом триггера - PullRequest
0 голосов
/ 05 марта 2019

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

Вот моя программа для внешнего триггера.Для генерации собственного импульса потребуется сигнал запуска от входного порта «trig_in»:

if state_trig = extrig then
    if (trig_in = '1') then
        counter1 <= "000000";
            if(counter >= 1 and counter <= 2) then
                pwm_out1 <= '1';
                pwm_out2 <= '0';
            end if;
            if(counter > 2 and counter <= 600) then
                pwm_out1 <= '0';
                pwm_out2 <= '0';
            end if;
            if(counter > 600 and counter <= 3000) then
                pwm_out1 <= '1';
                pwm_out2 <= '1';
            end if;
        counter <= counter + 1;
    else if (trig_in = '0') then
        counter <= "000000";
        counter1 <= counter1 + 1;
            if (counter1 >= 2100) then
                pwm_out1 <= '0';
                pwm_out2 <= '0';
            end if;
        end if;
    end if;
end if;

А вот и программа для внутреннего запуска.Он будет генерировать импульс повторения 1 кГц для запуска на выходном порте «trig_out»:

if state_trig = intrig  then
    --1kHz
        if(i >= 1 and i <= 2) then
            pwm_out1 <= '1';
            pwm_out2 <= '0';
        end if;
     if(i > 2 and i <= 600) then
            pwm_out1 <= '0';
            pwm_out2 <= '0';
        end if;        
     if(i > 600 and i <= 3000) then
            pwm_out1 <= '1';
            pwm_out2 <= '1';
        end if;      
     if(i > 3000) then
            pwm_out1 <= '0';
            pwm_out2 <= '0';
        end if;
        if(i = 300000) then i := 0; end if;
        i := i + 1; 
    end if;
end if;

Я использую состояние fsm для определения состояний «extrig» и «intrig».

 type    fsm_trig   is (none, intrig, extrig);
 signal state_trig : fsm_trig := none;

Две программы работают отдельно идеально.Но когда я помещаю их обоих в один процесс (часы).Импульс, который генерируется в каждой триггерной программе, конфликтует друг с другом.Я использую UART, чтобы определить состояние триггера.Два сигнала "pwm_out1" и "pwm_out2" назначены выходным портам для генерации импульса:

out_clk1 <= pwm_out1;
out_clk2 <= pwm_out2;

Вот порты для двух программ:

    sys_clk     : in   STD_LOGIC;           --system clock
    rx          : in     STD_LOGIC;         --receive for UART
    trig_in     : in   STD_LOGIC;           --External trigger
    trig_out : out  STD_LOGIC;              --Internal trigger
    out_clk1 : out  STD_LOGIC;              --Pulse out1
    out_clk2 : out  STD_LOGIC;              --Pulse out2

Пожалуйста, дайте мне любую идею, чтобыизбежать конфликтов между двумя программами.Заранее спасибо.

...