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

Блочная память и её работа

Вот для проекта мне необходимо использовать блочную память. Под задание подходит готовый компонент ISE RAMB4_S16. Пробовал смоделировать её с помощью модельсима,но что то не пойму логику её работы, не могу получить вектор на выходе,всегда нули.Управляющие сигналы:

RST-сброс

ЕN-разрешение работы

CLK-сигналы синхронизации

WE-разрешение записи

ADDR-вход адреса

DI-вход данных

DO-выход

Подскажите пожалуста как она работает?

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


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

нет,это всё понятно,тут без вопросов.

Проблема в том что при таком раскладе на выходе всё равно 0.

Вроде всё делаю правильно,сигналы подаю правильно,но толка нет. Можно ли в модельсиме посмотреть внутреннее состояние памяти?

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


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

Можно ли в модельсиме посмотреть внутреннее состояние памяти?

Содержимое памяти в моделсиме можно посмотреть с помощью окна Workspace и его закладки Memories выбрав соответствующий инстанс.

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


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

Может быть есть какие-нибудь нюансы при моделировании памяти? Подскажите пожалуйста.

Делаю м модельсиме post-translate симуляцию.Такое впечатление что память вообще не воспринимает подаваемые мной сигналы, смотрю по закладке Memories,её содержимое не меняется. Сигналы подаю правильно.В чём может быть проблема?

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


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

Может быть есть какие-нибудь нюансы при моделировании памяти? Подскажите пожалуйста.

Делаю м модельсиме post-translate симуляцию.Такое впечатление что память вообще не воспринимает подаваемые мной сигналы, смотрю по закладке Memories,её содержимое не меняется. Сигналы подаю правильно.В чём может быть проблема?

 

Вы используете библиотечный компонент RAMB4_S16, который описывает память так как это необходимо для моделирования, и этот компонент замечательно работает. Поэтому, следует обратить внимание именно на управляющие сигналы, которые Вы направляете на этот компонент.

 

Кстати, как ведет себя Ваша схема при функциональном моделировании? Проблемы в

post-translate симуляции могут быть следствием неверного (с точки зрения синтеза) кода...

Изменено пользователем denisys

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


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

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

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

 

0011001100110011001100 clk

1111111111000000000000 we

1111111111111111111111 en

0001001000100001000000 addr

0001001000000000000000 di

0000000000000000000000 do

Изменено пользователем darkniisiis

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


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

Все правильно, Вы писали только по 0 адресу и только 0. Адрес и данные должны иметь нужное значение на момент прихода фронта, т.е. на предыдущем такте - так же как и с D-триггером.

 

Надо так:

00110011 clk

11111111 we

11111111 en

00001100 addr

11001100 di

 

По адресам 0 и 1 запишутся 1. Когда данные на выходе появятся - смотреть по документации (на память не помню).

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


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

что то ничего не помогает.

Может быть кто-нибудь даст ссылочку на необходимую документацию?

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


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

что то ничего не помогает.

Мне эти "временные диаграммы" (00110011) абсолютно непонятны. Вы можете сделать скриншот окна wave симулятора и опубликовать здесь?

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


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

xlxn_4 - clk

Если это самое начало симуляции, т. е. левее того, что на рисунке, ничего нет, то мне все понятно.

 

У Xilinx есть забавный баг, которому уже не один год. Заключается он в том, что модель памяти (может, еще какой-то компонент тоже -- не знаю, но на грабли с памятью коллеги наступали несколько раз) не работает, если память использует восходящий фронт тактового сигнала, а в момент начала симуляции оный тактовый сигнал устанавливается в '1'.

Измените генератор тактового сигнала, чтобы он начинал генерацию с '0'.

 

Кстати, интересный момент. Попробуйте провести эксперимент: сигналы оставьте как есть, а у памяти измените активный фронт клока.

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


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

Идиотский вопрос - а библиотеки-то подключены (UNISIM)? Внимательно смотрите на Warning'и в Transcript'е. Может тестбенч выложите?

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


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

Попробовал изменить ночало такта,не помогло

Почему имена сигналов съехали?

Если отвлечься от имен, сигналы на новой картинке расположены в том же порядке, что и на первой? Если да, то все правильно. Enable в нуле -- писаться ничего не будет, Reset в '1' -- на выходе нули.

 

Вы как будто нарочно делаете все для того, чтобы помочь вам с решением проблемы было как можно сложнее. Как известно, правильно заданный вопрос содержит половину ответа. Если бы вы предоставили максимум информации сразу, а не то, что в первом посте ("я делаю, а у меня не получается" -- поди догадайся, что вы там делаете), то, весьма вероятно, получили бы ответ сразу. Блочная память -- девайс простой, и если она не работает, то по какой-то очень простой причине.

 

Настойчиво вам советую прислушаться к просьбе коллеги BSV показать тестбенч.

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


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

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

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

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

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

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

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

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

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

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