VHDL FSM мульти-управляемая сеть Q подключена к постоянному драйверу, другой драйвер игнорируется, что не так с моим кодом? - PullRequest
0 голосов
/ 14 октября 2018

Этот код является автоматом, являющимся машиной Мура.

У Алиссы П. Хакер есть улитка, которая ползет по бумажной ленте с 1 и 0 на ней.Улитка улыбается, когда последние две цифры, по которым она ползет, равны 01. Проектируйте ММР и Мили автоматы мозга улитки.

И код показан ниже

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity simpfsm is
Port ( A : in STD_LOGIC;
       clk : in STD_LOGIC;
       r   : in STD_LOGIC;
       Y : out STD_LOGIC);
end simpfsm;


architecture Behavioral of simpfsm is
type state_type is (SA,SB,SC);
signal state,next_state:state_type;
begin
SYNC_PROC:process(clk)
begin
if(clk'event and clk='1') then
if(r='1') then
next_state <= SA; -- removed trailing grave accent
else
state <= next_state;
end if;
end if;
end process;

OUTPUT_DECODE:process(state)
begin
case (state) is
when SA =>
Y <= '0';
when SB =>
Y <= '0';
when SC =>
Y <= '1';
when others =>
Y <= '0';
end case;
end process;

NEXT_STATE_DECODE:process(state,A)
begin
next_state <= state;
case (state) is

    when SA =>
        if(A='0') then
            next_state <= SB;
        end if;

    when SB =>
        if(A='1') then
            next_state <= SC;
        end if;

    when SC =>
        if(A='0') then
            next_state <= SB;
        elsif(A='1') then
            next_state <= SA;
        end if;
    when others =>
        next_state <= SA;                       --"if not state then begin with SA"
end case;
end process;
end Behavioral;  -- removed trailing grave accent

Ошибка: [XSIM 43-3249] Файл D: /Users/93443/project_4/project_4.srcs/sources_1/new/A_11_fsm.vhd, строка 22. Неразрешенный сигнал "next_state" управляется многократно.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

state_type не является разрешенным подтипом.Несколько драйверов обнаруживаются во время загрузки перед выполнением модели после идентификации во время разработки.

IEEE Std 1076-2008

14.5 Разработка части оператора
14.5.5 Другие параллельные операторы

Все другие параллельные операторы являются либо операторами процесса, либо операторами, для которых существует эквивалентный оператор процесса.Разработка оператора процесса происходит следующим образом:

a) Разработана декларативная часть процесса.
b) Определены драйверы, требуемые оператором процесса.

6.4.2.3 Объявления сигналов

... Ошибка, если после составления описания сигнал имеет несколько источников ине разрешенный сигнал....

Есть драйверы для next_state в процессах SYNC_PROC и NEXT_STATE_DECODE

14.7 Исполнение модели
14.7.2 Драйверы

Каждый оператор присваивания сигнала в операторе процесса определяет набор драйверов для определенных скалярных сигналов.Существует один драйвер для данного скалярного сигнала S в операторе процесса, при условии, что в этом операторе процесса есть по крайней мере один оператор назначения сигнала и что самый длинный статический префикс целевого сигнала этого оператора назначения сигнала обозначает S или обозначаетсоставной сигнал, S является субэлементом.Говорят, что каждый такой оператор назначения сигнала связан с этим драйвером.Выполнение оператора назначения сигнала влияет только на связанный драйвер (ы).

state_type перечислимый тип и является скалярным типом:

5.2 Скалярные типы
5.2.1 Общие

Скалярные типы состоят из перечислимых типов , целочисленных типов , физических типов и типов с плавающей точкой....

Казалось бы, решение состоит в том, чтобы сбросить state в SYNC_PROC вместо next_state.

Если вы удалите два посторонних серьезных акцента ('`', 15.2 Набор символов), ваш код будет Минимальный, Полный и Проверяемый пример , несмотря на выражение подозрения Трики.Я удалил их из вашего примера кода, после чего ваш код анализирует и уточняет после изменения процесса SYNC_PROC:

if(r='1') then
state <= SA;  -- WAS next_state

(обратите внимание, что круглые скобки вокруг условия (здесь r = '1') являются избыточными.VHDL условие, как известно, является выражением со значением BOOLEAN.)

Если ваш симулятор разрешает выполнение с портами верхнего уровня, он сообщит о нескольких драйверах.Для тех симуляторов, которые вам не нужны, требуется создание тестового стенда simpfsm:

14.2 Разработка иерархии проекта

Реализация может разрешать, но не обязана разрешатьобъект дизайна в корне иерархии проекта, чтобы иметь дженерики и порты.Если реализация допускает эти объекты верхнего уровня интерфейса, она может ограничить их разрешенные формы (то есть, могут ли они быть интерфейсными типами, подпрограммами, пакетами или объектами), и, в случаеобъекты интерфейса, их разрешенные типы и режимы в зависимости от реализации.

Как вы можете заметить, это представляет собой проблему переносимости для обнаружения ошибки без тестового стенда или в зависимости от интерактивного симулятора, управляемого скриптом.Ошибка может быть продемонстрирована с помощью ghdl до изменения цели назначения сигнала:

ghdl -r simpfsm
для сигнала: .simpfsm (поведенческий) .next_state
./simpfsm:error: несколькоисточники неразрешенного сигнала
./simpfsm:error: ошибка во время разработки

Загрузка разработанной спецификации проекта в память откладывается до выполнения программы в имитаторах VHDL на основе компилятора:

14.2 Разработка иерархии проекта

Разработка иерархии проекта выполняется следующим образом:

- Создаются драйверы, определенные во время разработки операторов процесса (см. 14.5.5).
- Первоначальная транзакция, определяемая значением по умолчанию, связанным с каждым скалярным сигналом, управляемым оператором процесса, вставляется всоответствующий драйвер.

next_state и state оба имеют значения по умолчанию state_type'LEFT (SA).

6.4.2.3 Объявления сигналов

При отсутствии явного выражения по умолчанию подразумевается неявное значение по умолчанию для сигнала скалярного подтипа или для каждого скалярного подэлемента составного сигнала, каждый из которых сам является сигналом скалярного подтипа.Неявное значение по умолчанию для сигнала скалярного подтипа T определяется как значение, заданное T'LEFT.

И это подразумевает, что обнаружение нескольких драйверов происходит во время загрузки части разработки, когда идентифицируется каждая сеть:

14.7.3.4 Обновление сигнала

A net - это набор драйверов, сигналов (включая порты и неявные сигналы), функций преобразования и функций разрешениявместе взятые определяют эффективные и движущие значения каждого сигнала в сети.

Мы видим, что часть разработки (загрузка здесь) происходит во время выполнения (команда -hhll -r):

14.2 Разработка иерархии дизайна

Разработка иерархии дизайна создает набор процессов, связанных между собой сетями;затем эта коллекция процессов и сетей может быть выполнена для имитации поведения проекта.

Подозрение Трики несколько обоснованно, серьезные акценты могут вызвать ошибки во время анализа, в то время как ошибка, которую вы предоставляете, возникает во время разработки,Они могут быть допущены как ошибки транскрипции, предварительно изучив вашу ошибку.

0 голосов
/ 14 октября 2018

Next_stat используется для сброса SYNC_PROC

next_state <= SA; </p>

, а также в процессе NEXT_STATE_DECODE.Вы не можете управлять им из двух процессов.

У вас также есть дополнительный `без уважительной причины.Это настоящий код?

...