sisuprun 0 18 мая, 2012 Опубликовано 18 мая, 2012 · Жалоба tAmega Забавно, у меня тоже есть учебник Бибило по vhdl, вот в нем то как раз я и наткнулся на ошибки в синтаксисе о которых писал в первом посте ) Второй учебник у меня - Стешенко по альтере, там как то получше написано, но все равно вопросы остаются... Учил VHDL по Суворова Е.А., Шейнин Ю.Е. Проектирование цифровых систем на VHDL и Бабак В.П., Корченко А.Г. VHDL: Справочное пособие по основам языка : довольно в доступной форме все описано с множеством примеров. Удачи!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsmv 0 18 мая, 2012 Опубликовано 18 мая, 2012 · Жалоба Вот классическое описание триггера: entity fdd is port( resetn : in std_logic; set : in std_logic; clr : in std_logic; q : out std_logic ); end fdd; architecture fdd of fdd is begin pr_state; process( resetn, clk ) begin if( resetn='0' ) then q <= '0'; elsif( rising_edge( clk ) ) then if( clr='1 ) then q <= '0' after 1 ns; elsif( set='1' ) then q <= '1' after 1 ns; end if; end if; end fdd; На мой взгляд это выглядит гораздо лучше чем: q <= (set | q) & ~clr; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tAmega 0 18 мая, 2012 Опубликовано 18 мая, 2012 · Жалоба Вот только сбивает с толку это after 1ns. Это описание триггера для тестбенча, но никак не для синтезируемой схемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsmv 0 18 мая, 2012 Опубликовано 18 мая, 2012 · Жалоба Вот только сбивает с толку это after 1ns. Это описание триггера для тестбенча, но никак не для синтезируемой схемы. По стандарту языка конструкцию after 1 ns синтезатор игнорирует. А моделировать это помогает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 18 мая, 2012 Опубликовано 18 мая, 2012 · Жалоба Я бы в обязательном порядке приготовил тестбенч под прототип, который готовится под VHDL, и это позволит проверить потом себя. Позволит избежать ошибки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LV26 0 18 мая, 2012 Опубликовано 18 мая, 2012 · Жалоба Вот классическое описание триггера: entity fdd is port( resetn : in std_logic; set : in std_logic; clr : in std_logic; q : out std_logic ); end fdd; architecture fdd of fdd is begin pr_state; process( resetn, clk ) begin if( resetn='0' ) then q <= '0'; elsif( rising_edge( clk ) ) then if( clr='1 ) then q <= '0' after 1 ns; elsif( set='1' ) then q <= '1' after 1 ns; end if; end if; end fdd; На мой взгляд это выглядит гораздо лучше чем: q <= (set | q) & ~clr; Значительно лучше. А кошернее академически-классически все-же с elsif (clk'event AND clk = '1') then :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 21 мая, 2012 Опубликовано 21 мая, 2012 · Жалоба А кошернее академически-классически все-же с elsif (clk'event AND clk = '1') then Ерунда. Во-первых, rising_edge отродясь была в стандартном std_logic_1164, а во-вторых, она отлавливает переход из 0 в 1, а не из произвольного значения в 1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 23 мая, 2012 Опубликовано 23 мая, 2012 · Жалоба Ерунда. Во-первых, rising_edge отродясь была в стандартном std_logic_1164, а во-вторых, она отлавливает переход из 0 в 1, а не из произвольного значения в 1. А из 'L' в '1' пропускает? ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 23 мая, 2012 Опубликовано 23 мая, 2012 · Жалоба А из 'L' в '1' пропускает? ;) Это да. 'L' трактуется как '0', 'H' как '1'. Сорцы открыты, смотрите сами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться