Vadim 0 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба Уважаемые гуру, просветите, пожалуйста по следующему вопросу: Известно, что выходной сигнал (порт типа out) в vhdl не может использоваться в качестве внутреннего сигнала. Иными словами, сигнал с выхода не может быть подан обратно в схему. Для этого нужно вводить дополнительный внутренний сигнал, а выходной описывать примерно так: SIGNAL_OUT <= SIGNAL_INT. Другая возможность - использовать порт типа buffer. Но, например, ISE при синтезе предупреждает, что это, возможно, приведет к трудностям при симуляции. Так чем же грозит применение портов типа buffer? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pyadvychuk 0 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба ничем не грозит. если порт типа буффер, то есть вероятность, что вы будете присваивать ему значения в разных процессах на разных уровнях иерархии и моделировщик не будет проверять такие ошибки - просто конфликтующий сигнал опоределит как 'U'. с другой стороны синтезатор уж точно даст вам пинка в этом месте. т.е. в железо такая конструкция ну никак не просочится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Кнкн 5 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба Уважаемые гуру, просветите, пожалуйста по следующему вопросу: Известно, что выходной сигнал (порт типа out) в vhdl не может использоваться в качестве внутреннего сигнала. Иными словами, сигнал с выхода не может быть подан обратно в схему. Для этого нужно вводить дополнительный внутренний сигнал, а выходной описывать примерно так: SIGNAL_OUT <= SIGNAL_INT. Другая возможность - использовать порт типа buffer. Но, например, ISE при синтезе предупреждает, что это, возможно, приведет к трудностям при симуляции. Так чем же грозит применение портов типа buffer? Мне представляется, что после синтеза в нетлисте не сохранится тип буфер, он преобразуется в аут. Это потенциально может вызвать трудности в моделировании после синтеза. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oval 0 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба Сам не проверял, но возможно предупреждение ISE связано с тем, что порт типа buffer при синтезе преобразуется в примитив IOBUF (а не OBUF), и соответственно в полученной после синтеза схеме, где считывается (используется) состояние этого порта, используется сигнал подключенный к входному буферу примитива IOBUF. То есть, используемое внутри значение будет отражать реальное состояние линии порта, а не значение, которое выдается на линию. З.Ы. Если удасться выяснить во что реально преобразуется порт после синтеза, напишите здесь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim 0 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба Спасибо за ответы. Теперь я буду бесстрашен при использовании buffer :) З.Ы. Если удасться выяснить во что реально преобразуется порт после синтеза, напишите здесь. Ну и, конечно, первым делом для начала это выясню. Хотя речь шла не только о выходных контактах всего проека, а и о таковых у компонентов, в него входящих. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oval 0 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба Спасибо за ответы. Теперь я буду бесстрашен при использовании buffer :) Не, тем не менее тип порта buffer лучше не использовать!!! Раньше некоторые средства синтеза не поддерживали этот тип. Вообщем использование этого типа считается "дурным тоном", и об этом встречаются фразы практически в каждой "нормальной" книге по VHDL. Кроме того, если я не ошибаюсь, из очередного стандарта VHDL этот тип будет вообще исключен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim 0 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба Спасибо за ответы. Теперь я буду бесстрашен при использовании buffer :) Не, тем не менее тип порта buffer лучше не использовать!!! Раньше некоторые средства синтеза не поддерживали этот тип. Вообщем использование этого типа считается "дурным тоном", и об этом встречаются фразы практически в каждой "нормальной" книге по VHDL. Кроме того, если я не ошибаюсь, из очередного стандарта VHDL этот тип будет вообще исключен. Ну, раз дело обстоит настолько серьезно... Жаль, только, что "нормальные" книги пишутся на английском :( У меня настольная - Бибило "Основы языка VHDL". Там ни слова, что нормальные пацаны buffer не используют :) Хотя... не припоминаю, чтобы там про buffer вообще упоминалось... До сих пор я избегал buffer. Видимо, все же стоит продолжать в том же духе по описанным Вами причинам. Мои проекты усложняются, требования к ним возрастают. Поэтому хочется научиться работать "по-взрослому". И еще вопрос из чистого любопытства : а в верилоге тоже нельзя выходные сигналы использовать в качестве внутренних или там по-другому? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба Известно, что выходной сигнал (порт типа out) в vhdl не может использоваться в качестве внутреннего сигнала. Иными словами, сигнал с выхода не может быть подан обратно в схему./////// Трудно понять, что Вы имеете ввиду. Например делитель на 2 на D триггере: это тот случай? Приведите свой пример текста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim 0 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба Известно, что выходной сигнал (порт типа out) в vhdl не может использоваться в качестве внутреннего сигнала. Иными словами, сигнал с выхода не может быть подан обратно в схему./////// Трудно понять, что Вы имеете ввиду. Например делитель на 2 на D триггере: это тот случай? Приведите свой пример текста. На самом деле это совсем не трудно :) Да, это именно тот случай, если его выход используется как port в entity. entity XXX is Port ( RESET : in std_logic; CLOCK : in std_logic; Q : out std_logic); end XXX; architecture Behavioral of XXX is signal Q_INT : std_logic; --вынужден вводить внутренний сигнал; begin process(RESET, CLOCK, Q_INT) begin if RESET = '1' then Q_INT <= '0'; elsif CLOCK'event and CLOCK = '1' then Q_INT <= not Q_INT; end if; end process; Q <= Q_INT; -- вынужден добавлять строку. end Behavioral; Или так: entity XXX is Port ( RESET : in std_logic; CLOCK : in std_logic; Q : buffer std_logic); end XXX; architecture Behavioral of XXX is begin process(RESET, CLOCK, Q) begin if RESET = '1' then Q <= '0'; elsif CLOCK'event and CLOCK = '1' then Q <= not Q; end if; end process; end Behavioral; Вообще-то я думал, что разговор закончен и использование buffer признано нецелесообразным, но я совсем не прочь узнать что-либо новое по этому поводу :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bar 0 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба Я вот так делал на Verilog, плис Virtex. module (....,a); ...... output a; wire b; wire d; OBUF (.I(b),.O(a)); IBUF (.I(a),.O(d)); endmodule; Конечно в этом варианте получается задержка на IBUF. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shamil 2 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба И еще вопрос из чистого любопытства : а в верилоге тоже нельзя выходные сигналы использовать в качестве внутренних или там по-другому? В верилоге нет таких проблем: module Counter( input Clk, output reg [7:0]Out ); always @(posedge Clk) Out <= Out + 1; endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oval 0 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба И еще вопрос из чистого любопытства : а в верилоге тоже нельзя выходные сигналы использовать в качестве внутренних или там по-другому? В верилоге нет таких проблем: module Counter( input Clk, output reg [7:0]Out ); always @(posedge Clk) Out <= Out + 1; endmodule Да, в Verilog такой проблемы нет. Уточнил, что в ближайшей редакции стандарта VHDL будет как в Verilog, порты можно будет читать, а вот по поводу того, будет ли исключен тип buffer ничего конкретного не указано. В любом случае, лучше buffer не использовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim 0 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба Спасибо за информацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 28 февраля, 2006 Опубликовано 28 февраля, 2006 · Жалоба я столкнулся с проблемой при симуляции порта inout что я никак не мог нормально передать данные в блок, они все время обнулялись... может с буфером что-то типа того же... Хотя я не вижу никакой проблемы сделать внутри еще один сигнал, который присоединить к выходу. А в англицкой книжульке читал про буфер и никаких варнингов там не встретил, хотя может книжка детская... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 23 марта, 2006 Опубликовано 23 марта, 2006 · Жалоба Кроме того, если я не ошибаюсь, из очередного стандарта VHDL этот тип будет вообще исключен. Думаю, ошибаетесь. Annex E Features under consideration for removal Ports of mode linkage (see 1.1.1.2 and 4.3.2) Не вижу никаких недостатков у buffer кроме возможного геморроя со старыим кривыми синтезаторами. Использовал в ISE и Modelsim для внутренних интерфейсов модулей - работает нормально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться