2014-10-30 3 views
-1

A Если условие в VHDL может быть реализовано с использованием MUX. Но я хочу, чтобы выход MUX менялся, когда на часах есть нарастающий фронт. Я действительно хотел дать часы и clk'event в качестве линии выбора для моего MUX.Структурная архитектура VHDL и clk'event

signal a:std_logic; 
process(clk) 
a <= clk and clk'event; 
o <= (a and s1) or ((not a) and s2); 
end process; 

Но это дало бы мне ошибку из-за clk'event. Я пробовал с clk'stable. Но поскольку clk'stable является булевым сигналом, это дало бы мне ошибку. Для этого нет никакого преобразования типов. Есть ли другая альтернатива для реализации PURE STRUCTURAL, а не поведенческая?

+0

Это только для моделирования или намерение сделать часть синтезируемого дизайна?Для синтезируемой части дизайна нет смысла использовать передний фронт как условие MUX, так как это условие не имеет длительности (0 пс), поэтому в этом случае можно будет пересмотреть работу конструкции. –

+0

@MortenZilmer - для синтезируемой части дизайна –

ответ

0

Предположительно clk является сигналом типа std_logic.

Не видя ваше фактическое сообщение об ошибке линии в вопросе:

a <= clk and clk'event; 

'event Атрибут возвращает тип BOOLEAN. clk представляется подходящим для оператора неявного условия (??), IEEE Std 1076-2008), который также возвращает тип BOOLEAN.

К сожалению, назначение a выполняется с неявным объявлением назначения сигнала для базового типа std_logic (std_ulogic), базовой операции и требует, чтобы тип ввода соответствовал целевому типу.

VHDL строго типизирован, и вы не можете назначить BOOLEAN для std_logic без преобразования типов.

Также назначение a было бы одним дельта-циклом долго, эффективно сбой или импульс.

Непонятно, что он имеет какое-либо полезное значение в синтезе.

Выход o будет s1 во a = '1', иначе s2, для списка чувствительности не включая a исключением.

Вы можете продемонстрировать одиночный дельту цикл длинного импульс в моделировании с использованием другого типа присваивания, например, условное присваиванием сигнала:

a <= '1' when clk = '1' and clk'event else 
    '0'; 

где в качестве сопутствующего условного присвоения результатов состояния в булевом а target - это «1» литерал перечисления, совместимый с std_logic, когда условие TRUE, или литеральный список нумерации «0», когда FALSE.

Поскольку a не находится в списке чувствительности для процесса в качестве последовательного назначения условного сигнала o всегда будет s2.

И если вы используете инструмент VHDL, совместимый со старым стандартом, условный оператор присваивания условного сигнала не будет работать в этом процессе.

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

Смежные вопросы