ЛР2 > Работа с блоками памяти в Quartus II
Статьи по теме
Содержание: Использование блоков памяти при созданиии проектов в Quartus II. Мега-Функции RAM: 1-PORT и RAM: 2-PORT в Mega Wizard Plug-in Manager
Теоретические сведения
Блоки памяти являются одними из основных компонентов, применяемых для реализации различных вычислительных устройств. Если для создания вычислительного устройства используется микросхема программируемой логики (ПЛИС, FPGA), то для построения блоков памяти могут быть использованы внутренние ресурсы этой микросхемы. В случае необходимости, к ПЛИС можно подключать дополнительные внешние микросхемы памяти. Целью данной лабораторной работы является изучение способов реализации блоков памяти для построения «Систем на Кристалле» (“System on Chip”, SoC).
Структурная схема блока памяти, который предстоит реализовать, показана на рисунке 1.
Рисунок 1. Структурная схема блока памяти.
Это оперативное запоминающее устройство (ОЗУ, RAM), содержащее 32 8-разрядных слова.
Для реализации блоков памяти в микросхеме 2С35 семейства Cyclone II имеются специализированные блоки, которые называются М4К. Такой блок содержит 4096 бит памяти и позволяет использовать различные способы конфигурации. Обычно, конфигурация блока памяти задается отношением количества слов к их разрядности (depth x width). Блок М4К поддерживает следующие способы конфигурации: 4К х 1, 2К х 2, 1К х 4 и 512 х 8. В нашем упражнении мы будем использовать первые 32 слова в блоке памяти, сконфигурированном по схеме 512 х 8.
Существуют еще две особенности специализированных блоков памяти М4К. Во-первых, в них присутствуют встроенные регистры для всех входных и выходных сигналов, которые используются для их синхронизации с входной тактовой частотой. Во-вторых, блоки М4К имеют независимые порты для чтения и записи данных. Обязательным требованием при применении блоков М4К является синхронизации входных и/или выходных сигналов. С учетом этого требования, схема реализуемого блока памяти будет выглядеть, как показано на рисунке 2. Для входных сигналов Address, DataIn и Write используются входные регистры, синхронизированные с тактовой частотой Clock. Для выходного сигнала DataOut регистр не используется.
Рисунок 2. Схема реализации блока памяти.
Задание 1.
1. Создайте новый проект и укажите тип используемой микросхемы – EP2C35F672C6 семейства Cyclone II.
2. С помощью генератора мегафункций Mega Wizard Plug-in Manager создайте блок памяти (см. рисунок 3). Для этого воспользуйтесь функцией RAM: 1-PORT (папка Memory Compiler). В качестве выходного файла укажите Verilog HDL, и задайте имя файлу ramlpm.v (в рабочей директории проекта).
Рисунок 3. Внешний вид генератора мегафункций.
3. На следующих страницах генератора мегафункций укажите формат блока памяти (32 8-разрядных слова) и используемые ресурсы (блок М4К). Оставьте заданную по умолчанию настройку – использовать одну тактовую частоту для синхронизации всех регистров блока памяти. Отключите опцию применения выходных регистров в блоке памяти (как показано на рисунке 4) – установка Read output port(s) в разделе Which ports should be registered?.
Рисунок 4. Отключение выходных регистров блока памяти.
4. Все остальные настройки оставьте по умолчанию.
5. Создайте файл верхнего уровня иерархии. Подключите файл с настройками контактов ввода/вывода DE2_pin_assignments.csv. Для подачи входных данных используйте переключатели SW[7..0], адрес задается переключателями SW[15..11], сигнал записи – переключателем SW17. Для подачи тактового сигнала используйте кнопку KEY0. Для индикации адреса используйте семисегментные индикаторы HEX7 и НЕХ6, входных данных – НЕХ5 и НЕХ4. Выходные данные вывести на индикаторы НЕХ1 и НЕХ0.
6. Проверить работоспособность проекта с помощью моделирующей программы и отладочного модуля DE2.
Задание 2
1. Создайте блок памяти, используя оператор объявление массива на языке Verilog:
reg[7..0] memory_array[31..0];
2. Все назначения для входных и выходных сигналов – такие же, как и в предыдущем задании.
3. Проверьте работоспособность проекта с помощью моделирующей программы и отладочного модуля DE2. Проверьте используемые для его реализации ресурсы ПЛИС.
Задание 3
1. Создайте новый проект, используя мегафункцию RAM: 2-PORT (папка Memory Compiler). Для создаваемого блока памяти укажите в настройках использование одного порта для записи данных и одного порта для чтения. Объем и способ реализации памяти – такой же, как и в задании 1.
2. На странице 7 генератора мегафункций укажите режим обработки одновременного обращения к ячейке памяти, как показано на рисунке 5.
Рисунок 5. Настройка режима одновременного доступа к ячейке памяти.
3. Укажите файл инициализации содержимого блока памяти, как показано на рисунке 6.
Рисунок 6. Указание файла инициализации блока памяти.
4. Создайте файл верхнего уровня иерархии. Подключите файл с настройками контактов ввода/вывода DE2_pin_assignments.csv. Для подачи входных данных используйте переключатели SW[7..0], адрес для записи в блок памяти задается переключателями SW[15..11], сигнал записи – переключателем SW17. Для подачи тактового сигнала используйте установленный на отладочном модуле 50 МГц кварцевый генератор (контакт CLOCK_50). Адрес для чтения содержимого блока памяти должен изменяться автоматически с периодом, равным 1 сек. Кнопку KEY0 используйте для установки адреса чтения ячейки памяти в исходное состояние. Для индикации адреса записи используйте семисегментные индикаторы HEX7 и НЕХ6, входных данных – НЕХ5 и НЕХ4, адреса чтения – НЕХ3 и НЕХ2. Выходные данные вывести на индикаторы НЕХ1 и НЕХ0.
5. Создайте собственный файл инициализации содержимого блока памяти ramlpm.mif.
6. Проверьте работоспособность Вашего проекта с помощью отладочного модуля DE2.
Задание для самостоятельной работы.
Создайте проект и проверьте работоспособность блока памяти типа FIFO.