Ошибка: идентификатор 'q' не читается в архитектуре T Flip Flop - PullRequest
1 голос
/ 27 октября 2011

Я пытаюсь смоделировать T-флип-флоп с использованием VHDL.

library ieee;
use ieee.std_logic_1164.all;
entity tff is
    port (
        clk: std_logic;
        t: in bit;
        q: out bit;
        qbar: out bit);
end tff;

architecture tff_arch of tff is
begin
    process(clk)
    begin
        if (clk = '1' and t = '1')
        then
            q <= not q;
            qbar <= not qbar;
        end if;
    end process;
end tff_arch;

Но ошибка, которую я получаю,

Error: CSVHDL0168: tff.vhdl: (line 17): Identifier 'q' is not readable
Error: CSVHDL0168: tff.vhdl: (line 18): Identifier 'qbar' is not readable

Я думаю, что причина ошибки в том, что я использую «не q», когда q не инициализировано.Поправьте меня здесь, если я ошибаюсь.

А что делать, чтобы обойти эту проблему?Я правильно смоделировал D-триггер и его форму на испытательном стенде, используя бесплатную версию Symphony EDA.

Ответы [ 3 ]

3 голосов
/ 27 октября 2011

В старые времена вы не могли прочитать вывод, поэтому вам пришлось либо:

  • сделать это inout (что немного неприятно, поскольку вы выдумываете направление, которое вы действительно имеете в виду, просто чтобы вы могли его прочитать) - это работает, но не широко используется в промышленности (насколько я известно)
  • сделать его buffer, но у него были недостатки (до VHDL-2002) в том, что вы должны сделать всю остальную часть иерархии этого сигнала управляемой buffer с. Почти никогда не использовал в моем опыте.
  • используйте и промежуточный signal (который вы можете прочитать), а затем используйте присвоение, чтобы установить для выхода значение этого сигнала. Это идиоматический способ сделать это среди практикующих инженеров.

Начиная с VHDL-2008, вы можете считывать выходные порты (хотя заявленное намерение заключается в том, чтобы использовать его только для целей проверки). Вероятно, вам понадобится переключатель инструментов, чтобы включить режим VHDL-2008. (И может быть, ваш конкретный симулятор / синтезатор по-прежнему не поддерживает VHDL-2008, который показывает ошеломляющие темпы развития в мире инструментов EDA!)

1 голос
/ 27 октября 2011

q - это выход объекта.

Вы не можете прочитать вывод. Это так просто.

Вам нужна внутренняя версия, которую вы используете для цикла обратной связи, а затем q <= local_q;

0 голосов
/ 27 октября 2011

Не очень хорошо помню VHDL, но это может дать вам подсказку:

Проблема в том, что q - это всего лишь сигнал от вашей сущности, поэтому нет доступа к нему при попыткечтобы прочитать его.

Итак, чтобы не решить свою домашнюю работу, подумайте об этом так:

Либо вам нужно иметь q в качестве входа для доступа к нему (вероятно, не к чемувы хотите) или вам нужно хранить q (или, по крайней мере, следующее значение q) внутри.Это можно сделать, указав q (или q_next) как signal в части architecture.Например:

architecture tff_arch of tff is
  signal q_next: std_logic;
begin

и так далее.То же самое касается вашего qbar сигнала.

...