если выписка внутри счетчика в VHDL - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть 3-битный счетчик, который считает от «000» вверх.Каждый раз, когда достигается «101», я хочу, чтобы сигнал o_en был ВЫСОКИМ.У меня есть следующий файл VHDL.Поведение, к сожалению, другое.Сигнал o_en является ВЫСОКИМ, когда достигается «110» (задерживается на один тактовый цикл).

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

entity special_counter is
    port(
        i_clk : in std_logic;
        i_en : in std_logic;
        i_rst : in std_logic;
        o_data : out std_logic_vector(2 downto 0);
        o_en : out std_logic
    );
end entity;

architecture behave of special_counter is
signal w_data : std_logic_vector(2 downto 0);
signal w_en : std_logic;

begin
    process(i_clk, i_rst) begin
        if i_rst = '1' then
            w_data <= "000";
        elsif rising_edge(i_clk) then
            if i_en = '1' then
                if w_data = "101" then
                    w_en <= '1';
                    w_data <= w_data + 1;
                else
                    w_en <= '0';
                    w_data <= w_data + 1;
                end if;
            end if;
        end if;
    end process;
    o_data <= w_data;
    o_en <= w_en;
end architecture;

Как изменить программу для выполнения ожидаемого поведения?

1 Ответ

0 голосов
/ 10 декабря 2018

Это совершенно правильно, и это то, что вы кодировали.

Чтобы выразить это словами: «На переднем крае часов, когда счетчик имеет значение 101, тогда w_en будетустановить высокое. "

Таким образом, сигнал w_en, из которого получается o_en, будет высоким после нарастающего фронта часов.
В то же время, что иw_data меняется, а после , когда нарастающие часы становятся "110".

Существует два решения:

  1. Проверка на «100» (так на один цикл раньше)

  2. Make w_en (ипри этом о_ен) комбинаторный.

Для последнего вы должны переместить назначение за пределы секции 'clocked' и использовать, например,

w_en <= '1' когда w_data = "101" else '0«; </p>

...