VHDL, как создать несколько объектов триггера для использования BIT_VECTOR в качестве D-входа

Я пытаюсь использовать функцию генерации, чтобы использовать несколько триггеров в качестве регистра. У меня есть битовый вектор сигнала, который я хотел бы, чтобы каждый бит был входом D в его эквивалентный триггер, но после компиляции я получаю предупреждение о том, что выход Q не имеет драйвера.

Здесь я определяю поведение триггера

entity flipflop is
    port( 
        D,CLK,RST: in BIT;
        Q: out BIT
    );
    end entity;
architecture behavioral of flipflop is
begin
    P1: process(RST,CLK)
    begin
        if(RST='1')then
            Q <= '0';
        elsif(CLK='1' and CLK'EVENT) then
            Q <= D;
        end if;
    end process;
end behavioral;

Затем я генерирую 32 триггера и пытаюсь установить каждый бит суммы сигналов bit_vector на каждый из D-входов триггеров.

    SIGNAL Q,D: BIT_VECTOR (31 DOWNTO 0);
    SIGNAL SUM: BIT_VECTOR (31 DOWNTO 0);
BEGIN
    register_maker : for i in 0 to 31 generate 
    BEGIN
        flipflop_inst : ENTITY work.flipflop port map
            (Q => Q(i),
            CLK => CLK,
            RST => RST,
            D => D(i)
        );
    end generate register_maker;

    process (D,SUM)
    begin
        for i in 0 to 31 loop   
            D(i) <= SUM(i);
        end loop;
    end process;

Я не уверен, где я ошибаюсь, но выходы триггеров не меняются.

Спасибо


person Eddy Herman    schedule 15.03.2017    source источник
comment
Вместо if(CLK='1' and CLK'EVENT) используйте if(rising_edge(CLK)).   -  person scary_jeff    schedule 15.03.2017
comment
Извините, это моя ошибка, я неправильно прочитал ваш код. Я обычно не вижу использования bit_vector, вот и все   -  person gsm    schedule 15.03.2017
comment
Я предполагаю, что когда вы пишете после компиляции я получаю предупреждение о том, что выход Q не имеет драйвера, вы говорите о компиляции для моделирования. Вы уверены, что сначала скомпилировали flipflop, а затем другой дизайн? И что это другой дизайн, который вы пытались смоделировать?   -  person Renaud Pacalet    schedule 15.03.2017
comment
Также, возможно, стоит включить ваш модуль верхнего уровня, который обертывает сущность триггера.   -  person gsm    schedule 15.03.2017


Ответы (1)


process (D,SUM) не должен зависеть от D. Т.е. вы хотите, чтобы D менялось только при изменении суммы. Поскольку они имеют одинаковую длину, это можно просто сделать с помощью:

D <= SUM;

Тогда вы говорите, что выходы триггеров не меняются. Может быть, это потому, что RST застрял на '1' в вашем тестовом стенде? (Мы все сделали эту ошибку ;))

И могу я спросить, почему вы не используете std_logic и std_logic_vector?

person JHBonarius    schedule 15.03.2017