Easyelectronics.ru

Электроника для всех
Текущее время: 17 дек 2018, 03:34

Часовой пояс: UTC + 5 часов




Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 11 сен 2012, 23:16 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
Разбираюсь с Verilog

Где можно посмотреть как осуществлять обработку команд подаваемых на D0-D7 по сигналам управления WR и CS

Мне нужно обрабатывать двубайтовые команды,
то есть по задумке первый байт подается на D0-D7 потом WR и CS - для записи
потом WR и CS снимаются и на D0-D7 подается второй байт, с WR и CS для записи команды.

так вот, интересует как это обрабатывать ?

однобайтовую команду я в принципе понял как обрабатывать... а вот как ПРАВИЛЬНО организовывать ожидание второго байта для его последующей обработки ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 11 сен 2012, 23:58 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:19
Сообщения: 6281
Откуда: Из тех... Из бывших...
Вопрос неясен. С чем конкретно работаете?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 00:32 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
я задумал сделать цифровой запоминающий осциллограф.

p.s. я понимаю что моя самоделка никогда не станет настоящим осциллографом, а будет только показометром, меня это пока устраивает.

мне понадобился 17ти битный счетчик для формирования адреса для записи в SRAM данных с АЦП. в теме viewtopic.php?f=9&t=11698 мне посоветовали посмотреть в сторону ПЛИС. и я начал смотреть.

постепенно я начал осознавать какой это мощный инструмент.. и функционал у меня оформился..

используемая ПЛИС EPM240T100C5

я хочу чтобы у ПЛИС были следующие команды:
0х00 - пустая команда, нужна для сброса подаваемых команд, доп. байта нет
0х01 - передача в ПЛИС low8(Адреса для чтения из SRAM), в доп. байте low8(Адреса для чтения из SRAM)
0х02 - передача в ПЛИС mid8(Адреса для чтения из SRAM), в доп. байте mid8(Адреса для чтения из SRAM)
0х03 - передача в ПЛИС high8(Адреса для чтения из SRAM), в доп байте high8(Адреса для чтения из SRAM) - на деле здесь будет передаваться только один бит
0х04 - чтение байта из SRAM, в доп байте - шаг инкремента адреса для чтения
0x05 - запись очередного фрейма сигнала , в доп. байте - вид синхронизации

то есть у меня все команды 2х байтовые (кроме первой (0х00) - ее я буду использовать как nop в асме)

для передачи команд хочу использовать 8ми битную ШД и 2 управляющих сигнала:
- WR - селектор записи \ чтения (при L- уровне запись)
- CS - строб команды (при L-уровне строб)

проект в quartus 9 http://vg.ucoz.ru/oscill/EPM240T100C5.zip

правда там еще ничего нет.. задал кучку сигналов, начал писать код, и мой мозг немного поплыл из за того что я привык к описанию процессов, а тут как то нужно привязаться к сигналам :-(
сигнал clk у меня есть (на плате отладки будет кварц 50 мгц, а вообще я нашел 100 мгц генератор)

то есть обработку команд нужно привязывать к clk? или нет ?
у меня получается что это не обязательно...

вопрос возник в месте где я отловил что WR=CS=0, считал с D0-D7 код команды, потом мне нужно какой то флаг поставить что считал код, или каким образом гарантировать что плис повторно не считает с D0-D7 код команды приняв его за доп. байт ? управляющий ПЛИС контроллер (AVR) ведь не сможет быстро установить WR=CS=1 - даже если он на асме работает...

вот такие вот глупые вопросы :-( в принципе я объявил регистр
Код:
reg wait_cs_res;      // признак ожидания сброса cs после подачи команды

который будет флагом что с D0-D7 код уже считали, и теперь нужно ждать пока WR=CS=1 и потом пока они заново не WR=CS=0 - только после этого читать доп. байт - но уж больно страшно как то это будет выглядеть, может есть способы проще ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 01:19 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3996
я в этом совсем не профи, но кой-че подскажу.
ВитГо писал(а):
то есть обработку команд нужно привязывать к clk? или нет ?

хорошим тоном (мягко говоря) считается, что в системе (плис) все работает от одного клока. каждый блок в верилоге (always ...) должен срабатывать по фронту главного клока. а внутри блока уже писать логику, по которой обрабатываются внешние сигналы.

сами внешние сигналы принято прогонять сначала через 1-2 дополнительных последовательных триггера (получится задержка на такт-два) с целью избавления от метастабильности. побочный полезный эффект - можно определять фронт сигнала: в "старом" триггере был ноль, а в "новом" - единица, значит произошел фронт.

следование этим простым правилам избавит от КУЧИ возможных глюков (высокое быстродействие плис, звенящие фронты и прочие бла-бла-бла мифы).

ВитГо писал(а):
считал с D0-D7 код команды, потом мне нужно какой то флаг поставить что считал код, или каким образом гарантировать что плис повторно не считает с D0-D7 код команды приняв его за доп. байт ?

какой-то один из сигналов должен быть клоком, например, WR. как только словили его фронт, а при этом CS был активен, значит в этот момент фиксируем что нам надо (команда пришла там или что еще). в другое время никаких событий нет - ниче не делаем, команду повторно не обрабатываем:)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 01:26 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
ну в принципе на счет клока в виде WR и я думал, правда для этой цели больше подходит CS (строб)

вопрос: то что найден фронт импульса (или наоборот спад) - плис сама определит? и не будет второй раз обрабатывать подпрограмму при высоком (низком) уровне тактирующего сигнала ?

ну и второй вопрос: есть ли какие нить стандартные методы обработки многобайтовых передач ? может быть какие нить коды демультиплексоров (сейчас в голову пришло что фактически у меня 16-ти битные команды передаваемые мультеплексированием по 8-ми битной шине)... ?

я еще отладочную плату с плис не получил - поэтому хочу посмотреть как правильно это пишется, ну и если не найду то после получения платы буду пробывать по своему (главное чтобы числа перепрограммирований плис хватило на эксперименты)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 02:10 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3996
плис сама делать ничего не будет:) будет делать так, как напишете;)
напишете срабатывать по фронту - будет срабатывать только по фронту, но еще раз повторяю, хоть и можно завести внешний сигнал на тактовый вход триггера (указав его в always), делать так не рекомендуется во избежание трудноуловимых багов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 02:14 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:19
Сообщения: 6281
Откуда: Из тех... Из бывших...
ВитГо писал(а):
ну в принципе на счет клока в виде WR и я думал, правда для этой цели больше подходит CS (строб)

...
ну и второй вопрос: есть ли какие нить стандартные методы обработки многобайтовых передач ? может быть какие нить коды демультиплексоров (сейчас в голову пришло что фактически у меня 16-ти битные команды передаваемые мультеплексированием по 8-ми битной шине)... ?

По ПЛИСАМ не подскажу, но:
1. Почитайте про шину управления в МП системах. Там для обращения к памяти формируется сигнал MREQ. Из него, флага памяти и сигналов R и W уже формируется доступ к памяти.
2. Проще всего- два 8- битных регистра- защелки. Сначала пишешь в один, потом во второй, а потом одновременно разрешаешь ОЕ-> адрес установлен. М.б. эти регистры реализуются в вашей ПЛИС.

ОП-па! У вас 60МГц?!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 08:21 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
Про шину управления в МП системах знаю..
про MREQ тоже знаю, я даже ввел вначале сигнал RE (RAM/EPM) - но использовать его не хочу.. - мне нужно использовать как можно меньше линий для управления ПЛИС..

вопрос был именно по алгоритму- как реализуется последовательное чтение нескольких байт с шины на Verilog?

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

пока у меня 50 мгц.. но в планах 100 мгц...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 10:04 
Старожил
Аватара пользователя

Зарегистрирован: 17 апр 2010, 08:38
Сообщения: 4865
Откуда: Усинск, республика Коми
Ничего сложного там нет. Так и пишите, что ждать фронта на шине clock, и если WR = 1 и CS = 1 тогда.... В плис нет последовательности выполнения процедур или функций как это принято в мк. Это не мк, а логическая схема. Не надо устраивать никаких бесконечных циклов в ожидании определенного флага. прописали, что вам нужен этот флаг, и спите спокойно. Как только будет выполнено условие, то будет выполнены определенные действия. Если уж так хотите, то действия выполняются последовательно (с небольшой задержкой), а вот сами процедуры (блоки), в отличии от мк, могут выполняться параллельно.

_________________
хаос это непознанный порядок


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 12:56 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
Вот эта параллельность и пугает..

