-
Notifications
You must be signed in to change notification settings - Fork 35
Problem 06: ROM
Обращаясь к иерархии компьютерной памяти, даже не вдаваясь в подробности, можно заметить, что память делится на быструю, но малую по объему (например, регистры микропроцессора) и большую по объему, но медленную (например, ОЗУ). Кроме того, как правило, чем быстрее память, тем выше её стоимость в пересчете на 1 бит. Таким образом, при создании любого вычислительного устройства будет правильно держать нужные в данный момент данные в быстрой памяти, а ненужные в медленной и подгружать их в быструю по мере необходимости. Именно поэтому в микропроцессоре есть набор регистров и кэши разных размеров с самыми нужными в конкретный момент данными, а остальное хранится в ОЗУ или даже в swap-разделе жёсткого диска.
FPGA Altera Cyclone IV (в данном случае EP4CE6E22C8) тоже соответствует этому принципу. Нам доступно 6272 бит регистров (один триггер на один логический элемент -- LE) и 276480 бит статической ОЗУ (SRAM).
В этом задании рассматривается создание ПЗУ разными способами: на основе встроенной RAM и на основе комбинационной логики.
Перейдите в каталог problems/06_rom
в вашей локальной копии репозитория. Для синхронизации локального репозтория используется команда git pull
.
Скомпилируйте проект с включенной опцией "Allow Any ROM Size For Recognition" (Assignments > Settings > Advanced Settings (Synthesis)). Выясните, сколько использовано регистров (registers), LUT и бит встроенной памяти (memory bits) по результатам компиляции (Compliation Report > Analysis & Synthesis > Resource Utilization by Entity) для модуля rom
, а также посмотрите на схему этого модуля после её отображения на ресурсы FPGA (Tools > Netlist viewers > Technology Map (Post-Mapping)).
Вопрос (*): почему отсутствуют регистры на выходе q
модуля rom
, хотя модуль очевидно последовательностный и этот выход объявлен как output reg
?
Скомпилируйте проект с выключенной опцией "Allow Any ROM Size For Recognition". Выясните, сколько использовано регистров, LUT и бит встроенной памяти для модуля rom
, а также посмотрите на схему этого модуля после её отображения на ресурсы FPGA.
Замечание: хотя код в задаче №1 и задаче №2 одинаковый, схемы и использованные ресурсы оказываются сильно различными.
Замените модуль rom
на rom_comb
, скомпилируйте проект с выключенной опцией "Allow Any ROM Size For Recognition" и снова выясните статистику потребления различных ресурсов FPGA.
Замечание: о том, какие кодовые паттерны рассматриваются Quartus'ом как потенциально возможные для замены на ROM или RAM, можно в документе Intel Quartus Prime Standard Edition User Guide: Design Recommendations.
Вопрос: все ли заявленные для модуля rom
/rom_comb
в таблице Resource Utilization by Entity ресурсы присутствуют на схеме Technology Map (Post-Mapping) для всех 3 случаев?
Запустите на отладочной плате все описанные варианты создания ROM.
Вопрос: почему в 1-м и 2-м случае первое появившееся число на индикаторе это 0000
(которого нет в program.txt
), а в 3-м случае индикатор сразу начинает отображать числа из program.txt
?