Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос новичка по VHDL
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Языки проектирования на ПЛИС (FPGA)
asya
Вот такой вот код написал чтобы проверить работу директивы (или как это еще назвать) after.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity top is
Port ( a : in std_logic;
b : out std_logic);
end top;

architecture Behavioral of top is
begin
b<=a after 1000ms;
end Behavioral;
И проблема в том, что не работает. Вернее работает, но не так, как я себе это представлял. Происходит мгновенное срабатывание, а нес задержкой в одну секунду. (проверял на глаз, поэтому и поставил такую большую задержку)
Что не так?
Пользуюсь Xilinx ISE и Spartan3.
ЗЫЖ ногами не пинайте если я тут глупости наговорил, я новичек еще. smile.gif
des00
Цитата(asya @ May 10 2005, 20:06)
Вот такой вот код написал чтобы проверить работу директивы (или как это еще назвать) after.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity top is
    Port ( a : in std_logic;
          b : out std_logic);
end top;

architecture Behavioral of top is
begin
b<=a after 1000ms;
end Behavioral;
И проблема в том, что не работает. Вернее работает, но не так, как я себе это представлял. Происходит мгновенное срабатывание, а нес задержкой в одну секунду. (проверял на глаз, поэтому и поставил такую большую задержку)
Что не так?
Пользуюсь Xilinx ISE и Spartan3.
ЗЫЖ ногами не пинайте если я тут глупости наговорил, я новичек еще. smile.gif
*


а смотришь чем ?? не забыл что это не синтезируемая констукция ? smile.gif
makc
Как уже правильно заметил des00, это несинтезируемая конструкция, т.е. в реальном железе такая конструкция отражена быть не может. В каком режиме Вы моделируете? И чем пользуетесь для моделирования?
asya
Цитата(makc @ May 11 2005, 09:16)
Как уже правильно заметил des00, это несинтезируемая конструкция, т.е. в реальном железе такая конструкция отражена быть не может. В каком режиме Вы моделируете? И чем пользуетесь для моделирования?
*

вообще у меня стоит multisim для моделирования. но я им не пользуюсь. сразу синтезирую и заливаю в fpga. и там уже на практике смотрю, что получилось...
про несинтезируемость понятно. очередная несинтезирпуемая фигня. а обьясните мне тогда, зачем вообще нужны несинтезируемые фичи типа этой? где и зачем оно используется? и еще, я видел, что люди так синхронные дизайны делают используя эту конструкцию... (а если она несинтесируемая, то о какой синхронности можэно говорить?)
опять же. может глупость сказал. smile.gif
Pechkin
На все вопросы не отвечу, а отвечу только на :
Цитата(asya @ May 11 2005, 14:17)
зачем вообще нужны несинтезируемые фичи типа этой? где и зачем оно используется?


Изначально языки Verilog, VHDL и тому подобные предназначались ТОЛЬКО для описания поведения схем, а не для синтеза. Потом языки были стандартизованы... и только потом появились средства логического синтеза. А использовать можно для создания поведенческих описаний и для создания тестбенчей.
andrew_b
Цитата(asya @ May 11 2005, 15:17)
сразу синтезирую и заливаю в fpga. и там уже на практике смотрю, что получилось...

Ну это до поры до времени, пока проекты несерьезные. А так без функционального моделирования не обойтись.

Цитата
про несинтезируемость понятно. очередная несинтезирпуемая фигня.

Это не фигня. Это фича. Про нее уже сказали.
makc
Цитата(andrew_b @ May 11 2005, 16:05)
Цитата(asya @ May 11 2005, 15:17)
сразу синтезирую и заливаю в fpga. и там уже на практике смотрю, что получилось...

Ну это до поры до времени, пока проекты несерьезные. А так без функционального моделирования не обойтись.
*



Я бы сказал, что и без временного моделирования тоже не обойтись. Оно может быть очень полезно, особенно когда речь идет о схемах, работа которых основана на состязании сигналов и задержках элементов.
des00
Цитата(asya @ May 11 2005, 06:17)
и еще, я видел, что люди так синхронные дизайны делают используя эту конструкцию... (а если она несинтесируемая, то о какой синхронности можэно говорить?)
опять же. может глупость сказал. smile.gif
*

немного добавлю Синхронный дизайн это стиль проектирования когда все модули одного блока сидят на одной частоте. А те люди скорее всего использовали данную конструкцию в тестбенче для генератора клока smile.gif))
asya
Цитата(des00 @ May 11 2005, 17:21)
немного добавлю Синхронный дизайн это стиль проектирования когда все модули одного блока сидят на одной частоте. А те люди скорее всего использовали данную конструкцию в тестбенче для генератора клока smile.gif))
*

А как этим делом можно клок генерировать?
anatol1983
Цитата(asya @ May 12 2005, 00:54)
Цитата(des00 @ May 11 2005, 17:21)
немного добавлю Синхронный дизайн это стиль проектирования когда все модули одного блока сидят на одной частоте. А те люди скорее всего использовали данную конструкцию в тестбенче для генератора клока smile.gif))
*

А как этим делом можно клок генерировать?
*



