Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания АПМС 1 часть.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
931.72 Кб
Скачать
  1. Особенности реализации устройств с памятью

Все запоминающие устройства в зависимости от принципа хранения информации принято разделять на постоянные (ПЗУ, или ROM - Read­Only Memory) и оперативные (ОЗУ, или RAM - Random Access Memory). ПЗУ является по сути устройством комбинационной логики, которое для каждого выхода данных реализует логическую функцию от адресных вхо­дов. В соответствии с этим они могут быть описаны так же, как и обычные декодеры или независимые блоки комбинационной логики.

ОЗУ могут быть реализованы в ПЛИС тремя способами:

  • на базе триггеров логических ячеек;

  • на базе распределённой памяти;

  • на базе блочной памяти.

Использование распределённой памяти значительно более выгодно, чем применение триггеров, уже потому, что на каждый триггер FPGA приходится один логический генератор, который для ПЛИС фирмы Xilinx может быть сконфигурирован как фрагмент распределённой памяти с ор­ганизацией 16 х 1. Экономия ресурсов ПЛИС при этом очевидна.

VHDL предоставляет достаточно простой путь описания памяти. При­мер реализации ОЗУ с организацией 32 х 4 приведён ниже:

-- Read-First Mode library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity rams_01 is

port (

elk : in std_logic;

we : in std_logic;

en : in std_logic;

addr : in std_logic_vector(4 downto 0);

di : in std_logic_vector(3 downto 0);

do : out std_logic_vector(3 downto 0)

);

end rams_01;

architecture syn of rams_01 is type ram_type is array (31 downto 0) of std_logic_vector (3 downto 0); signal RAM: ram_type; begin

process (elk) begin

if elk’event and elk = ’1’ then then = ’1’ then

if we = ’1’ then

RAM(conv_integer(addr)) <= di; end if;

do <= RAM(conv_integer(addr)) ; end if; end if; end process; end syn;

Данный пример, приведённый в справочной системе ISE, может быть синтезирован как в виде распределённой памяти, так и в виде блочной.

Тип синтезируемой памяти задаётся в свойствах процесса синтеза. До­ступ к свойствам процесса синтеза можно получить, выполнив щелчок правой клавишей мыши по названию процесса « Synthesize-XST» в окне процессов и выбрав в выпадающем меню пункт «Properties». В открыв­шемся окне (рисунок 30) необходимо выбрать категорию «HDL Options», в правой части окна появится список свойств синтеза, относящихся к этой категории.

Рисунок 30 Настройка типа синтезируемой памяти

В выпадающем меню свойства «RAM Style» (тип ОЗУ) есть три вари­анта: «Auto» (автоматический выбор типа ОЗУ). «Distributed» (распре­делённая память) и «Bloek» (блочная память). Результаты синтеза ОЗУ с различными настройками можно узнать по окончании работы соответ­ствующего процесса в окне резюме проекта (таблицы 1 и 2).

Таблица 1 - Использование ресурсов (распределённая память)

Device Utilization Summary (estimated values)

Logic Utilization

Used

Available

Utilization

Number of Slices

5

1920

0 %

Number of Slice Flip Flops

4

3840

0 %

Number of 4 input LUTs

9

3840

0 %

Number of bonded IOBs

16

173

9 %

Number of GCLKs

1

8

12 %

Таблица 2 - Использование ресурсов (блочная память)

Device Utilization Summary (estimated values)

Logic Utilization

Used

Available

Utilization

Number of bonded IOBs

16

173

9 %

Number of BRAMs

1

12

8 %

Number of GCLKs

1

8

12 %

Xilinx ISE поддерживает использование метода «чёрного ящика», ко­торый можно применить при реализации ОЗУ на базе блочной памяти. Этот метод заключается во вставке в ДОЬ-описание или принципиаль­ную схему готового компонента, реализующего те или иные функции. В общем случае вставка компонента реализуется аналогично тому, как по­казано ниже:

-- Black Box library ieee;

use ieee.std_logic_1164.all;

entity black_box_l is port (

DI_1, DI_2 : in std_logic;

DOUT : out std_logic

architecture archi of black_box_l is component my_block port (

I1 : in std_logic;

I2: in std_logic;

0 : out std_logic

);

end component; begin

inst: my_block port map (I1=>DI_1,I2=>DI_2,0=>D0UT); end archi;

Для ПЛИС семейства Spartan-3. компонентами, синтезирующимися в блочную память, являются RAMB16_S[w] (однопортовое ОЗУ) и RAMB16_ _S[wA]_S[wB] (двухпортовое ОЗУ) (рисунок 31).

Рисунок 31 Примитивы ОЗУ для синтеза па базе блочной памяти

Подробное описание компонентов и принципов их настройки можно найти в [5].