GrAlexI 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба Есть понятный оператор after понятно, что он реализует задержку. Так же знаю есть PLD в которых есть блок, который может реализовывать физически эти задержки. Так же где та мельком читал, что оператора after предназначен для симуляции задержки при построении диаграмм. Как же определится когда необходимо указывать задержку? Прошиваю ПЛИС Altera epf10k20, пытаюсь реализовать шину PCI в среде MAX+PLUS II 10.0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eugen_pcad_ru 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба after только для симуляции (в тecтбeнчax). В "железе" лoгические ячейки и триггеры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GrAlexI 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба При симуляции (в тecтбeнчax) в MAX+PLUS и Quartus аппарататные задержки учитываются, или надо самому учитывать при помощи after Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба При симуляции (в тecтбeнчax) в MAX+PLUS и Quartus аппарататные задержки учитываются, или надо самому учитывать при помощи after если указан тип микросхемы, то учитываются. Но если не хотите ждать долго при каждой компиляции, то лучше эту опцию отключить, сделать весь проект на уровне RTL и только потом заняться привязкой к кристаллу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GrAlexI 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба При превязки к кристалу в симуляции оператор after учитывается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба При превязки к кристалу в симуляции оператор after учитывается? Нет. Просто забудьте об этом и все. Если делаете только первыу часть проекта - RTL, то привязка к кристаллу вообще не нужна. А после размещения проекта на кристалле софт сам из файла размещения вытащит все нужные задержки. Остается задать требуемую тактовую частоту синхронизации проекта. И софт сообщит, выполнены ли все требования по частоте. Если нет, то смотрите, в какой части проекта что надо исправить... Все несинтезируемые операторы языка нужны только для того, чтобы при симуляции сделать какие-либо вещи. Например, снаружи к ПЛИС подключается АЦП. И для совместной симуляции Вам надо быстро сделать его модель. Вот тогда Вы напишите, что если пришел сигнал запуска АЦП, то "after ХХ сек"готовность = 1, а данные от АЦП = "код от АЦП"... Ну и так далее... У меня на сайте, в статьях есть раздел: "Краткий курс"... Читайте об отладке и о синтезируемых и несинтезируемых конструкциях языка... Удачи! PS и поставьте себе Моделсим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GrAlexI 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба А в общем смогу полноценно реализовать шину PCI на efp10k20. Я самостоятельно сделал конфигурацию, обрушение к памяти и портам все работает, но при некоторых имениях диаграммы не изменяются, то есть работать должна, но по результату не работает - возникает постаяно вопрос в чем проблема или epf10k20 что-то не поддерживает или MAX+PLUS не подходит для таких реализаций, а то он многие транскрипции vhdl не понимает. Советы кто ни будь может дать? Если использовать Quartus, то есть какая-та версия которая поддерживает epf10k20, где ее можно взять? На сайте Altera только последнии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eugen_pcad_ru 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба Используйте готовое старое ядpо от альтepы с поддержкой мaкcплюcа. например, 2 1 0. Не сможете найти, пишите в личку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба А в общем смогу полноценно реализовать шину PCI на efp10k20. Я делал PCI очень давно на 10К20 или 50, точно уже не помню... Проблема была в том, что надо успевать дешифрировать адрес за 3 такта... И считать сумму тоже за 3 такта... У PCI компонентов по стандарту надо заполнять лист с вопросами. Там все вопросы заданы. Например, соотв. сетап-холд, и т.д. Ну и кроме этого важна разводка сигналов. Например, змейка для клока. У Альтеры для серии 10к был сделан компонент, который работал только при жесткой привязке к пинам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GrAlexI 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 (изменено) · Жалоба eugen_pcad_ru Ядpо с поддержкой мaкcплюcа интересная для меня новость, я никогда такого не слышал, где находится значит не знаешь? iosifk Фраза "дешифрировать адрес за 3 такта" - не вижу проблем так как у меня успевает за такт, толь ко у меня скорость 33, а не 66? Изменено 29 февраля, 2012 пользователем GrAlexI Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба Фраза "дешифрировать адрес за 3 такта" - не вижу проблем так как у меня успевает за такт, толь ко у меня скорость 33, а не 66? А я вижу, что у Вас действительно проблема есть. И она в том, что Вы не понимаете как работает схема сравнения адреса. Сколько в ней каскадов? И какая задержка на каскад? Альтера тоже, как и я не сумела сделать дешифратор за один такт. Напишите им, скажите, что мол ленивые они и не умеют делать цепи сравнения... Дальше тему и продолжать не вижу смысла... Учите мат.часть... :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GrAlexI 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба Где и откуда посоветуещь почитать? Цитата: "Сколько в ней каскадов? И какая задержка на каскад?" - да я непонимаю поэтому и спрашивал про оператор after, думаю что я что-то неучитываю! И выходит, что симуляция не учитывает какие задержки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба Где и откуда посоветуещь почитать? after И выходит, что симуляция не учитывает какие задержки? after при синтезе какой примитив должен порождать? если хотите получить задержку, не привязанную к системной частоте у Альтеры это примитив lcell. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GrAlexI 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 (изменено) · Жалоба Пример сравнения -------- ENTITY pci IS PORT ( a :in STD_LOGIC_VECTOR(3 downto 0); b :in STD_LOGIC_VECTOR(3 downto 0); o : out STD_LOGIC ); END ENTITY; ARCHITECTURE pcix OF pci IS BEGIN PROCESS BEGIN if (a = b ) then o <= '0'; else o <= '1'; end if; END PROCESS; END ARCHITECTURE; ---------------------------- ------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ Получил § Device-Specific Information:c:\---proect_pld---\9_3_pci____memery______5\pci.rpt pci ** EQUATIONS ** a0 : INPUT; a1 : INPUT; a2 : INPUT; a3 : INPUT; b0 : INPUT; b1 : INPUT; b2 : INPUT; b3 : INPUT; -- Node name is 'o' -- Equation name is 'o', type is output o = !_LC1_C17; -- Node name is '~29~1' -- Equation name is '~29~1', location is LC3_C17, type is buried. -- synthesized logic cell _LC3_C17 = LCELL( _EQ001); _EQ001 = a3 & !b3 # !a3 & b3 # a2 & !b2 # !a2 & b2; -- Node name is ':29' -- Equation name is '_LC1_C17', type is buried !_LC1_C17 = _LC1_C17~NOT; _LC1_C17~NOT = LCELL( _EQ002); _EQ002 = a1 & !b1 # !a1 & b1 # !_LC2_C17 # _LC3_C17; -- Node name is ':33' -- Equation name is '_LC2_C17', type is buried !_LC2_C17 = _LC2_C17~NOT; _LC2_C17~NOT = LCELL( _EQ003); _EQ003 = a0 & !b0 # !a0 & b0; ----------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------- LCELL - это логическая ячейка и имеет задержку _LC1_C17 - получает результат от другой логической ячейки, значит на нем получится результат еще поже. Это симулятор значит не учитывает или я в не том направлении движусь. Изменено 29 февраля, 2012 пользователем GrAlexI Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GrAlexI 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 (изменено) · Жалоба Я дествительно только учусь, но я реализовал на ПЛИС 10К20 шину PCI, которая реализованна конфигурация, обращение к порту и памяти и она работает без сбоев и как раз определение адреса за один такт. Я прекрепил рисунки диаграмм с проекта. Ниже пример определение адреса, но как iosifk ты отслеживаещь сколько занимает задержка ведь в диаграмме я невижу? type bools IS ARRAY (natural range <>) OF boolean; signal oe_PCI : bools(2 downto 0); oe_PCI(0) <= (idsel='1' and (cbe=CFGREAD or cbe=CFGWRITE) and ad(1 downto 0)="00"); oe_PCI(1) <= ((cbe=IOREAD or cbe=IOWRITE) and ad(15 downto 3)=cfg_bar_io(12 downto 0) and ad(31 downto 16)="0000000000000000" ); oe_PCI(2) <= ((cbe=MEMREAD or cbe=MEMWRITE) and ad(31 downto 8)=cfg_bar_mem(23 downto 0)); ELSIF (clk'EVENT and clk = '1') THEN --- takt case (state) is --- state --========================================================-- --======================== IDLE ==========================-- --========================================================-- when IDLE => --- state m_we <= '0'; devselx <= '0'; if (frame='1') then oe <= '0'; oe_ad <= '0'; m_pci_rw <= '0'; else if (oe_PCI(0) or oe_PCI(1) or oe_PCI(2)) then state <= cbe; else state <= BUSY; end if; end if; Изменено 29 февраля, 2012 пользователем GrAlexI Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться