Перейти к содержанию
    

Применение портов типа buffer?

Уважаемые гуру, просветите, пожалуйста по следующему вопросу:

Известно, что выходной сигнал (порт типа out) в vhdl не может использоваться в качестве внутреннего сигнала. Иными словами, сигнал с выхода не может быть подан обратно в схему. Для этого нужно вводить дополнительный внутренний сигнал, а выходной описывать примерно так:

SIGNAL_OUT <= SIGNAL_INT. Другая возможность - использовать порт типа buffer. Но, например, ISE при синтезе предупреждает, что это, возможно, приведет к трудностям при симуляции.

Так чем же грозит применение портов типа buffer?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ничем не грозит.

если порт типа буффер, то есть вероятность, что вы будете присваивать ему значения в разных процессах на разных уровнях иерархии и моделировщик не будет проверять такие ошибки - просто конфликтующий сигнал опоределит как 'U'.

с другой стороны синтезатор уж точно даст вам пинка в этом месте.

т.е. в железо такая конструкция ну никак не просочится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемые гуру, просветите, пожалуйста по следующему вопросу:

Известно, что выходной сигнал (порт типа out) в vhdl не может использоваться в качестве внутреннего сигнала. Иными словами, сигнал с выхода не может быть подан обратно в схему. Для этого нужно вводить дополнительный внутренний сигнал, а выходной описывать примерно так:

SIGNAL_OUT <= SIGNAL_INT. Другая возможность - использовать порт типа buffer. Но, например, ISE при синтезе предупреждает, что это, возможно, приведет к трудностям при симуляции.

Так чем же грозит применение портов типа buffer?

 

Мне представляется, что после синтеза в нетлисте не сохранится

тип буфер, он преобразуется в аут. Это потенциально может

вызвать трудности в моделировании после синтеза.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сам не проверял, но возможно предупреждение ISE связано с тем, что порт типа buffer при синтезе преобразуется в примитив IOBUF (а не OBUF), и соответственно в полученной после синтеза схеме, где считывается (используется) состояние этого порта, используется сигнал подключенный к входному буферу примитива IOBUF. То есть, используемое внутри значение будет отражать реальное состояние линии порта, а не значение, которое выдается на линию.

 

З.Ы. Если удасться выяснить во что реально преобразуется порт после синтеза, напишите здесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответы. Теперь я буду бесстрашен при использовании buffer :)

З.Ы. Если удасться выяснить во что реально преобразуется порт после синтеза, напишите здесь.

Ну и, конечно, первым делом для начала это выясню. Хотя речь шла не только о выходных контактах всего проека, а и о таковых у компонентов, в него входящих.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответы. Теперь я буду бесстрашен при использовании buffer :)

Не, тем не менее тип порта buffer лучше не использовать!!! Раньше некоторые средства синтеза не поддерживали этот тип. Вообщем использование этого типа считается "дурным тоном", и об этом встречаются фразы практически в каждой "нормальной" книге по VHDL. Кроме того, если я не ошибаюсь, из очередного стандарта VHDL этот тип будет вообще исключен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответы. Теперь я буду бесстрашен при использовании buffer :)

Не, тем не менее тип порта buffer лучше не использовать!!! Раньше некоторые средства синтеза не поддерживали этот тип. Вообщем использование этого типа считается "дурным тоном", и об этом встречаются фразы практически в каждой "нормальной" книге по VHDL. Кроме того, если я не ошибаюсь, из очередного стандарта VHDL этот тип будет вообще исключен.

Ну, раз дело обстоит настолько серьезно... Жаль, только, что "нормальные" книги пишутся на английском :( У меня настольная - Бибило "Основы языка VHDL". Там ни слова, что нормальные пацаны buffer не используют :) Хотя... не припоминаю, чтобы там про buffer вообще упоминалось...

До сих пор я избегал buffer. Видимо, все же стоит продолжать в том же духе по описанным Вами причинам. Мои проекты усложняются, требования к ним возрастают. Поэтому хочется научиться работать "по-взрослому".

И еще вопрос из чистого любопытства : а в верилоге тоже нельзя выходные сигналы использовать в качестве внутренних или там по-другому?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Известно, что выходной сигнал (порт типа out) в vhdl не может использоваться в качестве внутреннего сигнала. Иными словами, сигнал с выхода не может быть подан обратно в схему.///////

Трудно понять, что Вы имеете ввиду. Например делитель на 2 на D триггере: это тот случай?

Приведите свой пример текста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Известно, что выходной сигнал (порт типа 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 признано нецелесообразным, но я совсем не прочь узнать что-либо новое по этому поводу :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я вот так делал на Verilog, плис Virtex.

 

module (....,a);

 

......

output a;

wire b;

wire d;

 

OBUF (.I(b),.O(a));

IBUF (.I(a),.O(d));

 

endmodule;

 

Конечно в этом варианте получается задержка на IBUF.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И еще вопрос из чистого любопытства : а в верилоге тоже нельзя выходные сигналы использовать в качестве внутренних или там по-другому?

В верилоге нет таких проблем:

 

module Counter( input Clk, output reg [7:0]Out );

 

always @(posedge Clk) Out <= Out + 1;

 

endmodule

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И еще вопрос из чистого любопытства : а в верилоге тоже нельзя выходные сигналы использовать в качестве внутренних или там по-другому?

В верилоге нет таких проблем:

 

module Counter( input Clk, output reg [7:0]Out );

 

always @(posedge Clk) Out <= Out + 1;

 

endmodule

Да, в Verilog такой проблемы нет. Уточнил, что в ближайшей редакции стандарта VHDL будет как в Verilog, порты можно будет читать, а вот по поводу того, будет ли исключен тип buffer ничего конкретного не указано. В любом случае, лучше buffer не использовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я столкнулся с проблемой при симуляции порта inout что я никак не мог нормально передать данные в блок, они все время обнулялись... может с буфером что-то типа того же... Хотя я не вижу никакой проблемы сделать внутри еще один сигнал, который присоединить к выходу. А в англицкой книжульке читал про буфер и никаких варнингов там не встретил, хотя может книжка детская...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кроме того, если я не ошибаюсь, из очередного стандарта VHDL этот тип будет вообще исключен.

 

Думаю, ошибаетесь.

 

Annex E

Features under consideration for removal

Ports of mode linkage (see 1.1.1.2 and 4.3.2)

 

Не вижу никаких недостатков у buffer кроме возможного геморроя со старыим кривыми синтезаторами. Использовал в ISE и Modelsim для внутренних интерфейсов модулей - работает нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...