реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Quartus и VHDL, Как так-то...
Kuzmi4
сообщение Jul 18 2008, 08:09
Сообщение #16


Гуру
******

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



Посмотрел в обсчем я ваш код - стэйт машины там у вас страшные (RTL в 1 лист блин не вмещается sad.gif, хотя задача не такая и сложная), я бы по другому немного реализовал а то латчи вставляет вам там, ну да ладно.
Итак - чем не подходит вариант
Код
OUT2(1)<='0';
OUT2(2)<='0';
??
Go to the top of the page
 
+Quote Post
hynter
сообщение Jul 18 2008, 09:01
Сообщение #17


Участник
*

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 18 2008, 09:11
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 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 кстати в вашей процедуре в стэйт-машине как раз присутствует)..
Так что наверно следут оставить его в покое...
Внимательней надо быть, этож ваш код..
Go to the top of the page
 
+Quote Post
hynter
сообщение Jul 18 2008, 10:01
Сообщение #19


Участник
*

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 18 2008, 10:15
Сообщение #20


Гуру
******

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



2 hynter - меня тут смущают огромное кол-во shared variablе..
Хотя я тоже в замешательстве почему так...

Было б меньше листов RTL-я можно былоб посмотреть - тогда точно б стало всё ясно, а так...
В принципе я бы реализовал через муксы AD и там защёлок не нужно было б на выходе, хотя я так глядел - есть там муксы вроде..
Короче советую углубиться в изучение RTL и избавиться от shared variable - signal`ами позменять посмотреть..
Go to the top of the page
 
+Quote Post
hynter
сообщение Jul 18 2008, 10:57
Сообщение #21


Участник
*

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



Хорошо!=) Спасибо большое за помощь!
А RTL - это чё это и где это найти?? =)
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 18 2008, 12:19
Сообщение #22


Гуру
******

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



2 hynter - показываю:
Прикрепленное изображение

RTL - это сокращение от register transfer level - ну типа как в MaxPlusII вы оперируете элементарными компонентами.
Memory Mapped - это как оно будет реализовано в FPGA.
Chip Planner - это как будет ложиться в FPGA - именно в ваш кристал..
Go to the top of the page
 
+Quote Post
hynter
сообщение Jul 19 2008, 14:05
Сообщение #23


Участник
*

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



Понял почему такая фигня происходит! У меня ПЛИС EPM3256ATI144-10...она слишком медленная оказалась...если запустить на другой, со скоростью -5, то всё работате....беда только в том, что я никак не могу найти такую ПЛИС, да чтобы ешё и Индастриал была.....что делать...ума ни приложу....
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 19 2008, 14:42
Сообщение #24


Гуру
******

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



2 hynter - какая фигня ?
Go to the top of the page
 
+Quote Post
hynter
сообщение Jul 19 2008, 15:03
Сообщение #25


Участник
*

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



Как какая....всё та же: перестаёт работать, если удалить вывод OUT2(2)<=CNF_RD, все сигналы становятся неопределёнными, при сравнивании данных на AD1 и того, что помещено в ADR...если взять другую плисину, ну, например, EPM7256AEFC256-5, то всё работает отлично и никаких глюков не происходит...
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 19 2008, 15:08
Сообщение #26


Гуру
******

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



2 hynter - хм... есчё один прикол с цплд - там расказывали что лапы разводиь как хочеш нельзя...

EPM3ххх - это мах3000 - там по моему мемори маппед вроде и не посмотреть (чип планнер тоже) - так что как оно так хитро лягло в камне видимо останется загадкой....
Go to the top of the page
 
+Quote Post
hynter
сообщение Jul 19 2008, 16:37
Сообщение #27


Участник
*

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



Цитата(hynter @ Jul 19 2008, 18:05) *
Понял почему такая фигня происходит! ...


А нет...шутка...всё равно не работает...правда теперь в другом месте...
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 19 2008, 18:10
Сообщение #28


Гуру
******

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



2 hynter - мдя...
в обсчем советую заюзать моделсим или в квартусе поотводить вайры в ключевых местах - тут по ходу надо вникнуть в суть дела - кстати, если всё и так работает а сроки горят , то вы можете просто эти вайры не заюзывать, хотя там косяки могут в другом каком нить месте вылезти... Не совсем наш метод sad.gif
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 16:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01455 секунд с 7
ELECTRONIX ©2004-2016