Ждущий мультивибратор на VHDL

Ждущий мультивибратор – формирователь однократного импульса заданной длительности от переднего фронта более короткого импульса. Данный VHDL-код описывает усовершенствованный мультивибратор -длительность входящего импульса может быть любой, как длиннее, так и короче выходного.
В данном коде формируется импульс PULS длительностью 10 секунд по переднему фронту импульса BTN (не важно, какой длительности). Основная фишка здесь в том, что внутренний сигнал tmpCLK имеет разные источники в зависимости от состояния внутреннего сигнала st, и определяется это конструкцией with … select.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity SHAPE_PULSE is
Port ( BTN : in STD_LOGIC;
CLK : in STD_LOGIC; — 150 kHz
PULS : out STD_LOGIC := ‘0’);
end SHAPE_PULSE;

architecture Behavioral of SHAPE_PULSE is

signal tmpCLK: std_logic := ‘0’;
signal st: std_logic_vector(20 downto 0) := (others => ‘0’);

begin

with conv_integer (st) select
tmpCLK < = BTN when 0,

CLK when others;

process (tmpCLK)

begin

if rising_edge(tmpCLK) then

case conv_integer (st) is

when 0 => PULS < = ‘0’; st <= st + 1;

when 1 to 1_500_000 => PULS < =’1′; st <= st + 1;

when others => PULS < = ‘0’; st <= (others => ‘0’);
end case;
end if;
end process;
end Behavioral;

shape_pulse

Об авторе admin

Инженер. Окончил НГТУ по специальности "Радиосвязь, телевидение и радиовещание". С 2003 г. занимаюсь разработкой электронной начинки различных радиотехнических устройств и приборов.
Запись опубликована в рубрике VHDL-коды. Добавьте в закладки постоянную ссылку.

Оставить комментарий