Подписка на новости

Опрос

Нужны ли комментарии к статьям? Комментировали бы вы?

Реклама

 

2011 №8

Разработка VHDL-описаний цифровых устройств, проектируемых на основе ПЛИС фирмы Xilinx, с использованием шаблонов САПР ISE Design Suite. Часть 19

Зотов Валерий


В девятнадцатой части статьи мы продолжим изучение образцов VHDLописаний элементов, выполненных на основе экземпляров библиотечных примитивов, реализуемых на базе соответствующих аппаратных ресурсов кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. Представлена подробная информация о шаблонах описаний элементов блочной и распределенной оперативной памяти, схемы ускоренного переноса и пятивходовых функциональных генераторов, конфигурируемых на базе таблиц преобразования LUT ПЛИС указанных семейств.

8k-bit Data and 1k-bit Parity Configurable Synchronous Block RAM (RAMB8BWER) является шаблоном параметризированного варианта описания 2-портового ОЗУ информационной емкостью 8192 бита, с программируемой организацией каждого порта, возможностью использования выходных регистров, контролем четности и поддержкой режима побайтной записи. Этот шаблон предназначен для реализации на основе модуля блочной памяти ПЛИС серии Spartan-6. Каждый модуль блочной памяти Block RAM кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT можно конфигурировать не только в форме 2-портового ОЗУ емкостью 18 кбит, но и в виде двух независимых элементов оперативных запоминающих устройств объемом 9 кбит каждый [27]. При этом предоставляется возможность формирования элементов 2-портовой оперативной памяти как с раздельными портами записи и чтения данных, так и с универсальными портами, каждый из которых поддерживает выполнение операций записи и чтения информации. Шаблон 8k-bit Data and 1k-bit Parity Configurable Synchronous Block RAM (RAMB8BWER) охватывает все возможные варианты конфигурирования модуля блочной памяти в виде элементов 2-портовых ОЗУ объемом 9 кбит:

-- RAMB8BWER : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the body of the design code. The instance name
-- declaration : (RAMB8BWER_inst) and/or the port declarations after the
-- code : “=>” declaration maybe changed to properly reference and
-- : connect this function to the design. All inputs and outputs
-- : must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- RAMB8BWER: 8k-bit Data and 1k-bit Parity Configurable Synchronous Block RAM
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
RAMB8BWER_inst : RAMB8BWER
generic map (
-- DATA_WIDTH_A/DATA_WIDTH_B: ‘If RAM_MODE=”TDP”: 0, 1, 2, 4, 9 or 18; If RAM_MODE=“SDP”: 36’
DATA_WIDTH_A => 0,
DATA_WIDTH_B => 0,
-- DOA_REG/DOB_REG: Optional output register (0 or 1)
DOA_REG => 0,
DOB_REG => 0,
-- EN_RSTRAM_A/EN_RSTRAM_B: Enable/disable RST
EN_RSTRAM_A => TRUE,
EN_RSTRAM_B => TRUE,
-- INITP_00 to INITP_03: Initial memory contents.
INITP_00 => X“0000000000000000000000000000000000000000”,
INITP_01 => X“0000000000000000000000000000000000000000”,
-- INIT_00 to INIT_1F: Initial memory contents.
INIT_00 => X“00000000000000000000000000000000000000000”,
INIT_01 => X“00000000000000000000000000000000000000000”,

INIT_1E => X“00000000000000000000000000000000000000000”,
INIT_1F => X“00000000000000000000000000000000000000000”,
-- INIT_A/INIT_B: Initial values on output port
INIT_A => X“00000”,
INIT_B => X“00000”,
-- INIT_FILE: Not Supported
INIT_FILE => “NONE”, Do not modify
-- RAM_MODE: “SDP” or “TDP”
RAM_MODE => “TDP”,
-- RSTTYPE: “SYNC” or “ASYNC”
RSTTYPE => “SYNC”,
-- RST_PRIORITY_A/RST_PRIORITY_B: “CE” or “SR”
RST_PRIORITY_A => “CE”,
RST_PRIORITY_B => “CE”,
-- SIM_COLLISION_CHECK: Collision check enable “ALL”, “WARNING_ONLY”, “GENERATE_X_ONLY” or “NONE”
SIM_COLLISION_CHECK => “ALL”,
-- SRVAL_A/SRVAL_B: Set/Reset value for RAM output
SRVAL_A => X”00000”,
SRVAL_B => X”00000”,
-- WRITE_MODE_A/WRITE_MODE_B: “WRITE_FIRST”, “READ_FIRST”, or “NO_CHANGE”
WRITE_MODE_A => “WRITE_FIRST”,
WRITE_MODE_B => “WRITE_FIRST”
)
port map (
-- Port A Data: 16-bit (each) output Port A data
DOADO => DOADO, -- 16-bit output A port data/LSB data output
DOPADOP => DOPADOP, -- 2-bit output A port parity/LSB parity output
-- Port B Data: 16-bit (each) output Port B data
DOBDO => DOBDO, -- 16-bit output B port data/MSB data output
DOPBDOP => DOPBDOP, -- 2-bit output B port parity/MSB parity output
-- Port A Address/Control Signals: 13-bit (each) input Port A address and control signals (write port
-- when RAM_MODE=”SDP”)
ADDRAWRADDR => ADDRAWRADDR, -- 13-bit input A port address/Write address input
CLKAWRCLK => CLKAWRCLK, -- 1-bit input A port clock/Write clock input
ENAWREN => ENAWREN, -- 1-bit input A port enable/Write enable input
REGCEA => REGCEA, -- 1-bit input A port register enable input
RSTA => RSTA, -- 1-bit input A port set/reset input
WEAWEL => WEAWEL, -- 2-bit input A port write enable input
-- Port A Data: 16-bit (each) input Port A data
DIADI => DIADI, -- 16-bit input A port data/LSB data input
DIPADIP => DIPADIP, -- 2-bit input A port parity/LSB parity input
-- Port B Address/Control Signals: 13-bit (each) input Port B address and control signals (read port when
-- RAM_MODE=”SDP”)
ADDRBRDADDR => ADDRBRDADDR, -- 13-bit input B port address/Read address input
CLKBRDCLK => CLKBRDCLK, -- 1-bit input B port clock/Read clock input
ENBRDEN => ENBRDEN, -- 1-bit input B port enable/Read enable input
REGCEBREGCE => REGCEBREGCE, -- 1-bit input B port register enable/Register enable input
RSTBRST => RSTBRST, -- 1-bit input B port set/reset input
WEBWEU => WEBWEU, -- 2-bit input B port write enable input
-- Port B Data: 16-bit (each) input Port B data
DIBDI => DIBDI, -- 16-bit input B port data/MSB data input
DIPBDIP => DIPBDIP -- 2-bit input B port parity/MSB parity input
);
-- End of RAMB8BWER_inst instantiation

