Разработка VHDL-описаний цифровых устройств, проектируемых на основе ПЛИС фирмы Xilinx, с использованием шаблонов САПР ISE Design Suite. Часть 9
Все статьи цикла:
- Часть 1
- Часть 2
- Часть 3
- Часть 4
- Часть 5
- Часть 6
- Часть 7
- Часть 8
- Часть 9
- Часть 10
- Часть 11
- Часть 12
- Часть 13
- Часть 14
- Часть 15
- Часть 16
- Часть 17
- Часть 18
- Часть 19
- Часть 20
- Часть 21
В подразделе RAM/ROM содержатся образцы описаний элементов оперативных и постоянных запоминающих устройств, предназначенных для реализации на базе различных ресурсов ПЛИС семейства Spartan-3. В состав этого подраздела входят три каталога — Block RAM, Distributed RAM и Distributed ROM (Рис. 51. КиТ. 2010. № 8). Каталог Block RAM объединяет в себе шаблоны VHDL-описаний элементов ОЗУ, реализуемых на основе модулей блочной памяти Block RAM.
Все кристаллы программируемой логики семейства Spartan-3 содержат специальные аппаратные ресурсы оперативной памяти Block RAM, которые организованы в виде блоков (модулей) информационной емкостью 18 кбит. Каждый модуль блочной памяти может конфигурироваться в виде однопо-ртового или двухпортового ОЗУ с определенными комбинациями объема и разрядности слов данных [1, 20]. Для каждого поддерживаемого варианта конфигурирования модуля блочной памяти Block RAM предусмотрен соответствующий библиотечный примитив. Шаблоны описаний элементов оперативной памяти, основанные на использовании этих примитивов, распределены в каталоге Block RAM по трем папкам — Dual-Port (Matched Port Widths), Dual-Port (Mis-matched Port Widths) и Single-Port.
В папке Dual-Port (Matched Port Widths) представлены образцы описаний элементов двухпортовых оперативных запоминающих устройств с одинаковой разрядностью портов. Папка Dual-Port (Mis-matched Port Widths) включает в себя шаблоны описаний элементов двухпортовых ОЗУ, в которых порты имеют различную организацию данных. В папке
Single-Port находятся образцы описаний элементов однопортовой оперативной памяти.
16k x 1 (RAMB16_S1_S1) представляет собой шаблон описания элемента двухпортового ОЗУ с информационной емкостью 16 384 бита и организацией каждого порта 16 384 слова х 1 разряд, которое предназначено для реализации на основе модуля блочной памяти Block RAM кристаллов программируемой логики семейства Spartan-3. В качестве основы этого шаблона используется библиотечный примитив RAMB16_S1_S1:
— : 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 : (RAMB16_S1_S1_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—>
—
— RAMB16_S1_S1: 16k x 1 Dual-Port RAM
— Spartan-3
— Xilinx HDL Language Template, version 11.4
—
RAMB16_S1_S1_inst : RAMB16_S1_S1
generic map (
INIT_A => «0», — Value of output RAM registers on Port A at startup
INIT_B => «0», — Value of output RAM registers on Port B at
startup
SRVAL_A => «0», — Port A ouput value upon SSR assertion
SRVAL_B => «0», — Port B ouput value upon SSR assertion
WRITE_MODE_A => «WRITE_FIRST», — WRITE_FIRST, READ_FIRST or NO_CHANGE
WRITE_MODE_B => «WRITE_FIRST», — WRITE_FIRST, READ_FIRST or NO_CHANGE
SIM_COLLISION_CHECK => «ALL», — «NONE», «WARNING», «GENERATE_X_ONLY», «ALL»
— The following INIT_xx declarations specify the initial contents of the RAM — Address 0 to 4095
INIT_00 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_01 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_03 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_04 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_05 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_0D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 4096 to 8191
INIT_10 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_11 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_12 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_13 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_14 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_15 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_1D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 8192 to 12287
INIT_20 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_21 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_22 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_23 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_24 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_25 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_2D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 12288 to 16383
INIT_30 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_31 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_32 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_33 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_34 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_35 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_3D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3F => X»0000000000000000000000000000000000000000000000000000000000000000″),
port map (
DOA => DOA, — Port A 1-bit Data Output
DOB => DOB, — Port B 1-bit Data Output
ADDRA => ADDRA, — Port A 14-bit Address Inpu
ADDRB => ADDRB, — Port B 14-bit Address Inpu
CLKA => CLKA, — Port A Clock
CLKB => CLKB, — Port B Clock
DIA => DIA, — Port A 1-bit Data Input
DIB => DIB, — Port B 1-bit Data Input
ENA => ENA, — Port A RAM Enable Input
ENB => ENB, — PortB RAM Enable Input
SSRA => SSRA, — Port A Synchronous Set/Reset In
SSRB => SSRB, — Port B Synchronous Set/Reset In
WEA => WEA, — Port A Write Enable Input
WEB => WEB — Port B Write Enable Input
);
— End of RAMB16_S1_S1_inst instantiation
В указанном библиотечном примитиве предусмотрены следующие настраиваемые параметры, которые предназначены для определения начального содержимого и режимов функционирования формируемого элемента двухпортовой оперативной памяти:
- INIT_A и INIT_B — задают начальные значения для выходных регистров первого и второго портов ОЗУ соответственно (по умолчанию предлагается нулевое значение).
- SRVAL_A и SRVAL_B — определяют состояние выходных портов данных A и B соответственно при активном уровне сигнала на входах сброса/установки (по умолчанию устанавливается нулевое значение).
- WRITE_MODE_A и WRITE_MODE_B — указывают режим записи информации (порядок выполнения операций записи и чтения данных при одновременном обращении к ячейкам памяти) для первого и второго портов соответственно.
- SIM_COLLISION_CHECK — устанавливает режим обработки различных конфликтных ситуаций при осуществлении операций записи и чтения данных в процессе моделирования (по умолчанию предлагается значение «ALL»).
- INIT_00-INIT_3F — предназначены для инициализации содержимого соответствующих ячеек памяти (по умолчанию во все ячейки ОЗУ записывается нулевое значение).
Система условных обозначений, применяемых в описании интерфейса библиотечного примитива RAMB16_S1_S1, включает в себя следующие идентификаторы входов и выходов:
- DOA — выход первого порта элемента 2-портовой оперативной памяти;
- DOB — выход второго порта элемента 2-портового ОЗУ;
- ADDRA — 14-разрядная шина адреса первого порта элемента 2-портовой оперативной памяти;
- ADDRB — 14-разрядная шина адреса второго порта 2-портового ОЗУ;
- CLKA и CLKB — входы сигнала синхронизации первого и второго порта соответственно;
- DIA — информационный вход (записи) первого порта;
- DIB — информационный вход (записи) второго порта;
- ENA и ENB — входы сигнала разрешения для первого и второго порта соответственно;
- SSRA и SSRB — входы сигнала синхронного сброса/установки первого и второго порта соответственно;
- WEA и WEB — входы сигнала разрешения записи соответственно в первый и второй порт элемента двухпортовой оперативной памяти.
Все операции выполняются в каждом порте при высоком логическом уровне напряжения на входе сигнала разрешения ENA и ENB по фронту соответствующего тактового сигнала CLKA и CLKB. Для загрузки данных, поступающих на информационные входы первого и второго порта DIA и DIB, в ячейки с адресами, представленными на шинах ADDRA и ADDRB, необходимо наличие высокого логического уровня напряжения на входах сигнала разрешения записи WEA и WEB соответственно. При подаче активного уровня напряжения на входы сигнала синхронного сброса/установки SSRA или SSRB информационные выходы соответствующего порта переключаются в состояние, определяемое заданными значениями параметров настройки SRVAL_A и SRVAL_B.
Условный графический образ элемента 2-портового ОЗУ с информационной емкостью 16 384 бита и организацией каждого порта 16 384 слова х 1 разряд, описание которого создается с помощью шаблона 16k x 1 (RAMB16_S1_S1) для последующей реализации на основе блочной памяти Block RAM кристаллов программируемой логики семейства Spartan-3, представлен на рис. 1.
1k x 16 + 2 Parity bits (RAMB16_S18_S18) включает в себя образец описания элемента двухпортовой оперативной памяти с информационной емкостью 16 384 бита и дополнительным объемом 2048 бит, предназначенным для контроля четности записываемых данных. Каждый порт такого элемента имеет организацию 1024 слова х 16 разрядов, а также два дополнительных разряда для осуществления контроля четности.
Рис. 1. Условный графический образ 2-портового ОЗУ
Этот шаблон выполнен на основе использования библиотечного примитива RAMB16_S18_S18, который представляет соответствующий вариант конфигурирования модуля блочной памяти Block RAM ПЛИС семейства Spartan-3:
— RAMB16_S18_S18 : 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 : (RAMB16_S18_S18_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—>
—
— RAMB16_S18_S18: 1k x 16 + 2 Parity bits Dual-Port RAM
— Spartan-3
— Xilinx HDL Language Template, version 11.4
RAMB16_S18_S18_inst : RAMB16_S18_S18 generic map (
INIT_A => X»00000″, — Value of output RAM registers on Port A at startup
INIT_B => X»00000″, — Value of output RAM registers on Port B at startup
SRVAL_A => X»00000″, — Port A ouput value upon SSR assertion
SRVAL_B => X»00000″, — Port B ouput value upon SSR assertion
WRITE_MODE_A => «WRITE_FIRST», — WRITE_FIRST, READ_FIRST or NO_CHANGE
WRITE_MODE_B => «WRITE_FIRST», — WRITE_FIRST, READ_FIRST or NO_CHANGE
SIM_COLLISION_CHECK => «ALL», — «NONE», «WARNING», «GENERATE_X_ONLY», «ALL»
— The follosing INIT_xx declarations specify the intiial contents of the RAM
— Address 0 to 255
INIT_00 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_01 => X’0000000000000000000000000000000000000000000000000000000000000000″,
INIT_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_03 => X’0000000000000000000000000000000000000000000000000000000000000000″,
INIT_04 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 256 to 511 INIT_10 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_11 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_12 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_13 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_14 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 512 to 767 INIT_20 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_21 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_22 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_23 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_24 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_25 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 768 to 1023 INIT_30 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_31 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_32 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_33 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_34 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3F => X»00000000000000000000000000000000000000000000 00000000000000000000″,
— The next set of INITP_xx are for the parity bits — Address 0 to 255 INITP_00 => X»0000000000000000000000000000000000000000000 000000000000000000000″,
INITP_01 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 256 to 511 INITP_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_03 => X»0000000000000000000000000000000000000000000 000000000000000000000″,
— Address 512 to 767 INITP_04 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_05 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 768 to 1023 INITP_06 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_07 => X»0000000000000000000000000000000000000000000000000000000000000000″)
port map (
DOA => DOA,
— Port A 16-bit Data Output DOB => DOB,
— Port B 16-bit Data Output DOPA => DOPA,
— Port A 2-bit Parity Output DOPB => DOPB,
— Port B 2-bit Parity Output ADDRA => ADDRA,
— Port A 10-bit Address Input ADDRB => ADDRB,
— Port B 10-bit Address Input CLKA => CLKA,
— Port A Clock CLKB => CLKB,
— Port B Clock DIA => DIA,
— Port A 16-bit Data Input DIB => DIB,
— Port B 16-bit Data Input
DIPA => DIPA, — Port A 2-bit parity Input
DIPB => DIPB, — Port-B 2-bit parity Input
ENA => ENA, — Port A RAM Enable Input
ENB => ENB, — PortB RAM Enable Input
SSRA => SSRA, — Port A Synchronous Set/Reset Input
SSRB => SSRB, — Port B Synchronous Set/Reset Input
WEA => WEA, — Port A Write Enable Input
WEB => WEB — Port B Write Enable Input
);
— End of RAMB16_S18_S18_inst instantiation
В приведенной конструкции кроме параметров настройки, которые были рассмотрены при описании предыдущего шаблона, предусмотрены также параметры INITP_00-INITP_07, предназначенные для инициализации содержимого ячеек памяти, используемых для организации контроля четности.
Система условных обозначений интерфейсных портов библиотечного примитива RAMB16_S18_S18 включает в себя следующие идентификаторы входов и выходов:
- DOA и DOB — выходные 16-разрядные шины информационных данных первого и второго порта соответственно;
- DOPA и DOPB — выходные двухразрядные шины, применяемые для осуществления контроля четности данных первого и второго порта соответственно;
- ADDRA и ADDRB — 10-разрядные шины адреса первого и второго порта соответственно;
- DIA и DIB — входные 16-разрядные шины информационных данных первого и второго порта соответственно;
- DIPA и DIPB — входные двухразрядные шины, предназначенные для организации контроля четности данных первого и второго порта соответственно;
- CLKA, CLKB, ENA, ENB, SSRA, SSRB, WEA, WEB — имеют то же предназначение, что и в предыдущем шаблоне.
Рис. 2. Условный графический образ двухпортового ОЗУ с организацией 1024 слова х 16 разрядов и контролем четности
Условный графический образ элемента 2-портовой оперативной памяти информационной емкостью 16 384 бита с организацией 1024 слова х 16 разрядов и дополнительным объемом 2048 бит, используемым при осуществлении контроля четности, для подготовки описания которого применяется шаблон 1k x 16 + 2 Parity bits (rAmB16_S18_S18), изображен на рис. 2.
2k x 8 + 1 Parity bit (RAMB16_S9_S9) содержит шаблон VHDL-описания варианта конфигурирования модуля блочной памяти кристаллов программируемой логики семейства Spartan-3 в виде элемента двухпортового ОЗУ с организацией 2048 слов х 8 разрядов и контролем четности. Основу этого шаблона образует оператор создания экземпляра библиотечного компонента RAMB16 S9 S9:
— : 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 : (RAMB16_S9_S9_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—>
— RAMB16_S9_S9: 2k x 8 + 1 Parity bit Dual-Port RAM
— Spartan-3
— Xilinx HDL Language Template, version 11.4
RAMB16_S9_S9_inst : RAMB16_S9_S9 generic map (
INIT_A => X»000″,
— Value of output RAM registers on Port A at startup
INIT_B => X»000″,
— Value of output RAM registers on Port B at startup
SRVAL_A => X»000″,
— Port A ouput value upon SSR assertion
SRVAL_B => X»000″,
— Port B ouput value upon SSR assertion
WRITE_MODE_A => «WRITE_FIRST»,
— WRITE_FIRST, READ_FIRST or NO_CHANGE
WRITE_MODE_B => «WRITE_FIRST»,
— WRITE_FIRST, READ_FIRST or NO_CHANGE
SIM_COLLISION_CHECK => «ALL»,
— «NONE», «WARNING», «GENERATE_X_ONLY», «ALL»
— The following INIT_xx declarations specify the initial contents of the RAM
— Address 0 to 511
INIT_00 => X
INIT_00 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_01 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_03 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_04 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_0E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 512 to 1023
INIT_10 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_11 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_12 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_13 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_14 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_1E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 1024 to 1535
INIT_20 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_21 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_22 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_23 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_24 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_2E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 1536 to 2047
INIT_30 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_31 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_32 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_33 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_34 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_3E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— The next set of INITP_xx are for the parity bits
— Address 0 to 511
INITP_00 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_01 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 512 to 1023
INITP_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_03 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 1024 to 1535
INITP_04 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_05 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 1536 to 2047
INITP_06 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_07 => X»0000000000000000000000000000000000000000000000000000000000000000″)
port map (
DOA => DOA, — Port A 8-bit Data Output
DOB => DOB, — Port B 8-bit Data Output
DOPA => DOPA, — Port A 1-bit Parity Output
DOPB => DOPB, — Port B 1-bit Parity Output
ADDRA => ADDRA, — Port A 11-bit Address Input
ADDRB => ADDRB, — Port B 11-bit Address Input
CLKA => CLKA, — Port A Clock
CLKB => CLKB, — Port B Clock
DIA => DIA, — Port A 8-bit Data Input
DIB => DIB, — Port B 8-bit Data Input
DIPA => DIPA, — Port A 1-bit parity Input
DIPB => DIPB, — Port-B 1-bit parity Input
ENA => ENA, — Port A RAM Enable Input
ENB => ENB, — PortB RAM Enable Input
SSRA => SSRA, — Port A Synchronous Set/Reset Input
SSRB => SSRB, — Port B Synchronous Set/Reset Input
WEA => WEA, — Port A Write Enable Input
WEB => WEB — Port B Write Enable Input
);
— End of RAMB16_S9_S9_inst instantiation
Параметры настройки, предусмотренные в этой конструкции, имеют то же назначение, что и в шаблонах 16k x 1 (RAMB16_S1_S1) и 1k x 16 + 2 Parity bits (RAMB16_S18_S18), рассмотренных выше. При этом необходимо учитывать, что количество разрядов, указываемых при определении значений параметров INIT_A, INIT_B, SRVAL_A и SRVAL_B, должно соответствовать разрядности выходных шин данных формируемого элемента двухпортовой оперативной памяти.
Рис. 3. Условный графический образ двухпортового ОЗУ с организацией 2048 слов х 8 разрядов и контролем четности
В систему условных обозначений, используемую в описании интерфейса библиотечного примитива RAMB16_S9_S9, входят идентификаторы входов и выходов, представленные при рассмотрении предыдущего шаблона. Основные отличия проявляются в разрядности входных и выходных шин данных и шин адреса. В шаблоне 2k x 8 + 1 Parity bit (RAMB16_S9_S9) входные и выходные шины данных имеют разрядность восемь бит. Кроме того, оба порта содержат дополнительные входы и выходы, которые предназначены для организации контроля четности. При этом шина адреса каждого порта содержит одиннадцать двоичных разрядов.
На рис. 3 показан условный графический образ элемента двухпортового ОЗУ с организацией 2048 слов х 8 разрядов и контролем четности, описание которого формируется на основе шаблона 2k x 8 + 1 Parity bit (RAMB16_S9_S9) для последующей реализации на базе модуля блочной памяти Block RAM ПЛИС семейства Spartan-3.
4k x 4 (RAMB16_S4_S4) является образцом VHDL-описания варианта конфигурирования модуля блочной памяти кристаллов программируемой логики семейства Spartan-3 в виде двухпортового оперативного запоминающего устройства с организацией 4096 слов х 4 разряда. В качестве основы этого шаблона используется экземпляр библиотечного компонента RАМВ16 S4 S4:
— RAMB16_S4_S4 : 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 : (RAMB16_S4_S4_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—->
—
— RAMB16_S4_S4: 4k x 4 Dual-Port RAM
— Spartan-3
— Xilinx HDL Language Template, version 11.4
— RAMB16_S4_S4_inst : RAMB16_S4_S4
generic map (
INIT_A => X»0″, — Value of output RAM registers on Port A
at startup
INIT_B => X»0″, — Value of output RAM registers on Port B
at startup
SRVAL_A => X»0″,
— Port A ouput value upon SSR assertion
SRVAL_B => X»0″,
— Port B ouput value upon SSR assertion
WRITE_MODE_A => «WRITE_FIRST»,
— WRITE_FIRST,
READ_FIRST or NO_CHANGE
WRITE_MODE_B => «WRITE_FIRST»,
— WRITE_FIRST,
READ_FIRST or NO_CHANGE
SIM_COLLISION_CHECK => «ALL»,
— «NONE»,
«WARNING», «GENERATE_X_ONLY», «ALL»
— The following INIT_xx declarations specify the initial
contents of the RAM
— Address 0 to 1023
INIT_00 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_01 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_03 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_04 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_05 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_0D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 1024 to 2047
INIT_10 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_11 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_12 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_13 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_14 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_15 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_1D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 2048 to 3071
INIT_20 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_21 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_22 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_23 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_24 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_25 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_2D => X»000000000000000000000000000000000000000000000000000000000000000″,
INIT_2E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 3072 to 4095
INIT_30 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_31 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_32 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_33 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_34 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_35 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_3D => X»000000000000000000000000000000000000000000000000000000000000000″,
INIT_3E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3F => X»0000000000000000000000000000000000000000000000000000000000000000″)
port map (
DOA => DOA, — Port A 4-bit Data Output
DOB => DOB, — Port B 4-bit Data Output
ADDRA => ADDRA, — Port A 12-bit Address Input
ADDRB => ADDRB, — Port B 12-bit Address Input
CLKA => CLKA, — Port A Clock
CLKB => CLKB, — Port B Clock
DIA => DIA, — Port A 4-bit Data Input
DIB => DIB, — Port B 4-bit Data Input
ENA => ENA, — Port A RAM Enable Input
ENB => ENB, — Port B RAM Enable Input
SSRA => SSRA, — Port A Synchronous Set/Reset Input
SSRB => SSRB, — Port B Synchronous Set/Reset Input
WEA => WEA, — Port A Write Enable Input
WEB => WEB — Port B Write Enable Input
);
— End of RAMB16_S4_S4_inst instantiation
В представленном шаблоне используются
те же параметры настройки и система условных обозначений интерфейсных портов, что и в предыдущих образцах описания элементов двухпортовой оперативной памяти. При этом разрядность входных и выходных шин данных составляет четыре бита, а шин адреса — двенадцать бит.
Условный графический образ элемента 2-портового ОЗУ с организацией 4096 слов х 4 разряда, описание которого создается с помощью шаблона 4k x 4 (RAMB16_S4_S4), изображен на рис. 4.
Рис. 4. Условный графический образ двухпортового
ОЗУ с организацией 4096 слов × 4 разряда
512 x 32 + 4 Parity bits (RAMB16_S36_S36) представляет собой шаблон описания элемента двухпортовой оперативной памяти информационной емкостью 16 384 бита с организацией 512 слов х 32 разряда и дополнительным объемом 2048 бит, необходимым для реализации контроля четности загружаемых данных. Основой этого шаблона является библиотечный примитив RAMB16_S36_ S36, который представляет соответствующий вариант конфигурирования модуля блочной памяти кристаллов программируемой логики семейства Spartan-3:
— RAMB16_S36_S36 : 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 : (RAMB16_S36_S36_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—>
— RAMB16_S36_S36: 512 x 32 + 4 Parity bits Dual-Port RAM
— Spartan-3
— Xilinx HDL Language Template, version 11.4
—
RAMB16_S36_S36_inst : RAMB16_S36_S36
generic map (
INIT_A => X»000000000″, — Value of output RAM registers
on Port A at startup
INIT_B => X»000000000″, — Value of output RAM registers
on Port B at startup
SRVAL_A => X»000000000″, — Port A ouput value upon SSR
assertion
SRVAL_B => X»000000000″, — Port B ouput value upon SSR
assertion
WRITE_MODE_A => «WRITE_FIRST», — WRITE_FIRST,
READ_FIRST or NO_CHANGE
WRITE_MODE_B => «WRITE_FIRST», — WRITE_FIRST,
READ_FIRST or NO_CHANGE
SIM_COLLISION_CHECK => «ALL», — «NONE»,
«WARNING», «GENERATE_X_ONLY», «ALL»
— The following INIT_xx declarations specify the initial contents of the RAM
— Address 0 to 127
INIT_00 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_01 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_03 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_04 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_0E => X»0000000000000000000000000000000000000000000000000000000000000000″
INIT_0F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 128 to 255
INIT_10 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_11 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_12 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_13 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_14 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_1E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 256 to 383
INIT_20 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_21 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_22 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_23 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_24 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_2E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 384 to 511
INIT_30 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_31 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_32 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_33 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_34 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_3E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— The next set of INITP_xx are for the parity bits
— Address 0 to 127
INITP_00 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_01 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 128 to 255
INITP_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_03 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 256 to 383
INITP_04 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_05 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 384 to 511
INITP_06 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_07 => X»0000000000000000000000000000000000000000000000000000000000000000″)
port map (
DOA => DOA, — Port A 32-bit Data Output
DOB => DOB, — Port B 32-bit Data Output
DOPA => DOPA, — Port A 4-bit Parity Output
DOPB => DOPB, — Port B 4-bit Parity Output
ADDRA => ADDRA, — Port A 9-bit Address Input
ADDRB => ADDRB, — Port B 9-bit Address Input
CLKA => CLKA, — Port A Clock
CLKB => CLKB, — Port B Clock
DIA => DIA, — Port A 32-bit Data Input
DIB => DIB, — Port B 32-bit Data Input
DIPA => DIPA, — Port A 4-bit parity Input
DIPB => DIPB, — Port-B 4-bit parity Input
ENA => ENA, — Port A RAM Enable Input
ENB => ENB, — PortB RAM Enable Input
SSRA => SSRA, — Port A Synchronous Set/Reset Input
SSRB => SSRB, — Port B Synchronous Set/Reset Input
WEA => WEA, — Port A Write Enable Input
WEB => WEB — Port B Write Enable Input
);
— End of RAMB16_S36_S36_inst instantiation
В приведенной конструкции входные и выходные шины данных каждого порта имеют разрядность 32 бита, а шины адреса — девять бит. Для организации контроля четности используются дополнительные 4-разрядные входные и выходные шины данных.
На рис. 5 представлен условный графический образ элемента 2-портового ОЗУ с организацией 512 слов х 32 разряда и дополнительным объемом 2048 бит, предназначенным для контроля четности записываемых данных, для подготовки описания которого используется шаблон 512 x 32 + 4 Parity bits (RAMB16_S36_S36).
Рис. 5. Условный графический образ элемента двухпортовой оперативной памяти с организацией 512 слов х 32 разряда и контролем четности
8k x 2 (RAMB16_S2_S2) представляет образец VHDL-описания варианта конфигурирования модуля блочной памяти кристаллов программируемой логики семейства Spartan-3 в виде элемента двухпортовой памяти с организацией 8192 слова х 2 разряда. Данный шаблон выполнен на основе библиотечного примитива RAMB16_S2_S2:
— RAMB16_S2_S2 : 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 : (RAMB16_S2_S2_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—->
—
— RAMB16_S2_S2: 8k x 2 Dual-Port RAM
— Spartan-3
— Xilinx HDL Language Template, version 11.4
—
RAMB16_S2_S2_inst : RAMB16_S2_S2
generic map (
INIT_A => X»0″, — Value of output RAM registers on Port A
at startup
INIT_B => X»0″, — Value of output RAM registers on Port B
at startup
SRVAL_A => X»0″, — Port A ouput value upon SSR assertion
SRVAL_B => X»0″, — Port B ouput value upon SSR assertion
WRITE_MODE_A => «WRITE_FIRST», — WRITE_FIRST, READ_FIRST or NO_CHANGE
WRITE_MODE_B => «WRITE_FIRST», — WRITE_FIRST, READ_FIRST or NO_CHANGE
SIM_COLLISION_CHECK => «ALL», — «NONE», «WARNING», «GENERATE_X_ONLY», «ALL»
— The following INIT_xx declarations specify the initial
contents of the RAM
— Address 0 to 2047
INIT_00 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_01 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_03 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_04 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_05 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_0D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 2048 to 4095
INIT_10 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_11 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_12 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_13 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_14 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_15 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_1D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 4096 to 6143
INIT_20 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_21 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_22 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_23 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_24 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_25 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_2D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Address 6143 to 8191
INIT_30 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_31 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_32 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_33 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_34 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_35 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_3D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3F => X»0000000000000000000000000000000000000000000000000000000000000000″)
port map (
DOA => DOA, — Port A 2-bit Data Output
DOB => DOB, — Port B 2-bit Data Output
ADDRA => ADDRA, — Port A 13-bit Address Input
ADDRB => ADDRB, — Port B 13-bit Address Input
CLKA => CLKA, — Port A Clock
CLKB => CLKB, — Port B Clock
DIA => DIA, — Port A 2-bit Data Input
DIB => DIB, — Port B 2-bit Data Input
ENA => ENA, — Port A RAM Enable Input
ENB => ENB, — Port B RAM Enable Input
SSRA => SSRA, — Port A Synchronous Set/Reset Input
SSRB => SSRB, — Port B Synchronous Set/Reset Input
WEA => WEA, — Port A Write Enable Input
WEB => WEB — Port B Write Enable Input
);
— End of RAMB16_S2_S2_inst instantiation
При практическом использовании представленного шаблона следует учитывать, что разрядность входной и выходной шин данных каждого порта библиотечного примитива RAMB16_S2_S2 составляет два бита, а шины адреса — тринадцать бит.
На рис. 6 приведен условный графический образ элемента 2-портовой оперативной памяти с организацией 8192 слова х 2 разряда, описание которого формируется с помощью шаблона 8k x 2 (RAMB16_S2_S2) для последующей реализации на базе модуля блочной памяти Block RAM ПЛИС семейства Spartan-3.
Рис. 6. Условный графический образ элемента двухпортового ОЗУ с организацией 8192 слова х 2 разряда
16 k/1 k x 1/16 + 0/2 Parity bits (RAMB16_S1_ S18) включает в себя конструкцию, предназначенную для подготовки VHDL-описания варианта конфигурирования модуля блочной памяти кристаллов программируемой логики семейства Spartan-3 в виде элемента двухпортового ОЗУ, в котором первый порт имеет организацию 16 384 слова х 1 разряд, а второй — 1024 слова х 16 разрядов. При этом для второго порта предусмотрена возможность реализации контроля четности:
— RAMB16_S1_S18 : 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 : (RAMB16_S1_S18_inst) and/or the port declarations
— code : after the «=>» assignment maybe changed to properly
— : reference and connect this function to the design.
— : AH 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—>
— RAMB16_S1_S18: 16k/1k x 1/16 + 0/2 Parity bits Dual-Port RAM
— Spartan-3
— Xilinx HDL Language Template, version 11.4
RAMB16_S1_S18_inst : RAMB16_S1_S18
generic map (
INIT_A => «0», — Value of output RAM registers on Port A at startup
INIT_B => X»00000″, — Value of output RAM registers on Port B at startup
SRVAL_A => «0», — Port A ouput value upon SSR assertion
SRVAL_B => X»00000″, — Port B ouput value upon SSR assertion
WRITE_MODE_A => «WRITE_FIRST», — WRITE_FIRST, READ_FIRST or NO_CHANGE
WRITE_MODE_B => «WRITE_FIRST», — WRITE_FIRST, READ_FIRST or NO_CHANGE
SIM_COLLISION_CHECK => «ALL», — «NONE», «WARNING», «GENERATE_X_ONLY», «ALL»
— The following INIT_xx declarations specify the initial contents of the RAM
— Port A Address 0 to 4095, Port B Address 0 to 255 INIT_00 =>
INIT_00 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_01 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_03 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_04 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_05 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_0D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Port A Address 4096 to 8191, Port B Address 256 to 511
INIT_10 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_11 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_12 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_13 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_14 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_15 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_1D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Port A Address 8192 to 12287, Port B Address 512 to 767
INIT_20 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_21 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_22 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_23 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_24 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_25 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_2D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Port A Address 12288 to 16383, Port B Address 768 to 1023
INIT_30 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_31 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_32 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_33 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_34 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_35 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_3D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— The next set of INITP_xx are for the parity bits
— Port B Address 0 to 255
INITP_00 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_01 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Port B Address 256 to 511
INITP_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_03 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Port B Address 512 to 767
INITP_04 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_05 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Port B Address 768 to 1023
INITP_06 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_07 => X»0000000000000000000000000000000000000000000000000000000000000000″)
port map (
DOA => DOA, — Port A 1-bit Data Output
DOB => DOB, — Port B 16-bit Data Output
DOPB => DOPB, — Port B 2-bit Parity Output
ADDRA => ADDRA, — Port A 14-bit Address Input
ADDRB => ADDRB, — Port B 10-bit Address Input
CLKA => CLKA, — Port A Clock
CLKB => CLKB, — Port B Clock
DIA => DIA, — Port A 1-bit Data Input
DIB => DIB, — Port B 16-bit Data Input
DIPB => DIPB, — Port-B 2-bit parity Input
ENA => ENA, — Port A RAM Enable Input
ENB => ENB, — PortB RAM Enable Input
SSRA => SSRA, — Port A Synchronous Set/Reset Input
SSRB => SSRB, — Port B Synchronous Set/Reset Input
WEA => WEA, — Port A Write Enable Input
WEB => WEB — Port B Write Enable Input
);
— End of RAMB16_S1_S18_inst instantiation
Представленный шаблон выполнен на основе библиотечного примитива RAMB16_S1_ S18. Назначение всех идентификаторов входов и выходов, используемых в описании интерфейса этого примитива, было рассмотрено выше. При этом следует учитывать, что в составе первого порта используются одиночные информационные входы и выходы, а во втором — 16-разрядные входные и выходные шины данных. Кроме того, ко второму порту относятся дополнительные двухразрядные шины данных, предназначенные для организации контроля четности. Шина адреса первого порта содержит четырнадцать двоичных разрядов, а второго — десять.
Условный графический образ элемента двухпортового ОЗУ с организацией портов 16 384 слова х 1 разряд и 1024 слова х 16 разрядов, описание которого формируется с помощью шаблона 16k/1k x 1/16 + 0/2 Parity bits (RAMB16_S1_S18) для последующей реализации на базе модуля блочной памяти Block RAM ПЛИС семейства Spartan-3, показан на рис. 7.
Рис. 7. Условный графический образ элемента
двухпортового ОЗУ с организацией портов
16 384 слова × 1 разряд и 1024 слова × 16 разрядов
16k/2k x 1/8 + 0/1 Parity bit (RAMB16_S1_S9) содержит образец описания варианта конфигурирования модуля блочной памяти Block RAM в кристаллах программируемой логики семейства Spartan-3 в виде элемента двухпортового ОЗУ с различной организацией портов — 16 384 слова х 1 разряд и 2048 слов х 8 разрядов. В элементах двухпортовой памяти, формируемых на основе этого шаблона, второй порт может поддерживать выполнение операций с контролем четности:
— RAMB16_S1_S9 : 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 : (RAMB16_S1_S9_inst) and/or the port declarations
— code : after the «=>» assignment maybe changed to properly
— : reference and connect this function to the design.
— : AH 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—->
—
— RAMB16_S1_S9: 16k/2k x 1/8 + 0/1 Parity bit Dual-Port RAM
— Spartan-3
— Xilinx HDL Language Template, version 11.4
—
RAMB16_S1_S9_inst : RAMB16_S1_S9
generic map (
INIT_A => «0», — Value of output RAM registers on Port A
at startup
INIT_B => X»000″, — Value of output RAM registers on Port
B at startup
SRVAL_A => «0», — Port A ouput value upon SSR assertion
SRVAL_B => X»000″, — Port B ouput value upon SSR
assertion
WRITE_MODE_A => «WRITE_FIRST», — WRITE_FIRST,
READ_FIRST or NO_CHANGE
WRITE_MODE_B => «WRITE_FIRST», — WRITE_FIRST,
READ_FIRST or NO_CHANGE
SIM_COLLISION_CHECK => «ALL», — «NONE»,
«WARNING», «GENERATE_X_ONLY», «ALL»
— The following INIT_xx declarations specify the initial contents of the RAM
— Port A Address 0 to 4095, Port B Address 0 to 511
INIT_00 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_01 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_03 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_04 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_05 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_0D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_0F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Port A Address 4096 to 8191, Port B Address 512 to 1023
INIT_10 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_11 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_12 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_13 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_14 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_15 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_1D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_1F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Port A Address 8192 to 12287, Port B Address 1024 to 1535
INIT_20 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_21 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_22 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_23 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_24 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_25 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_2D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_2F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Port A Address 12288 to 16383, Port B Address 1535 to 2047
INIT_30 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_31 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_32 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_33 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_34 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_35 => X»0000000000000000000000000000000000000000000000000000000000000000″,
…
INIT_3D => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3E => X»0000000000000000000000000000000000000000000000000000000000000000″,
INIT_3F => X»0000000000000000000000000000000000000000000000000000000000000000″,
— The next set of INITP_xx are for the parity bits
— Port B Address 0 to 511
INITP_00 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_01 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Port B Address 512 to 1023
INITP_02 => X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_03 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Port B Address 1024 to 1535
INITP_04 =>X»0000000000000000000000000000000000000000000000000000000000000000″,
INITP_05 => X»0000000000000000000000000000000000000000000000000000000000000000″,
— Port B Address 1535 to 2047
INITP_06 => X»000000000000000000000000000000000000000000 0000000000000000000000″,
INITP_07 => X»000000000000000000000000000000000000000000 0000000000000000000000″)
portmap (
DOA => DOA, — Port A 1-bit Data Output
DOB => DOB, — Port B 8-bit Data Output
DOPB => DOPB, — Port B 1-bit Parity Output
ADDRA => ADDRA, — Port A 14-bit Address Input
ADDRB => ADDRB, — Port B 11-bit Address Input
CLKA => CLKA, — Port A Clock
CLKB => CLKB, — Port B Clock
DIA => DIA, — Port A 1-bit Data Input
DIB => DIB, — Port B 8-bit Data Input
DIPB => DIPB, — Port-B 1-bit parity Input
ENA => ENA, — Port A RAM Enable Input
ENB => ENB, — PortB RAM Enable Input
SSRA => SSRA, — Port A Synchronous Set/Reset Input
SSRB => SSRB, — Port B Synchronous Set/Reset Input
WEA => WEA, — Port A Write Enable Input
WEB => WEB — Port B Write Enable Input
);
— End of RAMB16_S1_S9_inst instantiation
Система условных обозначений входов и выходов, используемая в представленной конструкции, отличается от совокупности идентификаторов предыдущего шаблона только разрядностью адресной и информационных шин второго порта. В шаблоне 16k/2k x 1/8 + 0/1 Parity bit (RAMB16_ S1_S9) входная и выходная шины данных второго порта имеют разрядность восемь бит, а шина адреса — одиннадцать бит. При этом второй порт включает в себя также дополнительные входы и выходы данных, используемые для реализации контроля четности.
На рис. 8 приведен условный графический образ элемента двухпортовой оперативной памяти с организацией портов 16 384 слова х 1 разряд и 2048 слов х 8 разрядов с контролем четности, для создания описания которого используется шаблон 16k/2k x 1/8 + 0/1 Parity bit (RAMB16_S1_S9).
Рис. 8. Условный графический образ элемента
двухпортового ОЗУ с организацией портов
16 384 слова × 1 разряд и 2048 слов × 8 разрядов
Продолжение следует
Литература
- Кузелин М. О., Кнышев Д. А., Зотов В. Ю. Современные семейства ПЛИС фирмы Xilinx. Справочное пособие. М.: Горячая линия — Телеком, 2004.
- Бибило П. Н. Основы языка VHDL. М.: Солон-Р, 2000.
- Бибило П. Н. Синтез логических схем с использованием языка VHDL. М.: Солон-Р, 2002.
- Уэйкерли Дж. Ф. Проектирование цифровых устройств. Т. 1. М.: Постмаркет, 2002.
- Поляков А. К. Языки VHDL и Verilog в проектировании цифровой аппаратуры. М.: Солон-Пресс, 2003.
- Зотов В. Инструментальный комплект Spartan-3 Starter Kit для практического освоения методов проектирования встраиваемых микропроцессорных систем на основе ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2005. № 7.
- Зотов В. Новый инструментальный комплект Spartan-3E Starter Kit для практического освоения методов проектирования встраиваемых микропроцессорных систем на основе ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2006. № 10.
- Зотов В. Новый инструментальный комплект Spartan-3A Starter Kit для практического освоения методов проектирования и отладки цифровых устройств с аппаратной и программной реализацией операций, реализуемых на основе ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2007. № 9.
- Зотов В. Новый инструментальный комплект компании Avnet на основе ПЛИС FPGA семейства Spartan-3A фирмы Xilinx // Компоненты и технологии. 2008. № 8.
- Зотов В. Инструментальный модуль компании Avnet для отладки проектов встраиваемых систем, разрабатываемых на базе нового семейства ПЛИС FPGA фирмы Xilinx Virtex-5 FXT // Компоненты и технологии. 2008. № 9.
- Зотов В. Особенности архитектуры нового поколения высокопроизводительных ПЛИС FPGA фирмы Xilinx серии Virtex-6 // Компоненты и технологии. 2009. № 8.
- Зотов В. Особенности архитектуры нового поколения ПЛИС FPGA фирмы Xilinx серии Spartan-6 // Компоненты и технологии. 2009. № 9.
- Зотов В. Новое семейство высокопроизводительных ПЛИС с архитектурой FPGA фирмы Xilinx Virtex-6 HXT // Компоненты и технологии. 2010. № 1.
- IEEE Standard VHDL Language Reference Manual -IEEE Std 1076-2002.
- Суворова Е. А., Шейнин Ю. Е. Проектирование цифровых систем на VHDL. СПб.: БХВ-Петер-бург, 2003.
- Сергиенко A. M. VHDL для проектирования вычислительных устройств. Киев: ЧП «Корнейчук», ООО «ТИД «ДС», 2003.
- Зотов В. Проектирование цифровых устройств, реализуемых на базе ПЛИС FPGA фирмы Xilinx, с использованием средств CORE Generator // Компоненты и технологии. 2006. № 12. 2007. № 1.
- Зотов В. Разработка компонентов устройств цифровой обработки сигналов, реализуемых на базе аппаратных модулей DSP48E в ПЛИС FPGA серии Virtex-5, с помощью «мастера» Architecture Wizard САПР серии Xilinx ISE // Компоненты и технологии. 2008. № 12. 2009. № 1, 4-7.
- Spartan-3 Generation FPGA User Guide. Xilinx, 2009.
- Spartan-3 FPGA Family: Complete Data Sheet. Xilinx, 2009.