Разработка базовых компонентов цифровых устройств, реализуемых на базе ПЛИС FPGA фирмы Xilinx®, с помощью генератора параметризированных модулей CORE Generator
Продолжение. Начало в № 2'2007
Валерий ЗОТОВ
Формирование описаний элементов, предназначенных для выполнения операций поворота вектора на заданный угол и преобразования координат вектора методами CORDIC, средствами генератора параметризированных модулей CORE Generator
Поворот вектора на заданный угол — это основная операция, применяемая в элементах, создаваемых на основе параметризиро-ванного модуля CORDIC. Результатом поворота вектора с координатами (X, Y) на некоторый угол 6 является вектор, координаты которого (X', Y') в общем случае определяются следующей совокупностью выражений:
X' = (cos(6)xX- sin(6)xY), (17)
Y' = (cos(6)xY + sin(6)xX). (1B)
На рис. 117 приведена векторная диаграмма, демонстрирующая выполнение операции поворота вектора на заданный угол.
При использовании методов CORDIC поворот вектора на угол 6 выполняется в виде последовательности микроповоротов, которая включает в себя N итераций. На каждой
из этих итераций осуществляется поворот вектора на угол і, значение которого определяется по формуле:
0і= аГап(2-і), (19)
где і — порядковый номер итерации. Количество итераций N на которое разбивается процесс поворота вектора на заданный угол, выбирается в соответствии с требуемой точностью представления вычисляемых координат результирующего вектора.
При итерационной реализации процесса поворота вектора приведенные выражения, определяющие значения координат результирующего вектора, преобразуются к следующему виду:
N
X' = Псо8 (аГап(2-і))(Хі- аіхУіх2-і), (20) і=1
N
У' = Псо8 (аГап(2-і))(Уі + аіхХіх2-і), (21) і=1
N
0' = Х0 - (аіхаГап(2-і)), (22)
і=1
где X; иУ; — координаты вектора на і-й итерации, аі — коэффициент, определяющий знак (аі = (+ или -)1).
Каждая итерация в процессе поворота вектора может быть осуществлена с помощью операций сдвига и сложения/вычитания. Для вычисления координат вектора, получаемого в результате выполнения очередной итерации, можно воспользоваться следующими формулами:
Хі+! = Хі- ^ху^Л (23)
Уі+1 = Уі + аіххіх2-\ (24)
0і+і = бі + аіхаГап(2-і). (25)
Значения коэффициента, определяющего знак, при выполнении операции поворота вектора методами СОКВЇС выбираются таким образом, чтобы значение 0' сходилось к нулю. Иначе говоря, если 0і-1 > 0, то аі = -1, а если 0і-1 < 0, то аі = +1.
Когда операция поворота вектора на заданный угол осуществляется в соответствии с методами СОКВЇС, выражения, определяющие значения координат результирующего вектора, приобретают следующий вид:
X' = Ъх(ео8(0)хХ- 8іп(0)хУ), (26)
У' = Ъх(ео8(0)хУ + Біп(0)хХ), (27)
где Ъ — коэффициент масштабирования СОКВЇС. Значение этого коэффициента зависит только от выбранного количества итераций и вычисляется по формуле:
N
Ъ = 1/(Паео8(аГап(2-і))). (28)
і=1
Элементы, выполняющие операцию поворота вектора на заданный угол, можно применять также для преобразования полярных координат вектора в ортогональные. При этом в качестве исходного используется
Z.(X\rf\ — Output Vector (Х’,Г) ,Y (X,Y) Input Vector
* X
Рис. 117. Векторная диаграмма, иллюстрирующая выполнение операции поворота вектора на заданный угол
Output Vector 1 \ (X',Y’)j \ ’">4N (Х,0) Input Vector ; v .
X’ , X Г
Рис. 118. Векторная диаграмма, иллюстрирующая преобразование полярных координат вектора в ортогональные с помощью операций поворота вектора на заданный угол
Input Vector^ (X,Y) \ ,Y . _ Output Phase /\ 0’/ \ Z-(Mag,0)
г (Mag,0) Output Mag
Рис. 119. Векторная диаграмма, поясняющая выполнение преобразования ортогональных координат вектора в полярные с помощью операций поворота вектора на некоторый угол
вектор с координатами (Mag, 0), где Mag представляет значение длины (модуля) вектора. Для преобразования полярных координат в ортогональные необходимо выполнить операцию поворота этого вектора на угол, равный значению фазы (угла) 6. Результатом преобразования являются ортогональные координаты вектора (X', Y'), который получается в итоге выполнения операции поворота. На рис. 11B представлена векторная диаграмма, которая в наглядной форме демонстрирует применение операции поворота вектора на заданный угол для преобразования полярных координат вектора в ортогональные.
Процесс преобразования ортогональных координат вектора (X, Y) в полярные можно представить как поворот исходного вектора на некоторый угол 6', при котором координата Y' результирующего вектора приобретает нулевое значение. Векторная диаграмма, показанная на рис. 119, поясняет осуществление преобразования ортогональных координат вектора в полярные с помощью операций поворота вектора на некоторый угол.
При этом значение координаты X' результирующего вектора соответствует длине (модулю) исходного вектора, умноженному на коэффициент масштабирования CORDIC, и определяется выражением (29):
X' = ZxV—X—Y2). (29)
Угол поворота 6', на который нужно повернуть вектор для достижения нулевого значения координаты Y', представляет собой значение фазы исходного вектора и вычисляется по следующей формуле:
6' = atan(X/Y). (30)
Значения коэффициента, определяющего знак в выражениях (23)-(25), при выполнении операции преобразования ортогональных координат вектора в полярные методами CORDIC выбирают таким образом, чтобы значение координаты Y' сходилось к нулю. Таким образом, если ун > 0, то ai = -1, а если У;_1 < 0, то ai = +1.
В процессе вычисления коэффициента масштабирования CORDIC для определения значения выражения acos(atan(2-i)) можно вос-
пользоваться результатом разложения этой функции в ряд Тейлора:
acos(atan(2-i)) « (1+2_2;)_ш. (31)
При этом выражение, определяющее значение коэффициента масштабирования CORDIC, преобразуется к следующему виду:
N
Z = П(1+2_Т2. (32)
i=1
Для формирования описания элемента, выполняющего операцию поворота вектора на заданный угол, необходимо в стартовой диалоговой панели «мастера» настройки параметров ядра CORDIC версии v3.0 во встроенной панели Functional Selection нажать кнопку Rotate. Чтобы сгенерировать описание элемента, предназначенного для преобразования ортогональных координат вектора в полярные, нужно зафиксировать в нажатом положении кнопку Translate. Далее, поочередно переходя к следующим диалоговым панелям «мастера» настройки, нужно выполнить практически ту же последо-
вательность действий, что и при создании элементов, осуществляющих операции вычисления значений тригонометрических и гиперболических функций методами CORDIC, которая была рассмотрена в предыдущей части данной статьи (КиТ № 2 ‘2008). Основное отличие проявляется при выборе значений дополнительных параметров формируемого элемента, которые определяются в заключительной диалоговой панели «мастера» настройки параметров ядра CORDIC версии v3.0. Вид страницы Parameters этой диалоговой панели при подготовке описаний элементов, выполняющих операции поворота вектора и преобразования значений ортогональных координат вектора в полярные, изображен на рис. 120.
Кроме возможности явного указания требуемого количества итераций, включающих в себя совокупность операций сдвига и сложения/вычитания, в поле редактирования Iterations и точности представления промежуточных результатов вычислений в поле редактирования Precision, данная панель позволяет добавить в состав архитектуры создаваемого элемента блок компенсации масшта-
Рис. 120. Вид страницы Parameters заключительной диалоговой панели «мастера» настройки параметров ядра CORDIC версии v3.0 при подготовке описания элементов, выполняющих операции поворота вектора и преобразования значений ортогональных координат вектора в полярные
бирующего коэффициента CORDIC. При использовании этого блока в формируемом элементе значения координат результирующего вектора (X', Y'), полученного при выполнении операции поворота исходного вектора на заданный угол методами CORDIC, дополнительно умножаются на коэффициент, равный 1/Z. В случае применения блока компенсации масштабирующего коэффициента CORDIC разработчик может выбрать также способ реализации этого блока. Для этой цели предназначена группа кнопок с зависимой фиксацией, которая представлена во встроенной панели Compensation Scaling (рис. 120).
Параметризированный модуль CORDIC версии v3.0 позволяет формировать описания элементов, предназначенных для выполнения операций поворота вектора на заданный угол или преобразования ортогональных координат вектора в полярные, в которых блок компенсации масштабирующего коэффициента CORDIC может быть выполнен на основе ресурсов таблиц преобразования LUT или аппаратных умножителей Multiplier Blocks. Чтобы включить в состав создаваемого элемента блок компенсации, выполняемый в виде умножителя на константу (Constant Coefficient Multiplier), реализуемого на базе ресурсов таблиц преобразования LUT, следует переключить в нажатое состояние кнопку CCM Scale Compensation. Для генерации описания элемента с блоком компенсации, реализуемым на основе аппаратных умножителей ПЛИС Multiplier Blocks, нужно установить в нажатое положение кнопку Block Multiplier. Создание описания элементов, не содержащих блока компенсации масштабирующего коэффициента CORDIC, осуществляется при нажатой кнопке No Scale Compensation.
В описаниях элементов, предназначенных для выполнения операций поворота вектора на заданный угол и преобразования значений координат вектора из ортогональной системы в полярную или наоборот, используется следующая система условных обозначений входных и выходных портов:
• phase_in[N:0] — входная шина данных с разрядностью N+1, на которую подается двоичный код значения угла поворота вектора;
• x_in[N:0] — входная шина данных с разрядностью N+1, на которую поступает двоичный код значения координаты X исходного вектора;
• y_in[N:0] — входная шина данных с разрядностью N+1, на которую подается двоичный код значения координаты Y исходного вектора;
• x_out[M:0] — выходная шина данных с разрядностью M+1, на которой отображаются результаты вычисления значения координаты X' результирующего вектора;
• y_out[M:0] — выходная шина данных с разрядностью M+1, на которой отобра-
жаются результаты вычисления значения координаты Y' результирующего вектора;
• phase_out[M:0] — выходная шина данных с разрядностью M+1, на которой отображаются результаты вычисления значения фазы (угла) результирующего вектора. Входные порты clk, ce, aclr, sclr, nd и выходные порты rfd и rdy имеют то же назначение, что и в элементах, формируемых для вычисления тригонометрических и гиперболических функций, которые были рассмотрены в предыдущей части статьи.
Пример описания элемента, предназначенного для выполнения операций поворота вектора на заданный угол, сформированного средствами генератора параметризированных модулей CORE Generator
Примером устройства, сформированного на основе параметризированного модуля CORDIC версии v3.0 для выполнения операций поворота вектора на заданный угол, является элемент rotate_vector_cordic, текст описания которого приведен далее в этом разделе. Значения координат входного (исходного) вектора и выходного вектора, являющегося результатом выполнения операции поворота, а также значения угла поворота в этом элементе представлены в виде 18-разрядного двоичного кода. Вычисление координат результирующего вектора в элементе rotate_vector_ cordic осуществляется с применением блока компенсации масштабирующего коэффициента CORDIC, который реализуется на основе аппаратных умножителей Multiplier Blocks ПЛИС:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synthesis translate_off Library XilinxCoreLib;
-- synthesis translate_on ENTITY rotate_vector_cordic IS port (
x_in: IN std_logic_VECTOR(17 downto 0); y_in: IN std_logic_VECTOR(17 downto 0); phase_in: IN std_logic_VECTOR(17 downto 0); nd: IN std_logic;
x_out: OUT std_logic_VECTOR(17 downto 0); y_out: OUT std_logic_VECTOR(17 downto 0); phase_out: OUT std_logic_VECTOR(17 downto 0); rdy: OUT std_logic; rfd: OUT std_logic; clk: IN std_logic; ce: IN std_logic; aclr: IN std_logic; sclr: IN std_logic );
END rotate_vector_cordic;
ARCHITECTURE rotate_vector_cordic_a OF rotate_vector_cordic IS -- synthesis translate_off component wrapped_rotate_vector_cordic port (
x_in: IN std_logic_VECTOR(17 downto 0); y_in: IN std_logic_VECTOR(17 downto 0); phase_in: IN std_logic_VECTOR(17 downto 0); nd: IN std_logic;
x_out: OUT std_logic_VECTOR(17 downto 0); y_out: OUT std_logic_VECTOR(17 downto 0); phase_out: OUT std_logic_VECTOR(17 downto 0); rdy: OUT std_logic; rfd: OUT std_logic; clk: IN std_logic;
ce: IN std_logic; aclr: IN std_logic; sclr: IN std_logic
);
end component;
-- Configuration specification
for all : wrapped_rotate_vector_cordic use entity
XilinxCoreLib.cordic_v3_0(behavioral) generic map(
c_has_clk => 1, c_has_x_out => 1, c_has_y_in => 1, c_reg_inputs => 1, c_architecture => 1, c_input_width => 18, c_iterations => 0, c_precision => 0, c_has_rdy => 1, c_has_sclr => 1, c_has_nd => 1, c_scale_comp => 2, c_enable_rlocs => 1, c_has_phase_in => 1, c_has_rfd => 1, c_cordic_function => 0, c_has_ce => 1, c_mif_file_prefix => «cor1», c_round_mode => 1, c_has_aclr => 1, c_sync_enable => 0, c_has_y_out => 1, c_data_format => 0, c_reg_outputs => 1, c_coarse_rotate => 1, c_phase_format => 0, c_has_phase_out => 1, c_has_x_in => 1, c_pipeline_mode => -1, c_output_width => 18 );
-- synthesis translate_on
BEGIN
-- synthesis translate_off
U0 : wrapped_rotate_vector_cordic port map (
x_in => x_in, y_in => y_in, phase_in => phase_in, nd => nd, x_out => x_out, y_out => y_out, phase_out => phase_out, rdy => rdy, rfd => rfd, clk => clk, ce => ce, aclr => aclr, sclr => sclr );
-- synthesis translate_on
END rotate_vector_cordic_a;
В элементе rotate_vector_cordicиспользуется архитектура последовательного типа в сочетании с максимальным количеством ступеней конвейерной организации выполнения операций сдвига и сложения/вычитания. В состав структуры сформированного элемента включены входные и выходные регистры, а также блок «грубого» поворота вектора. Элемент rotate_vector_cordic позволяет осуществлять операции поворота вектора с использованием совокупности сигналов подтверждения, поддерживаемых парамет-ризированным модулем CORDIC версии v3.0. Кроме того, в этом элементе задействованы входы сигналов синхронного и асинхронного сброса, а также вход сигнала разрешения синхронизации. При этом сигнал на входе синхронного сброса имеет более низкий приоритет по сравнению с сигналом на входе разрешения синхронизации.
Чтобы использовать элемент rotate_vec-tor_cordic в качестве компонента в описании проектируемого устройства, необходимо добавить в раздел декларации этого описания следующую конструкцию:
Для описания конкретных экземпляров компонента rotate_vector_cordicв блоке определения архитектуры разрабатываемого устройства нужно использовать оператор, шаблон которого выглядит следующим образом:
На рис. 121 представлена информационная панель, в которой отражены подробные сведения о количестве различных ресурсов ПЛИС, в том числе аппаратных умножителей Multiplier Blocks, используемых при автономной реализации рассмотренного элемента.
Пример описания элемента, предназначенного для преобразования значений ортогональных координат вектора в полярные, сформированного средствами генератора параметризированных модулей CORE Generator
В качестве примера использования пара-метризированного модуля CORDIC версии v3.0 для создания элементов, выполняющих преобразование значений ортогональных координат вектора в полярные, в настоящем разделе приводится текст VHDL-описания элемента translate_vector_cordic. В данном элементе значения исходных координат и результаты преобразования представлены в виде 28-разрядного двоичного кода. В процессе трансляции значений ортогональных координат вектора в полярные используется блок компенсации масштабирующего коэффициента CORDIC, реализация которого осуществляется на базе ресурсов таблиц преобразования LUT:
В сформированном элементе tmmhte_vector_ cordic применяется архитектура последовательного типа, в состав которой дополнительно включены входные и выходные регистры. Использование оптимального варианта конвейерной организации выполнения операций позволяет повысить производительность этого элемента без привлечения дополнительных таблиц преобразования ШТ кристалла. В состав интерфейса рассматриваемого элемента входят те же входы и выходы сигналов управления и подтверждения, что и в элементе mtate_vector_cordic, который был представлен в предыдущем разделе. Но при этом сигнал на входе разрешения синхронизации элемента translate_vector_cordic имеет более низкий приоритет, чем сигнал на входе синхронного сброса.
Если элемент tmmlate_vector_cordic применяется в качестве компонента в описании разрабатываемого устройства, то для его декларации необходимо поместить в соответствующий раздел следующую совокупность выражений:
CMNm С0Я04С
№«6«Ы$к»ГЦ>Пф< «70 | | »
N'JTe*.oMr*WlUm 11» || I SX
Numba ol occi4aed Skat 831 1 Л
d $bw «т««ггу or* n«Wd bpc 85' ІІІІІІІІІІІІІІНИЧЦ
N'ji6wolSle«eert»mgixv«l*Wdl&x 0 ! _________________________J (Л
Tot4N*ri>«d4fvUlUn 1310 j1 ) 7X
thntxid bended ОиЛвкЮв» 0 | 0»
H>jrb* Ы bendtdtopJ IBUFr 0 OX
Notiba alMUlTII&ieSIOt 8 ІИН 1
WARNING Веямс* uArOKn lepotcd hew are ettmatei gweifrt by MAP «hen to сот n
•«lawMdniNlitoi Actud twouci wg» my rowre a <icnm i^ntii care ■ p»j»dw*iygM
Г У І І и» I
Рис. 121. Вид информационной панели, содержащей сведения о количестве различных ресурсов ПЛИС, используемых для реализации элемента rotate vector cordic
component rotate_vector_cordic port (
x_in: IN std_logic_VECTOR(17 downto 0); y_in: IN std_logic_VECTOR(17 downto 0); phase_in: IN std_logic_VECTOR(17 downto 0); nd: IN std_logic;
x_out: OUT std_logic_VECTOR(17 downto 0); y_out: OUT std_logic_VECTOR(17 downto 0); phase_out: OUT std_logic_VECTOR(17 downto 0); rdy: OUT std_logic; rfd: OUT std_logic; clk: IN std_logic; ce: IN std_logic; aclr: IN std_logic; sclr: IN std_logic );
end component;
-- Synplicity black box declaration attribute syn_black_box : boolean;
attribute syn_black_box of rotate_vector_cordic: component is true;
<идентификатор_экземпляра_элемента_rotate_vector_cordic>: rotate_vector_cordic port map (
x_in => x_in, y_in => y_in, phase_in => phase_in, nd => nd, x_out => x_out, y_out => y_out, phase_out => phase_out, rdy => rdy, rfd => rfd, clk => clk, ce => ce, aclr => aclr, sclr => sclr );
c_has_phase_in => 0, c_has_rfd => 1, c_cordic_function => 1, c_has_ce => 1, c_mif_file_prefix => «cor1», c_round_mode => 2, c_has_aclr => 1, c_sync_enable => 1, c_has_y_out => 1, c_data_format => 0, c_reg_outputs => 1, c_coarse_rotate => 1, c_phase_format => 0, c_has_phase_out => 1, c_has_x_in => 1, c_pipeline_mode => -1, c_output_width => 2B );
-- synthesis translate_on BEGIN
-- synthesis translate_off
U0 : wrapped_translate_vector_cordic port map (
x_in => x_in,
y_in => y_in,
nd => nd,
x_out => x_out,
y_out => y_out,
phase_out => phase_out,
rdy => rdy,
rfd => rfd,
clk => clk,
ce => ce,
aclr => aclr,
sclr => sclr
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synthesis translate_off Library XilinxCoreLib;
-- synthesis translate_on ENTITY translate_vector_cordic IS port (
x_in: IN std_logic_VECTOR(27 downto 0); y_in: IN std_logic_VECTOR(27 downto 0); nd: IN std_logic;
x_out: OUT std_logic_VECTOR(27 downto 0); y_out: OUT std_logic_VECTOR(27 downto 0); phase_out: OUT std_logic_VECTOR(27 downto 0); rdy: OUT std_logic; rfd: OUT std_logic; clk: IN std_logic; ce: IN std_logic; aclr: IN std_logic; sclr: IN std_logic );
END translate_vector_cordic;
ARCHITECTURE translate_vector_cordic_a OF translate_vector_cordic IS
-- synthesis translate_off component wrapped_translate_vector_cordic port (
x_in: IN std_logic_VECTOR(27 downto 0); y_in: IN std_logic_VECTOR(27 downto 0); nd IN std_logic;
x_out: OUT std_logic_VECTOR(27 downto 0);
y_out: OUT std_logic_VECTOR(27 downto 0);
phase_out: OUT std_logic_VECTOR(27 downto 0);
rdy: OUT std_logic;
rfd: OUT std_logic;
clk: IN std_logic;
ce: IN std_logic;
aclr: IN std_logic;
sclr: IN std_logic
-- synthesis translate_on END translate_vector_cordic_a;
end component;
-- Configuration specification
for all : wrapped_translate_vector_cordic use entity XilinxCoreLib.cordic_v3_0(behavioral) generic map(
c_has_clk => 1, c_has_x_out => 1, c_has_y_in => 1, c_reg_inputs => 1, c_architecture => 1, c_input_width => 28, c_iterations => 0, c_precision => 0, c_has_rdy => 1, c_has_sclr => 1, c_has_nd => 1, c_scale_comp => 1, c_enable_rlocs => 1,
component translate_vector_cordic port (
x_in: IN std_logic_VECTOR(27 downto 0); y_in: IN std_logic_VECTOR(27 downto 0); nd: IN std_logic;
x_out: OUT std_logic_VECTOR(27 downto 0); y_out: OUT std_logic_VECTOR(27 downto 0); phase_out: OUT std_logic_VECTOR(27 downto 0); rdy: OUT std_logic; rfd: OUT std_logic; clk: IN std_logic; ce: IN std_logic; aclr: IN std_logic; sclr: IN std_logic );
end component;
-- Synplicity black box declaration attribute syn_black_box : boolean;
attribute syn_black_box of translate_vector_cordic: component is true;
Ч Rnource Utiltatloi)
Cot N«m* CO MX
Pa* «3:1200e-9g320
Nvfrtea d Sk* Flp flop» 1336 h | tik
Nurfea oi 4 LUIt 2244 ki |12*
Niiita d 1450 M 1 <&*
NijitM d Steal ссгілггщ) or* wUUd togt 1450 till ™
НлЬн d Skc*-i ccrldrn; Kvtiated lc*x 0 1 !«
I оЫ Ntarf* cM «и LUT с 2560 lit і 14*
H-jttti d ЬспМ ОиЛЛ ЮВі 0 1 ZD*
N/rto a Ur.Vd iBUf t 0 1 :□«
•nffanarvad n edatun Auuai аш» mag* та/ mu una»-. gmtatad by MAP i іа oi dac/aata wKan tit cc •a e ft m gad you
V 1 в* |
1
Рис. 122. Вид информационной панели, содержащей сведения о ресурсах кристалла, используемых для реализации элемента 1гапз1а1е_уес1ог_сог^с
Для создания конкретных экземпляров компонента translate_vector_cordic в составе описания проектируемого устройства нужно использовать оператор, шаблон которого имеет следующий вид:
<идентификатор_экземпляра_элемента_translate_vector_cordic>: translate_vector_cordic port map (
x_in => x_in,
y_in => y_in,
nd => nd,
x_out => x_out,
y_out => y_out,
phase_out => phase_out,
rdy => rdy,
rfd => rfd,
clk => clk,
ce => ce,
aclr => aclr,
sclr => sclr
Сведения о количестве триггеров, таблиц преобразования LUT и секций Slices, которое необходимо для автономной реализации элемента translate_vector_cordic, приведены в информационной панели, показанной на рис. 122.
Подготовка описаний элементов, предназначенных для выполнения операции извлечения квадратного корня, на основе параметризированного модуля CORDIC версии v3.0 средствами генератора CORE Generator
При подготовке описаний элементов, предназначенных для выполнения операции извлечения квадратного корня, состав определяемых параметров конфигурации ядра CORDIC версии v3.0 отличается по сравнению с процессом генерации устройств, осуществляющих вычисления значений тригонометрических и гиперболических функций, поворот вектора на заданный угол и преобразование координат вектора из одной системы в другую. Следствие этого — изменение структуры диалоговых панелей «мастера» настройки параметров ядра CORDIC версии v3.0, которые были представлены в предыдущей части статьи. На рис. 123 показан вид страницы Parameters стартовой диалоговой панели «мастера» настройки параметров ядра CORDIC версии v3.0 при подготовке описаний элементов, предназначенных для выполнения операции извлечения квадратного корня из значений, представленных на входной шине данных.
Для генерации описания элемента, вычисляющего значение квадратного корня, следует во встроенной панели Functional Selection нажать кнопку Square Root (рис. 123). Далее с помощью группы кнопок с зависимой фиксацией Pipelining Mode нужно выбрать требуемый вариант конвейерной организации выполнения вычислений в создаваемом элементе. При этом следует обратить внимание на то, что параметризированный модуль CORDIC версии v3.0 позволяет формировать описания элементов, предназначенных для выполнения операции извлечения квадратного корня, которые могут быть реализованы только
на основе архитектуры параллельного типа. Поэтому кнопки выбора типа архитектуры генерируемого элемента, представленные во встроенной панели Architectural Configuration, находятся в недоступном состоянии (рис. 123).
Вторая диалоговая панель «мастера» настройки параметров ядра CORDIC версии v3.0 при создании описаний элементов, предназначенных для выполнения операции извлечения квадратного корня из значений, представленных на входной шине данных, приобретает вид, изображенный на рис. 124.
В данной диалоговой панели нужно выбрать формат представления входных и выходных данных, а также указать дополнительные входы и выходы управляющих сигналов в формируемых элементах. В устройствах, разрабатываемых на основе параметризированного модуля CORDIC версии v3.0 для вычисления значений тригонометрических и гиперболических функций, поворота вектора на заданный угол и преобразования значений ортогональных координат вектора в полярные, входные и выходные данные неизменно интерпретировались как дробные числа со знаком. При создании описаний элементов, предназначенных для выполнения операции извлечения квадратного корня, значения исходных данных и результатов вычисления могут быть представлены в дробном или целочисленном формате без знака. Выбор формата представления входных и выходных данных осуществляется с помощью группы кнопок с зависимой фиксацией, расположенных во встроенной панели Data Format (рис. 124). Чтобы сформировать описание элемента, в котором значения исходных данных и результатов вычислений интерпретируются как дробные числа без знака, следует зафиксировать в нажатом положении кнопку Unsigned Fraction. Для генерации описания элемента, использующего беззнаковый целочисленный формат представления значений на входной и выходной шине, необходимо пере-
Рис. 123. Вид страницы Parameters стартовой диалоговой панели «мастера» настройки параметров ядра CORDIC версии v3.0 при подготовке описаний элементов, предназначенных для выполнения операции извлечения квадратного корня из значений, представленных на входной шине данных
Рис. 124. Вид страницы Parameters второй диалоговой панели «мастера» настройки параметров ядра CORDIC версии v3.0 при подготовке описаний элементов, предназначенных для выполнения операции извлечения квадратного корня из значений, представленных на входной шине данных
Рис. 125. Вид страницы Parameters третьей диалоговой панели «мастера» настройки параметров ядра CORDIC версии v3.0 при подготовке описаний элементов, предназначенных для выполнения операции извлечения квадратного корня из значений, представленных на входной шине данных
Рис. 126. Вид страницы Parameters заключительной диалоговой панели «мастера» настройки параметров ядра CORDIC версии v3.0 при подготовке описания элементов, предназначенных для выполнения операции извлечения квадратного корня
ключить в нажатое состояние кнопку Unsigned
Integer.
Включение дополнительных входов и выходов сигналов управления и подтверждения в состав интерфейса создаваемых элементов производится с помощью индикаторов состояния, которые расположены во встроенной панели Optional Pin Selection (рис. 124). При этом следует обратить внимание на то, что не все дополнительные входы и выходы сигналов управления и подтверждения, предусмотренные в параметризированном модуле CORDIC версии v3.0, могут быть задействованы в элементах, предназначенных для выполнения операции извлечения квадратного корня. Если в составе интерфейса генерируемого элемента предполагается одновременное присутствие входов сигнала разрешения синхронизации и синхронного сброса, то следует уточнить соотношение приоритетов этих сигналов, воспользовавшись группой кнопок с зависимой фиксацией, которая находится во встроенной панели Synchronization Enable. Выбор доступных дополнительных входов и выходов сигналов управления и подтверждения, а также определение соотношения приоритетов сигналов разрешения синхронизации и синхронного сброса производится так же, как и при подготовке описаний элементов, предназначенных для вычисления значений тригонометрических и гиперболических функций, поворота вектора на заданный угол и преобразования координат вектора из ортогональной системы в полярную.
Основное отличие в конфигурации третьей диалоговой панели «мастера» настройки параметров ядра CORDIC версии v3.0 при подготовке описаний элементов, выполняющих операцию извлечения квадратного корня, проявляется в способе определения разрядности выходной шины, на которой отображаются результаты вычислений. Вид страницы Parameters данной диалоговой па-
нели при создании описаний указанных элементов представлен на рис. 125.
В этой диалоговой панели следует выбрать метод округления результатов вычислений с помощью группы кнопок с зависимой фиксацией Round Mode и, при необходимости, добавить в состав архитектуры формируемого элемента входные и выходные регистры, используя индикаторы состояния, расположенные во встроенной панели Input/Output Options (рис. 125). Возможные значения этих параметров конфигурации создаваемых элементов были рассмотрены при подготовке описаний устройств, выполняющих операции вычисления значений тригонометрических и гиперболических функций, поворота вектора на заданный угол и преобразования координат вектора из ортогональной системы в полярную.
Разрядность двоичного кода входных значений в создаваемом элементе указывается в поле редактирования Input Width. При генерации описаний элементов, в которых применяется беззнаковый целочисленный формат представления значений на входной и выходной шинах (в нажатом состоянии зафиксирована кнопка Unsigned Integer), разрядность формируемого результата вычислений определяется автоматически в соответствии с указанным значением параметра Input Width. Автоматически установленное значение разрядности выходной шины отображается в поле Output Width, как показано на рис. 125, и разработчик его не может изменить. Если в создаваемом элементе выбран беззнаковый дробный формат представления входных и выходных значений (нажата кнопка Unsigned Fraction), то требуемое количество разрядов выходной шины определяется вручную в поле редактирования Output Width.
Заключительная диалоговая панель «мастера» настройки параметров ядра CORDIC версии v3.0 в процессе подготовки описаний элементов, выполняющих операцию извлечения квадратного корня, используется только для
указания формы представления генерируемого описания для последующей реализации в ПЛИС и получения информации о величине задержки отображения результатов вычислений на выходных шинах этих элементов. Вид страницы Parameters этой диалоговой панели при формировании описаний элементов, предназначенных для вычислений значений квадратного корня, показан на рис. 126.
В этом случае необходимое количество итераций, включающих в себя совокупность операций сдвига и сложения/вычитания, используемых в создаваемом элементе, а также точность промежуточных результатов вычислений устанавливаются автоматически в соответствии с выбранной разрядностью выходных данных. При этом разработчик не может изменить значения этих параметров, так как поля редактирования Iterations и Precision, расположенные во встроенной панели Advanced Configuration Parameter (рис. 126), находятся в недоступном состоянии.
Форма представления создаваемого описания для последующей реализации в ПЛИС выбирается с помощью индикатора состояния Create RPM, который находится во встроенной панели Layout (рис. 126). Информация о задержке формирования результатов вычислений квадратного корня приводится во встроенной панели Design Feedback.
Система условных обозначений интерфейсных портов в описаниях элементов, формируемых на основе параметризирован-ного модуля CORDIC версии v3.0 для выполнения операции извлечения квадратного корня, выглядит следующим образом:
• x_in[N:0] — входная шина данных с разрядностью N+1, на которую поступает двоичный код, определяющий значение подкоренного числа;
• x_out[M:0] — выходная шина данных с разрядностью M+1, на которой отображаются результаты извлечения квадратного кор-
ня из значений, представленных на входной шине данных;
• clk, ce, aclr, sclr, nd и rdy — имеют то же назначение, что и в описаниях элементов, выполняющих вычисления значений тригонометрических и гиперболических функций, которые были рассмотрены в предыдущей части статьи.
Пример описания элемента, предназначенного для выполнения операции извлечения квадратного корня, сформированного на основе параметризированного модуля CORDIC версии v3.0
Иллюстрацией результата применения па-раметризированного модуля CORDIC версии v3.0 для подготовки описаний устройств, выполняющих операции извлечения квадратного корня из значений, представленных на входной шине данных, является VHDL-описание элемента square_root_cordic, текст которого имеет следующий вид:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synthesis translate_off Library XilinxCoreLib;
-- synthesis translate_on ENTITY square_root_cordic IS port (
x_in: IN std_logic_VECTOR(47 downto 0); nd: IN std_logic;
x_out: OUT std_logic_VECTOR(47 downto 0); rdy: OUT std_logic; clk: IN std_logic; ce: IN std_logic; aclr: IN std_logic; sclr: IN std_logic );
END square_root_cordic;
ARCHITECTURE square_root_cordic_a OF square_root_cordic IS -- synthesis translate_off component wrapped_square_root_cordic port (
x_in: IN std_logic_VECTOR(47 downto 0); nd: IN std_logic;
x_out: OUT std_logic_VECTOR(47 downto 0); rdy: OUT std_logic; clk: IN std_logic; ce: IN std_logic; aclr: IN std_logic; sclr: IN std_logic );
end component;
-- Configuration specification
for all : wrapped_square_root_cordic use entity
XilinxCoreLib.cordic_v3_0(behavioral)
generic map(
c_has_clk => 1, c_has_x_out => 1, c_has_y_in => 0, c_reg_inputs => 1, c_architecture => 2, c_input_width => 4B, c_iterations => 0, c_precision => 0, c_has_rdy => 1, c_has_sclr => 1, c_has_nd => 1, c_scale_comp => 0, c_enable_rlocs => 1, c_has_phase_in => 0, c_has_rfd => 0, c_cordic_function => 6, c_has_ce => 1, c_mif_file_prefix => «cor1», c_round_mode => 1, c_has_aclr => 1, c_sync_enable => 1, c_has_y_out => 0, c_data_format => 1, c_reg_outputs => 1, c_coarse_rotate => 0, c_phase_format => 0, c_has_phase_out => 0, c_has_x_in => 1, c_pipeline_mode => -1, c_output_width => 4B );
-- synthesis translate_on BEGIN
-- synthesis translate_off U0 : wrapped_square_root_cordic port map (
x_in => x_in, nd => nd, x_out => x_out, rdy => rdy, clk => clk, ce => ce, aclr => aclr, sclr => sclr );
-- synthesis translate_on END square_root_cordic_a;
В сформированном элементе square_root_ cordic используются 48-разрядные входная и выходная шины. При этом входные данные и результаты вычисления квадратного корня представлены в виде дробных чисел без знака. В состав архитектуры элемента square_root_cordic включены входные и выходные регистры. Выбор оптимального варианта конвейерной организации выполнения операций в этом элементе обеспечивает достаточно высокую производительность вычислений квадратного корня без привлечения дополнительных таблиц преобразования LUT ПЛИС. В элементе square_ root_cordic задействованы входы сигналов синхронного и асинхронного сброса, а также вход сигнала разрешения синхронизации. Сигнал на входе синхронного сброса имеет более высокий
Ч R*M>urceUlilLMtk>fi щ
Со* N«mt COMHC
Pat «сЗіІГООеУдСТ
Nur6e< Ы Sloe Пр Пор» 14Є0 i И)«*
NuitnoMroiUJTc 2709 u і і»
Мчгіи Ы wipri Ska 173B mi ) 20k
Nui£m Ы Slccx ccrtami atit icUUd taoc 1738 iiiiimiiiiiuil»»
H Ы Sktri urtonrg ley 0 1 ZDK
IbUN^>Mo< 4ixxiUJT> 2817 li In
H'jrtjn U bcnfed ЮВі 0 і “
Nartia Ы bonded bfU IBUf I a і H)“
ЬпМм graxMd by МАЯ і мої daciuuпЫпсо n с rrwgad Mtf) you
¥ 1 B* 1
I
Рис. 127. Вид информационной панели, содержащей сведения о ресурсах ПЛИС, используемых для реализации элемента square_root_cordic
приоритет, чем сигнал на входе разрешения синхронизации. В состав интерфейса рассматриваемого элемента также включен вход сигнала New Data, подтверждающего достоверность входных данных, и выход сигнала Ready, сообщающего о готовности достоверных результатов вычислений квадратного корня.
При использовании элемента square_root_ cordic в качестве одного из компонентов в составе структурного или смешанного описания проектируемого устройства необходимо дополнить раздел декларации формируемого описания следующими выражениями:
component square_root_cordic port (
x_in: IN std_logic_VECTOR(47 downto 0); nd: IN std_logic;
x_out: OUT std_logic_VECTOR(47 downto 0); rdy: OUT std_logic; clk: IN std_logic; ce: IN std_logic; aclr: IN std_logic; sclr: IN std_logic );
end component;
-- Synplicity black box declaration
attribute syn_black_box : boolean;
attribute syn_black_box of square_root_cordic: component is true;
Описание каждого экземпляра компонента square_root_cordic в составе блока определения архитектуры разрабатываемого устройства выполняется с помощью оператора, шаблон которого имеет следующий вид:
<идентификатор_экземпляра_элемента_square_root_cordic>: square_root_cordic port map (
x_in => x_in, nd => nd, x_out => x_out, rdy => rdy, clk => clk, ce => ce, aclr => aclr, sclr => sclr );
Оценка объема различных ресурсов кристалла, необходимых для автономной реализации элемента square_root_cordic, приведена в информационной панели, вид которой представлен на рис. 127. ■
Продолжение следует