В качестве основы представленного шаблона используется оператор создания экземпляра библиотечного примитива RAMB8BWER, который позволяет формировать элементы 2-портовой оперативной памяти с выходными регистрами, поддержкой режима побайтной записи информации и выполнения операций записи и чтения данных с использованием контроля четности для каждого порта. В этом примитиве для установки требуемой конфигурации создаваемого элемента ОЗУ применяются те же настраиваемые параметры, что и в шаблоне 16k-bit Data and 2k-bit Parity Configurable Synchronous Dual Port Block RAM with Optional Output Registers (RAMB16BWER), рассмотренном в предыдущей части статьи. Кроме того, в шаблоне 8k-bit Data and 1k-bit Parity Configurable Synchronous Block RAM (RAMB8BWER) предусмотрен дополнительный параметр настройки RAM_MODE, который предназначен для выбора режима работы портов в формируемом элементе 2-портовой оперативной памяти. Этот параметр может принимать одно из двух значений — SDP или TDP. При выборе варианта SDP создается элемент 2-портового ОЗУ, в котором первый порт (A) предназначен для записи информации, а второй (B) — для чтения данных. Для формирования элемента полнофункциональной 2-портовой оперативной памяти, каждый порт которой поддерживает выполнение операций чтения и записи данных, следует использовать значение TDP, предлагаемое по умолчанию для параметра RAM_MODE.

В состав системы условных обозначений, применяемых в описании интерфейса элементов ОЗУ, создаваемых на основе шаблона 8k-bit Data and 1k-bit Parity Configurable Synchronous Block RAM (RAMB8BWER), входят следующие идентификаторы входов и выходов:

  • DOADO — выходная 16-разрядная шина информационных данных первого порта (для полнофункционального 2-портового ОЗУ) или младших разрядов слова данных (для элемента памяти с раздельными портами записи и чтения данных).
  • DOPADOP — выходная 2-разрядная шина, предназначенная для организации контроля четности информационных данных первого порта (для ОЗУ с универсальными портами) или младших 16 разрядов слова данных (для элемента памяти со специализированными портами записи и чтения данных).
  • DOBDO — выходная 16-разрядная шина информационных данных второго порта (для полнофункционального 2-портового ОЗУ) или старших разрядов слова данных (для элемента памяти с раздельными портами записи и чтения данных).
  • DOPBDOP — выходная 2-разрядная шина, используемая для осуществления контроля четности информационных данных второго порта (для ОЗУ с универсальными портами) или старших 16 разрядов слова данных (для элемента памяти со специализированными портами записи и чтения данных).
  • ADDRAWRADDR — 13-разрядная шина адреса первого порта (для ОЗУ с универсальными портами) или порта записи данных (для элемента памяти со специализированными портами записи и чтения данных).
  • CLKAWRCLK — вход сигнала синхронизации первого порта (для полнофункционального 2-портового ОЗУ) или порта записи (для элемента памяти с раздельными портами записи и чтения данных).
  • ENAWREN — вход сигнала разрешения первого порта (для ОЗУ с универсальными портами) или порта записи (для элемента памяти со специализированными портами записи и чтения данных).
  • REGCEA — вход сигнала разрешения синхронизации выходного регистра первого порта полнофункционального 2-портового ОЗУ (в элементах памяти с раздельными портами записи и чтения данных не используется).
  • RSTA — вход сигнала сброса/установки первого порта 2-портового ОЗУ с универсальными портами (в элементах памяти со специализированными портами записи и чтения данных не используется).
  • WEAWEL — входная 2-разрядная шина, объединяющая сигналы разрешения записи соответствующего байта данных в первый порт полнофункционального 2-портового ОЗУ или младшие разряды шины разрешения записи в элементах памяти с раздельными портами записи и чтения данных.
  • DIADI — входная 16-разрядная шина информационных данных первого порта 2-портового ОЗУ с универсальными портами или младших разрядов слова данных в элементах памяти со специализированными портами записи и чтения.
  • DIPADIP — входная 2-разрядная шина, применяемая для осуществления контроля четности информационных данных первого порта полнофункционального 2-портового ОЗУ или младших разрядов слова данных в элементах памяти с раздельными портами записи и чтения.
  • ADDRBRDADDR — 13-разрядная шина адреса второго порта (для ОЗУ с универсальными портами) или порта чтения данных (для элемента памяти со специализированными портами записи и чтения данных).
  • CLKBRDCLK — вход сигнала синхронизации второго порта (для полнофункционального 2-портового ОЗУ) или порта чтения (для элемента памяти с раздельными портами записи и чтения данных).
  • ENBRDEN — вход сигнала разрешения второго порта (для ОЗУ с универсальными портами) или порта чтения (для элемента памяти со специализированными портами записи и чтения данных).
  • REGCEBREGCE — вход сигнала разрешения синхронизации выходного регистра второго порта полнофункционального 2-портового ОЗУ или выходного регистра для элемента памяти с раздельными портами записи и чтения данных.
  • RSTBRST — вход сигнала сброса/установки второго порта 2-портового ОЗУ с универсальными портами или выходного порта в элементах памяти со специализированными портами записи и чтения данных.
  • WEBWEU — входная 2-разрядная шина, объединяющая сигналы разрешения записи соответствующего байта данных во второй порт полнофункционального 2-портового ОЗУ или старшие разряды шины разрешения записи в элементах памяти с раздельными портами записи и чтения данных.
  • DIBDI — входная 16-разрядная шина информационных данных второго порта 2-портового ОЗУ с универсальными портами или старших разрядов слова данных в элементах памяти со специализированными портами записи и чтения.
  • DIPBDIP — входная 2-разрядная шина, применяемая для осуществления контроля четности информационных данных второго порта полнофункционального 2-портового ОЗУ или старших разрядов слова данных в элементах памяти с раздельными портами записи и чтения.

На рис. 256 представлен условный графический образ элемента 2-портового ОЗУ с поддержкой режима побайтной записи информации и применения выходного регистра, реализуемого на базе модуля блочной памяти Block RAM ПЛИС серии Spartan-6, описание которого формируется с помощью шаблона 8k-bit Data and 1k-bit Parity Configurable Synchronous Block RAM (RAMB8BWER).

Условный графический образ 2-портового ОЗУ, формируемого с помощью шаблона RAMB8BWER

Рис. 256. Условный графический образ 2-портового ОЗУ, формируемого с помощью шаблона RAMB8BWER

128 × 1 posedge write (RAM128X1D) содержит образец VHDL-описания элемента 2-портового оперативного запоминающего устройства с информационной емкостью 128 бит и организацией 128 слов × 1 разряд, синтезируемого на базе таблиц преобразования LUT секций SLICEM кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT.

В составе секций типа SLICEM конфигурируемых логических блоков (Configurable Logic Block, CLB) ПЛИС серии Spartan-6 применяются реальные 6-входовые таблицы преобразования LUT, которые можно конфигурировать как элементы распределенной оперативной или постоянной памяти с информационной емкостью 64 бита [28]. Для формирования элементов распределенных ОЗУ и ПЗУ большего объема используется объединение нескольких таблиц преобразования LUT. На рис. 257 изображена структурная схема элемента 2-портовой оперативной памяти с информационной емкостью 128 бит и организацией 128 слов × 1 разряд, конфигурируемого на базе четырех таблиц преобразования LUT секции SLICEM кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT.

