|
Quartus и VHDL, Как так-то... |
|
|
|
Jul 18 2008, 09:01
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 27-02-07
Пользователь №: 25 709

|
Со стэйт машинами я тут долго мудрил...вот нашёл в квартусе уже готовую часть нечто похожего на то, что мне нужно...покопался в коде и взял их оттуда..вот..
Вариант с OUT(1) - подошёл. Спасибо большое за подсказку! А вот там, где OUT(2)<=CNF_RD, при замене на '0' летит диаграмма вывода данных на AD1 при попадании на процедуру CONF_READ, хотя все управляющие сигналы DEVSELn, TRDYn, STOPn и PAR выставляются правильно...
И ещё при конфигурировании, то есть CNF_WR='1' засчёлкивается адрес, присвоенный моему устройству, в ADR. Он пишется правильно и храниться до конца работы. С этим адресом нужно сравнивать приходящий на AD1 код, что и делается в строчке:
RD_TX <= '0' when (FRAMEn='0' and AD1=ADR) else '1';
так вот, если писать так, то при сравнении AD1 и ADR, все сигналы становятся неопределёнными...а если задать адрес в переменную, то всё работает:
RD_TX <= '0' when (FRAMEn='0' and AD1=CNF(4)) else '1';
Сообщение отредактировал hynter - Jul 18 2008, 09:05
|
|
|
|
|
Jul 18 2008, 09:11
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
2 hynter - ступил малёхо, вы Код CNF_RD Заюзываете в процессе раздачи тасков Код --************************** --*STATE_mashine_controller* --**************************
process(NOT_WE,CNF_WR,CNF_RD,DONE,OTHER_CMD) begin case STAT is when IDLE => if (NOT_WE='0') then if CBEn="0010" then nxt_stat<=S_DATA; else nxt_stat<=BACKOFF; end if; !!! elsif (CNF_RD='1') then nxt_stat<=CONF_RD; elsif (CNF_WR='1') then nxt_stat<=CONF_WR; И есчё вот тут Код --Сохранение адреса читаемого регистра в пространстве конфигурации Process(CNF_RD) begin if (CNF_RD'event and CNF_RD='1') then ADDR <= AD1(7 downto 2); end if; end process; Ототго видно и валится. Не ненужный это сигнал оказался(ADDR кстати в вашей процедуре в стэйт-машине как раз присутствует).. Так что наверно следут оставить его в покое... Внимательней надо быть, этож ваш код..
|
|
|
|
|
Jul 18 2008, 10:01
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 27-02-07
Пользователь №: 25 709

|
Я и не говорил, что CHF_RD не нужен! Как раз-таки очень нужный это сигнал.... Я сказал, что выводить его на OUT2(2) нет необходимости...я когда отлаживал - выводил и смотрел его состояние.....а когда всё заработало - я его (этот вывод) удалил и всё полетело...вот в чём вопрос.... Ну, впринципе, да и ладно бы с ним...пускай выводится...просто не буду назначать эти пины на саму ПЛИСину...
А вот ADDR я и не трогаю! С ним вообще всё отлично...сохраняется...распознаётся..выводится куда надо...засада в следующей засчёлке:
--Сохранение адреса устройства в регистр адреса в пространстве конфигурации Process(CNF_WR) begin if (CNF_WR'event and CNF_WR='0') then ADR:= AD1(31 downto 2)&"01" ; end if; end process;
вот с этим ADR-ом упорно не хочет корректно сравниваться...
Сообщение отредактировал hynter - Jul 18 2008, 10:02
|
|
|
|
|
Jul 18 2008, 10:57
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 27-02-07
Пользователь №: 25 709

|
Хорошо!=) Спасибо большое за помощь! А RTL - это чё это и где это найти?? =)
|
|
|
|
|
Jul 19 2008, 14:05
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 27-02-07
Пользователь №: 25 709

|
Понял почему такая фигня происходит! У меня ПЛИС EPM3256ATI144-10...она слишком медленная оказалась...если запустить на другой, со скоростью -5, то всё работате....беда только в том, что я никак не могу найти такую ПЛИС, да чтобы ешё и Индастриал была.....что делать...ума ни приложу....
|
|
|
|
|
Jul 19 2008, 15:03
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 27-02-07
Пользователь №: 25 709

|
Как какая....всё та же: перестаёт работать, если удалить вывод OUT2(2)<=CNF_RD, все сигналы становятся неопределёнными, при сравнивании данных на AD1 и того, что помещено в ADR...если взять другую плисину, ну, например, EPM7256AEFC256-5, то всё работает отлично и никаких глюков не происходит...
|
|
|
|
|
Jul 19 2008, 16:37
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 27-02-07
Пользователь №: 25 709

|
Цитата(hynter @ Jul 19 2008, 18:05)  Понял почему такая фигня происходит! ... А нет...шутка...всё равно не работает...правда теперь в другом месте...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|