Я пытаюсь построить простой генератор импульсов для CPLD в VHDL. У меня есть серия простых , если операторов, которые должны выполнять определенные задачи в зависимости от состояния входа шины, подключенной к модулю.Сигнал не изменяется в iSim
entity pulse_gen is
Port (CLK : in STD_LOGIC;
pulse_sel_in : in STD_LOGIC_VECTOR (2 downto 0);
pulse_r : in STD_LOGIC;
pulse_s : inout STD_LOGIC);
end pulse_gen;
architecture Behavioral of pulse_gen is
signal pulse_sel: std_logic_vector (2 downto 0);
signal pulse_count: integer;
signal pulse_length: integer range 0 to 100;
signal pulse_a: std_logic;
begin
pulse_sel <= pulse_sel_in;
pulse: process(CLK) is
begin
if(pulse_sel > "000" and pulse_a = '0') then
pulse_s <= '1';
pulse_a <= '1';
end if;
if(pulse_a = '1' and pulse_count < pulse_length) then
pulse_count <= pulse_count + 1;
end if;
if(pulse_a = '1' and pulse_count = pulse_length) then
pulse_s <= '0';
pulse_a <= '0';
pulse_count <= 0;
end if;
end process;
set_max: process(CLK) is
begin
if (CLK'event) then
case pulse_sel is
when "001" => pulse_length <= 1;
when "010" => pulse_length <= 10;
when "011" => pulse_length <= 100;
when others => null;
end case;
end if;
end process;
end Behavioral;
При выполнении этого модуля в Isim, заставляя _pulse_s_ автобус ни к чему, но 000 должен вызвать первый, если оператор в процессе импульса, который он делает. Однако в симуляции сигнал _pulse_a_ никогда не устанавливается на высокий уровень логики. Теперь я часами пишу этот модуль по-разному, но я совершенно не знаю, почему этого не происходит. Я относительно новичок в VHDL, поэтому я задаюсь вопросом, есть ли какой-то синтаксис или процедурная ошибка, которую я просто полностью потерял. Есть идеи?
Вы пробовали все в процессе 'pulse' внутри' if rising_edge (CLK) '? вы не использовали 'CLK' в этом процессе. – Thanushan
Спасибо, я только что попробовал это сейчас, и это все равно не имеет значения. При форсировании входа 'pulse_sel_in' до логического максимума устанавливается' pulse_length', а 'pulse_s' переходит на логическую высоту, но до сих пор не работает для' pulse_a'. –