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

Вопрос новичка по VHDL

Ну что тут не понятного? VHDL описание состоит из двух частей: 1)интерфейсная часть; 2)архитектурная. В интерфейсной оприсываются порты, константы и тд и тп. В архитектурной части описывается поведение схемы. Сам VHDL-язык параллельного програмирования. Все операторы языка VHDL делятся на последовательные и параллельные, т.е каждый параллельный оператор выполняется отдельно. Последовательные опрераторы должны использоваться только в операторе process (или в процедурах и функциях). Сам же он (process) является параллельным оператором. Т.е. если в описании есть оператор process и к примеру оператор назначения (<=), то исполнятся они будут параллельно, а вот операторы process'а -последовательно

Одну и туже схему можно описать как при помощи process так и при помощи <=. В Вашем случае, комб. логику можно описать так (логическое И):

вот так все понятно. (как я и понял изначально).

меня просто вот эта фраза в заблуждение ввела:

ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса.

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


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

вот так все понятно. (как я и понял изначально).

меня просто вот эта фраза в заблуждение ввела:

ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса.

 

...ну тут зависит от пристрастий программиста. Разница между описаниями приведёнными выше заключается в процессе моделирования (об моделировании VHDL-описаний см. ссылку, которую я давал выше) , а схема одна и таже :)

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


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

С<=A+B;  -- отображается в сумматор;
process(clk) begin
  if rising_edge(clk)  then 
         if ena='1';  then
               С<=B;
         end if;
   end if;
end process; -- отображается в регистр с разрешением записи, а
process(clk) begin
  if rising_edge(clk) then 
       if ena='1' then
           С<=B+А;
       end if
;
  end if;
end process; -- отображается в тот же сумматор с тем же регистром на выходе.

тут в обоих процессах в скобках сигнал ena не указан. это ведь нехорошо, так? или я что-то не понял? (пример из той книги)

кроме того в первом процессе строка: if ena='1';  then... точка с запятой ведь там не нужна? и с ней не будет работать?

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

пример этот внизу страницы тут

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


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

С<=A+B;  -- отображается в сумматор;
process(clk) begin
  if rising_edge(clk)  then 
         if ena='1';  then
               С<=B;
         end if;
   end if;
end process; -- отображается в регистр с разрешением записи, а
process(clk) begin
  if rising_edge(clk) then 
       if ena='1' then
           С<=B+А;
       end if
;
  end if;
end process; -- отображается в тот же сумматор с тем же регистром на выходе.

тут в обоих процессах в скобках сигнал ena не указан. это ведь нехорошо, так? или я что-то не понял? (пример из той книги)

кроме того в первом процессе строка: if ena='1';  then... точка с запятой ведь там не нужна? и с ней не будет работать?

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

пример этот внизу страницы тут

 

Точки с запятой там не должно быть - это опечатка, но не надо строго придераться к автору (я встречал в книги в которых были ТАКИЕ опечатки, что просто жуть), к тому же на орфографические ошибки всегда укажет моделятор или синтезатор :) Два process'а здесь надо расматривать как два самостоятельных описания, что касается сигнала ena, включай его в список или не включай результат будет один и тот же ИМХО. Описывается синхронный элемент, работающий по фронту CLK. В принципе синтезируемая схема зависит от выбраного синтезатора. А вообще советую Вам ознакомиться с готовыми синтезируемыми конструкиями VHDL. Найти их можно в описании синтезаторов (например, в описании синтезатора XST фирмы XILINX есть), потом в ISE есть синтезируемые шаблоны, в книге П.Н.Бибило "Синтез логических схем с использованием языка VHDL" тоже было ну и в др.

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


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

Точки с запятой там не должно быть - это опечатка, но не надо строго придераться к автору (я встречал в книги в которых были ТАКИЕ опечатки, что просто жуть), к тому же на орфографические ошибки всегда укажет моделятор или синтезатор  :) Два process'а здесь надо расматривать как два самостоятельных описания, что касается сигнала ena, включай его в список или не включай результат будет один и тот же ИМХО. Описывается синхронный элемент, работающий по фронту CLK. В принципе синтезируемая схема зависит от выбраного синтезатора. А вообще советую Вам ознакомиться с готовыми синтезируемыми конструкиями VHDL. Найти их можно в описании синтезаторов (например, в описании синтезатора XST фирмы XILINX есть), потом в ISE есть синтезируемые шаблоны, в книге П.Н.Бибило "Синтез логических схем с использованием языка VHDL" тоже было ну и в др.

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

насчет конструкций - спасибо. поищу, посмотрю.

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


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

вот так все понятно. (как я и понял изначально).

меня просто вот эта фраза в заблуждение ввела:

ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса.

Я имел в виду следующее:

например

a <= a + b;

c <= c + a;

 

в случае если это орисанно без процесса или в process(a,b,c,) эти выражения будут вычисленны последовательно, если же их посадить на один клок:

process(clock) is

begin

if (rising_edge(clock)) then

a <= a + b;

c <= c + a;

end if;

end process;

то эти выражения будут вычилясться паралельно.

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


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

Я имел в виду следующее:

например

a <= a + b;

c <= c + a;

 

в случае если это орисанно без процесса или в process(a,b,c,) эти выражения будут вычисленны последовательно

Без процесса (т. е. без регистра) это не работает.

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


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

Я имел в виду следующее:

например

a <= a + b;

c <= c + a;

 

в случае если это орисанно без процесса или в process(a,b,c,) эти выражения будут вычисленны последовательно

Без процесса (т. е. без регистра) это не работает.

 

хмм да вы правы :)) я имел в виду одно, а написал другое

reg1 <= a + b;

reg2 <= reg1 + c;

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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