asya 0 13 мая, 2005 Опубликовано 13 мая, 2005 · Жалоба Ну что тут не понятного? VHDL описание состоит из двух частей: 1)интерфейсная часть; 2)архитектурная. В интерфейсной оприсываются порты, константы и тд и тп. В архитектурной части описывается поведение схемы. Сам VHDL-язык параллельного програмирования. Все операторы языка VHDL делятся на последовательные и параллельные, т.е каждый параллельный оператор выполняется отдельно. Последовательные опрераторы должны использоваться только в операторе process (или в процедурах и функциях). Сам же он (process) является параллельным оператором. Т.е. если в описании есть оператор process и к примеру оператор назначения (<=), то исполнятся они будут параллельно, а вот операторы process'а -последовательно Одну и туже схему можно описать как при помощи process так и при помощи <=. В Вашем случае, комб. логику можно описать так (логическое И): <{POST_SNAPBACK}> вот так все понятно. (как я и понял изначально). меня просто вот эта фраза в заблуждение ввела: ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
anatol1983 0 14 мая, 2005 Опубликовано 14 мая, 2005 · Жалоба вот так все понятно. (как я и понял изначально). меня просто вот эта фраза в заблуждение ввела: ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса. <{POST_SNAPBACK}> ...ну тут зависит от пристрастий программиста. Разница между описаниями приведёнными выше заключается в процессе моделирования (об моделировании VHDL-описаний см. ссылку, которую я давал выше) , а схема одна и таже :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
asya 0 15 мая, 2005 Опубликовано 15 мая, 2005 · Жалоба С<=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... точка с запятой ведь там не нужна? и с ней не будет работать? да и вообще примера толком не понял. зачем так было делать? по одному и тому же событию в один и тот же выход подаются разные сигналы. пример этот внизу страницы тут Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
anatol1983 0 15 мая, 2005 Опубликовано 15 мая, 2005 · Жалоба С<=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... точка с запятой ведь там не нужна? и с ней не будет работать? да и вообще примера толком не понял. зачем так было делать? по одному и тому же событию в один и тот же выход подаются разные сигналы. пример этот внизу страницы тут <{POST_SNAPBACK}> Точки с запятой там не должно быть - это опечатка, но не надо строго придераться к автору (я встречал в книги в которых были ТАКИЕ опечатки, что просто жуть), к тому же на орфографические ошибки всегда укажет моделятор или синтезатор :) Два process'а здесь надо расматривать как два самостоятельных описания, что касается сигнала ena, включай его в список или не включай результат будет один и тот же ИМХО. Описывается синхронный элемент, работающий по фронту CLK. В принципе синтезируемая схема зависит от выбраного синтезатора. А вообще советую Вам ознакомиться с готовыми синтезируемыми конструкиями VHDL. Найти их можно в описании синтезаторов (например, в описании синтезатора XST фирмы XILINX есть), потом в ISE есть синтезируемые шаблоны, в книге П.Н.Бибило "Синтез логических схем с использованием языка VHDL" тоже было ну и в др. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
asya 0 16 мая, 2005 Опубликовано 16 мая, 2005 · Жалоба Точки с запятой там не должно быть - это опечатка, но не надо строго придераться к автору (я встречал в книги в которых были ТАКИЕ опечатки, что просто жуть), к тому же на орфографические ошибки всегда укажет моделятор или синтезатор :) Два process'а здесь надо расматривать как два самостоятельных описания, что касается сигнала ena, включай его в список или не включай результат будет один и тот же ИМХО. Описывается синхронный элемент, работающий по фронту CLK. В принципе синтезируемая схема зависит от выбраного синтезатора. А вообще советую Вам ознакомиться с готовыми синтезируемыми конструкиями VHDL. Найти их можно в описании синтезаторов (например, в описании синтезатора XST фирмы XILINX есть), потом в ISE есть синтезируемые шаблоны, в книге П.Н.Бибило "Синтез логических схем с использованием языка VHDL" тоже было ну и в др. <{POST_SNAPBACK}> где-то я читал, что если в скобки в процессе не занесен какой-нить сигнал - то может глючить. вернее там наоброт, кажется, было. что если глючит - советовали проверить все ли сигналы занесены в список чувствительности. насчет конструкций - спасибо. поищу, посмотрю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 16 мая, 2005 Опубликовано 16 мая, 2005 · Жалоба вот так все понятно. (как я и понял изначально). меня просто вот эта фраза в заблуждение ввела: ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса. <{POST_SNAPBACK}> Я имел в виду следующее: например 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; то эти выражения будут вычилясться паралельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 16 мая, 2005 Опубликовано 16 мая, 2005 · Жалоба Я имел в виду следующее: например a <= a + b; c <= c + a; в случае если это орисанно без процесса или в process(a,b,c,) эти выражения будут вычисленны последовательно Без процесса (т. е. без регистра) это не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 16 мая, 2005 Опубликовано 16 мая, 2005 · Жалоба Я имел в виду следующее: например a <= a + b; c <= c + a; в случае если это орисанно без процесса или в process(a,b,c,) эти выражения будут вычисленны последовательно Без процесса (т. е. без регистра) это не работает. <{POST_SNAPBACK}> хмм да вы правы :)) я имел в виду одно, а написал другое reg1 <= a + b; reg2 <= reg1 + c; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться