|
1 / 1 / 0
Регистрация: 26.10.2011
Сообщений: 811
|
|
[Verilog] Обработка команд по формату Intel(D0-D7, WR, CS)10.09.2012, 23:29. Показов 26061. Ответов 37
Метки нет (Все метки)
Разбираюсь с Verilog
Где можно посмотреть как осуществлять обработку команд подаваемых на D0-D7 по сигналам управления WR и CS Мне нужно обрабатывать двубайтовые команды, то есть по задумке первый байт подается на D0-D7 потом WR и CS - для записи потом WR и CS снимаются и на D0-D7 подается второй байт, с WR и CS для записи команды. так вот, интересует как это обрабатывать ? однобайтовую команду я в принципе понял как обрабатывать... а вот как ПРАВИЛЬНО организовывать ожидание второго байта для его последующей обработки ?
0
|
|
| 10.09.2012, 23:29 | |
|
Ответы с готовыми решениями:
37
Icarus Verilog. GNU GPL компилятор под Verilog Структура команд assembler для Intel
|
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
|
|
| 11.09.2012, 00:11 | |
|
Вопрос неясен. С чем конкретно работаете?
0
|
|
|
1 / 1 / 0
Регистрация: 26.10.2011
Сообщений: 811
|
||||||
| 11.09.2012, 00:45 | ||||||
|
я задумал сделать цифровой запоминающий осциллограф.
p.s. я понимаю что моя самоделка никогда не станет настоящим осциллографом, а будет только показометром, меня это пока устраивает. мне понадобился 17ти битный счетчик для формирования адреса для записи в SROM данных с АЦП. в теме мне посоветовали посмотреть в сторону ПЛИС. и я начал смотреть. постепенно я начал осознавать какой это мощный инструмент.. и функционал у меня оформился.. используемая ПЛИС EPM240T100C5 я хочу чтобы у ПЛИС были следующие команды: 0х00 - пустая команда, нужна для сброса подаваемых команд, доп. байта нет 0х01 - передача в ПЛИС low8(Адреса для чтения из SROM), в доп. байте low8(Адреса для чтения из SROM) 0х02 - передача в ПЛИС mid8(Адреса для чтения из SROM), в доп. байте mid8(Адреса для чтения из SROM) 0х03 - передача в ПЛИС high8(Адреса для чтения из SROM), в доп байте high8(Адреса для чтения из SROM) - на деле здесь будет передаваться только один бит 0х04 - чтение байта из SROM, в доп байте - шаг инкремента адреса для чтения 0x05 - запись очередного фрейма сигнала , в доп. байте - вид синхронизации то есть у меня все команды 2х байтовые (кроме первой (0х00) - ее я буду использовать как nop в асме) для передачи команд хочу использовать 8ми битную ШД и 2 управляющих сигнала: - WR - селектор записи \ чтения (при L- уровне запись) - CS - строб команды (при L-уровне строб) проект в quartus 9 http://vg.ucoz.ru/ossytt/EPM240T100C5.zip правда там еще ничего нет.. задал кучку сигналов, начал писать код, и мой мозг немного поплыл из за того что я привык к описанию процессов, а тут как то нужно привязаться к сигналам :-( сигнал clk у меня есть (на плате отладки будет кварц 50 мгц, а вообще я нашел 100 мгц генератор) то есть обработку команд нужно привязывать к clk? или нет ? у меня получается что это не обязательно... вопрос возник в месте где я отловил что WR=CS=0, считал с D0-D7 код команды, потом мне нужно какой то флаг поставить что считал код, или каким образом гарантировать что плис повторно не считает с D0-D7 код команды приняв его за доп. байт ? управляющий ПЛИС контроллер (AVR) ведь не сможет быстро установить WR=CS=1 - даже если он на асме работает... вот такие вот глупые вопросы :-( в принципе я объявил регистр
0
|
||||||
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
|||
| 11.09.2012, 01:32 | |||
|
я в этом совсем не профи, но кой-че подскажу.
сами внешние сигналы принято прогонять сначала через 1-2 дополнительных последовательных триггера (получится задержка на такт-два) с целью избавления от метастабильности. побочный полезный эффект - можно определять фронт сигнала: в "старом" триггере был ноль, а в "новом" - единица, значит произошел фронт. следование этим простым правилам избавит от КУЧИ возможных глюков (высокое быстродействие плис, звенящие фронты и прочие бла-бла-бла мифы).
0
|
|||
|
1 / 1 / 0
Регистрация: 26.10.2011
Сообщений: 811
|
|
| 11.09.2012, 01:39 | |
|
ну в принципе на счет клока в виде WR и я думал, правда для этой цели больше подходит CS (строб)
вопрос: то что найден фронт импульса (или наоборот спад) - плис сама определит? и не будет второй раз обрабатывать подпрограмму при высоком (низком) уровне тактирующего сигнала ? ну и второй вопрос: есть ли какие нить стандартные методы обработки многобайтовых передач ? может быть какие нить коды демультиплексоров (сейчас в голову пришло что фактически у меня 16-ти битные команды передаваемые мультеплексированием по 8-ми битной шине)... ? я еще отладочную плату с плис не получил - поэтому хочу посмотреть как правильно это пишется, ну и если не найду то после получения платы буду пробывать по своему (главное чтобы числа перепрограммирований плис хватило на эксперименты)
0
|
|
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
|
| 11.09.2012, 02:23 | |
|
плис сама делать ничего не будет:) будет делать так, как напишете;)
напишете срабатывать по фронту - будет срабатывать только по фронту, но еще раз повторяю, хоть и можно завести внешний сигнал на тактовый вход триггера (указав его в always), делать так не рекомендуется во избежание трудноуловимых багов.
0
|
|
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
|
||
| 11.09.2012, 02:27 | ||
1. Почитайте про шину управления в МП системах. Там для обращения к памяти формируется сигнал MREQ. Из него, флага памяти и сигналов R и W уже формируется доступ к памяти. 2. Проще всего- два 8- битных регистра- защелки. Сначала пишешь в один, потом во второй, а потом одновременно разрешаешь ОЕ-> адрес установлен. М.б. эти регистры реализуются в вашей ПЛИС. ОП-па! У вас 60МГц?!
0
|
||
|
1 / 1 / 0
Регистрация: 26.10.2011
Сообщений: 811
|
|
| 11.09.2012, 08:34 | |
|
Про шину управления в МП системах знаю..
про MREQ тоже знаю, я даже ввел вначале сигнал RE (ROM/EPM) - но использовать его не хочу.. - мне нужно использовать как можно меньше линий для управления ПЛИС.. вопрос был именно по алгоритму- как реализуется последовательное чтение нескольких байт с шины на Verilog? в принципе я думаю что такую задачу кто нить решал, подожду еще, может что подскажут... пока у меня 50 мгц.. но в планах 100 мгц...
0
|
|
|
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
|
|
| 11.09.2012, 10:17 | |
|
Ничего сложного там нет. Так и пишите, что ждать фронта на шине clock, и если WR = 1 и CS = 1 тогда.... В плис нет последовательности выполнения процедур или функций как это принято в мк. Это не мк, а логическая схема. Не надо устраивать никаких бесконечных циклов в ожидании определенного флага. прописали, что вам нужен этот флаг, и спите спокойно. Как только будет выполнено условие, то будет выполнены определенные действия. Если уж так хотите, то действия выполняются последовательно (с небольшой задержкой), а вот сами процедуры (блоки), в отличии от мк, могут выполняться параллельно.
0
|
|
|
1 / 1 / 0
Регистрация: 26.10.2011
Сообщений: 811
|
|||||||||||
| 11.09.2012, 13:09 | |||||||||||
|
Вот эта параллельность и пугает..
сейчас чуть изменил код
При записи always @(posedge cs) событие будет выполнено при нарастании импульса по линии CS один раз или возможно выполнение несколько раз ? мне нужно чтобы блок был выполнен один раз... И еще: почему то при компиляции кода я получаю ошибку: Error (10137): Verilog HDL Procedural Assyknment error at EPM240T100C5.v(59): object "adr_ram" on left-homd side of assyknment must have a variable data type. Ругается на строчку adr_ram[7:0]=data8[7:0]; такая ошибка на каждую операцию присваивания в case Сами линии регистры объявил так
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 699
|
|||
| 11.09.2012, 13:40 | |||
0
|
|||
|
1 / 1 / 0
Регистрация: 26.10.2011
Сообщений: 811
|
|
| 11.09.2012, 15:26 | |
|
Леанид Ивинавич, не понял вашу мысль :-(
что значит к параллельной шине данных добавить несколько линий шины адреса ? получить шину подключения вида D7-D0, A1-A0, WR, CS ? чтобы была адресация отдельно 3ёх регистров адреса (A7-A0, A8-A15, A16) и отдельно например шага адреса при чтении ? неее, как раз так не хочу, хочу минимум линий подключения :-( последовательный доступ хочу чтобы не задавать каждый раз адрес (таким образом я ускоряю процесс чтения из памяти), я понимаю что усложняю этим код.. про 100 мгц - я хочу поставить 10 нс память. Например такую: CY7C1019DV33-10ZSXI (SROM 1 Mbit (128K x 8), 10 нс, 3.3 В) даташит: http://www.shyp-mm.ru/doc/all/3155/3155.zip 128 кб мне на первых порах хватит :-) ну и 100 мгц наверное не будет, будет максимум 80 мгц (так как у 74ACQ574 максимальная частота 90 мгц, да и AD9057 - с частотой 80 мгц захват делает)
0
|
|
|
1 / 1 / 0
Регистрация: 26.10.2011
Сообщений: 811
|
||||||
| 11.09.2012, 15:52 | ||||||
|
вопрос остался:
почему то при компиляции кода я получаю ошибку: Error (10137): Verilog HDL Procedural Assyknment error at EPM240T100C5.v(59): object "adr_ram" on left-homd side of assyknment must have a variable data type. Ругается на строчку adr_ram[7:0]=data8[7:0]; такая ошибка на каждую операцию присваивания в case Сами линии объявил так
как нужно обозвать линию adr_ram чтобы она стала Variable type ?
0
|
||||||
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 275
|
||
| 11.09.2012, 16:45 | ||
|
output reg [16:0] adr_ram;
0
|
||
|
1 / 1 / 0
Регистрация: 26.10.2011
Сообщений: 811
|
||||||||||||||||
| 11.09.2012, 21:02 | ||||||||||||||||
|
вот ссылка на проект http://vg.ucoz.ru/ossytt/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 - делитель частоты преобразования описал железо:
для этого в always прописал реагирование на любое изменение cs
Warning: Circuit may not operate. Detected 3 non-operational path(s) clocked by clock "wr" wyth clock skew larger than data delay. See Compytation Report for details. Warning: Circuit may not operate. Detected 1 non-operational path(s) clocked by clock "cs" wyth clock skew larger than data delay. See Compytation Report for details. Warning: Found 16 node(s) in clock paths which may be acting as ripple omd/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew Info: Detected ripple clock "woyt_add_byte" as buffer Info: Detected ripple clock "sommtype[2]" as buffer Info: Detected ripple clock "int_wr" as buffer Info: Detected ripple clock "sommtype[0]" as buffer Info: Detected ripple clock "sommtype[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 "woyt_add_byte~2" as buffer Info: Detected gated clock "sommtype[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 "woyt_add_byte~0" as buffer Info: Detected gated clock "adr_ram[16]~0" as buffer что написано не так как нужно ? ссылка на архив проекта в начале сообщения
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 699
|
|||||
| 12.09.2012, 01:57 | |||||
0
|
|||||
|
1 / 1 / 0
Регистрация: 26.10.2011
Сообщений: 811
|
|
| 12.09.2012, 09:00 | |
|
а что за предупреждение:
Warning: Found pins functioning as undefined clocks omd/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
0
|
|
|
1 / 1 / 0
Регистрация: 26.10.2011
Сообщений: 811
|
||
| 12.09.2012, 09:08 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 26.10.2011
Сообщений: 811
|
||
| 12.09.2012, 09:40 | ||
делать два банка работающих на скорости 50 мгц со сдвигом на 1\2 такта ?
0
|
||
|
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 699
|
|
| 12.09.2012, 11:38 | |
|
Можно взять синхронную SROM.
0
|
|
| 12.09.2012, 11:38 | |
|
Помогаю со студенческими работами здесь
20
Программная реализация дизассемблирования арифметических команд intel 8086 Нужен справочник по системе команд процессора intel core 2 duo
Обработка команд джойстика Обработка команд (\comand) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|