Схема 2-портового ОЗУ

Рис. 257. Структурная схема 2-портового распределенного ОЗУ емкостью 128 бит, реализуемого на базе ПЛИС серии Spartan-6

Для быстрой подготовки описания такого элемента 2-портового распределенного ОЗУ предлагается шаблон, текст которого выглядит следующим образом:

-- RAM128X1D : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (RAM128X1D_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- RAM128X1D: 128-deep by 1-wide positive edge write, asynchronous read
-- dual-port distributed LUT RAM
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
RAM128X1D_inst : RAM128X1D
generic map (
INIT => X“00000000000000000000000000000000”
)
port map (
DPO => DPO, -- Read/Write port 1-bit ouput
SPO => SPO, -- Read port 1-bit output
A => A, -- Read/Write port 7-bit address input
D => D, -- RAM data input
DPRA => DPRA, -- Read port 7-bit address input
WCLK => WCLK, -- Write clock input
WE => WE -- RAM data input
);
-- End of RAM128X1D_inst instantiation

Основой приведенного шаблона является экземпляр библиотечного примитива RAM128X1D, в котором предусмотрен параметр настройки INIT, предназначенный для определения начального содержимого формируемого элемента 2-портовой оперативной памяти. Значение этого настраиваемого параметра указывается в виде 32-разрядного шестнадцатеричного числа. По умолчанию для параметра INIT предлагается значение, обнуляющее содержимое всех ячеек синтезируемого элемента ОЗУ.

В описании интерфейса элементов 2-портовой оперативной памяти, формируемых на основе библиотечного примитива RAM128X1D, применяется следующая система условных обозначений входов и выходов:

  • DPO — информационный выход второго порта элемента оперативной памяти;
  • SPO — информационный выход первого порта ОЗУ;
  • A — 7-разрядная шина адреса первого порта;
  • D — информационный вход данных;
  • DPRA — 7-разрядная шина адреса второго порта;
  • WCLK — вход сигнала синхронизации;
  • WE — вход разрешения записи.

В элементах 2-портовых ОЗУ, создаваемых с помощью шаблона 128 × 1 posedge write (RAM128X1D), первый порт, включающий в себя шину адреса A и выход SPO, поддерживает выполнение операций чтения и записи входных данных. Второй порт, в состав которого входит шина адреса DPRA и выход DPO, позволяет выполнять только операции чтения информации, хранящейся в ОЗУ. Загрузка входных данных в ячейки элемента 2-портовой распределенной оперативной памяти осуществляется при наличии высокого логического уровня на входе разрешения записи WE по фронту сигнала синхронизации, поступающего на вход WCLK.

Условный графический образ элемента 2-портовой распределенной оперативной памяти с организацией 128 слов × 1 разряд, для подготовки описания которого используется шаблон 128 × 1 posedge write (RAM128X1D), приведен на рис. 258.

Условный графический образ 2-портового ОЗУ (RAM128X1D)

Рис. 258. Условный графический образ распределенного 2-портового ОЗУ, формируемого с помощью шаблона 128 × 1 posedge write (RAM128X1D)

32 × 1 negedge write (RAM32X1D_1) включает в себя шаблон описания элемента 2-портового ОЗУ с информационной емкостью 32 бита и организацией 32 слова × 1 разряд, реализуемого на основе ресурсов распределенной памяти ПЛИС серии Spartan-6. Запись информации в элемент оперативной памяти, формируемый с помощью этого шаблона, производится по спаду тактового сигнала:

-- RAM32X1D_1 : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (RAM32X1D_1_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- RAM32X1D_1: 32 x 1 negative edge write, asynchronous read
-- dual-port distributed RAM
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
RAM32X1D_1_inst : RAM32X1D_1
generic map (
INIT => X“00000000”) -- Initial contents of RAM
port map (
DPO => DPO, -- Read-only 1-bit data output
SPO => SPO, -- R/W 1-bit data output
A0 => A0, -- R/W address[0] input bit
A1 => A1, -- R/W address[1] input bit
A2 => A2, -- R/W address[2] input bit
A3 => A3, -- R/W address[3] input bit
A4 => A4, -- R/W address[4] input bit
D => D, -- Write 1-bit data input
DPRA0 => DPRA0, -- Read-only address[0] input bit
DPRA1 => DPRA1, -- Read-only address[1] input bit
DPRA2 => DPRA2, -- Read-only address[2] input bit
DPRA3 => DPRA3, -- Read-only address[3] input bit
DPRA4 => DPRA4, -- Read-only address[4] input bit
WCLK => WCLK, -- Write clock input
WE => WE -- Write enable input
);
-- End of RAM32X1D_1_inst instantiation

Основу приведенного шаблона образует оператор создания экземпляра библиотечного примитива RAM32X1D_1, который представляет соответствующий вариант конфигурирования таблицы преобразования LUT секции SLICEM в кристаллах программируемой логики семейств Spartan-6 LX и Spartan-6 LXT.

Система условных обозначений входов и выходов, используемых в описании интерфейса библиотечного примитива RAM32X1D_1, включает в себя следующие идентификаторы:

  • DPO — выход второго порта элемента оперативной памяти;
  • SPO — выход первого порта ОЗУ;
  • A0–A4 — адресные входы первого порта;
  • D — информационный вход данных;
  • DPRA0–DPRA4 — адресные входы второго порта;
  • WCLK — вход сигнала синхронизации;
  • WE — вход сигнала разрешения записи.

Инициализация содержимого элемента 2-портового ОЗУ, формируемого на основе шаблона 32 × 1 negedge write (RAM32X1D_1), осуществляется с помощью параметра INIT, значение которого задается в форме 8-раз-рядного шестнадцатеричного числа.

На рис. 259 показан условный графический образ элемента 2-портовой оперативной памяти с информационной емкостью 32 бита и организацией 32 слова × 1 разряд, реализуемого на базе таблицы преобразования LUT секции SLICEM конфигурируемого логического блока ПЛИС серии Spartan-6.

Условный графический образ  2-портового ОЗУ (RAM32X1D_1)

Рис. 259. Условный графический образ 2-портового ОЗУ, формируемого на основе шаблона 32 × 1 negedge write (RAM32X1D_1)

32 × 1 posedge write (RAM32X1D) представляет собой образец VHDL-описания элемента 2-портового ОЗУ с информационной емкостью 32 бита и организацией 32 слова × 1 разряд, предназначенного для реализации на базе таблицы преобразования LUT секции SLICEM в кристаллах программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. В качестве основы этого шаблона используется оператор создания экземпляра библиотечного примитива RAM32X1D, который отличается от примитива RAM32X1D_1, рассмотренного в предыдущем шаблоне, только отсутствием инверсии на входе тактового сигнала. Запись данных в элементы 2-портовой оперативной памяти, описания которых создаются на основе библиотечного примитива RAM32X1D, осуществляется по фронту сигнала синхронизации:

-- RAM32X1D : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (RAM32X1D_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- RAM32X1D: 32 x 1 positive edge write, asynchronous read
-- dual-port distributed RAM
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
RAM32X1D_inst : RAM32X1D
generic map (
INIT => X“00000000”) -- Initial contents of RAM
port map (
DPO => DPO, -- Read-only 1-bit data output
SPO => SPO, -- R/W 1-bit data output
A0 => A0, -- R/W address[0] input bit
A1 => A1, -- R/W address[1] input bit
A2 => A2, -- R/W address[2] input bit
A3 => A3, -- R/W address[3] input bit
A4 => A4, -- R/W address[4] input bit
D => D, -- Write 1-bit data input
DPRA0 => DPRA0, -- Read-only address[0] input bit
DPRA1 => DPRA1, -- Read-only address[1] input bit
DPRA2 => DPRA2, -- Read-only address[2] input bit
DPRA3 => DPRA3, -- Read-only address[3] input bit
DPRA4 => DPRA4, -- Read-only address[4] input bit
WCLK => WCLK, -- Write clock input
WE => WE -- Write enable input
);
-- End of RAM32X1D_inst instantiation

Условный графический образ элемента 2-портового распределенного ОЗУ с организацией 32 слова × 1 разряд, описание которого формируется с помощью шаблона 32 × 1 posedge write (RAM32 X1 D) для последующей реализации на базе таблицы преобразования LUT секции SLICEM конфигурируемого логического блока ПЛИС серии Spartan-6, изображен на рис. 260.

Условный графический образ  2-портового ОЗУ (RAM32X1D)

Рис. 260. Условный графический образ 2-портового ОЗУ, формируемого на основе шаблона 32 × 1 posedge write (RAM32X1D)

64 × 1 posedge write (RAM64 X1 D) является шаблоном VHDL-описания 2-портового оперативного запоминающего устройства с информационной емкостью 64 бита и организацией 64 слова × 1 разряд, синтезируемого на базе таблиц преобразования LUT секций SLICEM кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. Для формирования элементов распределенных 2-портовых ОЗУ объемом 64 бита используются две таблицы преобразования LUT. Структурная схема таких элементов 2-портовой оперативной памяти, предназначенных для применения в составе проектируемых устройств, реализуемых на базе ПЛИС серии Spartan-6, представлена на рис. 261.

Схема 2-портового  ОЗУ 64 бита

Рис. 261. Структурная схема 2-портового распределенного ОЗУ емкостью 64 бита, реализуемого на базе ПЛИС серии Spartan-6

Текст шаблона описания элементов 2-пор-товых распределенных ОЗУ указанной емкости выглядит следующим образом:

-- RAM64X1D : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (RAM64X1D_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- RAM64X1D: 64 x 1 positive edge write, asynchronous read
-- dual-port distributed RAM
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
RAM64X1D_inst : RAM64X1D
generic map (
INIT => X“0000000000000000”) -- Initial contents of RAM
port map (
DPO => DPO, -- Read-only 1-bit data output
SPO => SPO, -- R/W 1-bit data output
A0 => A0, -- R/W address[0] input bit
A1 => A1, -- R/W address[1] input bit
A2 => A2, -- R/W address[2] input bit
A3 => A3, -- R/W address[3] input bit
A4 => A4, -- R/W address[4] input bit
A5 => A5, -- R/W address[5] input bit
D => D, -- Write 1-bit data input
DPRA0 => DPRA0, -- Read-only address[0] input bit
DPRA1 => DPRA1, -- Read-only address[1] input bit
DPRA2 => DPRA2, -- Read-only address[2] input bit
DPRA3 => DPRA3, -- Read-only address[3] input bit
DPRA4 => DPRA4, -- Read-only address[4] input bit
DPRA5 => DPRA5, -- Read-only address[5] input bit
WCLK => WCLK, -- Write clock input
WE => WE -- Write enable input
);
-- End of RAM64X1D_inst instantiation

Основой приведенной конструкции является оператор создания экземпляра библиотечного примитива RAM64X1D. Система условных обозначений, применяемых в описании интерфейса этого примитива, включает в себя ту же совокупность идентификаторов входов и выходов, что и в шаблоне 32 × 1 negedge write (RAM32X1D_1), рассмотренном выше. Кроме того, в составе интерфейса библиотечного примитива RAM64X1D присутствуют два дополнительных адресных входа — A5 и DPRA5. Для инициализации содержимого элемента 2-портовой оперативной памяти, формируемого с помощью шаблона 64 × 1 posedge write (RAM64X1D), необходимо указать соответствующее значение параметра настройки INIT в виде 16-разрядного шестнадцатеричного числа. Загрузка данных в ячейки такого запоминающего устройства производится при высоком логическом уровне сигнала на входе разрешения записи по фронту сигнала синхронизации.

На рис. 262 приведен условный графический образ элемента 2-портового распределенного ОЗУ с информационной емкостью 64 бита и организацией 64 слова × 1 разряд, описание которого создается на основе библиотечного примитива RAM64X1D для последующего применения в составе проектов, реализуемых на базе кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT.

Условный графический образ  ОЗУ (RAM64X1D)

Рис. 262. Условный графический образ 2-портового ОЗУ, формируемого на основе шаблона 64 × 1 posedge write (RAM64X1D)

64 × 1 negedge write (RAM64X1D_1) содержит образец описания элемента 2-портовой оперативной памяти с информационной емкостью 64 бита и организацией 64 слова × 1 разряд, реализуемого на базе таблицы преобразования LUT секции SLICEM конфигурируемых логических блоков ПЛИС серии Spartan-6. Основой этого шаблона является оператор создания экземпляра библиотечного примитива RAM64X1D_1, который отличается от элемента RAM64X1D, рассмотренного в предыдущем шаблоне, только инверсией сигнала на входе синхронизации. Таким образом, запись информации в ячейки 2-портового ОЗУ, для подготовки описания которого применяется шаблон 64 × 1 negedge write (RAM64X1D_1), осуществляется по спаду тактового сигнала:

-- RAM64X1D_1 : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (RAM64X1D_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- RAM64X1D: 64 x 1 negative edge write, asynchronous read
-- dual-port distributed RAM
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
RAM64X1D_1_inst : RAM64X1D_1
generic map (
INIT => X“000000000000000”) -- Initial contents of RAM
port map (
DPO => DPO, -- Read-only 1-bit data output
SPO => SPO, -- R/W 1-bit data output
A0 => A0, -- R/W address[0] input bit
A1 => A1, -- R/W address[1] input bit
A2 => A2, -- R/W address[2] input bit
A3 => A3, -- R/W address[3] input bit
A4 => A4, -- R/W address[4] input bit
A5 => A5, -- R/W address[5] input bit
D => D, -- Write 1-bit data input
DPRA0 => DPRA0, -- Read-only address[0] input bit
DPRA1 => DPRA1, -- Read-only address[1] input bit
DPRA2 => DPRA2, -- Read-only address[2] input bit
DPRA3 => DPRA3, -- Read-only address[3] input bit
DPRA4 => DPRA4, -- Read-only address[4] input bit
DPRA5 => DPRA5, -- Read-only address[5] input bit
WCLK => WCLK, -- Write clock input
WE => WE -- Write enable input
);
-- End of RAM64X1D_1_inst instantiation

Условный графический образ элемента 2-портового распределенного оперативного запоминающего устройства, формируемого на основе библиотечного примитива RAM64X1D_1 в кристаллах программируемой логики семейств Spartan-6 LX и Spartan-6 LXT, представлен на рис. 263.

Условный графический образ ОЗУ (RAM64X1D_1)

Рис. 263. Условный графический образ 2-портового ОЗУ, формируемого на основе шаблона 64 × 1 negedge write (RAM64X1D_1)

32 × 8 (RAM32M) включает в себя шаблон описания элемента многопортового ОЗУ с информационной емкостью 32 слова, реализуемого на основе ресурсов распределенной памяти ПЛИС серии Spartan-6. Элемент оперативной памяти, формируемый с помощью этого шаблона, конфигурируется на базе четырех таблиц преобразования LUT секции SLICEM кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. В зависимости от способа соединения входов этих таблиц преобразования можно создавать элементы запоминающих устройств с числом портов от 1 до 4 и разрядностью слов данных от 8 до 2 соответственно. Структура 4-портового ОЗУ с организацией каждого порта 32 слова × 2 разряда, для подготовки описания которого применяется шаблон 32 × 8 (RAM32M), изображена на рис. 264.

Структура 4-портового ОЗУ

Рис. 264. Структура 4-портового распределенного ОЗУ с организацией каждого порта 32 слова × 2 разряда, реализуемого на базе ПЛИС серии Spartan-6

Рассматриваемый шаблон представляет собой конструкцию, выполненную на основе оператора создания экземпляра библиотечного примитива RAM32M:

-- RAM32M : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (RAM32M_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- RAM32M: 32-deep by 8-wide Multi Port LUT RAM
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
RAM32M_inst : RAM32M
generic map (
INIT_A => X“000000000000”, -- Initial contents of A port
INIT_B => X“000000000000”, -- Initial contents of B port
INIT_C => X“000000000000”, -- Initial contents of C port
INIT_D => X“000000000000”) -- Initial contents of D port
ort map (
DOA => DOA, -- Read port A 2-bit output
DOB => DOB, -- Read port B 2-bit output
DOC => DOC, -- Read port C 2-bit output
DOD => DOD, -- Read/Write port D 2-bit output
ADDRA => ADDRA, -- Read port A 5-bit address input
ADDRB => ADDRB, -- Read port B 5-bit address input
ADDRC => ADDRC, -- Read port C 5-bit address input
ADDRD => ADDRD, -- Read/Write port D 5-bit address input
DIA => DIA, -- RAM 2-bit data write input addressed by ADDRD,
-- read addressed by ADDRA
DIB => DIB, -- RAM 2-bit data write input addressed by ADDRD,
-- read addressed by ADDRB
DIC => DIC, -- RAM 2-bit data write input addressed by ADDRD,
-- read addressed by ADDRC
DID => DID, -- RAM 2-bit data write input addressed by ADDRD,
-- read addressed by ADDRD
WCLK => WCLK, -- Write clock input
WE => WE -- Write enable input
);
-- End of RAM32M_inst instantiation

В библиотечном примитиве RAM32M используются параметры настройки INIT_A, INIT_B, INIT_C и INIT_D, которые предоставляют возможность определения начального содержимого соответствующего порта формируемого элемента распределенной оперативной памяти. По умолчанию этим параметрам присваиваются нулевые значения.

В описании интерфейса элементов ОЗУ, создаваемых с помощью шаблона 32 ×8 (RAM32 M), применяется следующая система условных обозначений входов и выходов:

  • DOA, DOB, DOC и DOD — выходные 2-разрядные шины данных соответствующего порта (A, B, C и D) элемента распределенной оперативной памяти;
  • ADDRA, ADDRB, ADDRC и ADDRD — 5-разрядные шины адреса соответствующего порта распределенного запоминающего устройства;
  • DIA, DIB, DIC и DID — входные 2-разряд-ные шины данных соответствующего порта;
  • WCLK — вход тактового сигнала;
  • WE — вход сигнала разрешения записи.

Загрузка информации в элементы многопортовой оперативной памяти, формируемые на основе экземпляра библиотечного примитива RAM32M, выполняется по фронту тактового сигнала при высоком логическом уровне напряжения на входе разрешения записи.

На рис. 265 представлен условный графический образ элемента 4-портового ОЗУ, реализуемого на базе четырех таблиц преобразования LUT секции SLICEM конфигурируемого логического блока ПЛИС серии Spartan-6, для подготовки описания которого используется шаблон 32 × 8 (RAM32M).

Условный графический образ  4-портового ОЗУ (RAM32M)

Рис. 265. Условный графический образ 4-портового распределенного ОЗУ, формируемого с помощью шаблона 32 × 8 (RAM32M)

64 × 4 (RAM64M) представляет собой образец описания элемента мультипортовой оперативной памяти с информационной емкостью 64 слова, синтезируемого на базе четырех таблиц преобразования LUT секции SLICEM кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. С помощью этого шаблона можно формировать описания элементов распределенных ОЗУ с числом портов от одного до четырех. Структура элемента 4-портовой оперативной памяти с организацией каждого порта 64 слова × 1 разряд, описание которого выполняется на основе шаблона 64 × 4 (RAM64M), приведена на рис. 266.

Структура 4-портового ОЗУ

Рис. 266. Структура 4-портового распределенного ОЗУ с организацией каждого порта 64 слова × 1 разряд
-- RAM64M : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (RAM64M_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- RAM64M: 64-deep by 4-wide Multi Port LUT RAM
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
RAM64M_inst : RAM64M
generic map (
INIT_A => X“000000000000”, -- Initial contents of A port
INIT_B => X“000000000000”, -- Initial contents of B port
INIT_C => X“000000000000”, -- Initial contents of C port
INIT_D => X“000000000000) -- Initial contents of D port
port map (
DOA => DOA, -- Read port A 1-bit output
DOB => DOB, -- Read port B 1-bit output
DOC => DOC, -- Read port C 1-bit output
DOD => DOD, -- Read/Write port D 1-bit output
ADDRA => ADDRA, -- Read port A 6-bit address input
ADDRB => ADDRB, -- Read port B 6-bit address input
ADDRC => ADDRC, -- Read port C 6-bit address input
ADDRD => ADDRD, -- Read/Write port D 6-bit address input
DIA => DIA, -- RAM 1-bit data write input addressed by ADDRD,
-- read addressed by ADDRA
DIB => DIB, -- RAM 1-bit data write input addressed by ADDRD,
-- read addressed by ADDRB
DIC => DIC, -- RAM 1-bit data write input addressed by ADDRD,
-- read addressed by ADDRC
DID => DID, -- RAM 1-bit data write input addressed by ADDRD,
-- read addressed by ADDRD
WCLK => WCLK, -- Write clock input
WE => WE -- Write enable input
);
-- End of RAM64M_inst instantiation

Основу приведенной конструкции образует оператор создания экземпляра библиотечного примитива RAM64M в котором используются те же настраиваемые параметры, что и в предыдущем шаблоне. В состав системы условных обозначений, применяемых в описании интерфейса указанного библиотечного примитива, входят идентификаторы входов и выходов, назначение которых было представлено при рассмотрении библиотечного элемента RAM32M. Отличия проявляются только в разрядности адресных и информационных шин этих библиотечных примитивов. В элементе RAM64M используются 6-разрядные шины адреса, а вместо информационных шин — обычные входы и выходы данных.

Условный графический образ элемента 4-портовой оперативной памяти с организацией каждого порта 64 слова × 1 разряд, описание которого создается с помощью шаблона 64 × 4 (RAM64M) для последующей реализации на базе таблиц преобразования LUT секции SLICEM конфигурируемого логического блока ПЛИС серии Spartan-6, показан на рис. 267.

Условный графический образ  4-портового ОЗУ (RAM64M)

Рис. 267. Условный графический образ 4-портового распределенного ОЗУ, формируемого с помощью шаблона 64 × 4 (RAM64M)

128 × 1 posedge write (RAM128X1S) является шаблоном VHDL-описания элемента однопортового оперативного запоминающего устройства информационной емкостью 128 бит с организацией 128 слов × 1 разряд, конфигурируемого на базе ресурсов распределенной памяти кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. Для реализации элемента ОЗУ указанного объема задействуются две таблицы преобразования LUT секции SLICEM конфигурируемого логического блока ПЛИС серии Spartan-6. Рис. 268 наглядно поясняет структуру элемента памяти, формируемого с помощью шаблона 128 × 1 posedge write (RAM128X1S).

Структура распределенного однопортового ОЗУ (RAM128X1S)

Рис. 268. Структура распределенного однопортового ОЗУ, создаваемого с помощью шаблона 128 × 1 posedge write (RAM128X1S)

Рассматриваемый шаблон включает в себя следующую конструкцию, основу которой составляет оператор создания экземпляра библиотечного примитива RAM128X1S:

-- RAM128X1S : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (RAM128X1S_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- RAM128X1S: 128-deep x 1 positive edge write, asynchronous read
-- single-port distributed RAM
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
RAM128X1S_inst : RAM128X1S
generic map (
INIT => X“00000000000000000000000000000000”)
port map (
O => O, -- 1-bit data output
A0 => A0, -- Address[0] input bit
A1 => A1, -- Address[1] input bit
A2 => A2, -- Address[2] input bit
A3 => A3, -- Address[3] input bit
A4 => A4, -- Address[4] input bit
A5 => A5, -- Address[5] input bit
A6 => A6, -- Address[6] input bit
D => D, -- 1-bit data input
WCLK => WCLK, -- Write clock input
WE => WE -- RAM data input
);
-- End of RAM128X1S_inst instantiation

Для инициализации содержимого формируемого элемента однопортовой оперативной памяти в библиотечном примитиве RAM128X1S предусмотрен настраиваемый параметр INIT, значение которого задается в виде 32-разрядного шестнадцатеричного числа. По умолчанию после завершения процесса конфигурирования кристалла программируемой логики во все ячейки создаваемого элемента ОЗУ записывается нулевое значение.

В состав системы условных обозначений входов и выходов, используемых в описании интерфейса элементов распределенной однопортовой оперативной памяти, создаваемых с помощью шаблона 128 × 1 posedge write (RAM128X1S), входят следующие идентификаторы:

  • O — выход данных;
  • A0–A6 — адресные входы;
  • D — информационный вход данных;
  • WCLK — вход сигнала синхронизации;
  • WE — вход сигнала разрешения записи.

В элементах ОЗУ, для подготовки описаний которых применяется библиотечный примитив RAM128X1S, загрузка данных в ячейки производится по фронту тактового сигнала при наличии высокого логического уровня напряжения на входе разрешения записи.

На рис. 269 представлен условный графический образ элементов однопортовой оперативной памяти с информационной емкостью 128 бит, реализуемых на базе таблиц преобразования LUT секции SLICEM кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT.

Условный графический образ однопортового ОЗУ (RAM128X1S)

Рис. 269. Условный графический образ однопортового распределенного ОЗУ, формируемого с помощью шаблона 128 × 1 posedge write (RAM128X1S)

128 × 1 negedge write (RAM128X1S_1) содержит образец описания элемента распределенного однопортового ОЗУ с информационной емкостью 128 бит и организацией 128 слов ×1 разряд. Запись информации в это ОЗУ осуществляется по спаду сигнала синхронизации. Этот шаблон выполнен на основе оператора создания экземпляра библиотечного примитива RAM128X1S_1, который отличается от элемента RAM128X1S, рассмотренного в предыдущем шаблоне, инверсией на входе тактового сигнала:

--RAM128X1S_1 : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (RAM128X1S_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
-- RAM128X1S_1: 128-deep x 1 negative edge write, asynchronous read
-- single-port distributed RAM
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
RAM128X1S_1inst : RAM128X1S_1
generic map (
INIT => X“00000000000000000000000000000000”)
port map (
O => O, -- 1-bit data output
A0 => A0, -- Address[0] input bit
A1 => A1, -- Address[1] input bit
A2 => A2, -- Address[2] input bit
A3 => A3, -- Address[3] input bit
A4 => A4, -- Address[4] input bit
A5 => A5, -- Address[5] input bit
A6 => A6, -- Address[6] input bit
D => D, -- 1-bit data input
WCLK => WCLK, -- Write clock input
WE => WE -- RAM data input
);
-- End of RAM128X1S_1inst instantiation

Условный графический образ элемента распределенной однопортовой оперативной памяти с информационной емкостью 128 бит и записью данных по спаду тактового сигнала, описание которого создается с помощью шаблона 128 × 1 negedge write (RAM128X1S_1) для последующей реализации на базе таблиц преобразования LUT секции SLICEM кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT, приведен на рис. 270.

Условный графический образ однопортового ОЗУ (RAM128X1S_1)

Рис. 270. Условный графический образ однопортового распределенного ОЗУ, формируемого с помощью шаблона 128 × 1 negedge write (RAM128X1S_1)

256 × 1 posedge write (RAM256X1S) предоставляет шаблон VHDL-описания элемента однопортового оперативного запоминающего устройства информационной емкостью 256 бит с организацией 256 слов × 1 разряд, синтезируемого на базе ресурсов распределенной памяти ПЛИС серии Spartan-6. Элементы оперативной памяти, описание которых создается на основе этого шаблона, реализуются на базе четырех таблиц преобразования LUT секции SLICEM кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. Схема соединения таблиц преобразования LUT для формирования элемента распределенного ОЗУ указанной емкости изображена на рис. 271.

Структура однопортового ОЗУ (RAM256X1S)

Рис. 271. Структура распределенного однопортового ОЗУ, создаваемого с помощью шаблона 256 × 1 posedge write (RAM256X1S)

Рассматриваемый шаблон включает в себя следующий VHDL-код:

-- RAM256X1S : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (RAM256X1S_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- RAM256X1S: 256-deep by 1-wide positive edge write, asynchronous read
-- single-port distributed LUT RAM
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
RAM256X1S_inst : RAM256X1S
generic map (
INIT => X“00000000000000000000000000000000000000”)
port map (
O => O, -- Read/Write port 1-bit ouput
A => A, -- Read/Write port 8-bit address input
D => D, -- RAM data input
WCLK => WCLK, -- Write clock input
WE => WE -- Write enable input
);
-- End of RAM256X1S_inst instantiation

Основу приведенной конструкции образует экземпляр библиотечного примитива RAM256X1S, в котором для инициализации содержимого формируемого элемента оперативной памяти используется тот же параметр настройки INIT, что и в предыдущих шаблонах. Но значение этого параметра задается в виде 64-разрядного шестнадцатеричного числа. Система условных обозначений, применяемых в описании интерфейса этого библиотечного примитива, включает в себя те же идентификаторы входов и выходов, что и в шаблоне 128 × 1 posedge write (RAM128X1S). Отличие проявляется только в обозначениях адресных входов. В библиотечном примитиве RAM256X1S эти входы представлены в виде 8-разрядной шины адреса A.

На рис. 272 показан условный графический образ элементов оперативной памяти информационной емкостью 256 бит, реализуемых на базе таблиц преобразования LUT секции SLICEM конфигурируемого логического блока ПЛИС серии Spartan-6, для подготовки описаний которых используется шаблон 256 × 1 posedge write (RAM256X1S).

Условный графический образ однопортового ОЗУ (RAM256X1S)

Рис. 272. Условный графический образ однопортового распределенного ОЗУ, формируемого с помощью шаблона 256 × 1 posedge write (RAM256X1S)

Carry (CARRY4) включает в себя образец описания схемы ускоренного переноса, предназначенной для использования в составе проектируемых устройств, выполняемых на базе кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. В составе секций SLICEL и SLICEM конфигурируемых логических блоков ПЛИС серии Spartan-6 представлена логика ускоренного переноса, структурная схема которой показана на рис. 273.

Структурная схема логики ускоренного переноса

Рис. 273. Структурная схема логики ускоренного переноса, представленной в секциях SLICEL и SLICEM ПЛИС серии Spartan-6

Для подготовки VHDL-описания схемы ускоренного переноса предоставляется шаблон, построенный на основе экземпляра библиотечного примитива CARRY4:

-- CARRY4 : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the body of the design code. The instance name
-- declaration : (CARRY4_inst) and/or the port declarations after the
-- code : “=>” assignment maybe changed to properly reference and
-- : connect this function to the design. All inputs and
-- : outputs of this primitive must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- CARRY4: Fast Carry Logic Component
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
CARRY4_inst : CARRY4
port map (
CO => CO, -- 4-bit carry out
O => O, -- 4-bit carry chain XOR data out
CI => CI, -- 1-bit carry cascade input
CYINIT => CYINIT, -- 1-bit carry initialization
DI => DI, -- 4-bit carry-MUX data in
S => S -- 4-bit carry-MUX select input
);
-- End of CARRY4_inst instantiation

В библиотечном примитиве CARRY4, представляющем логический блок ускоренного переноса секций SLICEL и SLICEM кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT, используется следующая система условных обозначений интерфейсных портов:

  • CO — выходная 4-разрядная шина, объединяющая выходы каждого каскада схемы ускоренного переноса;
  • O — выходная 4-разрядная шина общего назначения;
  • CI — вход сигнала переноса, предназначенный для организации каскадного соединения секций конфигурируемого логического блока;
  • CYINIT — вход сигнала инициализации входного переноса;
  • DI — входная 4-разрядная шина, объединяющая информационные входы мультиплексоров логики ускоренного переноса;
  • S — входная 4-разрядная шина, объединяющая входы сигналов выбора мультиплексоров логики ускоренного переноса.

Условный графический образ схемы ускоренного переноса, описание которой формируется с помощью шаблона Carry (CARRY4) для последующей реализации на базе соответствующих ресурсов секций SLICEL и SLICEM конфигурируемого логического блока ПЛИС серии Spartan-6, представлен на рис. 274.

Графический образ схемы ускоренного переноса (CARRY4)

Рис. 274. Условный графический образ схемы ускоренного переноса, формируемой с помощью шаблона Carry (CARRY4)

LUT5 является шаблоном VHDL-описания варианта конфигурирования таблицы преобразования LUT кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT в виде 5-входового функционального генератора. Основу этого шаблона образует оператор создания экземпляра одноименного библиотечного примитива:

-- LUT5 : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (LUT5_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- LUT5: 5-input Look-Up Table with general output
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
LUT5_inst : LUT5
generic map (
INIT => X“00000000”) -- Specify LUT Contents
port map (
O => O, -- LUT general output
I0 => I0, -- LUT input
I1 => I1, -- LUT input
I2 => I2, -- LUT input
I3 => I3, -- LUT input
I4 => I4 -- LUT input
);
-- End of LUT5_inst instantiation

Определение функции, выполняемой создаваемым экземпляром таблицы преобразования LUT, осуществляется с помощью настраиваемого параметра INIT. Значение этого параметра задается в виде 8-разрядного шестнадцатеричного числа.

В описании интерфейса библиотечного примитива LUT5 используется следующая система условных обозначений входных и выходных портов:

  • O — выход общего назначения;
  • I0–I4 — входы таблицы преобразования LUT.

На рис. 275 приведен условный графический образ 5-входового функционального генератора, описание которого создается с помощью шаблона LUT5 для последующей реализации на основе таблицы преобразования LUT конфигурируемого логического блока ПЛИС серии Spartan-6.

Графический образ  пятивходового функционального генератора

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

LUT5_D содержит конструкцию, предназначенную для подготовки описания варианта конфигурирования таблицы преобразования LUT кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT в виде 5-входового функционального генератора с двумя выходами:

-- LUT5_D : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (LUT5_D_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- LUT5_D: 5-input Look-Up Table with general and local outputs
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
LUT5_D_inst : LUT5_D
generic map (
INIT => X“00000000”) -- Specify LUT contents
port map (
LO => LO, -- LUT local output
O => O, -- LUT general output
I0 => I0, -- LUT input
I1 => I1, -- LUT input
I2 => I2, -- LUT input
I3 => I3, -- LUT input
I4 => I4 -- LUT input
);
-- End of LUT5_D_inst instantiation

Приведенный шаблон выполнен на основе экземпляра библиотечного примитива LUT5_D, в котором кроме выхода общего назначения O предусмотрен также локальный выход LO. Этот выход используется для подключения только в пределах того же конфигурируемого логического блока CLB, в состав которого входит создаваемый экземпляр таблицы преобразования.

На рис. 276 представлен условный графический образ 5-входового функционального генератора с двумя выходами, конфигурируемого на базе таблицы преобразования LUT ПЛИС серии Spartan-6, описание которого создается с помощью шаблона LUT5_D.

Образ 5-входового функционального генератора с двумя выходами

Рис. 276. Условный графический образ 5-входового функционального генератора с двумя выходами, формируемого с помощью шаблона LUT5_D

LUT5_L представляет собой шаблон VHDL-описания 5-входового функционального генератора с локальным выходом, конфигурируемого на базе таблицы преобразования LUT, входящей в состав логических ячеек кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. Этот шаблон выполнен на основе экземпляра одноименного библиотечного примитива:

-- LUT5_L : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (LUT5_L_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- LUT5_L: 5-input Look-Up Table with local output
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
LUT5_L_inst : LUT5_L
generic map (
INIT => X“00000000”) -- Specify LUT Contents
port map (
LO => LO, -- LUT local output
I0 => I0, -- LUT input
I1 => I1, -- LUT input
I2 => I2, -- LUT input
I3 => I3, -- LUT input
I4 => I4 -- LUT input
);
-- End of LUT5_L_inst instantiation

На рис. 277 показан условный графический образ 5-входового функционального генератора с локальным выходом, реализуемого на базе таблицы преобразования ПЛИС серии Spartan-6, для подготовки описания которого используется шаблон LUT5_L.

Образ 5-входового функционального генератора с локальным выходом

Рис. 277. Условный графический образ 5-входового функционального генератора с локальным выходом, формируемого с помощью шаблона LUT5_L

Продолжение следует

Литература

  1. Кузелин М. О., Кнышев Д. А., Зотов В. Ю. Современные семейства ПЛИС фирмы Xilinx. М.: Горячая линия – Телеком, 2004.
  2. Бибило П. Н. Основы языка VHDL. М.: Солон-Р, 2000.
  3. Бибило П. Н. Синтез логических схем с использованием языка VHDL. М.: Солон-Р, 2002.
  4. Уэйкерли Дж. Ф. Проектирование цифровых устройств. Т. 1. М.: Постмаркет, 2002.
  5. Поляков А. К. Языки VHDL и Verilog в проектировании цифровой аппаратуры. М.: Солон-Пресс, 2003.
  6. Зотов В. Инструментальный комплект Spartan-3 Starter Kit для практического освоения методов проектирования встраиваемых микропроцессорных систем на основе ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2005. № 7.
  7. Зотов В. Новый инструментальный комплект Spartan-3E Starter Kit для практического освоения методов проектирования встраиваемых микропроцессорных систем на основе ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2006. № 10.
  8. Зотов В. Новый инструментальный комплект Spartan-3A Starter Kit для практического освоения методов проектирования и отладки цифровых устройств с аппаратной и программной реализацией операций, реализуемых на основе ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2007. № 9.
  9. Зотов В. Новый инструментальный комплект от компании Avnet на основе ПЛИС FPGA семейства Spartan-3A фирмы Xilinx // Компоненты и технологии. 2008. № 8.
  10. Зотов В. Инструментальный модуль компании Avnet для отладки проектов встраиваемых систем, разрабатываемых на базе нового семейства ПЛИС FPGA фирмы Xilinx Virtex-5 FXT // Компоненты и технологии. 2008. № 9.
  11. Зотов В. Особенности архитектуры нового поколения высокопроизводительных ПЛИС FPGA фирмы Xilinx серии Virtex-6 // Компоненты и технологии. 2009. № 8.
  12. Зотов В. Особенности архитектуры нового поколения ПЛИС FPGA фирмы Xilinx серии Spartan-6 // Компоненты и технологии. 2009. № 9.
  13. Зотов В. Новое семейство высокопроизводительных ПЛИС с архитектурой FPGA фирмы Xilinx Virtex-6 HXT // Компоненты и технологии. 2010. № 1.
  14. IEEE Standard VHDL Language Reference Manual. IEEE Std 1076–2002.
  15. Суворова Е. А., Шейнин Ю. Е. Проектирование цифровых систем на VHDL. СПб.: БХВ-Петербург, 2003.
  16. Сергиенко A. M. VHDL для проектирования вычислительных устройств. Киев: ЧП «Корнейчук», ООО «ТИД «ДС», 2003.
  17. Зотов В. Проектирование цифровых устройств, реализуемых на базе ПЛИС FPGA фирмы Xilinx, с использованием средств CORE Generator // Компоненты и технологии. 2006. № 12. 2007. № 1.
  18. Зотов В. Разработка компонентов устройств цифровой обработки сигналов, реализуемых на базе аппаратных модулей DSP48E в ПЛИС FPGA серии Virtex-5, с помощью «мастера» Architecture Wizard САПР серии Xilinx ISE // Компоненты и технологии. 2008. № 12. 2009. № 1, 4–7.
  19. Spartan-3 Generation FPGA User Guide. Xilinx, 2009.
  20. Spartan-3 FPGA Family: Complete Data Sheet. Xilinx, 2009.
  21. Spartan-3 Generation Configuration User Guide. Xilinx, 2009.
  22. Зотов В. Особенности архитектуры нового поколения ПЛИС FPGA фирмы Xilinx серии Sparta // Компоненты и технологии. 2009. № 9.
  23. Spartan-6 Family Overview. Xilinx, 2009.
  24. Spartan-6 FPGA Configuration User Guide. Xilinx, 2009.
  25. Spartan-6 FPGA SelectIO Resources User Guide. Xilinx, 2009.
  26. Spartan-6 FPGA Clocking Resources User Guide. Xilinx, 2009.
  27. Spartan-6 FPGA Block RAM User Guide. Xilinx, 2009.
  28. Spartan-6 FPGA Configurable Logic Block User Guide. Xilinx, 2009.
  29. Spartan-6 FPGA GTP Transceivers User Guide. Xilinx, 2009.
  30. Spartan-6 FPGA Memory Controller User Guide. Xilinx, 2009.
  31. Spartan-6 FPGA DSP48A1 User Guide. Xilinx, 2009.
  32. Spartan-6 FPGA Data Sheet: DC and Switching Characteristics. Xilinx, 2009.
  33. Spartan-6 FPGA Power Management User Guide. Xilinx, 2009.

Все статьи цикла:

Скачать статью в формате PDF  Скачать статью Компоненты и технологии PDF

 


Другие статьи по данной теме:

Сообщить об ошибке