сейчас чуть изменил код
Код:
always @(posedge cs)  // при импульсе по cs
begin
   // дешифровка записываемой в ПЛИС команды
   if (wr==0) // запись команды в ПЛИС
      begin
       if (wait_add_byte==0) // флаг приема первого байта
         begin
            wait_add_byte=1;     // в следующий раз принимаем доп. байт

            commtype=data8[2:0]; // запишем полученную команду

                if (commtype==`NOP) wait_add_byte=0; // у команды NOP нет доп. байта

         end else // получаем дополнительный байт команды
               begin

                   wait_add_byte=0; // следующий принимаемый байт - команда

                  case (commtype)  // второй байт в зависимости от команды
                 `SET_L8:   begin   // установка младшей части адреса
                           adr_ram[7:0]=data8[7:0];
                          end   
                         
                  `SET_M8:   begin     // установка средней части адреса
                           adr_ram[15:8]=data8[7:0];
                          end
                         
                  `SET_H8:   begin     // установка старшей части адреса
                              adr_ram[16]=data8[0];
                          end
                         
                `RAM_READ:   begin      // шаг приращения адреса при чтении
                           adr_step=data8;
                          end
      
                `ADC_SYNC:   begin
                          end
                         
                 `ADC_START:   begin
                          end                   
                  endcase
               end
   end else
      begin      // чтение из памяти


     end
   
end

и такой вопрос возник:
При записи always @(posedge cs) событие будет выполнено при нарастании импульса по линии CS один раз или возможно выполнение несколько раз ?

мне нужно чтобы блок был выполнен один раз...

И еще:
почему то при компиляции кода я получаю ошибку: Error (10137): Verilog HDL Procedural Assignment error at EPM240T100C5.v(59): object "adr_ram" on left-hand side of assignment must have a variable data type.
Ругается на строчку
adr_ram[7:0]=data8[7:0];

такая ошибка на каждую операцию присваивания в case
Сами линии регистры объявил так
Код:
input wire clk;   // тактирующий сигнал

input wire wr;  // сигнал выбора операции записи\чтения
input wire cs;  // строб операции

input wire [7:0] data8;  // шина данных\команд плис

output wire [16:0] adr_ram; // шина адреса для ram

output wire adc_enc;   // управление выборкой из АЦП

output wire reg_adc_cs;   // управление регистром АЦП
output wire reg_ram_cs; // управление регистром RAM

output wire ram_wr;      // сигнал выбора операции RAM запись\чтение
output wire ram_oe;     // строб операции с RAM

reg[16:0] adr_value;   // внутренний регистр адреса RAM для операций
reg adc_scan;         // признак записи значений ADC

reg wait_add_byte;      // признак ожидания доп. байта команды
reg   [2:0] commtype;     // команда
reg [7:0] adr_step;     // шаг приращения адреса для чтения RAM

что не так ? слева же у меня вроде как переменная (reg) что не нравиться компилятору?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 13:27 
Старожил
Аватара пользователя

Зарегистрирован: 20 фев 2012, 19:20
Сообщения: 753
Откуда: Минск
ВитГо писал(а):
как реализуется последовательное чтение нескольких байт с шины на Verilog?


К параллельной шине данных лучше добавить несколько линий адреса. Все регистры внутри ПЛИС будут находится в одном адресном пространстве, будет возможен произвольный доступ. Шину адреса можно сделать мультиплексной с данными, если линии экономите. Тем более, что многие микроконтроллеры имеют как раз мультиплексную внешнюю шину. Если же хотите непременно последовательный доступ, то тогда внутри ПЛИС нужно организовать счетчик адреса, который будет инкрементироваться по каждому сигналу WR или RD. Но это менее гибкий способ доступа.

ВитГо писал(а):
пока у меня 50 мгц.. но в планах 100 мгц...


При работе на 100 МГц возникают проблемы с быстродействием SRAM. Разве что применять синхронную SRAM.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 15:13 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
Леонид Иванович, не понял вашу мысль :-(

что значит к параллельной шине данных добавить несколько линий шины адреса ?

получить шину подключения вида D7-D0, A1-A0, WR, CS ?

чтобы была адресация отдельно 3ёх регистров адреса (A7-A0, A8-A15, A16) и отдельно например шага адреса при чтении ?

неее, как раз так не хочу, хочу минимум линий подключения :-(


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

про 100 мгц - я хочу поставить 10 нс память.
Например такую: CY7C1019DV33-10ZSXI (SRAM 1 Mbit (128K x 8), 10 нс, 3.3 В)
даташит: http://www.chip-nn.ru/doc/all/3155/3155.zip
128 кб мне на первых порах хватит :-)

ну и 100 мгц наверное не будет, будет максимум 80 мгц (так как у 74ACQ574 максимальная частота 90 мгц, да и AD9057 - с частотой 80 мгц захват делает)


Последний раз редактировалось ВитГо 12 сен 2012, 15:39, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 15:39 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
вопрос остался:

почему то при компиляции кода я получаю ошибку: Error (10137): Verilog HDL Procedural Assignment error at EPM240T100C5.v(59): object "adr_ram" on left-hand side of assignment must have a variable data type.
Ругается на строчку
adr_ram[7:0]=data8[7:0];

такая ошибка на каждую операцию присваивания в case
Сами линии объявил так
Код:
input wire [7:0] data8;  // шина данных\команд плис
output wire [16:0] adr_ram; // шина адреса для ram


что это за ошибка ?
как нужно обозвать линию adr_ram чтобы она стала Variable type ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 16:32 
Старожил

Зарегистрирован: 05 фев 2011, 15:20
Сообщения: 284
Откуда: Хабаровск
output reg [16:0] adr_ram;

Цитата:
Цепи представляют типы данных предназначенных для соединения между собой
структурных объектов, например, логических вентилей. Цепи не удерживают своего
состояния (за исключением типа trireg) их состояние дожно непрерывно удерживаться
(continious assignment) выходом с логического вентиля или комбинационной схемы.
Если к цепи не подключен источник (driver) то цепь переходит в состояние высокого
импеданса. Исключение составляет цепь типа trireg которая удерживает предыдущее
состояние (но это не регистр!).

Регистры представляют собой элементы хранения данных. Ключевое слово для
данных этого типа – reg. Регистры сохраняют свое состояние от одного назначения до
другого. Операция назначения состояния действует как триггер который изменяет
состояние элемента хранения данных. По умолчанию регистровые данные принимают
неизвестное состояние (х).


Сам сейчас делаю свой первый проект на ПЛИС, и тоже с этим столкнулся, как и все, наверное


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 12 сен 2012, 20:49 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
вот ссылка на проект http://vg.ucoz.ru/oscill/EPM240T100C5.zip
писано в quartus 9.1 sp2

немного опишу задачу:

при помощи плис я хочу сделать устройство захвата для самодельного цифрового осцилографа
частота дискретизации планируется в 80 мгц (АЦП AD9057)

внешний контроллер будет управлять плис, по шине состоящей из D7-D0, и сигналов управления WR и CS (10 проводов)
нужны следующие команды:
0х00- нет операции
0х01 - установка 8 младших бит адреса
0х02 - установка средних 8 бит адреса
0х03 - установка старшего бита адреса
0х04 - чтение памяти
0x05 - запуск однократного преобразования\захвата входного сигнала

команды 0х01-0х05 двубайтовые, вслед за кодом команды идет 1 байт параметра, в 0х01-0х03 - это часть адреса (всего адресуется 128 кб озу), 0х04 - шаг приращения адреса при чтении (от 1 до 255), в 0х05 - делитель частоты преобразования

описал железо:
Код:
input wire clk;   // тактирующий сигнал (80 мгц)
input wire wr;  // сигнал выбора операции записи\чтения
input wire cs;  // строб операции
input wire [7:0] data8;  // шина данных\команд плис

output reg [16:0] adr_ram; // шина адреса для ram
output reg adc_enc;   // управление выборкой из АЦП
output reg reg_adc_cs;   // управление регистром АЦП
output reg reg_ram_cs; // управление регистром RAM
output reg ram_wr;      // сигнал выбора операции RAM запись\чтение
output reg ram_oe;     // строб операции с RAM

reg[16:0] adr_value;   // внутренний регистр адреса RAM для операций
reg wait_add_byte;      // признак ожидания доп. байта команды
reg   [2:0] commtype;     // команда
reg int_wr;             // сохранение копии сигнала wr
reg [7:0] adr_step;     // шаг приращения адреса для чтения RAM


дальше хочу по фронту сигнала cs считывать команду и доп. байт к ней (или читать память), выполнять какое то действие, и по спаду сигнала сбрасывать состояние управляемых устройств

для этого в always прописал реагирование на любое изменение cs

Код:
always @(cs)  // при изменении cs
begin
   if (cs==1)
      begin
         // дешифровка записываемой в ПЛИС команды   
         int_wr<=wr;   // сохраним вид операции (чтение\запись)

         if (wr==0) // запись команды в ПЛИС
            begin
               if (wait_add_byte==0) // принимаем первый байт
                  begin
                     wait_add_byte<=1;     // в следующий раз принимаем доп. байт
                     commtype<=data8[2:0]; // запомним полученную команду
                     if (commtype==`NOP) wait_add_byte<=0; // у команды NOP нет доп. байта

                  end else // получаем дополнительный байт команды
                        begin
                           wait_add_byte<=0; // следующий принимаемый байт - команда
                           case (commtype)
                              `SET_L8:  begin  // принимаем младшие 8 бит адреса для чтения
                                       adr_value[7:0]<=data8[7:0];
                                    end   
                         
                             `SET_M8:  begin   // принимаем средние 8 бит адреса для чтения
                                       adr_value[15:8]<=data8[7:0];
                                    end
                         
                             `SET_H8:  begin   // принимаем старший бит адреса для чтения
                                       adr_value[16]<=data8[0];
                                    end
                         
                           `RAM_READ:  begin   // принимаем шаг приращения адреса для чтения
                                       adr_step<=data8;
                                    end
      
                           `ADC_SYNC:  begin
                                    end
                         
                           `ADC_START:  begin
                                    end                   
                           endcase
                        end
            end else // здесь у нас wr=0
                  begin      // чтение из памяти
                     adr_ram<=adr_value;    // выдадим адрес для операции чтения
                     ram_wr<=1;  // операция чтения
                     ram_oe<=0;  // строб
                  end
      end


