Перейти к содержанию
    

Использование оператора after в VHDL

Есть понятный оператор after понятно, что он реализует задержку. Так же знаю есть PLD в которых есть блок, который может реализовывать физически эти задержки. Так же где та мельком читал, что оператора after предназначен для симуляции задержки при построении диаграмм.

Как же определится когда необходимо указывать задержку? Прошиваю ПЛИС Altera epf10k20, пытаюсь реализовать шину PCI в среде MAX+PLUS II 10.0.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

after только для симуляции (в тecтбeнчax). В "железе" лoгические ячейки и триггеры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При симуляции (в тecтбeнчax) в MAX+PLUS и Quartus аппарататные задержки учитываются, или надо самому учитывать при помощи after

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При симуляции (в тecтбeнчax) в MAX+PLUS и Quartus аппарататные задержки учитываются, или надо самому учитывать при помощи after

если указан тип микросхемы, то учитываются. Но если не хотите ждать долго при каждой компиляции, то лучше эту опцию отключить, сделать весь проект на уровне RTL и только потом заняться привязкой к кристаллу...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При превязки к кристалу в симуляции оператор after учитывается?

Нет.

Просто забудьте об этом и все. Если делаете только первыу часть проекта - RTL, то привязка к кристаллу вообще не нужна. А после размещения проекта на кристалле софт сам из файла размещения вытащит все нужные задержки. Остается задать требуемую тактовую частоту синхронизации проекта. И софт сообщит, выполнены ли все требования по частоте. Если нет, то смотрите, в какой части проекта что надо исправить...

Все несинтезируемые операторы языка нужны только для того, чтобы при симуляции сделать какие-либо вещи. Например, снаружи к ПЛИС подключается АЦП. И для совместной симуляции Вам надо быстро сделать его модель. Вот тогда Вы напишите, что если пришел сигнал запуска АЦП, то "after ХХ сек"готовность = 1, а данные от АЦП = "код от АЦП"... Ну и так далее...

У меня на сайте, в статьях есть раздел: "Краткий курс"... Читайте об отладке и о синтезируемых и несинтезируемых конструкциях языка...

Удачи!

 

PS и поставьте себе Моделсим.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в общем смогу полноценно реализовать шину PCI на efp10k20. Я самостоятельно сделал конфигурацию, обрушение к памяти и портам все работает, но при некоторых имениях диаграммы не изменяются, то есть работать должна, но по результату не работает - возникает постаяно вопрос в чем проблема или epf10k20 что-то не поддерживает или MAX+PLUS не подходит для таких реализаций, а то он многие транскрипции vhdl не понимает. Советы кто ни будь может дать? Если использовать Quartus, то есть какая-та версия которая поддерживает epf10k20, где ее можно взять? На сайте Altera только последнии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Используйте готовое старое ядpо от альтepы с поддержкой мaкcплюcа. например, 2 1 0.

Не сможете найти, пишите в личку.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в общем смогу полноценно реализовать шину PCI на efp10k20.

 

Я делал PCI очень давно на 10К20 или 50, точно уже не помню...

Проблема была в том, что надо успевать дешифрировать адрес за 3 такта... И считать сумму тоже за 3 такта... У PCI компонентов по стандарту надо заполнять лист с вопросами. Там все вопросы заданы. Например, соотв. сетап-холд, и т.д.

Ну и кроме этого важна разводка сигналов. Например, змейка для клока.

У Альтеры для серии 10к был сделан компонент, который работал только при жесткой привязке к пинам.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

eugen_pcad_ru

Ядpо с поддержкой мaкcплюcа интересная для меня новость, я никогда такого не слышал, где находится значит не знаешь?

 

iosifk

Фраза "дешифрировать адрес за 3 такта" - не вижу проблем так как у меня успевает за такт, толь ко у меня скорость 33, а не 66?

post-65818-1330512571_thumb.png

Изменено пользователем GrAlexI

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Фраза "дешифрировать адрес за 3 такта" - не вижу проблем так как у меня успевает за такт, толь ко у меня скорость 33, а не 66?

 

А я вижу, что у Вас действительно проблема есть. И она в том, что Вы не понимаете как работает схема сравнения адреса. Сколько в ней каскадов? И какая задержка на каскад?

Альтера тоже, как и я не сумела сделать дешифратор за один такт. Напишите им, скажите, что мол ленивые они и не умеют делать цепи сравнения...

Дальше тему и продолжать не вижу смысла...

Учите мат.часть... :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где и откуда посоветуещь почитать?

 

Цитата: "Сколько в ней каскадов? И какая задержка на каскад?" - да я непонимаю поэтому и спрашивал про оператор after, думаю что я что-то неучитываю!

 

 

И выходит, что симуляция не учитывает какие задержки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где и откуда посоветуещь почитать?

 

after

И выходит, что симуляция не учитывает какие задержки?

 

after при синтезе какой примитив должен порождать?

если хотите получить задержку, не привязанную к системной частоте у Альтеры это примитив lcell.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример сравнения --------

 

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 - получает результат от другой логической ячейки, значит на нем получится результат еще поже.

Это симулятор значит не учитывает или я в не том направлении движусь.

Изменено пользователем GrAlexI

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я дествительно только учусь, но я реализовал на ПЛИС 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;

post-65818-1330533826_thumb.png

post-65818-1330533848_thumb.png

Изменено пользователем GrAlexI

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...