|
Вопрос новичка по VHDL, Не работает "after Xms" |
|
|
|
May 13 2005, 01:36
|
Участник

Группа: Свой
Сообщений: 43
Регистрация: 4-02-05
Пользователь №: 2 412

|
Цитата(anatol1983 @ May 13 2005, 03:34) Ну что тут не понятного? VHDL описание состоит из двух частей: 1)интерфейсная часть; 2)архитектурная. В интерфейсной оприсываются порты, константы и тд и тп. В архитектурной части описывается поведение схемы. Сам VHDL-язык параллельного програмирования. Все операторы языка VHDL делятся на последовательные и параллельные, т.е каждый параллельный оператор выполняется отдельно. Последовательные опрераторы должны использоваться только в операторе process (или в процедурах и функциях). Сам же он (process) является параллельным оператором. Т.е. если в описании есть оператор process и к примеру оператор назначения (<=), то исполнятся они будут параллельно, а вот операторы process'а -последовательно Одну и туже схему можно описать как при помощи process так и при помощи <=. В Вашем случае, комб. логику можно описать так (логическое И): вот так все понятно. (как я и понял изначально). меня просто вот эта фраза в заблуждение ввела: Цитата ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса.
|
|
|
|
|
May 14 2005, 23:17
|

Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-02-05
Из: РОССИЯ г. Пенза
Пользователь №: 2 690

|
Цитата(asya @ May 13 2005, 05:36) вот так все понятно. (как я и понял изначально). меня просто вот эта фраза в заблуждение ввела: Цитата ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса. ...ну тут зависит от пристрастий программиста. Разница между описаниями приведёнными выше заключается в процессе моделирования (об моделировании VHDL-описаний см. ссылку, которую я давал выше) , а схема одна и таже
|
|
|
|
|
May 15 2005, 12:54
|
Участник

Группа: Свой
Сообщений: 43
Регистрация: 4-02-05
Пользователь №: 2 412

|
Код С<=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... точка с запятой ведь там не нужна? и с ней не будет работать? да и вообще примера толком не понял. зачем так было делать? по одному и тому же событию в один и тот же выход подаются разные сигналы. пример этот внизу страницы тут
|
|
|
|
|
May 15 2005, 23:57
|

Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-02-05
Из: РОССИЯ г. Пенза
Пользователь №: 2 690

|
Цитата(asya @ May 15 2005, 16:54) Код С<=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" тоже было ну и в др.
|
|
|
|
|
May 16 2005, 02:04
|
Участник

Группа: Свой
Сообщений: 43
Регистрация: 4-02-05
Пользователь №: 2 412

|
Цитата(anatol1983 @ May 16 2005, 03:57) Точки с запятой там не должно быть - это опечатка, но не надо строго придераться к автору (я встречал в книги в которых были ТАКИЕ опечатки, что просто жуть), к тому же на орфографические ошибки всегда укажет моделятор или синтезатор  Два process'а здесь надо расматривать как два самостоятельных описания, что касается сигнала ena, включай его в список или не включай результат будет один и тот же ИМХО. Описывается синхронный элемент, работающий по фронту CLK. В принципе синтезируемая схема зависит от выбраного синтезатора. А вообще советую Вам ознакомиться с готовыми синтезируемыми конструкиями VHDL. Найти их можно в описании синтезаторов (например, в описании синтезатора XST фирмы XILINX есть), потом в ISE есть синтезируемые шаблоны, в книге П.Н.Бибило "Синтез логических схем с использованием языка VHDL" тоже было ну и в др. где-то я читал, что если в скобки в процессе не занесен какой-нить сигнал - то может глючить. вернее там наоброт, кажется, было. что если глючит - советовали проверить все ли сигналы занесены в список чувствительности. насчет конструкций - спасибо. поищу, посмотрю.
|
|
|
|
|
May 16 2005, 03:17
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(asya @ May 12 2005, 20:36) вот так все понятно. (как я и понял изначально). меня просто вот эта фраза в заблуждение ввела: Цитата ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса. Я имел в виду следующее: например 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; то эти выражения будут вычилясться паралельно.
--------------------
|
|
|
|
|
May 16 2005, 06:19
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(andrew_b @ May 16 2005, 00:25) Цитата(des00 @ May 16 2005, 07:17) Я имел в виду следующее: например a <= a + b; c <= c + a;
в случае если это орисанно без процесса или в process(a,b,c,) эти выражения будут вычисленны последовательно Без процесса (т. е. без регистра) это не работает. хмм да вы правы  ) я имел в виду одно, а написал другое reg1 <= a + b; reg2 <= reg1 + c;
--------------------
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|