Разработка базовых компонентов цифровых устройств,
реализуемых на базе ПЛИС FPGA фирмы Xilinx®, с помощью генератора параметризированных модулей CORE Generator
Продолжение, начало в КиТ№ 2’2007
Валерий ЗОТОВ
Создание мультиплексоров с помощью генератора параметризированных модулей CORE Generator
Основным инструментом разработки мультиплексоров при использовании средств CORE Generator является параметризирован-ный модуль Bit Multiplexer. Этот модуль предназначен для формирования N-входовых мультиплексоров (N в 1), которые осуществляют передачу данных с одного из входов (номер которого определяется значением кода (состоянием сигналов) на входах выбора) на выход мультиплексора. Входы данных и выбора представлены в виде шин соответствующей разрядности. Все мультиплексоры, создаваемые с помощью параметризирован-ного модуля Bit Multiplexer, рассчитаны на оптимальную реализацию в ПЛИС следующих
семейств: Spartan-II; Spartan-IIE; Spartan-3;
Spartan-3E; Virtex; Virtex-E; Virtex-II; Virtex-II
PRO и Virtex-4.
Особенности данного модуля:
• поддержка широкого диапазона разрядности входного сигнала (количества информационных входов) — от 2 до 256;
• возможность формирования выходов различного типа (комбинационного и/или регистрового);
• наличие в выходном регистре синхронных и асинхронных входов сброса и/или установки, а также входа разрешения синхронизации, включаемых в состав разрабатываемого мультиплексора по выбору пользователя;
• инициализация начального состояния выходного регистра при включении питания;
• применение технологии Xilinx Smart-IP, обеспечивающей наилучшую реализацию
генерируемого мультиплексора в выбранном кристалле;
• возможность генерации мультиплексоров в виде макросов с относительным размещением Relationally Placed Macro (RPM). «Мастер» настройки параметров рассматриваемого ядра мультиплексора содержит две диалоговые панели, одна из которых является основной, а другая — дополнительной. В основной диалоговой панели, вид которой представлен на рис. 29, определяются значения ключевых параметров формируемого мультиплексора.
Идентификатор для генерируемого вида мультиплексора задается в поле редактирования Component Name. Количество информационных входов в создаваемом мультиплексоре следует указать в поле редактирования Number of Inputs. По умолчанию в данном поле редактирования указано значение 2. Информация о допустимом диапазоне значений этого параметра приведена справа от поля редактирования Number ofInputs в виде строки Valid Range... После ввода значения, определяющего количество информационных входов мультиплексора, производится автоматическое вычисление разрядности шины выбора в соответствии с формулой К = Log2 (Number of Inputs). Если полученный результат вычислений не является целым числом, то он округляется в большую сторону до ближайшего целого значения.
Для выбора типа выходов в создаваемом мультиплексоре нужно воспользоваться группой кнопок с зависимой фиксацией Output Options (рис. 29). Если в формируемом мультиплексоре необходим только обычный (комбинационный) выход, то в нажатом состоянии должна быть зафиксирована кнопка Non Registered. Чтобы включить в состав генерируемого мультиплексора выходной регистр (точнее, выходной триггер), следует переключить в нажатое состояние кнопку Registered. В том случае, когда требуется сформировать
Q Parameters Core Overview Contact Wel) unks ЬдКфКЕ ____________________________________Bit Multiplexer
Component Name, f
Number of Inputs. |2 Valid Range. 2.256
SSET М Output Options
S fl- С Non Registered
CE СІК (• Registered Register Options. |
Г Both
Latency
Layout
.to RPM
[ Generate ] I Dismiss | [ Data Sheet ] [ Version Info
Рис. 29. Основная диалоговая панель «мастера» настройки параметров ядра мультиплексора Bit Multiplexer (страница Parameters)
Bit Multiplexer
m
Clock Enable W Clock Enable
tCE Overrides -------------------------------------------
CE overrides Sync Controls Sync Controls ovemde CE
Asynchronous Settings r None Set c Clear <• Set and Clear
j— Synchronous Settings -----------------------------------------
r None [Setl^~ Clear С Set and Clear
t Set/Clear Priority-------------------------------------
(•
OK I camel I
Рис. 30. Дополнительная диалоговая панель «мастера» настройки параметров ядра мультиплексора Bit Multiplexer
Register Options
мультиплексор с обычным и регистровым выходами, нужно установить в нажатое состояние кнопку Both. Если выбран вариант мультиплексора с использованием выходного регистра, то становится доступной клавиша Register Options. С помощью этой клавиши можно открыть дополнительную диалоговую панель «мастера» настройки параметров формируемого мультиплексора, назначение и структура которой рассматриваются далее.
Параметр Create RPM позволяет изменить форму представления создаваемого мультиплексора для последующей реализации. Если необходимо сгенерировать мультиплексор в виде макроса с относительным размещением, нужно установить одноименный индикатор, расположенный во встроенной панели Layout (рис. 9), в состояние «включено».
Дополнительная диалоговая панель «мастера» настройки параметров ядра мультиплексора Bit Multiplexer предназначена для выбора параметров выходного регистра (триггера). Вид этой панели представлен на рис. 3О.
Если в выходном регистре генерируемого мультиплексора необходимо задействовать вход разрешения синхронизации и определить его приоритет по отношению к входам синхронного сброса и установки, следует воспользоваться индикатором состояния и кнопками, которые расположены во встроенной панели Clock Enable (рис. 3О). Для использования входа разрешения синхронизации нужно установить индикатор Clock Enable в состояние «включено». При этом если в выходном регистре также предусмотрены режимы синхронного сброса и/или установки, то следует определить соотношение приоритетов сигналов на входах разрешения синхронизации и сброса/установки с помощью группы кнопок с зависимой фиксацией CE Overrides. Когда в нажатом состоянии находится кнопка CE overrides Sync Control, сигнал на входе разрешения синхронизации
будет иметь более высокий приоритет по сравнению с сигналами на входах синхронного сброса/установки. Для изменения соотношения приоритетов указанных сигналов на противоположное необходимо нажать кнопку Sync Controls override CE.
Чтобы предусмотреть в выходном регистре формируемого мультиплексора режимы и соответствующие входы асинхронного сброса и/или установки, нужно воспользоваться кнопками с зависимой фиксацией, расположенными во встроенной панели Asynchronous Settings (рис. 3О). Активизация входов асинхронной установки или сброса в составе генерируемого описания мультиплексора осуществляется при переключении в нажатое состояние кнопки SET или Clear соответственно. Если в выходном регистре необходимо предусмотреть режимы и асинхронного сброса, и асинхронной установки, то следует зафиксировать в нажатом состоянии кнопку Set and Clear. При отсутствии входов асинхронного сброса и асинхронной установки (когда нажата кнопка None) можно определить начальное состояние выходного регистра при включении питания. Для этого нужно воспользоваться полем редактирования Power On Reset Value, которое становится доступным после нажатия кнопки None.
Чтобы задействовать в выходном регистре генерируемого мультиплексора режимы и соответствующие входы синхронного сброса и/или установки, следует использовать аналогичные кнопки с зависимой фиксацией, которые находятся во встроенной панели Synchronous Settings (рис. 3О). При одновременном присутствии входов синхронного сброса и синхронной установки нужно с помощью группы кнопок с зависимой фиксацией SET/Clear Priority определить приоритеты соответствующих сигналов. Для назначения более высокого приоритета сигналу на входе синхронного сброса по сравнению с сигналом на входе синхронной установки необходимо переключить в нажатое состояние кнопку Clear overrides SET. При нажатии кнопки SET overrides Clear более высокий приоритет будет иметь сигнал на входе синхронной установки.
В рассматриваемом параметризированном модуле мультиплексора Bit Multiplexer используется следующая система условных обозначений интерфейсных портов:
• MIN^] — информационные входы;
• SI^] — входы выбора;
• CLK — вход тактового сигнала;
• CE — вход сигнала разрешения синхронизации;
• ACLR — вход сигнала асинхронного сброса;
• ASET — вход сигнала асинхронной установки;
• SCLR — вход сигнала синхронного сброса;
• SSET — вход сигнала синхронной установки;
• O — комбинационный выход;
• Q — регистровый выход.
Из всех перечисленных выше идентификаторов в составе описания интерфейса сгенерированного мультиплексора и, соответственно, в его условном графическом образе будут присутствовать названия только тех входных и выходных портов, которые были указаны разработчиком в процессе определения его параметров. В качестве примера, демонстрирующего применение параметри-зированного модуля Bit Multiplexer, далее приводится VHDL-описание мультиплексора «32 в 1» с входом разрешения синхронизации, синхронным сбросом и синхронной установкой, комбинационным и регистровым выходами:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synopsys translate_off
Library XilinxCoreLib;
-- synopsys translate_on
ENTITY mux_32 IS
port (
M: IN std_logic_VECTOR(31 downto 0);
S: IN std_logic_VECTOR(4 downto 0);
O: OUT std_logic;
Q: OUT std_logic;
CLK: IN std_logic;
CE: IN std_logic;
SCLR: IN std_logic;
SSET: IN std_logic
); ); END mux_32;
ARCHITECTURE mux_32_a OF mux_32 IS
-- synopsys translate_off
component wrapped_mux_32
port (
M: IN std_logic_VECTOR(31 downto 0);
S: IN std_logic_VECTOR(4 downto 0);
O: OUT std_logic;
Q: OUT std_logic;
CLK: IN std_logic;
CE: IN std_logic;
SCLR: IN std_logic;
SSET: IN std_logic
); ); end component;
-- Configuration specification
for all : wrapped_mux_32 use entity
XilinxCoreLib.C_MUX_BIT_V7_0(behavioral)
generic map(
c_has_aset => 0,
c_sync_priority => 1,
c_has_sclr => 1,
c_height => 0,
c_enable_rlocs => 0,
c_sel_width => 5,
c_latency => 1,
c_ainit_val => «0»,
c_has_ce => 1,
c_pipe_stages => 0,
c_has_aclr => 0,
c_sync_enable => 1,
c_has_ainit => 0,
c_sinit_val => «0»,
c_has_sset => 1,
c_has_sinit => 0,
c_has_q => 1,
c_has_o => 1,
c_inputs => 32 ); );
-- synopsys translate_on
BEGIN
-- synopsys translate_off
U0 : wrapped_mux_32
port map (
M => M,
S => S,
O => O,
Q => Q,
CLK => CLK,
CE => CE,
SCLR => SCLR,
SSET => SSET
); -- synopsys translate_on
END mux_32_a;
Декларация сформированного мультиплексора тих_32 в составе УИБЬ-описания проектируемого устройства выполняется следующим образом:
component mux_32 port (
M: IN std_logic_VECTOR(31 downto 0);
S: IN std_logic_VECTOR(4 downto 0);
O: OUT std_logic;
Q: OUT std_logic;
CLK: IN std_logic;
CE: IN std_logic;
SCLR: IN std_logic;
SSET: IN std_logic );
end component;
-- FPGA Express Black Box declaration attribute fpga_dont_touch: string;
attribute fpga_dont_touch of mux_32: component is «true»;
-- Synplicity black box declaration attribute syn_black_box : boolean; attribute syn_black_box of mux_32: component is true;
Для создания экземпляров мультиплексора вида mux_32 нужно использовать следующий оператор:
<идентификатор_экземпляра_мультиплексора> : mux_32 port map (
M => M,
S => S,
O => O,
Q => Q,
CLK => CLK,
CE => CE,
SCLR => SCLR,
SSET => SSET
Формирование параллельных регистров с помощью генератора параметризированных модулей CORE Generator
Генератор параметризированных модулей CORE Generator позволяет формировать параллельные регистры с различной разрядностью, выполненные на основе триггеров с динамическим или потенциальным управлением (защелок). Для создания регистров на базе D-триггеров следует применять параметри-
зированный модуль FD-based Parallel Register. Генерация параллельных регистров, построенных на основе триггеров-защелок, осуществляется с помощью параметризированно-го модуля LD-based Parallel Latch. Данные модули входят в состав группы базовых элементов цифровых устройств Basic Elements. Каждый из этих параметризированных модулей позволяет формировать соответствующие регистры для оптимальной реализации в ПЛИС широкого спектра семейств: Spartan-II; Spartan-IIE; Spartan-3; Spartan-3E; Spartan-3A; Virtex; QPRO Virtex Rad-Hard; QPRO Virtex Hi-Rel; Virtex-E; QPRO Virtex-E Military; Virtex-II; Virtex-II PRO и Virtex-4.
Ядра параллельных регистров FD-based Parallel Register и LD-based Parallel Latch обладают следующими функциональными возможностями. Это:
• поддержка широкого диапазона разрядности генерируемых регистров (от 1 до 256);
• возможность применения по выбору разработчика синхронных и асинхронных входов сброса и/или установки, входов инициализации, а также входа разрешения синхронизации;
• выбор способа представления формируемых регистров, в том числе в виде макросов с относительным размещением RPM. «Мастер» настройки параметров указанных ядер включает в себя одну основную диалоговую панель и одну дополнительную. Вид основной диалоговой панели для параметризированных модулей FD-based Parallel Register и LD-based Parallel Latch представлен на рис. 31 и 32 соответственно.
Основная диалоговая панель позволяет определить с помощью соответствующих полей редактирования название формируемого вида регистра Component Name и его разрядность Data Width. В этой же панели в виде индикатора состояния указывается значение параметра Create RPM, который определяет форму представления создаваемого регистра для последующей реализации. Состояние
«включено» соответствует генерации создаваемого регистра в виде макроса с относительным размещением.
Дополнительная диалоговая панель «мастера» настройки параметров ядер FD-based Parallel Register и LD-based Parallel Latch предназначена для выбора режимов и соответствующих управляющих входов генерируемого регистра. Чтобы открыть эту панель, нужно воспользоваться кнопкой Register Options... или Latch Options..., расположенной на основной диалоговой панели «мастера» настройки (рис. 31, 32). Вид дополнительной панели аналогичен виду вспомогательной панели «мастера» настройки параметров ядра двоичного дешифратора, рассмотренного в первой части данной статьи (рис. 7, см. «КиТ» № 2 '2007, стр. 63). Выбор режимов и соответствующих входов сброса, установки или инициализации в создаваемом параллельном регистре осуществляется так же, как и в выходном регистре двоичного дешифратора.
В параметризированных модулях параллельных регистров FD-based Parallel Register и LD-based Parallel Latch приняты следующие условные обозначения интерфейсных портов:
• D [N:0] — информационные входы регистра;
• CLK — динамический вход тактового сигнала;
• G — статический вход тактового сигнала;
• CE — вход сигнала разрешения синхронизации;
• GE — вход разрешения тактового сигнала;
• ACLR — вход сигнала асинхронного сброса;
• ASET — вход сигнала асинхронной установки;
• SCLR — вход сигнала синхронного сброса;
• SSET — вход сигнала синхронной установки;
• AINIT — вход сигнала асинхронной инициализации;
• SINIT — вход сигнала синхронной инициализации;
• Q[N:0]— выходы регистра.
Рис. 31. Основная диалоговая панель «мастера» настройки параметров ядра параллельного регистра FD-based Parallel Register
Рис. 32. Основная диалоговая панель «мастера» настройки параметров ядра параллельного регистра LD-based Parallel Register
В качестве примера параллельного регистра, выполненного на базе D-триггеров, далее приводится описание 48-разрядного регистра fd_reg_48 с входами разрешения синхронизации, синхронного сброса и синхронной установки, который сгенерирован с помощью па-раметризированного модуля FD-based Parallel Register:
Чтобы использовать сформированный регистр fd_reg_48 в качестве компонента в составе УИБЬ-описания разрабатываемого устройства, необходимо поместить в раздел деклараций архитектурного тела следующие выражения:
end component;
-- FPGA Express Black Box declaration attribute fpga_dont_touch: string;
attribute fpga_dont_touch of fd_reg_48: component is «true»;
-- Synplicity black box declaration attribute syn_black_box : boolean;
attribute syn_black_box of fd_reg_48: component is true;
Для создания конкретного экземпляра регистра fd_reg_48 нужно использовать оператор, который имеет следующий вид:
<идентификатор_экземпляра_регистра>: fd_reg_48 port map (
D => D,
Q => Q,
CLK => CLK,
CE => CE,
SCLR => SCLR,
SSET => SSET );
Применение параметризированного модуля LD-based Parallel Latch для формирования параллельных регистров, выполненных на основе триггеров-защелок, демонстрирует представленное далее описание З6-разрядно-го регистра ld_reg_56 с входами разрешения тактового сигнала, асинхронного сброса и асинхронной установки:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synopsys translate_off
Library XilinxCoreLib;
-- synopsys translate_on
ENTITY ld_reg_56 IS
port (
D: IN std_logic_VECTOR(55 downto 0);
Q: OUT std_logic_VECTOR(55 downto 0);
G: IN std_logic;
GE: IN std_logic;
ACLR: IN std_logic;
ASET: IN std_logic
); ); END ld_reg_56;
ARCHITECTURE ld_reg_56_a OF ld_reg_56 IS
-- synopsys translate_off
component wrapped_ld_reg_56
port (
D: IN std_logic_VECTOR(55 downto 0);
Q: OUT std_logic_VECTOR(55 downto 0);
G: IN std_logic;
GE: IN std_logic;
ACLR: IN std_logic;
ASET: IN std_logic
); ); end component;
-- Configuration specification
for all : wrapped_ld_reg_56 use entity
XilinxCoreLib.C_REG_LD_V7_0(behavioral)
generic map(
c_width => 56,
c_has_sinit => 0,
c_sinit_val =>
«ОООООООООООООООООООООООООООООООООООООООООООООООООООООООО»,
c_ainit_val =>
«ОООООООООООООООООООООООООООООООООООООООООООООООООООООООО»,
c_sync_enable => О,
c_has_aset => 1,
c_enable_rlocs => 1,
c_has_aclr => 1,
c_has_sset => О,
c_sync_priority => 1,
c_has_ainit => О,
c_has_ge => 1,
c_has_sclr => О v
); -- synopsys translate_on
BEGIN
-- synopsys translate_off
U0 : wrapped_ld_reg_56
port map (
D => D,
Q => Q,
G => G,
GE => GE,
ACLR => ACLR,
ASET => ASET );
-- synopsys translate_on
END ld_reg_56_a
Для декларации компонента ld_reg_56 в составе описания проектируемого устройства необходимо поместить в соответствующий раздел архитектуры следующую конструкцию:
component ld_reg_56 port (
D: IN std_logic_VECTOR(55 downto 0);
Q: OUT std_logic_VECTOR(55 downto 0);
G: IN std_logic;
GE: IN std_logic;
ACLR: IN std_logic;
ASET: IN std_logic );
end component;
-- FPGA Express Black Box declaration
attribute fpga_dont_touch: string;
attribute fpga_dont_touch of ld_reg_56: component is «true»;
-- Synplicity black box declaration
attribute syn_black_box : boolean;
attribute syn_black_box of ld_reg_56: component is true;
Создание экземпляров регистров вида ld_reg_56 в составе архитектуры разрабатываемого устройства осуществляется с помощью следующего оператора:
<идентификатор_экземпляра_регистра>: ld_reg_56 port map (
D => D,
Q => Q,
G => G,
GE => GE,
ACLR => ACLR,
ASET => ASET );
Подготовка описаний сдвиговых регистров с помощью генератора параметризированных модулей CORE Generator
В состав средств CORE Generator включены два параметризированных модуля, предназначенных для автоматической генерации сдвиговых регистров, которые имеют различную структуру, функциональные возможности и форму реализации в ПЛИС. Эти модули относятся к группе базовых элементов цифровых устройств Basic Elements. Для формирования обычных регистров сдвига, выполняемых на базе D-триггеров, следует использовать ядро FD-based Shift Register.
Отличия данного параметризированного модуля:
• возможность формирования регистров с различным направлением сдвига данных, в том числе и двунаправленных (реверсивных);
• поддержка широкого диапазона разрядности сдвигаемых данных (от 2 до 64);
• возможность использования в формируемом регистре сдвига как последовательного, так и параллельных входов данных;
component fd_reg_48 port (
D: IN std_logic_VECTOR(47 downto О);
Q: OUT std_logic_VECTOR(47 downto О); CLK: IN std_logic;
CE: IN std_logic;
SCLR: IN std_logic;
SSET: IN std_logic );
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synopsys translate_off Library XilinxCoreLib;
-- synopsys translate_on ENTITY fd_reg_48 IS port (
D: IN std_logic_VECTOR(47 downto О);
Q: OUT std_logic_VECTOR(47 downto О);
CLK: IN std_logic;
CE: IN std_logic;
SCLR: IN std_logic;
SSET: IN std_logic );
END fd_reg_48;
ARCHITECTURE fd_reg_48_a OF fd_reg_48 IS -- synopsys translate_off component wrapped_fd_reg_48 port (
D: IN std_logic_VECTOR(47 downto О);
Q: OUT std_logic_VECTOR(47 downto О);
CLK: IN std_logic;
CE: IN std_logic;
SCLR: IN std_logic;
SSET: IN std_logic );
end component;
-- Configuration specification for all : wrapped_fd_reg_48 use entity
XilinxCoreLib.C_REG_FD_V7_0(behavioral) generic map(
c_width => 48, c_has_sinit => О, c_sinit_val =>
«ОООООООООООООООООООООООООООООООООООООООООООООООО», c_has_ce => 1, c_ainit_val =>
«ОООООООООООООООООООООООООООООООООООООООООООООООО», c_sync_enable => 1, c_has_aset => О, c_enable_rlocs => 1, c_has_aclr => О, c_has_sset => 1, c_sync_priority => 1, c_has_ainit => О, c_has_sclr => 1 );
-- synopsys translate_on BEGIN
-- synopsys translate_off Ш : wrapped_fd_reg_48 port map (
D => D,
Q => Q,
CLK => CLK,
CE => CE,
SCLR => SCLR,
SSET => SSET );
-- synopsys translate_on END fd_reg_48_a;
Рис. 33. Основная диалоговая панель «мастера» настройки параметров ядра сдвигового регистра FD-based Shift Register (страница Parameters)
• возможность формирования сдвиговых регистров не только с последовательным, но и параллельным выходом;
• инициализация начального состояния формируемого регистра сдвига при включении питания;
• возможность использования в создаваемом сдвиговом регистре синхронных и асинхронных входов сброса и/или установки, а также входа разрешения синхронизации;
• применение технологии Xilinx Smart-IP, обеспечивающей наилучшую реализацию генерируемого регистра сдвига в выбранном кристалле ПЛИС;
• возможность генерации сдвиговых регистров в виде макросов с относительным размещением RPM.
Выбор параметров формируемого регистра сдвига осуществляется с помощью соответствующего «мастера» настройки, в составе которого используются две диалоговые панели, одна из которых является основной, а другая — дополнительной. Вид страницы Parameters основной диалоговой панели представлен на рис. 33. Данная страница диалоговой панели позволяет определить название создаваемого типа сдвигового регистра, его разрядность, направление сдвига, состав информационных входов и выходов, а также способ заполнения регистра при выполнении операции сдвига.
Идентификатор формируемого типа регистра сдвига и его разрядность указываются в полях редактирования Component Name и Register Width соответственно. Для определения направления сдвига данных в создаваемом регистре следует воспользоваться группой кнопок с зависимой фиксацией Operation (рис. 33). Если необходимо сформировать регистр, выполняющий сдвиг данных в направ-
лении от младшего к старшему значащему разряду, то необходимо зафиксировать в нажатом состоянии кнопку LSB to MSB. Чтобы создать регистр, осуществляющий сдвиг записываемых данных в обратном направлении (от старшего значащего разряда к младшему), нужно переключить в нажатое состояние кнопку MSB to LSB. Для генерации двунаправленного сдвигового регистра следует установить в нажатое состояние кнопку Bidirectional. В этом случае в формируемом регистре автоматически добавляется дополнительный вход управления LSB_2_MSB, уровень сигнала на котором определяет направление сдвига данных. Наличие сигнала высокого логического уровня на этом входе соответствует сдвигу данных, выполняемому в сторону старшего значащего разряда. При поступлении на данный вход сигнала низкого логического уровня сдвиг данных будет осуществляться в противоположном направлении (в сторону младшего значащего разряда).
Выбор информационных входов в генерируемом регистре сдвига осуществляется с помощью двух индикаторов состояния, расположенных во встроенной панели Input Options (рис. 33). Чтобы задействовать в создаваемом сдвиговом регистре последовательный вход данных, нужно установить в состояние «включено» индикатор Serial Data Input. Для использования в формируемом регистре входов параллельной загрузки данных необходимо переключить в состояние «включено» индикатор Parallel Data Input. При этом кроме шины параллельной загрузки данных, разрядность которой совпадает с разрядностью генерируемого регистра, добавляется вход управления параллельной загрузкой. Высокий логический уровень сигнала на этом входе разрешает запись в регистр информа-
ции, представленной на входах параллельной загрузки данных. После установки активного уровня сигнала на входе разрешения параллельной записи соответствующая информация заносится в регистр по следующему фронту сигнала синхронизации.
Тип выходов, формируемых в создаваемом сдвиговом регистре, выбирается с помощью двух индикаторов состояния, представленных во встроенной панели Output Options (рис. 33). Для генерации регистра сдвига с последовательным выходом следует установить в состояние «включено» индикатор Serial Data Output. При необходимости использования параллельных выходов в генерируемом регистре нужно перевести в активное состояние индикатор Parallel Data Output.
Чтобы задействовать в формируемом регистре сдвига режимы и соответствующие входы синхронного и асинхронного сброса и/или установки, а также вход разрешения сигнала синхронизации, следует воспользоваться дополнительной диалоговой панелью «мастера» настройки рассматриваемого ядра. Эта панель открывается при нажатии кнопки Register Options..., которая также находится во встроенной панели Output Options. Структура дополнительной панели «мастера» настройки параметров ядра сдвигового регистра FD-based Shift Register аналогична структуре вспомогательной панели «мастера» настройки параметров ядра двоичного дешифратора (рис. 7). Выбор требуемых режимов и соответствующих входов управления в создаваемом сдвиговом регистре производится таким же образом, как и в выходном регистре двоичного дешифратора.
Группа кнопок с зависимой фиксацией Fill Data, расположенных в одноименной встроенной панели (рис. 33), предназначена для выбора источника данных, записываемых в освобождающийся при сдвиге разряд регистра. Число и состав доступных кнопок в этой группе зависит от наличия или отсутствия в формируемом сдвиговом регистре последовательного входа данных и выбранного направления сдвига. Если последовательный вход данных не задействован, то кнопки Fill with Zeros, Fill with Ones, Wrap from LSB и Wrap from MSB находятся в доступном состоянии. При этом если в нажатом состоянии зафиксирована кнопка Fill with Zeros, то в освобождающийся разряд регистра при выполнении сдвига данных записывается нулевое значение. Когда в нажатое состояние переключается кнопка Fill with Ones, в этот разряд регистра будет загружаться единичное значение. При установке в нажатое состояние кнопки Wrap from LSB освобождающийся разряд регистра будет заполняться значением, поступающим с выхода младшего значащего разряда этого регистра. При фиксации в нажатом состоянии кнопки Wrap from MSB в освобождающийся разряд регистра будет записываться значение, поступающее с выхода старшего значащего разряда. Кнопка Wrap
Dynamic доступна только при отсутствии последовательного входа данных в генерируемом двунаправленном сдвиговом регистре. При переключении данной кнопки в нажатое состояние источник данных, записываемых в освобождающийся при сдвиге разряд, определяется уровнем сигнала на входе установки направления сдвига. Если сигнал на этом входе управления соответствует высокому логическому уровню, то в освобождающийся разряд регистра сдвига записывается значение младшего значащего разряда. Если на входе установки направления сдвига — низкий логический уровень сигнала, то в освобождающийся при сдвиге разряд заносится значение старшего значащего разряда этого регистра. При использовании в составе создаваемого регистра последовательного входа данных доступной является только кнопка Fill from Pin, которая автоматически устанавливается во включенное состояние. Тогда разряд регистра, освобождающийся при сдвиге данных, будет заполняться значением, которое поступает на последовательный вход.
Выбор формы представления создаваемого сдвигового регистра для последующей реализации осуществляется с помощью индикатора состояния Create RPM, расположенного во встроенной панели Layout (рис. 33), тем же способом, что и в рассмотренных ранее параметризированных модулях.
В VHDL-описаниях сдвиговых регистров, подготовленных с помощью параметризиро-ванного модуля FD-based Shift Register, применяется следующая система условных обозначений интерфейсных портов:
• SDIN — последовательный вход данных;
• D [N:0] — входы параллельной загрузки данных;
• CLK — вход тактового сигнала;
• CE — вход сигнала разрешения синхронизации;
• P_LOAD — вход разрешения параллельной загрузки данных;
• LSB_2_MSB — вход установки направления сдвига данных в регистре;
• ACLR — вход сигнала асинхронного сброса;
• ASET — вход сигнала асинхронной установки;
• SCLR — вход сигнала синхронного сброса;
• SSET — вход сигнала синхронной установки;
• AINIT — вход сигнала асинхронной инициализации;
• SINIT — вход сигнала синхронной инициализации;
• SDOUT — последовательный выход регистра;
• Q[N:0] — параллельные выходы регистра. Примером сдвигового устройства, сформированного с помощью параметризирован-ного модуля FD-based Shift Register, является 32-разрядный реверсивный регистр сдвига fd_sh_reg32. В составе данного сдвигового регистра используются последовательные и параллельные входы и выходы данных, входы
разрешения сигнала синхронизации, синхронного сброса, синхронной установки и асинхронной инициализации содержимого. При включении напряжения питания в данный регистр автоматически записывается значение F0F0F0F0. Сгенерированное VHDL-описание регистра fd_sh_reg32 выглядит следующим образом:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synopsys translate_off Library XilinxCoreLib;
-- synopsys translate_on ENTITY fd_sh_reg32 IS port (
CLK: IN std_logic;
SDIN: IN std_logic;
SDOUT: OUT std_logic;
P_LOAD: IN std_logic;
D: IN std_logic_VECTOR(31 downto 0);
Q: OUT std_logic_VECTOR(31 downto 0);
LSB_2_MSB: IN std_logic;
CE: IN std_logic;
SCLR: IN std_logic;
SSET: IN std_logic;
AINIT: IN std_logic );
END fd_sh_reg32;
ARCHITECTURE fd_sh_reg32_a OF fd_sh_reg32 IS -- synopsys translate_off component wrapped_fd_sh_reg32 port (
CLK: IN std_logic;
SDIN: IN std_logic;
SDOUT: OUT std_logic;
P_LOAD: IN std_logic;
D: IN std_logic_VECTOR(31 downto 0);
Q: OUT std_logic_VECTOR(31 downto 0);
LSB_2_MSB: IN std_logic;
CE: IN std_logic;
SCLR: IN std_logic;
SSET: IN std_logic;
AINIT: IN std_logic );
end component;
-- Configuration specification
for all : wrapped_fd_sh_reg32 use entity
XilinxCoreLib.C_SHIFT_FD_V7_0(behavioral) generic map(
c_has_aset => 0, c_has_d => 1, c_sync_priority => 1, c_has_sclr => 1, c_fill_data => 5, c_width => 32, c_enable_rlocs => 1, c_ainit_val => «11110000111100001111000011110000», c_has_ce => 1, c_has_aclr => 0, c_sync_enable => 0, c_has_ainit => 1, c_sinit_val => «00000000000000000000000000000000», c_has_sdout => 1, c_has_sset => 1, c_has_sinit => 0, c_has_q => 1, c_shift_type => 2, c_has_sdin => 1, c_has_lsb_2_msb => 1 );
-- synopsys translate_on BEGIN
-- synopsys translate_off U0 : wrapped_fd_sh_reg32 port map (
CLK => CLK,
SDIN => SDIN,
SDOUT => SDOUT,
P_LOAD => P_LOAD,
D => D,
Q => Q,
LSB_2_MSB => LSB_2_MSB,
CE => CE,
SCLR => SCLR,
SSET => SSET,
AINIT => AINIT );
-- synopsys translate_on END fd_sh_reg32_a;
При использовании сформированного регистра сдвига fd_sh_reg32 в качестве компонента необходимо для его декларации поместить в соответствующий раздел VHDL-описания проектируемого устройства следующую последовательность выражений:
component fd_sh_reg32 port (
CLK: IN std_logic;
SDIN: IN std_logic;
SDOUT: OUT std_logic;
P_LOAD: IN std_logic;
D: IN std_logic_VECTOR(31 downto 0);
Q: OUT std_logk_VECTOR(31 downto 0);
LSB_2_MSB: IN std_logic;
CE: IN std_logic;
SCLR: IN std_logic;
SSET: IN std_logic;
AINIT: IN std_logic
);
end component;
-- FPGA Express Black Box declaration
attribute fpga_dont_touch: string;
attribute fpga_dont_touch of fd_sh_reg32: component is «true»;
-- Synplicity black box declaration
attribute syn_black_box : boolean;
attribute syn_black_box of fd_sh_reg32: component is true;
Для описания конкретных экземпляров компонента fd_sh_reg32 в составе архитектуры разрабатываемого устройства следует воспользоваться приведенным далее оператором, в котором нужно изменить названия цепей (сигналов), подключаемых ко входам и выходам сдвигового регистра:
<идентификатор_экземпляра_сдвигового_регистра>: fd_sh_reg32 port map (
CLK => CLK,
SDIN => SDIN,
SDOUT => SDOUT,
P_LOAD => P_LOAD,
D => D,
Q => Q,
LSB_2_MSB => LSB_2_MSB,
CE => CE,
SCLR => SCLR,
SSET => SSET,
AINIT => AINIT );
Параметризированный модуль RAM-based Shift Register предназначен для генерации сдвиговых регистров, реализуемых на базе таблиц преобразования LUT конфигурируемых логических блоков CLB кристаллов семейств FPGA. При этом используемые таблицы преобразования конфигурируются в форме распределенного ОЗУ, построенного на основе регистров сдвига SRL16 или SRL32 (в зависимости от применяемого семейства ПЛИС). В отличие от рассмотренного ранее ядра сдвигового регистра FD-based Shift Register, пара-метризированный модуль RAM-based Shift Register позволяет создавать устройства, выполняющие операцию сдвига (задержки на определенное количество тактов) одновременно для нескольких последовательных потоков данных. Иными словами, создаваемые устройства осуществляют операции сдвига (задержки) многоразрядных данных, представленных в параллельном двоичном коде. Поэтому последовательные входы и выходы данных в таком устройстве представляют собой шины,
Рис. 34. Стартовая диалоговая панель «мастера» настройки параметров ядра сдвигового регистра RAM-based Shift Register, реализуемого на основе распределенной памяти ПЛИС
Рис. 35. Вторая диалоговая панель «мастера» настройки параметров ядра сдвигового регистра RAM-based Shift Register, реализуемого на основе распределенной памяти ПЛИС
количество разрядов в которых определяется разрядностью ячеек распределенной памяти, используемой для реализации регистров. При этом необходимо различать понятия разрядности (длины) сдвигового регистра, которая определяет величину задержки появления информации на выходах, и разрядности входных и выходных данных. По сути, регистры сдвига, генерируемые с помощью ядра RAM-based Shift Register, представляют собой запоминающие устройства, работающие по принципу «первый вошел — первый вышел» (FIFO — first-in, first-out).
Параметризированный модуль RAM-based Shift Register формирует высокоскоростные устройства сдвига данных, которые оптимальным образом реализуются в ПЛИС следующих семейств: Spartan-II, Spartan-IIE, Spartan-3, Automotive Spartan3, Spartan3E, Automotive Spartan3E, Spartan-3A, Virtex, QPro Virtex Rad-Hard, QPro Virtex Hi-Rel, Virtex-E, QPro VirtexE Military, Virtex-II, Virtex-II PRO, Virtex-4 и Virtex-5. Данное ядро обладает следующими отличиями. Это:
• возможность формирования регистров сдвига с фиксированной или переменной длиной (задержкой поступающих данных);
• поддержка широкого диапазона разрядности входной шины данных (от 1 до 256);
• поддержка расширенного диапазона разрядности (длины) генерируемых регистров сдвига (от 1 до 1024 для регистров с переменной задержкой поступающих данных, от 1 до 1088 — для регистров с фиксированной задержкой);
• возможность создания сдвиговых регистров с входом разрешения синхронизации;
• инициализация начального состояния формируемых сдвиговых регистров при включении питания;
• возможность применения в составе генерируемого сдвигового устройства выходного регистра, реализуемого на основе D-триггеров;
• возможность использования в выходном регистре синхронных и асинхронных входов сброса и/или установки;
• возможность выбора одного из двух критериев оптимизации генерируемых сдвиговых регистров: достижение максимального быстродействия или минимизация объема используемых ресурсов.
«Мастер» настройки параметров ядра RAM-
based Shift Register включает в себя три диалоговые панели. Стартовая диалоговая панель, вид которой приведен на рис. 34, предназначена для выбора типа создаваемого сдвигового регистра, его разрядности, разрядности поступающих данных, критерия оптимизации и параметров тактирования.
Выбор типа создаваемого регистра сдвига производится с помощью группы кнопок с зависимой фиксацией Register Type. Для генерации сдвигового регистра с фиксированной разрядностью (длиной) нужно установить в нажатое состояние кнопку Fixed Length. Чтобы сформировать регистр сдвига, в котором количество последовательно сдвигаемых разрядов (количество тактов задержки) может изменяться в процессе функционирования, следует переключить в нажатое состояние кнопку Variable-Length Lossless или Variable-Length Lossy. В этом случае в состав создаваемого сдвигового устройства добавляется входная адресная шина, количество разрядов которой соответствует максимальному значению задержки появления данных на выходах регистра (максимальной длине регистров). Совокупность значений сигналов, представленных на адресных входах, определяет длительность задержки (выраженной в количестве тактов) слова данных, поступающих на информационные входы сдвигового регистра. При нажатой кнопке Variable-Length Lossless на выходах формируемого регистра сдвига будет всегда представлена достоверная информация, в том числе и при изменении данных на адресных входах. Если в нажатом состоянии находится кнопка
Variable-Length Lossy, то достоверность выходных данных при изменении сигналов на адресных входах не гарантируется.
Критерий оптимизации формируемого сдвигового устройства выбирается с помощью группы кнопок с зависимой фиксацией Optimization (рис. 34). При нажатой кнопке Resources генерируется описание сдвигового регистра с учетом минимизации используемых ресурсов ПЛИС. Чтобы сформировать регистр сдвига с максимальным быстродействием, нужно переключить в нажатое состояние кнопку Speed.
Для включения в состав сдвигового устройства выходного регистра, реализуемого на основе D-триггеров, следует установить в состояние «включено» индикатор Register Last Bit, расположенный во встроенной панели Clocking Options (рис. 34). При создании регистров сдвига с фиксированной разрядностью (задержкой), то есть при нажатой кнопке Fixed Length, данный индикатор автоматически переводится в активное состояние. Чтобы задействовать в формируемом регистре сдвига вход разрешения сигнала синхронизации, следует переключить в состояние «включено» индикатор CE, также находящийся во встроенной панели Clocking Options.
Разрядность создаваемого регистра сдвига и записываемых данных определяется с помощью полей редактирования, которые расположены во встроенной панели Dimensions (рис. 34). Значение разрядности входной и, соответственно, выходной шины данных указывается в поле редактирования Width. Разрядность (длина) генерируемого сдвигового регистра задается в поле редактирования Depth. Допустимые диапазоны значений данных параметров показываются справа от соответствующих полей редактирования и автоматически корректируются при изменении типа создаваемых регистров сдвига.
Информация о вносимой дополнительной задержке выходных данных автоматически
Рис. 36. Заключительная диалоговая панель «мастера» настройки параметров ядра
сдвигового регистра RAM-based Shift Register, реализуемого на основе распределенной памяти ПЛИС
отображается во встроенной панели Latency Information. Значение задержки выражается в количестве периодов тактового сигнала.
Вторая диалоговая панель «мастера» настройки параметров ядра сдвигового устройства RAM-based Shift Register, реализуемого на основе распределенной памяти ПЛИС, позволяет определить начальное состояние генерируемого регистра сдвига при включении напряжения питания. Вид этой диалоговой панели изображен на рис. 35.
Данная диалоговая панель предоставляет разработчику два способа определения данных, которые будут автоматически загружены в сформированные регистры после завершения конфигурирования ПЛИС. С помощью поля редактирования Default Data, расположенного во встроенной панели Initialization Options (рис. 35), можно указать значение, которое записывается по умолчанию во все ячейки формируемого сдвигового устройства. Указываемое значение может быть представлено в двоичной или шестнадцатеричной форме. Формат представления данных (основание системы счисления), записываемых по умолчанию в ячейки создаваемого устройства сдвига, задается с помощью поля выбора Radix, которое также находится во встроенной панели Initialization Options. Выпадающий список значений этого параметра включает в себя два возможных варианта— 2 и 16, которые соответствуют указанным ранее форматам представления данных. Количество двоичных или шестнадцатеричных символов, указываемых в поле редактирования Default Data, должно соответствовать разрядности входной шины данных генерируемого устройства сдвига.
Кроме того, информацию, которая должна быть записана в устройство сдвига при его инициализации, может быть представлена в виде файла формата COE. Для этого нужно, прежде всего, установить в состояние «включено» индикатор Use COE File, который находится во встроенной панели COE File (рис. 35). После этого станет доступным поле редактирования Initialization File, которое расположено в этой же встроенной панели. Идентификатор требуемого файла COE, описывающего содержимое создаваемого сдвигового устройства, может быть непосредственно указан в этом поле редактирования с помощью клавиатуры или найден в стандартной панели диалога открытия файла, которая открывается при нажатии кнопки Browse, расположенной справа от поля редактирования Initialization File. Для быстрого просмотра содержимого выбранного файла предназначена кнопка Show, расположенная несколько правее кнопки Browse. Если указанный файл инициализации не полностью описывает содержимое генерируемого устройства сдвига, то все оставшиеся неинициализированными ячейки заполняются по умолчанию значением, заданным в поле редактирования Default Data.
Заключительная диалоговая панель «мастера» настройки параметров ядра сдвигово-
го регистра RAM-based Shift Register, реализуемого на основе распределенной памяти ПЛИС, используется в том случае, если в состав создаваемого устройства сдвига включен выходной регистр. Вид этой диалоговой панели представлен на рис. 36.
Чтобы задействовать в выходном регистре режимы и входы асинхронного сброса, асинхронной установки и инициализации, следует перевести в состояние «включено» соответственно индикаторы Clear, SET и Init, расположенные во встроенной панели Asynchronous Settings. Значение данных, записываемое в выходной регистр устройства сдвига при асинхронной инициализации, указывается в поле редактирования Asynchronous Init Value. При этом формат представления данных (основание системы счисления), указываемых в данном поле редактирования, задается с помощью поля выбора Radix, которое находится в этой же встроенной панели.
Для применения в выходном регистре режимов и входов синхронного сброса, синхронной установки и инициализации нужно воспользоваться аналогичными индикаторами состояния и полем редактирования Synchronous Init Value, которые расположены во встроенной панели Synchronous Settings (рис. 36). При одновременном использовании входов синхронного сброса и синхронной установки нужно с помощью группы кнопок с зависимой фиксацией SET/Clear Priority определить приоритеты соответствующих сигналов. Чтобы сигнал на входе синхронного сброса имел более высокий приоритет по сравнению с сигналом на входе синхронной установки, следует зафиксировать в нажатом состоянии кнопку Clear overrides SET. Для назначения обратного соотношения приоритетов указанных сигналов нужно переключить в нажатое состояние кнопку SET overrides Clear.
При одновременном применении входов разрешения сигнала синхронизации и синхронного сброса/установки в выходном регистре необходимо указать соотношение приоритетов сигналов на этих входах. Для этой цели предназначены две кнопки с зависимой фиксацией — CE Overrides Sync Controls и Sync Controls Overrides CE, которые находятся во встроенной панели CE/Sync Priority (рис. 36). При нажатой кнопке CE overrides Sync Control сигнал на входе разрешения синхронизации будет иметь более высокий приоритет по сравнению с сигналом на входе синхронного сброса или установки. Присвоение противоположного соотношения приоритетов данных сигналов осуществляется фиксацией в нажатом состоянии кнопки Sync Control overrides CE.
В описаниях сдвиговых устройств, создаваемых с помощью параметризированного модуля RAM-based Shift Register, применяется следующая система условных обозначений входных и выходных портов:
• d[N:0] — входная шина данных;
• a[M:0] — адресная шина;
• clk — вход тактового сигнала;
• ce — вход сигнала разрешения синхронизации;
• aclr — вход сигнала асинхронного сброса;
• asset — вход сигнала асинхронной установки;
• sclr — вход сигнала синхронного сброса;
• sset — вход сигнала синхронной установки;
• ainit — вход сигнала асинхронной инициализации;
• sinit — вход сигнала синхронной инициализации;
• q [N:0] — выходная шина данных регистра. Примером сдвигового регистра, сформированного на основе ядра RAM-based Shift Register, является 64-разрядное устройство сдвига 32-разрядных данных с изменяемой величиной задержки (сдвигаемых разрядов),
VHDL-описание которого выглядит следующим образом:
c_generate_mif => 0, c_ainit_val => «00000000000000000000000000000000», c_has_ce => 1, c_family => «spartan3», c_has_aclr => 0, c_mem_init_radix => 1, c_sync_enable => 1, c_depth => 64, c_has_ainit => 1, c_sinit_val => «00000000000000000000000000000000», c_has_sset => 1, c_has_sinit => 0,
c_mem_init_file => «no_coe_file_loaded», c_shift_type => 1, c_default_data => «00000000000000000000000000000000», c_reg_last_bit => 1, c_addr_width => 6 );
-- synopsys translate_on BEGIN
-- synopsys translate_off U0 : wrapped_shift_ram_v9_0 port map (
a => a, d => d, clk => clk, ce => ce, ainit => ainit, sclr => sclr, sset => sset, q => q );
-- synopsys translate_on END shift_ram_v9_0_a;
В составе сгенерированного сдвигового устройства используется вход разрешения сигнала синхронизации, а также выходной регистр с входами синхронного сброса и синхронной установки, а также входом асинхронной инициализации. Для декларации данного регистра сдвига в VHDL-описании
разрабатываемого устройства нужно использовать следующую конструкцию:
component shift_ram_v9_0 port (
a: IN std_logic_VECTOR(5 downto 0);
d: IN std_logic_VECTOR(31 downto 0);
clk: IN std_logic;
ce: IN std_logic;
ainit: IN std_logic;
sclr: IN std_logic;
sset: IN std_logic;
q: OUT std_logic_VECTOR(31 downto 0)
);
end component;
-- FPGA Express Black Box declaration
attribute fpga_dont_touch: string;
attribute fpga_dont_touch of shift_ram_v9_0: component is «true»;
-- Synplicity black box declaration
attribute syn_black_box : boolean;
attribute syn_black_box of shift_ram_v9_0: component is true;
Конкретные экземпляры сгенерированного сдвигового регистра, используемые в составе проектируемого устройства, описываются с помощью оператора, который имеет следующий вид:
<идентификатор_экземпляра_сдвигового_регистра>:
shift_ram_v9_0 port map (
a => a, d => d, clk => clk, ce => ce, ainit => ainit, sclr => sclr, sset => sset, q => q );
Продолжение следует
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synopsys translate_off Library XilinxCoreLib;
-- synopsys translate_on ENTITY shift_ram_v9_0 IS port (
a: IN std_logic_VECTOR(5 downto 0);
d: IN std_logic_VECTOR(31 downto 0);
clk: IN std_logic;
ce: IN std_logic;
ainit: IN std_logic;
sclr: IN std_logic;
sset: IN std_logic;
q: OUT std_logic_VECTOR(31 downto 0)
);
END shift_ram_v9_0;
ARCHITECTURE shift_ram_v9_0_a OF shift_ram_v9_0 IS -- synopsys translate_off component wrapped_shift_ram_v9_0 port (
a: IN std_logic_VECTOR(5 downto 0);
d: IN std_logic_VECTOR(31 downto 0);
clk: IN std_logic;
ce: IN std_logic;
ainit: IN std_logic;
sclr: IN std_logic;
sset: IN std_logic;
q: OUT std_logic_VECTOR(31 downto 0)
);
end component;
-- Configuration specification
for all : wrapped_shift_ram_v9_0 use entity
XilinxCoreLib.c_shift_ram_v9_0(behavioral) generic map(
c_has_aset => 0, c_read_mif => 0, c_has_a => 1, c_sync_priority => 1, c_opt_goal => 1, c_has_sclr => 1, c_width => 32, c_enable_rlocs => 0, c_default_data_radix => 1,