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

Опрос

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

Реклама

 

2012 №1

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

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


Двадцать четвертая часть статьи продолжает ознакомление с шаблонами VHDL-описаний элементов, основанными на использовании экземпляров библиотечных примитивов, которые предназначены для реализации на базе соответствующих аппаратных ресурсов кристаллов программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT. Основное внимание в этой части уделено образцам описаний элементов, применяемых для организации обратного чтения конфигурационных данных, входного триггера с удвоенной скоростью передачи данных и двумя входами синхронизации, а также различных вариантов конфигурирования модулей блочной памяти Block RAM, представленных в составе архитектуры ПЛИС серии Virtex-5. Кроме того, здесь же рассмотрены шаблоны описаний входных преобразователей последовательного кода в параллельный и элементов программируемой входной и выходной задержки.

Register CAPTURE (CAPTURE_VIRTEX5) включает в себя шаблон описания элемента, обеспечивающего возможность организации обратного чтения конфигурационных данных из ПЛИС серии Virtex-5. В качестве основы этого шаблона используется оператор создания экземпляра библиотечного примитива CAPTURE_VIRTEX5:

-- CAPTURE_VIRTEX5 : 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 : (CAPTURE_VIRTEX5_inst) and/or the port declarations after the
-- code : “=>” assignment maybe changed to properly reference and
-- : connect this function to the design. All inputs 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--->
--
-- CAPTURE_VIRTEX5: Register State Capture for Bitstream Readback
-- Virtex-5
-- Xilinx HDL Language Template, version 13.2
--
CAPTURE_VIRTEX5_inst : CAPTURE_VIRTEX5
generic map (
ONESHOT => TRUE) -- TRUE or FALSE
port map (
CAP => CAP, -- Capture input
CLK => CLK -- Clock input
);
-- End of CAPTURE_VIRTEX5_inst instantiation

Параметры настройки ONESHOT и условные обозначения интерфейсных портов библиотечного примитива CAPTURE_VIRTEX5 имеют то же предназначение, что и в шаблоне CAPTURE (CAPTURE_VIRTEX4).

Условный графический образ элемента, предназначенного для выполнения операций обратного чтения конфигурационных данных из кристаллов программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT, описание которого формируется с помощью шаблона Register CAPTURE (CAPTURE_VIRTEX5), приведен на рис. 375.

Условный графический образ элемента, создаваемого с помощью шаблона Register CAPTURE (CAPTURE_VIRTEX5)

Рис. 375. Условный графический образ элемента, создаваемого с помощью шаблона Register CAPTURE (CAPTURE_VIRTEX5)

STARTUP Block (STARTUP_VIRTEX5) представляет собой образец описания компонента, предназначенного для организации управления глобальными цепями сброса/установки и переключения выходов ПЛИС серии Virtex-5 в состояние высокого импеданса, а также выбора тактового сигнала, применяемого при активизации логических ресурсов в процессе конфигурирования кристалла (на фазе Start-Up). В основе этого шаблона — оператор создания экземпляра библиотечного примитива STARTUP_VIRTEX5:

-- STARTUP_VIRTEX5 : 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 (STARTUP_VIRTEX5_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : connect this function to the design. All inputs
-- : 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--->
--
-- STARTUP_VIRTEX5: Startup primitive for GSR, GTS or startup sequence control,
-- SPI PROM pins, configuration clock and start-up status
-- Virtex-5
-- Xilinx HDL Language Template, version 13.2
--
STARTUP_VIRTEX5_inst : STARTUP_VIRTEX5
port map (
CFGCLK => CFGCLK, -- Config logic clock 1-bit output
CFGMCLK => CFGMCLK, -- Config internal osc clock 1-bit output
DINSPI => DINSPI, -- DIN SPI PROM access 1-bit output
EOS => EOS, -- End of Startup 1-bit output
TCKSPI => TCKSPI, -- TCK SPI PROM access 1-bit output
CLK => CLK, -- Clock input for start-up sequence
GSR => GSR_PORT, -- Global Set/Reset input (GSR cannot be used for the port name)
GTS => GTS_PORT, -- Global 3-state input (GTS cannot be used for the port name)
USRCCLKO => USRCCLKO, -- User CCLK 1-bit input
USRCCLKTS => USRCCLKTS, -- User CCLK 3-state, 1-bit input
USRDONEO => USRDONEO, -- User Done 1-bit input
USRDONETS => USRDONETS -- User Done 3-state, 1-bit input
);
-- End of STARTUP_VIRTEX5_inst instantiation

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

  • CFGCLK — выход основного тактового сигнала для процесса конфигурирования кристалла программируемой логики;
  • CFGMCLK — выход внутреннего генератора тактового сигнала для процесса конфигурирования ПЛИС;
  • DINSPI — выход сигнала, поступающего с вывода кристалла D_IN при использовании конфигурационного ППЗУ с интерфейсом SPI;
  • EOS — выход сигнала End Of Configuration, информирующего о завершении фазы Start-Up процесса конфигурирования кристалла программируемой логики;
  • TCKSPI — выход сигнала, поступающего с вывода кристалла TCK при использовании конфигурационного ППЗУ с интерфейсом SPI;
  • CLK — вход сигнала синхронизации, используемого при активизации логических ресурсов в процессе конфигурирования ПЛИС (на фазе Start-Up);
  • GSR — вход глобального сигнала сброса/установки триггеров в кристаллах программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT;
  • GTS — вход глобального сигнала управления состоянием выводов ПЛИС серии Virtex-5;
  • USRCCLKO — вход сигнала, подаваемого на вывод CCLK;
  • USRCCLKTS — вход сигнала переключения вывода CCLK в высокоимпедансное состояние;
  • USRDONEO — вход сигнала, поступающего на вывод DONE;
  • USRDONETS — вход сигнала переключения вывода DONE в состояние высокого импеданса.

На рис. 376 показан условный графический образ компонента, описание которого формируется с помощью шаблона STARTUP Block (STARTUP_VIRTEX5), для управления глобальными цепями сброса/установки и переключения выходов в состояние высокого импеданса, а также для выбора тактового сигнала при активизации ресурсов кристаллов программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT.

Условный графический образ компонента, создаваемого с помощью шаблона STARTUP Block (STARTUP_VIRTEX5)

Рис. 376. Условный графический образ компонента, создаваемого с помощью шаблона STARTUP Block (STARTUP_VIRTEX5)

V-5 Config Frame Error Correction (FRAME_ECC_VIRTEX5) является шаблоном описания компонента, применяемого для контроля наличия ошибок в конфигурационной последовательности в процессе обратного чтения блока данных из ПЛИС серии Virtex-5. В составе кристаллов программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT предусмотрена схема обнаружения ошибок Frame error correction code (ECC) logic, которая позволяет отслеживать модификацию одного или двух бит данных в считываемом блоке конфигурационной последовательности. Для создания описания компонента, реализуемого на базе этой логики, предлагается библиотечный примитив FRAME_ECC_VIRTEX5, который образует основу рассматриваемого шаблона:

--FRAME_ECC_VIRTEX5: 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 (FRAME_ECC_VIRTEX5_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : 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--->
--
-- FRAME_ECC_VIRTEX5: Configuration Frame Error Correction Circuitry
-- Virtex-5
-- Xilinx HDL Language Template, version 13.2
--
FRAME_ECC_VIRTEX5_inst : FRAME_ECC_VIRTEX5
port map (
CRCERROR => CRCERROR, -- 1-bit output indicating a CRC error
ECCERROR => ECCERROR, -- 1-bit output indicating an ECC error
SYNDROME => SYNDROME, -- 12-bit output location of erroneous bit
SYNDROMEVALID => SYNDROMEVALID -- 1-bit output indicating the SYNDROME output is valid
);
-- End of FRAME_ECC_VIRTEX5_inst instantiation

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

  • CRCERROR — выход сигнала, сообщающего о наличии ошибки конфигурационных данных в процессе их контроля с помощью циклического избыточного кода CRC.
  • ECCERROR — выход сигнала, информирующего о наличии или отсутствии ошибочных разрядов в составе считанного блока данных.
  • SYNDROME — выходная 12-разрядная шина, совокупность значений сигналов которой указывает расположение ошибочных разрядов в считанном блоке данных.
  • SYNDROMEVALID — выход сигнала, уведомляющего о достоверности результатов контроля блока конфигурационных данных.

Условный графический образ элемента, предназначенного для организации контроля считываемых конфигурационных данных в ПЛИС серии Virtex-5, для подготовки описания которого используется шаблон V-5 Config Frame Error Correction (FRAME_ECC_VIRTEX5), представлен на рис. 377.

Условный графический образ элемента, формируемого с помощью шаблона V-5 Config Frame Error Correction (FRAME_ECC_VIRTEX5)

Рис. 377. Условный графический образ элемента, формируемого с помощью шаблона V-5 Config Frame Error Correction (FRAME_ECC_VIRTEX5)

Dual-Clock Input DDR Register (IDDR_2CLK) — это образец описания входного триггера с удвоенной скоростью передачи данных, двумя входами синхронизации, входом разрешения тактового сигнала, программируемыми (синхронными или асинхронными) входами сброса и установки. Он предназначен для применения в составе проектов, реализуемых на базе кристаллов программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT.

Логические ресурсы блоков ввода/вывода ILOGIC ПЛИС серии Virtex-5 предоставляют возможность конфигурирования входных триггеров с удвоенной скоростью передачи данных DDR, которые могут тактироваться одним или двумя противофазными сигналами синхронизации. При подготовке описаний вариантов конфигурирования входных DDR-триггеров с одним сигналом синхронизации рекомендуется воспользоваться шаблоном Input DDR Register (IDDR), который совпадает с одноименным шаблоном для кристаллов программируемой логики семейств Virtex-4 LX, Virtex-4 SX и Virtex-4 FX. Для формирования описаний входных триггеров с удвоенной скоростью передачи данных, тактируемых парой противофазных сигналов синхронизации, предлагается шаблон Dual-Clock, Input DDR Register (IDDR_2CLK). Этот шаблон поддерживает три варианта конфигурирования входных DDR-триггеров.

Структурная схема первого варианта входного триггера с удвоенной скоростью передачи данных и двумя входами синхронизации, поддерживающего режим OPPOSITE_EDGE Mode, изображена на рис. 378. В этом режиме запись информационных данных с входа осуществляется по фронту каждого тактового сигнала. При этом данные на выходах DDR-триггера также обновляются с привязкой к фронту соответствующего сигнала синхронизации.

Структурная схема входного DDR-триггера с двумя входами синхронизации

Рис. 378. Структурная схема входного DDR-триггера с двумя входами синхронизации, поддерживающего режим OPPOSITE_EDGE Mode

Временные диаграммы сигналов, поясняющие функционирование входного триггера с удвоенной скоростью передачи данных, тактируемого парой сигналов синхронизации и поддерживающего режим OPPOSITE_EDGE Mode, приведены на рис. 379.

Временные диаграммы сигналов входного DDR-триггера с двумя входами синхронизации

Рис. 379. Временные диаграммы сигналов входного DDR-триггера с двумя входами синхронизации, функционирующего в режиме OPPOSITE_EDGE Mode

Второй вариант конфигурирования входного триггера с удвоенной скоростью передачи данных и двумя входами синхронизации, в котором реализован режим SAME_EDGE Mode, поясняет структурная схема, изображенная на рис. 380.

Схема входного DDR-триггера с двумя входами синхронизации, реализующего режим SAME_EDGE Mode

Рис. 380. Структурная схема входного DDR-триггера с двумя входами синхронизации, реализующего режим SAME_EDGE Mode

На рис. 381 приведены временные диаграммы сигналов, соответствующие режиму функционирования SAME_EDGE Mode входного DDR-триггера, тактируемого двумя сигналами синхронизации. В этом режиме изменение информационных данных на выходах происходит по фронту первого тактового сигнала.

Временные диаграммы сигналов  DDR-триггера, функционирующего в режиме SAME_EDGE Mode

Рис. 381. Временные диаграммы сигналов входного DDR-триггера с двумя входами синхронизации, функционирующего в режиме SAME_EDGE Mode

Структурная схема, представляющая третий вариант конфигурирования входного триггера с удвоенной скоростью передачи данных, тактируемого парой сигналов синхронизации и поддерживающего режим SAME_EDGE_PIPELINED Mode, представлена на рис. 382. В этом режиме обновление выходных информационных данных входного DDR-триггера осуществляется с привязкой к фронту первого тактового сигнала. Но при этом, в отличие от режима SAME_EDGE Mode, отсутствует сдвиг данных друг относительно друга.

Схема входного DDR-триггера, реализующего режим SAME_EDGE_PIPELINED Mode

Рис. 382. Структурная схема входного DDR-триггера с двумя входами синхронизации, реализующего режим SAME_EDGE_PIPELINED Mode

На рис. 383 показазны временные диаграммы сигналов, поясняющие функционирование входного триггера с удвоенной скоростью передачи данных и двумя входами синхронизации в режиме SAME_EDGE_PIPELINED Mode.

Временные диаграммы сигналов входного DDR-триггера, функционирующего в режиме SAME_EDGE_PIPELINED Mode

Рис. 383. Временные диаграммы сигналов входного DDR-триггера с двумя входами синхронизации, функционирующего в режиме SAME_EDGE_PIPELINED Mode

В качестве основы шаблона Dual-Clock Input DDR Register (IDDR_2CLK) используется оператор создания экземпляра библиотечного примитива IDDR_2CLK, который представляет указанные варианты конфигурирования входного DDR-триггера в ПЛИС серии Virtex-5:

-- IDDR_2CLK : 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 (IDDR_2CLK_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : connect this function to the design. All inputs 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--->
--
-- IDDR_2CLK: Dual-Clock, Input Double Data Rate Input Register with
-- Set, Reset and Clock Enable.
-- Virtex-5
-- Xilinx HDL Language Template, version 13.2
--
IDDR_2CLK_inst : IDDR_2CLK
generic map (
DDR_CLK_EDGE => “OPPOSITE_EDGE”, -- “OPPOSITE_EDGE”, “SAME_EDGE” or “SAME_EDGE_PIPELINED”
INIT_Q1 => ‘0’, -- Initial value of Q1: ‘0’ or ‘1’
INIT_Q2 => ‘0’, -- Initial value of Q2: ‘0’ or ‘1’
SRTYPE => “SYNC”) -- Set/Reset type: “SYNC” or “ASYNC”
port map (
Q1 => Q1, -- 1-bit output for positive edge of clock
Q2 => Q2, -- 1-bit output for negative edge of clock
C => C, -- 1-bit primary clock input
CB => CB, -- 1-bit secondary clock input
CE => CE, -- 1-bit clock enable input
D => D, -- 1-bit DDR data input
R => R, -- 1-bit reset
S => S -- 1-bit set
);
-- End of IDDR_2CLK_inst instantiation

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

  • DDR_CLK_EDGE — указывает режим функционирования создаваемого входного DDR-триггера (по умолчанию предлагается вариант “OPPOSITE_EDGE”).
  • INIT_Q1, INIT_Q2 — задают начальное состояние выходов DDR-триггера (по умолчанию им присваиваются нулевые значения).
  • SRTYPE — определяет тип входов сброса и установки создаваемого входного DDR-триггера (по умолчанию предлагается значение “SYNC”, соответствующее синхронным режимам сброса и установки).

В состав системы условных обозначений интерфейсных портов входного триггера с удвоенной скоростью передачи данных, для подготовки описания которого применяется шаблон Dual-Clock Input DDR Register (IDDR_2CLK), входят следующие идентификаторы:

  • Q1 — выход, ассоциированный с фронтом первого тактового сигнала (C);
  • Q2 — выход, ассоциированный с фронтом второго тактового сигнала (CB);
  • C — вход первого сигнала синхронизации;
  • CB — вход второго сигнала синхронизации;
  • CE — вход разрешения тактового сигнала;
  • D — информационный вход;
  • R — вход сигнала сброса;
  • S — вход сигнала установки.

На рис. 384 изображен условный графический образ входного DDR-триггера с входом разрешения тактового сигнала и программируемыми входами сброса и установки, тактируемого парой сигналов синхронизации, описание которого создается на основе шаблона Dual-Clock Input DDR Register (IDDR_2CLK) для последующей реализации на базе ресурсов ввода/вывода ILOGIC кристаллов программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT.

Условный графический образ входного DDR-триггера с двумя входами синхронизации

Рис. 384. Условный графический образ входного DDR-триггера с двумя входами синхронизации, реализуемого на базе ресурсов ввода/вывода ILOGIC ПЛИС серии Virtex-5

Input SERDES (ISERDES_NODELAY) включает в себя образец VHDL-описания варианта конфигурирования модуля входного преобразователя последовательного кода в параллельный, реализуемого на базе соответствующих аппаратных ресурсов ввода/вывода SelectIO кристаллов программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT, без элемента входной задержки. Основой этого шаблона является оператор создания экземпляра библиотечного примитива ISERDES_NODELAY, который представляет указанный вариант конфигурирования модуля входного последовательно-параллельного преобразователя ПЛИС серии Virtex-5:

-- ISERDES_NODELAY : 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 (ISERDES_NODELAY_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : connect this function to the design. Alll inputs 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--->
--
-- ISERDES_NODELAY: Input SERial / DESerializer
-- Virtex-5
-- Xilinx HDL Language Template, version 13.2
--
ISERDES_NODELAY_inst : ISERDES_NODELAY
generic map (
BITSLIP_ENABLE => FALSE, -- TRUE/FALSE to enable bitslip controller
-- Must be “FALSE” in interface type is “MEMORY”
DATA_RATE => “DDR”, -- Specify data rate of “DDR” or “SDR”
DATA_WIDTH => 4, -- Specify data width -
-- NETWORKING SDR: 2, 3, 4, 5, 6, 7, 8 : DDR 4, 6, 8, 10
-- MEMORY SDR N/A : DDR 4
INTERFACE_TYPE => “MEMORY”, -- Use model - “MEMORY” or “NETWORKING”
NUM_CE => 2, -- Define number or clock enables to an integer of 1 or 2
SERDES_MODE => “MASTER”) --Set SERDES mode to “MASTER” or “SLAVE”
port map (
Q1 => Q1, -- 1-bit registered SERDES output
Q2 => Q2, -- 1-bit registered SERDES output
Q3 => Q3, -- 1-bit registered SERDES output
Q4 => Q4, -- 1-bit registered SERDES output
Q5 => Q5, -- 1-bit registered SERDES output
Q6 => Q6, -- 1-bit registered SERDES output
SHIFTOUT1 => SHIFTOUT1, -- 1-bit cascade Master/Slave output
SHIFTOUT2 => SHIFTOUT2, -- 1-bit cascade Master/Slave output
BITSLIP => BITSLIP, -- 1-bit Bitslip enable input
CE1 => CE1, -- 1-bit clock enable input
CE2 => CE2, -- 1-bit clock enable input
CLK => CLK, -- 1-bit master clock input
CLKB => CLKB, -- 1-bit secondary clock input for DATA_RATE=DDR
CLKDIV => CLKDIV, -- 1-bit divided clock input
D => D, -- 1-bit data input, connects to IODELAY or input buffer
OCLK => OCLK, -- 1-bit fast output clock input
RST => RST, -- 1-bit asynchronous reset input
SHIFTIN1 => SHIFTIN1, -- 1-bit cascade Master/Slave input
SHIFTIN2 => SHIFTIN2 -- 1-bit cascade Master/Slave input
);
-- End of ISERDES_NODELAY_inst instantiation

Параметры настройки библиотечного примитива ISERDES_NODELAY имеют то же предназначение, что и одноименные параметры в шаблоне SERDES (ISERDES), рассмотренном в 22-й части статьи. Система условных обозначений входных и выходных портов, используемых в описании интерфейса преобразователей последовательного кода в параллельный, формируемых на основе библиотечного примитива ISERDES_NODELAY, содержит следующие идентификаторы:

  • Q1–Q6 — выходы соответствующих разрядов формируемого параллельного кода;
  • SHIFTOUT1, SHIFTOUT2 — выходы данных, предназначенные для организации каскадного соединения последовательно-параллельных преобразователей;
  • BITSLIP — вход сигнала активизации функции Bitslip;
  • CE1, CE2 — входы сигналов разрешения синхронизации;
  • CLK — вход основного сигнала синхронизации;
  • CLKB — вход дополнительного сигнала синхронизации, применяемого для организации передачи данных с удвоенной скоростью DDR;
  • CLKDIV — вход тактового сигнала, формируемого путем деления частоты сигнала синхронизации CLK, предназначенного для управления работой выходных каскадов преобразователя, схемы входной задержки и модуля, осуществляющего функцию Bitslip;
  • D — вход данных, поступающих в виде последовательного кода;
  • OCLK — вход сигнала синхронизации, предназначенного для организации передачи выходных данных, соответствующей высокоскоростным интерфейсам памяти;
  • RST — вход сигнала асинхронного сброса;
  • SHIFTIN1, SHIFTIN2 — входы данных, предназначенные для организации каскадного соединения последовательно-параллельных преобразователей.

Условный графический образ входного последовательно-параллельного преобразователя, реализуемого на базе соответствующих аппаратных ресурсов логических ячеек ввода/вывода SelectIO в кристаллах программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT, для подготовки описания которого применяется шаблон Input SERDES (ISERDES_NODELAY), показан на рис. 385.

Условный графический образ входного последовательно-параллельного преобразователя

Рис. 385. Условный графический образ входного последовательно-параллельного преобразователя, применяемого в ПЛИС серии Virtex-5

Input/Output Delay Element (IODELAY) содержит шаблон описания элементов программируемой входной и выходной задержки, реализуемых на базе соответствующих аппаратных модулей ресурсов ввода/вывода SelectIO ПЛИС серии Virtex-5. Основу этого шаблона образует оператор создания экземпляра библиотечного примитива IODELAY, который поддерживает различные варианты конфигурирования модуля входной и выходной задержки кристаллов программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT:

-- IODELAY : 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 (IODELAY_inst) and/or the port declarations
-- code : after the “=>” assignment maybe changed to properly
-- : connect this function to the design. All inputs
-- : 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;
--
-- Put the following attribute before the ‘begin’ statement
-- to specify the group name for associated IDELAY and IDELAYCTRLs
--
attribute IODELAY_GROUP : string;
attribute IODELAY_GROUP of <label_name>: label is “<iodelay_group_name>”;
--
-- <---Cut code below this line and paste into the architecture body--->
--
-- IODELAY: Input and/or Output Fixed/Variable Delay Element
-- Virtex-5
-- Xilinx HDL Language Template, version 13.2
--
IODELAY_inst : IODELAY
generic map (
DELAY_SRC => “I”, -- Specify which input port to be used -- “I”=IDATAIN, “O”=ODATAIN, “DATAIN”=DATAIN, “IO”=Bi-directional
HIGH_PERFORMANCE_MODE => TRUE, -- TRUE specifies lower jitter at expense of more power
IDELAY_TYPE => “FIXED”, -- “FIXED” or “VARIABLE”
IDELAY_VALUE => 0, -- 0 to 63 tap values
ODELAY_VALUE => 0, -- 0 to 63 tap values
REFCLK_FREQUENCY => 200.0, -- Frequency used for IDELAYCTRL 175.0 to 225.0
SIGNAL_PATTERN => “DATA”) -- Input signal type, “CLOCK” or “DATA”
port map (
DATAOUT => DATAOUT, -- 1-bit delayed data output
C => C, -- 1-bit clock input
CE => CE, -- 1-bit clock enable input
DATAIN => DATAIN, -- 1-bit internal data input
IDATAIN => IDATAIN, -- 1-bit input data input (connect to port)
INC => INC, -- 1-bit increment/decrement input
ODATAIN => ODATAIN, -- 1-bit output data input
RST => RST, -- 1-bit active high, synch reset input
T => T -- 1-bit 3-state control input
);
-- End of IODELAY_inst instantiation

Для выбора требуемого режима работы модуля программируемой задержки в библиотечном примитиве IODELAY предусмотрены следующие параметры настройки:

  • DELAY_SRC — указывает используемый источник данных (соответствующий входной порт) для схемы программируемой задержки (по умолчанию используется вход IDATAIN).
  • HIGH_PERFORMANCE_MODE — предоставляет возможность уменьшения джиттера сигнала на выходе элемента задержки.
  • IDELAY_TYPE — используется для выбора типа формируемого элемента программируемой задержки (по умолчанию конфигурируется элемент фиксированной задержки).
  • IDELAY_VALUE — устанавливает величину фиксированной задержки при конфигурировании модуля IODELAY в виде элемента входной задержки (по умолчанию предлагается нулевое значение).
  • ODELAY_VALUE — определяет величину фиксированной задержки при конфигурировании модуля IODELAY в виде элемента выходной задержки (по умолчанию устанавливается нулевое значение).
  • REFCLK_FREQUENCY — задает значение частоты опорного сигнала синхронизации (по умолчанию присваивается значение, равное 200 МГц).
  • SIGNAL_PATTERN — позволяет повысить точность результатов временного анализа.

Система условных обозначений входов и выходов, используемых в описании интерфейса элементов входной и выходной задержки, формируемых на основе шаблона Input/Output Delay Element (IODELAY), включает в себя следующие идентификаторы:

  • DATAOUT — выход сигнала задержанных данных;
  • C — вход тактового сигнала;
  • CE — вход сигнала разрешения инкремента или декремента значения задержки;
  • DATAIN — вход данных, подключаемый к логическим ресурсам ПЛИС;
  • IDATAIN — вход данных, поступающих из соответствующего блока ввода/вывода;
  • INC — вход сигнала инкремента или декремента задержки;
  • ODATAIN — вход данных, подключаемый к выходу регистра или преобразователя параллельного кода в последовательный;
  • RST — вход сигнала сброса;
  • T — вход сигнала динамического переключения источников входных данных в двунаправленном режиме (при конфигурировании модуля в виде элемента входной и выходной задержки).

На рис. 386 представлен условный графический образ элементов программируемой входной и выходной задержки, реализуемых на основе соответствующих аппаратных модулей ресурсов ввода/вывода SelectIO ПЛИС серии Virtex-5, описания которых создаются с помощью шаблона Input/Output Delay Element (IODELAY).

Oбраз элемента задержки, создаваемого с помощью примитива IODELAY

Рис. 386. Условный графический образ элемента задержки, создаваемого с помощью примитива IODELAY

16k+2k Parity Paramatizable True Dual-Port BlockRAM (RAMB18) является образцом параметризированного варианта описания полнофункционального 2-портового ОЗУ информационной емкостью 16 384 бит с программируемой организацией каждого порта, возможностью использования выходных регистров, поддержкой контроля четности и режима побайтной записи. Оно предназначено для реализации на основе модуля блочной памяти Block RAM кристаллов программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT. Каждый из модулей Block RAM ПЛИС перечисленных семейств может конфигурироваться в виде двух независимых элементов полнофункциональной 2-портовой оперативной памяти информационной емкостью 16 384 бит и дополнительным объемом 2048 бит, предназначенным для организации контроля четности записываемых и считываемых данных. Для быстрой подготовки описаний таких элементов ОЗУ предоставляется рассматриваемый шаблон, а в качестве его основы используется оператор создания экземпляра библиотечного примитива RAMB18, соответствующий указанному варианту конфигурирования модуля блочной памяти Block RAM ПЛИС серии Virtex-5:

-- RAMB18 : 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 : (RAMB18_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--->
--
-- RAMB18: 16k+2k Parity Paramatizable True Dual-Port BlockRAM
-- Virtex-5
-- Xilinx HDL Language Template, version 13.2
--
RAMB18_inst : RAMB18
generic map (
DOA_REG => 0, -- Optional output register on A port (0 or 1)
DOB_REG => 0, -- Optional output register on B port (0 or 1)
INIT_A => X“00000”, -- Initial values on A output port
INIT_B => X“00000”, -- Initial values on B output port
READ_WIDTH_A => 0, -- Valid values are 1, 2, 4, 9, or 18
READ_WIDTH_B => 0, -- Valid values are 1, 2, 4, 9, or 18
SIM_COLLISION_CHECK => “ALL”, -- Collision check enable “ALL”, “WARNING_ONLY”, “GENERATE_X_ONLY” or “NONE”
SIM_MODE => “SAFE”, -- Simulation: “SAFE” vs “FAST”, see “Synthesis and Simulation
-- Design Guide” for details
SRVAL_A => X“00000”, -- Set/Reset value for A port output
SRVAL_B => X“00000”, -- Set/Reset value for B port output
WRITE_MODE_A => “WRITE_FIRST”, -- “WRITE_FIRST”, “READ_FIRST” or “NO_CHANGE”
WRITE_MODE_B => “WRITE_FIRST”, -- “WRITE_FIRST”, “READ_FIRST” or “NO_CHANGE”
WRITE_WIDTH_A => 0, -- Valid values are 1, 2, 4, 9, or 18
WRITE_WIDTH_B => 0, -- Valid values are 1, 2, 4, 9, or 18
-- The following INIT_xx declarations specify the initial contents of the RAM
INIT_00 => X“00000000000000000000000000000000000000000”,
INIT_01 => X“00000000000000000000000000000000000000000”,

INIT_3E => X“00000000000000000000000000000000000000000”,
INIT_3F => X“00000000000000000000000000000000000000000”,
-- The next set of INITP_xx are for the parity bits
INITP_00 => X“0000000000000000000000000000000000000000”,
INITP_01 => X“0000000000000000000000000000000000000000”,

INITP_07 => X“000000000000000000000000000000000000000”)
port map (
DOA => DOA, -- 16-bit A port data output
DOB => DOB, -- 16-bit B port data output
DOPA => DOPA, -- 2-bit A port parity data output
DOPB => DOPB, -- 2-bit B port parity data output
ADDRA => ADDRA, -- 14-bit A port address input
ADDRB => ADDRB, -- 14-bit B port address input
CLKA => CLKA, -- 1-bit A port clock input
CLKB => CLKB, -- 1 bit B port clock input
DIA => DIA, -- 16-bit A port data input
DIB => DIB, -- 16-bit B port data input
DIPA => DIPA, -- 2-bit A port parity data input
DIPB => DIPB, -- 2-bit B port parity data input
ENA => ENA, -- 1-bit A port enable input
ENB => ENB, -- 1-bit B port enable input
REGCEA => REGCEA, -- 1-bit A port register enable input
REGCEB => REGCEB, -- 1-bit B port register enable input
SSRA => SSRA, -- 1-bit A port set/reset input
SSRB => SSRB, -- 1-bit B port set/reset input
WEA => WEA, -- 2-bit A port write enable input
WEB => WEB -- 2-bit B port write enable input
);
-- End of RAMB18_inst instantiation

Для установки требуемой конфигурации формируемого элемента полнофункциональной 2-портовой оперативной памяти в библиотечном примитиве RAMB18 применяются следующие параметры настройки:

  • DOA_REG — предоставляет возможность использования регистра на выходе первого порта (по умолчанию выходной регистр не задействуется).
  • DOB_REG — позволяет задействовать регистр на выходе второго порта (по умолчанию выходной регистр не используется).
  • INIT_A, INIT_B — определяют начальное значение для соответствующего выходного порта данных (по умолчанию устанавливается значение X“00000”).
  • READ_WIDTH_A — задает разрядность первого выходного порта (порта чтения данных A).
  • READ_WIDTH_B — указывает разрядность второго выходного порта (порта чтения данных B).
  • SIM_COLLISION_CHECK — определяет режим обработки различных конфликтных ситуаций при осуществлении операций записи и чтения данных в процессе моделирования.
  • SIM_MODE — устанавливает режим моделирования формируемого элемента 2-портового ОЗУ.
  • SRVAL_A — указывает состояние выходного порта данных A при активном уровне сигнала на входе сброса/установки (по умолчанию предлагается значение X“00000”).
  • SRVAL_B — задает состояние выходного порта данных B при активном уровне сигнала на входе сброса/установки (по умолчанию присваивается значение X“00000”).
  • WRITE_MODE_A и WRITE_MODE_B — устанавливают порядок выполнения операций записи и чтения данных при обращении к ячейкам памяти для первого и второго порта данных соответственно.
  • WRITE_WIDTH_A — определяет разрядность первого входного порта (порта записи данных A).
  • WRITE_WIDTH_B — указывает разрядность второго входного порта (порта записи данных B).
  • INIT_00–INIT_3F — используются для инициализации содержимого соответствующих ячеек основной памяти (по умолчанию во все ячейки ОЗУ заносится нулевое значение).
  • INITP_00–INITP_07 — предоставляют возможность инициализации содержимого ячеек памяти, используемых для организации контроля четности.

В состав системы условных обозначений входов и выходов, применяемых в описании интерфейса элементов 2-портовой оперативной памяти, создаваемых на основе библиотечного примитива RAMB18 в кристаллах программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT, входят следующие идентификаторы:

  • DOA и DOB — выходные 16-разрядные шины информационных данных первого и второго порта соответственно;
  • DOPA и DOPB — выходные 2-разрядные шины, предназначенные для организации контроля четности информационных данных первого и второго порта;
  • ADDRA и ADDRB — 14-разрядные шины адресов первого и второго порта соответственно;
  • CLKA и CLKB — входы сигналов синхронизации первого и второго порта соответственно;
  • DIA и DIB — входные 16-разрядные шины информационных данных первого и второго порта;
  • DIPA и DIPB — входные 2-разрядные шины, применяемые для осуществления контроля четности информационных данных первого и второго порта соответственно;
  • ENA и ENB — входы сигналов разрешения первого и второго порта соответственно;
  • REGCEA и REGCEB — входы сигналов разрешения синхронизации выходных регистров первого и второго порта соответственно;
  • SSRA и SSRB — входы сигналов синхронного сброса/установки первого и второго порта;
  • WEA и WEB — входные 2-разрядные шины, объединяющие сигналы разрешения записи соответствующего байта данных в первый и второй порт элемента 2-портового ОЗУ.

Условный графический образ элемента полнофункциональной 2-портовой оперативной памяти с поддержкой контроля четности, побайтной записи информации и применения выходных регистров, реализуемого на базе модуля Block RAM ПЛИС серии Virtex-5, описание которого создается с помощью шаблона 16k+2k Parity Paramatizable True Dual-Port BlockRAM (RAMB18), изображен на рис. 387.

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

Рис. 387. Условный графический образ элемента 2-портового ОЗУ, формируемого с помощью шаблона 16k+2k Parity Paramatizable True Dual-Port BlockRAM (RAMB18)

32k+4k Parity Paramatizable True Dual-Port BlockRAM (RAMB36) предоставляет шаблон параметризированного варианта описания полнофункционального 2-портового ОЗУ информационной емкостью 32 768 бит с программируемой организацией каждого порта, возможностью использования выходных регистров, поддержкой контроля четности, каскадного соединения и режима побайтной записи. Он реализуется на основе модуля блочной памяти Block RAM кристаллов программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT:

-- RAMB36 : 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 : (RAMB36_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--->
--
-- RAMB36: 32k+4k Parity Paramatizable True Dual-Port BlockRAM
-- Virtex-5
-- Xilinx HDL Language Template, version 13.2
--
RAMB36_inst : RAMB36
generic map (
DOA_REG => 0, -- Optional output register on A port (0 or 1)
DOB_REG => 0, -- Optional output register on B port (0 or 1)
INIT_A => X“000000000”, -- Initial values on A output port
INIT_B => X“000000000”, -- Initial values on B output port
RAM_EXTENSION_A => “NONE”, -- “UPPER”, “LOWER” or “NONE” when cascaded
RAM_EXTENSION_B => “NONE”, -- “UPPER”, “LOWER” or “NONE” when cascaded
READ_WIDTH_A => 0, -- Valid values are 1, 2, 4, 9, 18, or 36
READ_WIDTH_B => 0, -- Valid values are 1, 2, 4, 9, 18, or 36
SIM_COLLISION_CHECK => “ALL”, -- Collision check enable “ALL”, “WARNING_ONLY”, “GENERATE_X_ONLY” or “NONE”
SIM_MODE => “SAFE”, -- Simulation: “SAFE” vs “FAST”, see “Synthesis and Simulation
-- Design Guide” for details
SRVAL_A => X“000000000”, -- Set/Reset value for A port output
SRVAL_B => X“000000000”, -- Set/Reset value for B port output
WRITE_MODE_A => “WRITE_FIRST”, -- “WRITE_FIRST”, “READ_FIRST” or “NO_CHANGE”
WRITE_MODE_B => “WRITE_FIRST”, -- “WRITE_FIRST”, “READ_FIRST” or “NO_CHANGE”
WRITE_WIDTH_A => 0, -- Valid values are 1, 2, 3, 4, 9, 18, 36
WRITE_WIDTH_B => 0, -- Valid values are 1, 2, 3, 4, 9, 18, 36
-- The following INIT_xx declarations specify the initial contents of the RAM
INIT_00 => X“00000000000000000000000000000000000000000”,
INIT_01 => X“00000000000000000000000000000000000000000”,

INIT_7E => X“00000000000000000000000000000000000000000”,
INIT_7F => X“00000000000000000000000000000000000000000”,
-- The next set of INITP_xx are for the parity bits
INITP_00 => X“0000000000000000000000000000000000000000”,
INITP_01 => X“0000000000000000000000000000000000000000”,

INITP_0F => X“000000000000000000000000000000000000000”)
port map (
CASCADEOUTLATA => CASCADEOUTLATA, -- 1-bit cascade A latch output
CASCADEOUTLATB => CASCADEOUTLATB, -- 1-bit cascade B latch output
CASCADEOUTREGA => CASCADEOUTREGA, -- 1-bit cascade A register output
CASCADEOUTREGB => CASCADEOUTREGB, -- 1-bit cascade B register output
DOA => DOA, -- 32-bit A port data output
DOB => DOB, -- 32-bit B port data output
DOPA => DOPA, -- 4-bit A port parity data output
DOPB => DOPB, -- 4-bit B port parity data output
ADDRA => ADDRA, -- 16-bit A port address input
ADDRB => ADDRB, -- 16-bit B port address input
CASCADEINLATA => CASCADEINLATA, -- 1-bit cascade A latch input
CASCADEINLATB => CASCADEINLATB, -- 1-bit cascade B latch input
CASCADEINREGA => CASCADEINREGA, -- 1-bit cascade A register input
CASCADEINREGB => CASCADEINREGB, -- 1-bit cascade B register input
CLKA => CLKA, -- 1-bit A port clock input
CLKB => CLKB, -- 1 bit B port clock input
DIA => DIA, -- 32-bit A port data input
DIB => DIB, -- 32-bit B port data input
DIPA => DIPA, -- 4-bit A port parity data input
DIPB => DIPB, -- 4-bit B port parity data input
ENA => ENA, -- 1-bit A port enable input
ENB => ENB, -- 1-bit B port enable input
REGCEA => REGCEA, -- 1-bit A port register enable input
REGCEB => REGCEB, -- 1-bit B port register enable input
SSRA => SSRA, -- 1-bit A port set/reset input
SSRB => SSRB, -- 1-bit B port set/reset input
WEA => WEA, -- 4-bit A port write enable input
WEB => WEB -- 4-bit B port write enable input
);
-- End of RAMB36_inst instantiation

Основу приведенной конструкции образует оператор создания экземпляра библиотечного примитива RAMB36, который представляет указанный вариант конфигурирования модуля блочной памяти Block RAM ПЛИС серии Virtex-5. В этом библиотечном примитиве в большинстве своем используются те же параметры настройки, что и в шаблоне 16k+2k Parity Paramatizable True Dual-Port BlockRAM (RAMB18). Кроме того, в библиотечном примитиве RAMB36 предусмотрены параметры RAM_EXTENSION_A и RAM_EXTENSION_B, которые определяют возможность и параметры каскадирования соответствующего порта формируемого элемента 2-портовой оперативной памяти. Дополнительные параметры настройки INIT_40–INIT_7F и INITP_08–INITP_0F предназначены для инициализации соответствующих ячеек создаваемого элемента 2-портового ОЗУ.

Система условных обозначений входов и выходов, применяемых в описании интерфейса элементов полнофункциональной 2-портовой оперативной памяти, формируемых с помощью шаблона 32k+4k Parity Paramatizable True Dual-Port BlockRAM (RAMB36), включает в себя следующие идентификаторы:

  • CASCADEOUTLATA — выход защелки первого порта (порта A), предназначенный для каскадного соединения смежных модулей блочной памяти;
  • CASCADEOUTLATB — выход защелки второго порта (порта B), применяемый для организации каскадного соединения смежных модулей блочной памяти;
  • CASCADEOUTREGA — выход регистра первого порта, предназначенный для каскадного соединения смежных модулей блочной памяти;
  • CASCADEOUTREGB — выход регистра второго порта, используемый для организации каскадного соединения смежных модулей блочной памяти;
  • DOA и DOB — выходные 32-разрядные шины информационных данных первого и второго порта соответственно;
  • DOPA и DOPB — выходные 4-разрядные шины, предназначенные для организации контроля четности информационных данных первого и второго порта соответственно;
  • ADDRA и ADDRB — 16-разрядные шины адресов первого и второго порта соответственно;
  • CASCADEINLATA — вход защелки первого порта (порта A), предназначенный для каскадного соединения смежных модулей блочной памяти;
  • CASCADEINLATB — вход защелки второго порта (порта B), применяемый для организации каскадного соединения смежных модулей блочной памяти;
  • CASCADEINREGA — вход регистра первого порта, предназначенный для каскадного соединения смежных модулей блочной памяти;
  • CASCADEINREGB — вход регистра второго порта, используемый для организации каскадного соединения смежных модулей блочной памяти;
  • CLKA и CLKB — входы сигналов синхронизации первого и второго порта соответственно;
  • DIA и DIB — входные 32-разрядные шины информационных данных первого и второго порта соответственно;
  • DIPA и DIPB — входные 4-разрядные шины, применяемые для осуществления контроля четности информационных данных первого и второго порта;
  • ENA и ENB — входы сигналов разрешения первого и второго порта соответственно;
  • REGCEA и REGCEB — входы сигналов разрешения синхронизации выходных регистров первого и второго порта соответственно;
  • SSRA и SSRB — входы сигналов синхронного сброса/установки первого и второго порта;
  • WEA и WEB — входные 4-разрядные шины, объединяющие сигналы разрешения записи соответствующего байта данных в первый и второй порт элемента 2-портовой оперативной памяти.

На рис. 388 приведен условный графический образ элемента полнофункционального 2-портового ОЗУ информационной емкостью 32 768 бит с программируемой организацией каждого порта, возможностью использования выходных регистров, поддержкой контроля четности, каскадного соединения и режима побайтной записи, реализуемого на базе модуля блочной памяти Block RAM кристаллов программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT, для подготовки описания которого применяется шаблон 32k+4k Parity Paramatizable True Dual-Port BlockRAM (RAMB36).

Oбраз элемента 2-портового ОЗУ, формируемого с помощью шаблона (RAMB36)

Рис. 388. Условный графический образ элемента 2-портового ОЗУ, формируемого с помощью шаблона 32k+4k Parity Paramatizable True Dual-Port BlockRAM (RAMB36)

36x512 Simple Dual-Port BlockRAM (RAMB18SDP) включает в себя образец описания 2-портового ОЗУ с фиксированной функцией портов (записи или чтения данных) информационной емкостью 16 384 бит с организацией 512×32 разряда и поддержкой контроля четности, которое предназначено для реализации на основе модуля блочной памяти Block RAM ПЛИС серии Virtex-5:

-- RAMB18SDP : 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 : (RAMB18SDP_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--->
--
-- RAMB18SDP: 36x512 Simple Dual-Port BlockRAM
-- Virtex-5
-- Xilinx HDL Language Template, version 13.2
--
RAMB18SDP_inst : RAMB18SDP
generic map (
DO_REG => 0, -- Optional output register (0 or 1)
INIT => X“000000000”, -- Initial values on output port
SIM_COLLISION_CHECK => “ALL”, -- Collision check enable “ALL”, “WARNING_ONLY”, “GENERATE_X_ONLY” or “NONE”
SIM_MODE => “SAFE”, -- Simulation: “SAFE” vs “FAST”, see “Synthesis and Simulation
-- Design Guide” for details
SRVAL => X“000000000”, -- Set/Reset value for port output
-- The following INIT_xx declarations specify the initial contents of the RAM
INIT_00 => X“00000000000000000000000000000000000000000”,
INIT_01 => X“00000000000000000000000000000000000000000”,

INIT_3E => X“00000000000000000000000000000000000000000”,
INIT_3F => X“00000000000000000000000000000000000000000”,
-- The next set of INITP_xx are for the parity bits
INITP_00 => X“0000000000000000000000000000000000000000”,
INITP_01 => X“0000000000000000000000000000000000000000”,

INITP_07 => X“000000000000000000000000000000000000000”)
port map (
DO => DO, -- 32-bit Data Output
DOP => DOP, -- 4-bit Parity Output
RDCLK => RDCLK, -- 1-bit read port clock
RDEN => RDEN, -- 1-bit read port enable
REGCE => REGCE, -- 1-bit register enable input
SSR => SSR, -- 1-bit synchronous output set/reset input
WRCLK => WRCLK, -- 1-bit write port clock
WREN => WREN, -- 1-bit write port enable
WRADDR => WRADDR, -- 9-bit write port address input
RDADDR => RDADDR, -- 9-bit read port address input
DI => DI, -- 32-bit data input
DIP => DIP, -- 4-bit parity data input
WE => WE -- 4-bit write enable input
);
-- End of RAMB18SDP_inst instantiation

В качестве основы приведенного шаблона используется оператор создания экземпляра библиотечного примитива RAMB18SDP, который представляет соответствующий вариант конфигурирования модуля блочной памяти Block RAM кристаллов программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT в виде ОЗУ с раздельными портами записи и чтения данных. В указанном библиотечном примитиве для установки требуемой конфигурации формируемого элемента оперативной памяти предусмотрены следующие параметры настройки:

  • DO_REG — позволяет задействовать выходной регистр в составе создаваемого элемента оперативной памяти (по умолчанию этому параметру присваивается нулевое значение, при котором выходной регистр не используется).
  • INIT — определяет начальное значение для выходного порта данных (по умолчанию установлено значение X“00000”).
  • SIM_COLLISION_CHECK — предоставляет возможность выбора режима обработки различных конфликтных ситуаций при осуществлении операций записи и чтения данных в процессе моделирования.
  • SIM_MODE — устанавливает режим моделирования формируемого элемента оперативной памяти.
  • SRVAL — указывает состояние выходного порта данных при активном уровне сигнала на входе сброса/установки (по умолчанию этот параметр принимает значение X“00000”).
  • INIT_00–INIT_3F — применяются для инициализации содержимого соответствующих ячеек основной памяти (по умолчанию во все ячейки ОЗУ заносится нулевое значение).
  • INITP_00–INITP_07 — используются для инициализации содержимого ячеек памяти, предназначенных для организации контроля четности информационных данных.

В состав системы условных обозначений входов и выходов, используемых в описании интерфейса элементов 2-портовой оперативной памяти с фиксированной функцией портов, формируемых с помощью шаблона 36x512 Simple Dual-Port BlockRAM (RAMB18SDP), входят следующие идентификаторы:

  • DO — выходная 32-разрядная шина информационных данных порта чтения;
  • DOP — выходная 4-разрядная шина, предназначенная для организации контроля четности считываемых информационных данных;
  • RDCLK — вход сигнала синхронизации порта чтения данных;
  • RDEN — вход сигнала разрешения порта чтения данных;
  • REGCE — вход сигнала разрешения синхронизации для выходного регистра порта чтения данных;
  • SSR — вход синхронного сброса/установки выходного регистра;
  • WRCLK — вход сигнала синхронизации порта записи данных;
  • WREN — вход сигнала разрешения порта записи данных;
  • WRADDR — 9-разрядная шина адресов порта записи данных;
  • RDADDR — 9-разрядная шина адресов порта чтения данных;
  • DI — входная 32-разрядная шина информационных данных порта записи;
  • DIP — входная 4-разрядная шина, предназначенная для организации контроля четности записываемых информационных данных;
  • WE — входная 4-разрядная шина, объединяющая сигналы управления записью соответствующих байтов данных в ячейки элемента оперативной памяти.

Условный графический образ элемента 2-портового ОЗУ с фиксированной функцией портов информационной емкостью 16 384 бит с организацией 512×32 разряда и поддержкой контроля четности, для подготовки описания которого используется шаблон 36x512 Simple Dual-Port BlockRAM (RAMB18SDP), показан на рис. 389.

Oбраз 2-портового ОЗУ, формируемого с помощью шаблона (RAMB18SDP)

Рис. 389. Условный графический образ 2-портового ОЗУ, формируемого с помощью шаблона 36x512 Simple Dual-Port BlockRAM (RAMB18SDP)

72x512 Simple Dual-Port BlockRAM/w ECC (RAMB36SDP) содержит шаблон VHDL-описания элемента 2-портового ОЗУ с фиксированной функцией портов (записи или чтения данных) информационной емкостью 32 768 бит с организацией 512×64 разряда, со встроенной схемой контроля и коррекции ошибок ECC (Error Correction Code), реализуемого на базе модуля блочной памяти Block RAM ПЛИС серии Virtex-5. Каждый модуль блочной памяти в кристаллах программируемой логики семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT, Virtex-5 TXT и Virtex-5 FXT поддерживает возможность конфигурирования в виде ОЗУ с раздельными портами записи и чтения данных и организацией 512×64 разряда, в составе которых можно задействовать встроенную схему контроля и коррекции ошибок ECC. Структурная схема таких элементов оперативной памяти изображена на рис. 390.

Структура ОЗУ со встроенной схемой контроля и коррекции ошибок ECC

Рис. 390. Структура ОЗУ со встроенной схемой контроля и коррекции ошибок ECC, реализуемого на базе блочной памяти ПЛИС серии Virtex-5

Для подготовки описания элемента ОЗУ с фиксированной функцией портов, встроенной схемой контроля и коррекции ошибок ECC предлагается шаблон, выполненный на основе экземпляра библиотечного примитива RAMB36SDP:

-- RAMB36SDP : 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 : (RAMB36SDP_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--->
--
-- RAMB36SDP: 72x512 Simple Dual-Port BlockRAM /w ECC
-- Virtex-5
-- Xilinx HDL Language Template, version 13.2
--
RAMB36SDP_inst : RAMB36SDP
generic map (
DO_REG => 0, -- Optional output register (0 or 1)
EN_ECC_READ => FALSE, -- Enable ECC decoder, TRUE or FALSE
EN_ECC_WRITE => FALSE, -- Enable ECC encoder, TRUE or FALSE
INIT => X“000000000000000000”, -- Initial values on output port
SIM_COLLISION_CHECK => “ALL”, -- Collision check enable “ALL”, “WARNING_ONLY”, “GENERATE_X_ONLY” or “NONE”
SIM_MODE => “SAFE”, -- Simulation: “SAFE” vs “FAST”, see “Synthesis and Simulation
-- Design Guide” for details
SRVAL => X”000000000000000000”, -- Set/Reset value for port output
-- The following INIT_xx declarations specify the initial contents of the RAM
INIT_00 => X“00000000000000000000000000000000000000000”,
INIT_01 => X“00000000000000000000000000000000000000000”,

INIT_7E => X“00000000000000000000000000000000000000000”,
INIT_7F => X“00000000000000000000000000000000000000000”,
-- The next set of INITP_xx are for the parity bits
INITP_00 => X“0000000000000000000000000000000000000000”,
INITP_01 => X“0000000000000000000000000000000000000000”,

INITP_0F => X“000000000000000000000000000000000000000”)
port map (
DBITERR => DBITERR, -- 1-bit double bit error status output
SBITERR => SBITERR, -- 1-bit single bit error status output
DO => DO, -- 64-bit Data Output
DOP => DOP, -- 8-bit Parity Output
ECCPARITY => ECCPARITY, -- 8-bit generated error correction parity
RDCLK => RDCLK, -- 1-bit read port clock
RDEN => RDEN, -- 1-bit read port enable
REGCE => REGCE, -- 1-bit register enable input
SSR => SSR, -- 1-bit synchronous output set/reset input
WRCLK => WRCLK, -- 1-bit write port clock
WREN => WREN, -- 1-bit write port enable
WRADDR => WRADDR, -- 9-bit write port address input
RDADDR => RDADDR, -- 9-bit read port address input
DI => DI, -- 64-bit data input
DIP => DIP, -- 8-bit parity data input
WE => WE -- 8-bit write enable input
);
-- End of RAMB36SDP_inst instantiation

В составе библиотечного примитива RAMB36SDP кроме настраиваемых параметров, представленных при рассмотрении предыдущего шаблона, используются параметры EN_ECC_READ и EN_ECC_WRITE. Параметр EN_ECC_READ разрешает или запрещает декодирование считываемых данных с помощью встроенной схемы контроля и коррекции ошибок ECC. Параметр EN_ECC_WRITE применяется для управления кодированием записываемых информационных данных встроенной схемой контроля и коррекции ошибок ECC. По умолчанию для этих параметров настройки предлагается значение FALSE, при котором кодирование и декодирование информационных данных не производится.

Система условных обозначений входов и выходов, применяемых в описании интерфейса элементов 2-портовой оперативной памяти с фиксированной функцией портов, формируемых с помощью шаблона 72x512 Simple Dual-Port BlockRAM/w ECC (RAMB36SDP), включает в себя следующую совокупность идентификаторов:

  • DBITERR — выход сигнала, информирующего о наличии двух ошибочных бит данных;
  • SBITERR — выход сигнала, сообщающего о присутствии одного ошибочного бита данных;
  • DO — выходная 64-разрядная шина информационных данных порта чтения;
  • DOP — выходная 8-разрядная шина, предназначенная для организации контроля четности считываемых информационных данных;
  • ECCPARITY — выходная 8-разрядная шина, на которую поступает код, формируемый встроенной схемой контроля и коррекции ошибок ECC;
  • RDCLK — вход тактового сигнала порта чтения;
  • RDEN — вход сигнала разрешения порта чтения данных;
  • REGCE — вход сигнала разрешения синхронизации для выходного регистра порта чтения данных;
  • SSR — вход сигнала синхронного сброса/установки выходного регистра;
  • WRCLK — вход тактового сигнала порта записи;
  • WREN — вход сигнала разрешения порта записи данных;
  • WRADDR — 9-разрядная шина адресов порта записи данных;
  • RDADDR — 9-разрядная шина адресов порта чтения данных;
  • DI — входная 64-разрядная шина информационных данных порта записи;
  • DIP — входная 8-разрядная шина, предназначенная для организации контроля четности записываемых информационных данных;
  • WE — входная 8-разрядная шина, объединяющая сигналы управления записью соответствующих байтов данных в ячейки ОЗУ.

На рис. 391 показан условный графический образ элемента 2-портовой оперативной памяти с фиксированной функцией портов, поддержкой контроля и коррекции ошибок, описание которого создается с помощью шаблона 72x512 Simple Dual-Port BlockRAM/w ECC (RAMB36SDP) для последующей реализации на базе модуля блочной памяти Block RAM ПЛИС серии Virtex-5.

Oбраз элементов 2-портового ОЗУ, формируемого с помощью шаблона  (RAMB36SDP)

Рис. 391. Условный графический образ элементов 2-портового ОЗУ, формируемого с помощью шаблона 72x512 Simple Dual-Port BlockRAM/w ECC (RAMB36SDP)

Примечание. Полный список литературы смотрите в предыдущих частях статьи.

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

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

 


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

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