соответственно когда сигнал cs снимается - мы прекращаем исполнение команды
Код:
         else  // при спаде импульса по cs
            begin
               if (int_wr==1) // у нас была операция чтения ? 
                  begin
                     if (commtype==`RAM_READ)
                        begin
                           ram_oe<=1;  // отключим чтение с SRAM                        
                           adr_value<=adr_value+adr_step; // прирастим адрес для чтения на шаг
                        end   
                  end
            end
end


этот код компилируется с какими то не понятными мне предупреждениями

Warning: Circuit may not operate. Detected 3 non-operational path(s) clocked by clock "wr" with clock skew larger than data delay. See Compilation Report for details.

Warning: Circuit may not operate. Detected 1 non-operational path(s) clocked by clock "cs" with clock skew larger than data delay. See Compilation Report for details.

Warning: Found 16 node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew
Info: Detected ripple clock "wait_add_byte" as buffer
Info: Detected ripple clock "commtype[2]" as buffer
Info: Detected ripple clock "int_wr" as buffer
Info: Detected ripple clock "commtype[0]" as buffer
Info: Detected ripple clock "commtype[1]" as buffer
Info: Detected gated clock "adr_value[16]~3" as buffer
Info: Detected gated clock "adr_value[8]~2" as buffer
Info: Detected gated clock "wait_add_byte~2" as buffer
Info: Detected gated clock "commtype[0]~0" as buffer
Info: Detected gated clock "adr_value[16]~0" as buffer
Info: Detected gated clock "adr_value[0]~1" as buffer
Info: Detected gated clock "rtl~0" as buffer
Info: Detected gated clock "ram_oe~1" as buffer
Info: Detected gated clock "ram_oe~0" as buffer
Info: Detected gated clock "wait_add_byte~0" as buffer
Info: Detected gated clock "adr_ram[16]~0" as buffer

что написано не так как нужно ?

ссылка на архив проекта в начале сообщения


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 13 сен 2012, 01:44 
Старожил
Аватара пользователя

Зарегистрирован: 20 фев 2012, 19:20
Сообщения: 753
Откуда: Минск
ВитГо писал(а):
получить шину подключения вида D7-D0, A1-A0, WR, CS ?


Да. Вам вполне хватит трех разрядов адреса для адресации внутренних регистров ПЛИС. Не так это и много - 3 дополнительный линии. А если микроконтроллер имеет мультиплексную шину, то вообще ничего не надо, кроме сигнала ALE. Я так и делал, работал с ПЛИС как с внешней памятью для ATmega8515.

ВитГо писал(а):
последовательный доступ хочу чтобы не задавать каждый раз адрес (таким образом я ускоряю процесс чтения из памяти), я понимаю что усложняю этим код.


Это другое. Конечно, чтение RAM должно происходить с автоинкрементом адреса. Тут пока речь шла о том, как задать начальный адрес для чтения. Для этого нужно сделать запись в регистры адреса, вот к ним доступ лучше сделать произвольный, а не последовательный.

ВитГо писал(а):
про 100 мгц - я хочу поставить 10 нс память.


Не получится. Посмотрите диаграммы записи. Время удержания WE в низком уровне t_pwe min 7 нс. Как это обеспечить на одном периоде тактовой частоты 100 МГц?

ВитГо писал(а):
будет максимум 80 мгц (так как у 74ACQ574 максимальная частота 90 мгц


А зачем нужны 74ACQ574, если есть ПЛИС?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 13 сен 2012, 08:47 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
а что за предупреждение:
Warning: Found pins functioning as undefined clocks and/or memory enables
Info: Assuming node "clk" is an undefined clock

как это понять, что пин с неопределенной частотой ? где то еще нужно задавать частоту тактирования сигнала clk ?

и еще одно предупреждение:
Warning: Output pins are stuck at VCC or GND
Warning (13410): Pin "ram_wr" is stuck at VCC


что это означает? сигнал ram_wr я определил на простой пин -47


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 13 сен 2012, 08:55 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
Леонид Иванович писал(а):
А зачем нужны 74ACQ574, если есть ПЛИС?


хотел реализовать все на epm3064, у нее меньше ног, зато корпус попроще (есть панельки)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 13 сен 2012, 09:27 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
Леонид Иванович писал(а):
ВитГо писал(а):
про 100 мгц - я хочу поставить 10 нс память.


Не получится. Посмотрите диаграммы записи. Время удержания WE в низком уровне t_pwe min 7 нс. Как это обеспечить на одном периоде тактовой частоты 100 МГц?


делать два банка работающих на скорости 50 мгц со сдвигом на 1\2 такта ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 13 сен 2012, 11:25 
Старожил
Аватара пользователя

Зарегистрирован: 20 фев 2012, 19:20
Сообщения: 753
Откуда: Минск
Можно взять синхронную SRAM.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 13 сен 2012, 13:34 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
Леонид Иванович писал(а):
Можно взять синхронную SRAM.


смотрю.. правда пока попадатся монстры в BGA и на 2-4-8 мб с 36-72 битами ШД
самое паябельное среди таких HY57V651620B

а вот где бы найти попроще микруху ? мегабайт на 128-256 .... ?

а что за предупреждение:
Warning: Found pins functioning as undefined clocks and/or memory enables
Info: Assuming node "clk" is an undefined clock

со вторым уже подсказали.. а это осталось...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 13 сен 2012, 13:53 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3996
Цитата:
always @(cs) // при изменении cs
опять же, я не спец, но мне кажется это не будет работать как вы планируете. оно НЕ будет срабатывать при любом фронте.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 13 сен 2012, 14:05 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
Ink писал(а):
Цитата:
always @(cs) // при изменении cs
опять же, я не спец, но мне кажется это не будет работать как вы планируете. оно НЕ будет срабатывать при любом фронте.


я уже переписал код на работу с (posedge clk)
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 13 сен 2012, 20:28 
Старожил
Аватара пользователя

Зарегистрирован: 20 фев 2012, 19:20
Сообщения: 753
Откуда: Минск
ВитГо писал(а):
смотрю.. правда пока попадатся монстры в BGA


Практически у любого производителя такая память есть, кроме BGA чаще всего бывает 100-pin TQFP, например, IS61LPS51218A-200TQI. Разрядность чаще всего 18 или 36 бит, это хорошо, сразу два канала писать можно.

ВитГо писал(а):
а что за предупреждение:
Warning: Found pins functioning as undefined clocks and/or memory enables
Info: Assuming node "clk" is an undefined clock


Для нормальной работы временного анализатора все тактовые сигналы должны быть описаны, в Вашем случае нужно описать сигнал "clk". Заходите Assignments/Settings, Category -> Timing Requirements & Options, Clock Settings -> Settings for individual clock signals, Clocks... -> New -> New Clock Settings, вводим любое имя, Relationship to other clock settings -> Independent to other clock settings, вписываем цепь clk (или через Node Finder находим нужную цепь тактового сигнала), в Relationship to other clock settings вводим частоту и скважность. Жмем OK, при следующей перекомпиляции предупреждения быть не должно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Verilog: Обработка команд по формату Intel(D0-D7, WR, CS)
СообщениеДобавлено: 13 сен 2012, 20:34 
Старожил

Зарегистрирован: 31 окт 2011, 10:27
Сообщения: 955
Откуда: Оренбург
про SSRAM: гм.. ничего себе цена.. на элитане минимум 600 руб без доставки :-(

по поводу сообщения - да, уже нашел, предупреждение ушло..


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB