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

 
 
> Вопрос: память M4K, Первый байт не соответстует записываемому
Ttitan
сообщение Apr 13 2010, 12:52
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 30-11-07
Пользователь №: 32 850



Привет Всем!
Постараюсь объяснить проблему.
Имею CycloneII EP2C5Q208, к нему подключена 51 кристалка(с8051f132) через параллельный 8-ми разрядный интерфейс и приближенную шину ISA, проект рисую в QuartusII9.0sp2.

Пытаюсь сообразить канал передачи от с51 -> isa через 1Кбайт RAM M4K. Поскольку с51 - 8 разрядный а isa - 16 разрядная соответственно использую запись 8-мь разрядов, чтение 16-ть разрядов.
Интерфейс с51-ПЛИС:
8 разрядов данные;
8 разрядов адрес;
стробы чтения записи;

Интерфейс ПЛИС - isa:
16 разрядов данные;
4 разрядов адрес;
стробы чтения записи;

Доступ к памяти в ПЛИС организовал следующим образом: в один порт записываю адрес в счетчик, который инкреминтирую по каждой записи байта, во второй порт записываю данные, доступ со стороны isa организавал как и для с51, порт для адреса и порт для данных.

После проверки получил следующую картину:
1. Установил адрес и записываю масив данных всё отлично. Получилось очень быстро и я был счаслив и доволен :-))
2. Но после того когда я начал приближаться к решению своей задачи, а она представляла собой запись разных масивов данных по разным адресам выяснилось не всё так хорошо. После записи двух байт с нулевого адреса, устанавливаю адрес = 2 записываю данные ноль, 0x7f и т.д. получаю вместо нуля еденицу, и как бы я не прыгал не выходит каменный цветок. Правда наблюдается ещё интересные факты: если записывать не во 2-й адрес а в 1 или 3, 4 всё прекрастно.

Откровенно говоря большого опыта работы с Квартусом нет, поэтому прошу разъяснять чуть подробнее. За раннее благодарен за помощь и поддержку
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Apr 15 2010, 07:34
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



У меня был (и есть) проект, где был процессор PIC и ПЛИС, которые работали каждый от своего тактового генератора. В процессоре была программо созданная шина - 8 данных (PortB), адресов штук 5, чтение, запись (PortA). А в ПЛИС был набор регистров, к которым можно было доступиться из процессора этой по шине. Так как регистры были в том числе и многобайтовые (и даже к памяти был доступ через регистры), имелись счетчики, которые после каждой записи или чтения инкрементировались и указывали на следующий байт.
Такое устройство сразу стало работать ненормально! То запишется что-то, куда не надо, то не запишется то, что надо... Тыкание пробником осциллографа меняло картину работы, но все равно было плохо. Я тогда предполагал, что какие-нибудь отражения возникают в сигналах, и т.п. Теперь же думаю, что это и были те самые метастабильные состояния, когда управляющие сигналы приходят в ПЛИС несинхронно с тактовой частотой. Поэтому сигнал записи мог не дойти до регистров внутри, мог дойти, когда уже не надо...
Я переделал проект. Добавил сигнал ALE (Address Latch Enable), которым защелкивал адрес с шины. Необходимость в счетчиках отпала. А на запись и чтение в ПЛИС создал схемы, я называл их "фильтры". Эти сигналы на входе ПЛИС должны были находиться в постоянном состоянии несколько тактов ПЛИС подряд, и тогда по концу сигнала записи или чтения формировался внутренний сигнал записи или чтения в регистры. Такая схема работает уже в более сотни экземплярах. Сбоев я не наблюдал.
О така херня, малятки!
P.S. А осциллографом метастабильные состояния не увидишь, если специально не выведешь наружу что-то изнутри.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 04:01
Рейтинг@Mail.ru


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