Перейти к содержанию
    

Вопрос: память M4K

Привет Всем!

Постараюсь объяснить проблему.

Имею 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 всё прекрастно.

 

Откровенно говоря большого опыта работы с Квартусом нет, поэтому прошу разъяснять чуть подробнее. За раннее благодарен за помощь и поддержку

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Откровенно говоря большого опыта работы с Квартусом нет, поэтому прошу разъяснять чуть подробнее.

телепаты в отпуске, код + описание метода проверки в студию. ИМХО 95% что это ваш косяк и сделали вы его в ваших интерфейсах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет проблем, вот проект

XO779QZC1M8495O

http://nukeuploads.com/download/1271227091...overka.zip.html

 

Я думаю ты прав на 100%, вопрос только где ошибка.

 

Вот стратегия проверки:

 

1. Записываю адреса в порт 10 значение 0, сначало младший потом старший;

2. Записываю данные последовательно 0x18 и 0

3. Записываю адреса в порт 11 значение 2, сначало младший потом старший;

4. Записываю данные массивом в следующей последовательности: 0, 0x7f, 0x11, 0x88, 0xaa, 0x55, 0x44, 0x44, 0x55, 0x55

 

Врядли связано с чтением(проверял с помощью таблицы инициализации)

Вычитываю следующее: 0x18, 0, 0x11, 0x88, 0x11, 0x88, 0xaa, 0x55, 0x44, 0x44, 0x55, 0x55

 

Ошибкой является 2 и 3 байт должно быть 0, 0x7f. Моё предположение счетчик адреса, но хоть убей не пойму где

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Нужно сделать "синхронизаторы" на все управляющие сигналы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но хоть убей не пойму где

 

Выход с открытым коллектором(?) i/o cs16 говорит задатчику на шине, что УВВ к которому он обращается имеет 16 разрядную организацию.

Если сигнал запрещен, то только 8 разрядный цикл доступа к УВВ может быть выполнен на шине.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

sazh, ты прав, в данном случае шина isa является не совсем полноценной, то есть контроллер шины является моей разработкой в которой данный сигнал не используется. IOCS16 формировали когда использовали покупной компьютер(Lippert).

Повторюсь, чтение проверил с помощью таблицы инициализации.

 

ViKo, смотрел 4-х канальным осциллографом 5Гигавыборок с полосой 1ГГц( счетчик адреса[0], дешифрированный строб записи в порт ), сказать что у меня были какие-то сомнения.

На ПЛИС заведён клок 40МГц, пробывал тактировать от этого клока, формировать сигнал wren. wrclock, результат аналогичен.

 

Моё предположение что-то с цепями адреса, такое впечатление адрес не защёлкивается по wrclock или он защёлкивается по сигналу wren

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня был (и есть) проект, где был процессор PIC и ПЛИС, которые работали каждый от своего тактового генератора. В процессоре была программо созданная шина - 8 данных (PortB), адресов штук 5, чтение, запись (PortA). А в ПЛИС был набор регистров, к которым можно было доступиться из процессора этой по шине. Так как регистры были в том числе и многобайтовые (и даже к памяти был доступ через регистры), имелись счетчики, которые после каждой записи или чтения инкрементировались и указывали на следующий байт.

Такое устройство сразу стало работать ненормально! То запишется что-то, куда не надо, то не запишется то, что надо... Тыкание пробником осциллографа меняло картину работы, но все равно было плохо. Я тогда предполагал, что какие-нибудь отражения возникают в сигналах, и т.п. Теперь же думаю, что это и были те самые метастабильные состояния, когда управляющие сигналы приходят в ПЛИС несинхронно с тактовой частотой. Поэтому сигнал записи мог не дойти до регистров внутри, мог дойти, когда уже не надо...

Я переделал проект. Добавил сигнал ALE (Address Latch Enable), которым защелкивал адрес с шины. Необходимость в счетчиках отпала. А на запись и чтение в ПЛИС создал схемы, я называл их "фильтры". Эти сигналы на входе ПЛИС должны были находиться в постоянном состоянии несколько тактов ПЛИС подряд, и тогда по концу сигнала записи или чтения формировался внутренний сигнал записи или чтения в регистры. Такая схема работает уже в более сотни экземплярах. Сбоев я не наблюдал.

О така херня, малятки!

P.S. А осциллографом метастабильные состояния не увидишь, если специально не выведешь наружу что-то изнутри.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет проблем, вот проект

у вас еще и всё в графике, предупреждать надо.

 

Я думаю ты прав на 100%, вопрос только где ошибка.

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

 

Насчет ошибки у вас весь проект ошибка. Если бы вы были моим подаваном, то за формирование тактового сигнала блоков памяти mk_wr_ram на логике и триггерах inst17/inst129/inst21/inst38 и сигнала cWR[11] на inst11 с использованием мегафункции lpm_decode, да еще и без выходного регистра, на которую подаются сигналы nCRD/CA[4..0], которые идут напрямую с портов плис (и вашего проца), я бы вам руки оторвал, по самую голову (без обид) :)

 

Мои рекомендации бросить заниматься асинхронщиной, уйти на полностью синхронную схему. Как это сделать многократно обсуждалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На ПЛИС заведён клок 40МГц, пробывал тактировать от этого клока, формировать сигнал wren. wrclock, результат аналогичен.

 

Моё предположение что-то с цепями адреса, такое впечатление адрес не защёлкивается по wrclock или он защёлкивается по сигналу wren

 

Такой стиль описания (многоклоковый) без уделения должного внимания констрейнам - не проходит в Квартусе. Посмотрите временной анализ.

Посадите все на одноклоковую синхронизацию, контроллер, иса, манчестер (от 40мГЦ до 80) не важно. Организуйте двупортовую память с различной разрядностью (мегафункцию используете, к чему свое мультиплексирование) и все заработает.

(Вряд ли кто графику будет смотреть)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу извинения des00.

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

Буду пробывать. Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...