в архитектурном теле тестбенча описывается сигнал CLK и ему присваивается начальное значение и в инвертируется через определённое время:

Код
architecture Behavioral of TestBentch is
.......
signal clk:std_logic:='0';
.......
begin
.......
clk<=not clk after 30 ns;
.......

а вообще про язык VHDL можно почитать здесь http://www.kvantn.com.ua/resourse/All/VHDL/VHDL_context.html . Здесь очень хорошо рассказано о VHDL в том числе и о тестбенчах
asya
Цитата(anatol1983 @ May 12 2005, 03:37)
в архитектурном теле тестбенча описывается сигнал CLK и ему присваивается начальное значение и в инвертируется через определённое время:

а вообще про язык VHDL можно почитать здесь http://www.kvantn.com.ua/resourse/All/VHDL/VHDL_context.html .  Здесь очень хорошо рассказано о VHDL в том числе и о тестбенчах
*

насчет клока - понятно. спасибо.
насчет линки - огромное спасибо. уже читаю. smile.gif
asya
прочитал про процессы. т.е. process.
я правильно понял? т.е. если в теле архитектуры несколько процессов - то все процессы выполняются параллельно. а внутри каждого процесса все идет последовательно?
и еще, можно ли написать процесс в процессе?
des00
Цитата(asya @ May 11 2005, 21:10)
прочитал про процессы. т.е. process.
я правильно понял? т.е. если в теле архитектуры несколько процессов - то все процессы выполняются параллельно. а внутри каждого процесса все идет последовательно?
и еще, можно ли написать процесс в процессе?
*

ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса. А процесс это блок который отслеживает изменения определенного сигнала и в соответсвии с этим сигналом идет измененрие работы схемы.
В зависимости от списка чуствительности и от логигки в процесее можно описать либо асинхронный либо синхронный блок.
ИМХО так.
asya
Цитата(des00 @ May 12 2005, 08:28)
ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса. А процесс это блок который отслеживает изменения определенного сигнала и в соответсвии с этим сигналом идет измененрие работы схемы.
В зависимости от списка чуствительности и от логигки в процесее можно описать либо асинхронный либо синхронный блок.
ИМХО так.
*

хмммм. теперь совсем запутался. т.е. внутри процесса не последовательное выполнение? а снаружи последовательное? поясните, плз.
anatol1983
Цитата(asya @ May 13 2005, 01:19)
Цитата(des00 @ May 12 2005, 08:28)
ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса. А процесс это блок который отслеживает изменения определенного сигнала и в соответсвии с этим сигналом идет измененрие работы схемы.
В зависимости от списка чуствительности и от логигки в процесее можно описать либо асинхронный либо синхронный блок.
ИМХО так.
*

хмммм. теперь совсем запутался. т.е. внутри процесса не последовательное выполнение? а снаружи последовательное? поясните, плз.
*



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

Код
--вариант с использованием <=
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity qwqq is
   Port ( a,b : in std_logic;c : out std_logic);
end qwqq;

architecture Behavioral of qwqq is
begin
c<=a and b;--параллельный оператор
end;

--вариант с использованием process
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity qwqq is
   Port ( a,b : in std_logic;c : out std_logic);
end qwqq;

process(a,b)--параллельный оператор process реагирующий на изменение портов a и bk
begin
c<=a and b;--последовательный оператор
end process;
end Behavioral;

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

вот так все понятно. (как я и понял изначально).
меня просто вот эта фраза в заблуждение ввела:
Цитата
ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса.
anatol1983
Цитата(asya @ May 13 2005, 05:36)
вот так все понятно. (как я и понял изначально).
меня просто вот эта фраза в заблуждение ввела:
Цитата
ИМХО нет, если нужно расписать последовательную логигуку то пишщемм ее вообще без процесса.

*



...ну тут зависит от пристрастий программиста. Разница между описаниями приведёнными выше заключается в процессе моделирования (об моделировании VHDL-описаний см. ссылку, которую я давал выше) , а схема одна и таже smile.gif
asya
Код
С<=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
Цитата(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... точка с запятой ведь там не нужна? и с ней не будет работать?
да и вообще примера толком не понял. зачем так было делать? по одному и тому же событию в один и тот же выход подаются разные сигналы.
пример этот внизу страницы тут
*


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

где-то я читал, что если в скобки в процессе не занесен какой-нить сигнал - то может глючить. вернее там наоброт, кажется, было. что если глючит - советовали проверить все ли сигналы занесены в список чувствительности.
насчет конструкций - спасибо. поищу, посмотрю.
des00
Цитата(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;
то эти выражения будут вычилясться паралельно.
andrew_b
Цитата(des00 @ May 16 2005, 07:17)
Я имел в виду следующее:
например
a <= a + b;
c <= c + a;

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

Без процесса (т. е. без регистра) это не работает.
des00
Цитата(andrew_b @ May 16 2005, 00:25)
Цитата(des00 @ May 16 2005, 07:17)
Я имел в виду следующее:
например
a <= a + b;
c <= c + a;

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

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



хмм да вы правы smile.gif) я имел в виду одно, а написал другое
reg1 <= a + b;
reg2 <= reg1 + c;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.