Андрей СТРОГОНОВ, д. т. н.
[email protected] Максим МОТЫЛЕВ [email protected] Сергей ДАВЫДОВ [email protected] Алексей БЫСТРИЦКИЙ [email protected] Сергей ЦЫБИН, к. т. н.
Разработка модели ПЛИС типа ППВМ с одноуровневой структурой межсоединений
в системе визуально-имитационного моделирования MATLAB/Simulink
Успехи в области создания академических ПЛИС и программных инструментов оказали существенное влияние на развитие архитектур индустриальных ПЛИС.
В академических ПЛИС для обеспечения программируемой коммутации существует две технологии соединений: multi-driver и single-driver. В настоящее время преимущество отдается технологии single-driver, так как ее использование позволяет получать существенный выигрыш по сравнению с технологией multi-driver как по быстродействию, так и по площади кристалла.
На рис. 1 показаны основные функциональные блоки ПЛИС — логический блок (ЛБ), два соединительных блока C1 и C2, маршрутизатор (S) — с одноуровневой структурой межсоединений и принцип
коммутации пар разнонаправленных межсоединений по технологии single-driver. Соединительные блоки подключают входы/выходы логического блока к горизонтальному и вертикальному трассировочному каналу. Маршрутизатор осуществляет коммутацию сигналов (межсоединений) в трассировочных каналах. Также показан наиболее распространенный способ коммутации сигналов с помощью мультиплексоров и принцип сегментации межсоединений. Подобный принцип сегментации single, Double, HEX-3, HEX-6 используется в ПЛИС серии Virtex II компании Xilinx, которые классифицируются как ПЛИС с одноуровневой структурой межсоединений. Межсоединение, по которому сигнал распространяется только в одну сторону, получило название «однонаправленное».
S и S
ЛБ =й= ЛБ ЛБ
, ц| С1 |ц ЛБ ц| С1 \z
И
L L2 L3 L6
И
Рис. 1. а) Основные функциональные блоки ПЛИС с одноуровневой структурой межсоединений;
б) коммутация двух пар разнонаправленных межсоединений в горизонтальном и вертикальном направлениях;
в) принцип коммутации разнонаправленных межсоединений с использованием мультиплексоров;
г) принцип сегментации межсоединений (через один ЛБ, через два ЛБ, через три ЛБ, через шесть ЛБ)
В качестве учебных целей разработаем модель ПЛИС типа ППВМ с одноуровневой структурой межсоединений и с использованием технологии соединений single-driver в системе MATLAB/Simulink и покажем, как можно в автоматическом режиме получить код высокоуровневого языка описания аппаратных средств (VHDL). Полученный код может быть использован для разработки функциональной модели проектируемой ПЛИС, например в САПР Quartus II. Более подробно об архитектуре академических ПЛИС можно узнать в работах [1-3].
Модель ПЛИС реализована в формате с фиксированной запятой (точкой), с использованием fi-объектов системы MATLAB/Simulink. Simulink — графическая среда визуально-имитационного моделирования аналоговых и дискретных систем, которая предоставляет пользователю графический интерфейс для конструирования моделей из стандартных функциональных блоков. Simulink работает с линейными, нелинейными, непрерывными, дискретными и многомерными системами. Система MATLAB/Simulink содержит встроенный генератор кода языка описания аппаратных средств HDL (Simulink HDL Coder). Simulink HDL Coder — программный продукт для генерации VHDL-кода без привязки к конкретной архитектуре ПЛИС и платформе по Simulink-моделям. Используем следующий формат для представления десятичных чисел:
a = fi (v, s, w, f),
где v — десятичное число; s — знак (0 (false) для чисел без знака и 1 (true) — для чисел со знаком); w — размер слова в битах (целая часть числа); f — дробная часть числа в битах. Примеры использования формата с фиксированной точкой при проектировании КИХ-фильтров можно найти в работе [4].
Формат a = fi (v, s, w, f, fimath) позволяет задать режим округления (Roundmode): floor — округление вниз; реакцию на пере-
in 0 in 1
Рис. 2. «Плитка» ПЛИС типа ППВМ с одноуровневой структурой межсоединений
полнение (OverflowMode): wrap — перенос. При выходе значения v из допустимого диапазона «лишние» старшие разряды игнори-
руются. При выполнении операций умножения ('ProductMode') и сложения ('SumMode'), для повышения точности вычислений
(precision) используется машинное слово шириной в 32 бита.
% HDL specific fimath
hdl_fm = fimath(...
'RoundMode', 'floor', ...
'OverflowMode', 'wrap', ...
'ProductMode', 'FullPrecision', 'ProductWordLength', 32, ...
'SumMode', 'FullPrecision', 'SumWordLength', 32, ...
'CastBeforeSum', true);
Массив ПЛИС разобьем на «плитки». «Плитка» — минимальная структурная единица. В плитку (верхняя левая в массиве плиток) включают ЛБ, два соединительных блока, маршрутизатор (рис. 2). На рис. 3 показан принцип коммутации межсоединений в разрабатываемой модели. L2-маршрутизатор обеспечивает длину сегмента межсоединения в два ЛБ.
По четырем сторонам маршрутизатора располагаются многовходовые мультиплексоры, в которых сегментируется только лишь одна из двух пар разнонаправленных межсоединений в горизонтальных и вертикальных направлениях. Несегментируемая пара разнонаправленных межсоединений перекручивается «косичкой» с сегментируемой парой за пределами плитки (рис. 3).
Тестирование плитки на выполнение булевой функции 4И-НЕ в системе MATLAB/ Simulink показано на рис. 4. На рис. 5 представлен нижний уровень иерархии. Для конфигурирования плитки необходимо 40 бит памяти. Конфигурационная карта памяти одной плитки ПЛИС показана в таблице 1. В таблице 2 приведен тест на выполнение булевой функции 4И-НЕ. На адресные входы мультиплексора 16 в 1 (LUT-таблица) пода-
Рис. 3. L2-маршрутизатор, коммутирующий две пары разнонаправленных межсоединений в горизонтальном и вертикальном направлениях, обеспечивая длину сегмента в два логических блока (длинная линия L = 2)
R2 doub
in convert out
in convert out
in convert out
in convert out
в EML4
¡п convert out
R EML5
in convert out
EML6
in convert out
е EML7
in convert out
е EML8
in convert out
g EML10
in convert out
EML11
B_3
T_0_V
T_2_V
L_1_H
L_3_H
in_0_lut
in_1_lut
R_2 R_0 В 1
in_3_lut_b
RJ R_3 B_2 B_0 in_2_lut_R T_1_V T_3_V L_0_H L 2 H
Subsystem
frl °l
frl
»I "I
Рис. 4. «Плитка» в системе MATLAB/Simulink. Верхний уровень иерархии
Таблица 1. Конфигурационная карта памяти одной плитки ПЛИС
Функциональный блок Конфигурационные биты (ячейки памяти) Примечание
Логический блок |
LUT-таблица SR1-SR4; SR5-SR8; SR9-SR12; SR13-SR16 In 0, In 1, In 2 l, In 3 t
Выходной мультиплексор 2 в 1 SR17 SR17 = 1 — регистерный выход; SR17 = 0 — комбинаторный выход
Соединительный блок С2
Crossbar (подключает выход ЛБ и МС L 1, R 0, L 3, R 2 к трассировочному каналу или ко входам In 3 lut t, In 3 lut b ЛБ)
Демультиплексор 1 в 4 (SR_demux) SR18-19 Выход ЛБ подключается к одному из МС R_1, 1__0, R_3, 1__2
SR_En_demux SR20 Разрешение подключения выхода ЛБ к одному из МС R_1, 1__0, R_3, 1__2
Мультиплексоры |
Мультиплексор 4 в 1 (верхний) SR21-22 (SR_mux_t) Подключает одно из МС L_1, R_0, L_3, R_2 ко входу In_3_t ЛБ
Мультиплексор 4 в 1 (нижний) SR23-24 (SR_mux_b) Подключает одно из МС L_1, R_0, L_3, R_2 ко входу In_3_b ЛБ
Маршрутизатор, S-блок I
Мультиплексор 5 в 1 (левый) SR29, 30, 31 Подключает одно из МС R 2, В 0, В 1, Т 2, В 3 к МС 1_ 2
Мультиплексор 5 в 1 (нижний) SR32, 33, 34 Подключает одно из МС Т_2, 1__1, 1__0, 1__3 к МС В_2
Мультиплексор 5 в 1 (правый) SR35, 36, 37 Подключает одно из МС 1_ 3, В 0, В 1, Т 2, В 3 к МС R 3
Мультиплексор 5 в 1 (верхний) SR38, 39, 40 Подключает одно из МС В 3, 1_ 1, 1_ 0, 1_ 3, R 2 к МС Т 3
Соединительный блок С1 |
Мультиплексор 4 в 1 (левый) SR25-26 Подключает одно из МС T_0, B_1, T_2, B_3 ко входу in_2_lut_L
Мультиплексор 4 в 1 (правый) SR27-28 Подключает одно из МС T_0, B_1, T_2, B_3 ко входу in_2_lut_R
Примечание. МС — межсоединение.
Таблица 2. Тест на выполнение булевой функции 4И-НЕ
Функциональный блок Конфигурационные биты (ячейки памяти) Примечание
1 Логический блок |
LUT-таблица SR1-SR4 = 1; SR5-SR8 = 1; SR9-SR12 = 1; SR13-SR15 = 1; SR16 = 0 При 1п_0=1,1п_1=1,1п_2_1=1, 1п_3^=1 на выходе 1е_о^ ожидаем лог. 0 Доступ к 1п_2_1 обеспечивается со входа Т_2 Доступ к 1п_3_ обеспечивается со входа 1__1
Выходной мультиплексор 2 в 1 SR17 SR17 = 1 — регистерный выход SR17 = 0 — комбинаторный выход
1 Соединительный блок С2 |
Демультиплексор 1 в 4 (SR_demux) SR18-SR19 Выход ЛБ подключаем к межсоединению R 3, при этом 1__3 = 0; SR19 = 1; SR18 = 0
SR_En_demux SR20 Разрешение подключения выхода ЛБ к МС R_1, 1__0, R_3, 1__2 ^20 = 1)
Мультиплексор 4 в 1 (верхний) SR21-22 (SR_mux_t) Подключает МС 1__1 ко входу In_3_t ЛБ ^22 = 0 и SR21 = 0)
Мультиплексор 4 в 1 (нижний) SR23-24 (SR_mux_b) Подключает МС 1__1 ко входу 1п_3_Ь ЛБ ^24 = 0 и SR23 = 0)
I Маршрутизатор, S-блок I
Мультиплексор 5 в 1 (левый) SR29, 30, 31 Подключает МС R_2 к МС L_2 (SR29, 30, 31 = 0)
Мультиплексор 5 в 1 (нижний) SR32, 33, 34 Подключает МС T_2 к МС B_2 (SR32, 33, 34 = 0)
Мультиплексор 5 в 1 (правый) SR35, 36, 37 Подключает МС L_3 к МС R_3 (SR35, 36, 37 = 0)
Мультиплексор 5 в 1 (верхний) SR38, 39, 40 Подключает МС B_3 к МС Т_3 (SR38, 39, 40 = 0)
1 Соединительный блок С1 |
Мультиплексор 4 в 1 (левый) SR25-26 Подключает МС T_2 ко входу in_2_lut_L (SR26 = 1 и SR25 = 0)
Мультиплексор 4 в 1 (правый) SR27-28 Подключает МС T_2 ко входу in_2_lut_R (SR28 = 1 и SR27 = 0)
ется комбинация из четырех логических единиц 1111, а на информационные входы подключаются 16 ячеек памяти с содержимым, отражающим принцип работы логического элемента 4И-НЕ (таблица истинности), при этом на выходе логического блока ожидаем «лог. 0». Остальные 24 ячейки памяти необходимы для программируемой коммутации.
На рис. 6 показан фрагмент массива конфигурационной памяти плитки. Конфигурационные биты задаются как константы типа double и сохраняются в блоках памяти. Для автоматической генерации кода языка VHDL необходимо осуществить конвертацию типа double в тип ufix (пример 1). На рис. 7 показан логический блок и два соединительных блока C1 и С2. Адресные шины мультиплексоров соединительных блоков и LUT-таблицы организуются с помощью функции объединения битов bitconcat (пример 2).
На рис. 8 показан логический блок плитки, который состоит из LUT-таблицы (мультиплексора 16 в 1), элемента памяти (триггера) и мультиплексора 2 в 1. На рис. 9 приведен соединительный блок С2, который осуществляет подключение выхода ЛБ к одному из межсоединений горизонтального трассировочного канала и подключение одного из межсоединений канала к третьему входу ЛБ LUT-таблицы (in_3_lut_t или in_3_lut_b). С помощью верхнего и нижнего мультиплексоров выход логического блока может быть подключен обратно на третий вход LUT-таблицы верхнего или нижнего логического блока.
Описание блока Crossbar на языке M-фай-лов демонстрирует пример 3. Блок Crossbar выполняет функцию демультиплексора, выходы которого объединяются с межсоединениями трассировочного канала с использованием функции bitor (ИЛИ) с разрешением
SR1 SR2 SR3 SR4 SR5 SR6 SR7 SR8 SR9 SR10 SR11 SR12 SR13 SR14 SR15 SR16 SR17 SR18 SR19 SR20 SR21 SR22 SR23 SR24 SR25 SR26 SR27 SR28 SR29 SR30 SR31 SR32 SR33 SR34 SR35 SR36 SR37 SR38 SR39 SR40
inûjut
СЮ-I Œ>
in_1_lut
Mem_config
T_0_V
Œ>
<3>
in_0_lut
inj Jut in_3_lut_b
SR_1
SR_2
SR 3
SR~4 RJ_H
SR_18
SR_19
SR_20
SR_21 R_3_H
SR_22
SR_23
SR 24
L_1_H L_0_H L_3_H R_0_H R 2 H
SR_27 L_2_H
SR_28
SR_25
SR_26
T_0_V B_0_V B_1_V T_2_V В 3 V
SR_5 T_1_V
SR_6
SR_7
SR 8
SRJ B_2_V
SR_10
SR_11
SR_12
SR_13 T_3_V
SR_14
SR_15
SR_16
SR_17 ln_2_lut_R
in 3 lut b
L 0 H
Нею
—<зю
L 2 H
a>
B_1
Gfl>
CD-
R 0
Т 2 В 2
L 3
В 3
R 2 R_3
SR 29
SR_30 SR 31 L_2
SR 32
SR_33 T 3
SR 34
SR 35
SR 36 В 0
SR 37
SR_38 SR 40 T_1
SR 39
TO В 1 R_1
L 1
R_0 L_0
—►сю
B_2
—<ю
R_3
►СЮ в_о
*Œ)
R 1
Рис. 5. Нижний уровень иерархии «плитки». Массив конфигурационной памяти (40 бит), логический блок с соединительными блоками, маршрутизатор
по выходу (En). На выходах демультиплек-сора предварительно устанавливаются нули, сигнал En = 1 разрешает подключение выхода логического блока к трассировочному каналу. Пример 4 демонстрирует автоматически сгенерированный код языка VHDL блока Crossbar, полученный с помощью Simulink HDL Coder.
1
1
1
Л
SR_2 Msmoryl
п
SR_3 Мэтогу2
п
МетогуЗ
П
Метогу4
П
Мвтогу5
П
SR_7 Метогуб »
п
SR_8 Метогу7
п
in convert out
convert out-►( 2 )
SR2
in convert out
in convert out
in convert out
in convert out
in convert out
in convert out
CD-
Q>
Data Type Conversion
SR_mux_R ln_2Jut_R -KJD
в 0 v
SR_mux_L B_0 -KID
T 1 V
T_0 T_1 —К 7 )
В 2 V
B_1 B_2 -►CD
T 2 V
T_2 T_3 -KJD
В 3 in 2 lut L
Œ>
SR_18
QD—
SR_22
GD-
SR 21
QD—
SR_24
QD—
SR_23
QD-
L_1_H
QD-
L_3_H
QD-
Рис. 6. Фрагмент массива конфигурационной памяти Рис. 7. Логический блок и два соединительных блока ^ и С2
о
сю-
CD—
SR_lut_e
GD—
SR lut 9
СиЗ-
SRJutJlO
GD—
GD—
SR lut_12
GD-
SR_lut_13
GD—
SR_lut_14
GD—
SR lut_15
GD—
SR_mux_le_17
Рис. 8. Логический блок «плитки» (мультиплексор 16 в 1, элемент памяти, мультиплексор)
(S-блок) и код языка VHDL мультиплексора 5 в 1, используемый в маршрутизаторе.
Пример 1. Конвертация типа double в тип ufix для генерации кода языка VHDL:
function out = convert(in) hdl_fm = fimath(... 'RoundMode', 'floor', ... 'OverflowMode', 'wrap',...
'ProductMode', 'FullPrecision', 'ProductWordLength', 32, ... 'SumMode', 'FullPrecision', 'SumWordLength', 32, ... 'CastBeforeSum', true);
out = fi(in, 0, 1, 0, hdl_fm) end
Пример 2. Создание двухразрядной шины:
function out = Concat(H, L)
hdl_fm = fimath(s
'RoundMode', 'floor', ... 'OverflowMode', 'wrap', ...
'ProductMode', 'FullPrecision', 'ProductWordLength', 32, ... 'SumMode', 'FullPrecision', 'SumWordLength', 32, . 'CastBeforeSum', true);
out = fi(bitconcat(fi(H, 0, 1, 0, hdl_fm), fi(L, 0, 1, 0, hdl_fm))); end
î_demux
Рис. 9. Соединительный блок С2
EML1 I-CD CD—1 SR mux L SR mux R
sel in1 out mux_4v1 ¡n2 in3 •»-1 L-► sel in 1 in2 mux_4v1 out in3
*-■ ■-►
4- -ь
4- -
T 0 CD- - EML2 В 0 ►CD
CD— T_2 -KD В 2
GD- В 3 CD- -K_D T 3 -KD
Рис. 10. Соединительный блок С1. Подключение межсоединения из вертикального трассировочного канала ко второму входу LUT-таблицы (т_2_1иЫ или т_2_Ш_г)
На рис. 10 показан соединительный блок С1, который осуществляет подключение межсоединения из вертикального трассировочного канала ко второму входу LUT-таблицы, левому или правому соседнему (т_2_1ш_1 или т_2_1ш_г). Пример 5 демон-
стрирует M-файл мультиплексора 4 в 1, входящего в состав соединительного блока C1. Подключение сигналов ко второму in_2_lut_l и третьему in_3_lut_t входу LUT-таблицы осуществляется с помощью элемента задержки Unit Delay. На рис. 11 показан маршрутизатор
Пример 3. M-файл блока Crossbar, входящего в состав соединительного блока C2:
function [outl, out2, out3, out4] = crossbar(sel, in, en, L_1, R_0, L_3, R_2)
hdl_fm = fimath(s
'RoundMode', 'floor', ...
'OverflowMode', 'wrap', s
'ProductMode', 'FullPrecision', 'ProductWordLength', 32, ...
'SumMode', 'FullPrecision', 'SumWordLength', 32, s
'CastBeforeSum', true);
out1_de = fi(0, 0, 1, 0, hdl_fm)
out2_de = fi(0, 0, 1, 0, hdl_fm)
out3_de = fi(0, 0, 1, 0, hdl_fm)
out4_de = fi(0, 0, 1, 0, hdl_fm)
if (logical(en))
switch (uint8(sel))
case 0,
out1_de = fi(in, 0, 1 0, hdl_fm);
case 1,
out2_de = fi(in, 0, 1 0, hdl_fm);
case 2,
out3_de = fi(in, 0, 1 0, hdl_fm);
case 3,
out4_de = fi(in, 0, 1 0, hdl_fm);
end
end
outl = fi(bitor(out1_de,L_1), 0, 1, 0, hdl_fm);
out2 = fi(bitor(out2_de,R_0), 0, 1, 0, hdl_fm);
out3 = fi(bitor(out3_de,L_3), 0, 1, 0, hdl_fm);
out4 = fi(bitor(out4_de,R_2), 0, 1, 0, hdl_fm);
end
Пример 4. Код языка VHDL блока Crossbar, входящего в состав соединительного блока C2:
ENTITY demux IS
PORT (
sel : IN std_logic_vector(1 DOWNTO 0);
in_rsvd : IN std_logic;
en : IN std_logic;
L_1 : IN std_logic;
R_0 : IN std_logic;
L_3 : IN std_logic;
R_2 : IN std_logic;
out1 : OUT std_logic
out2 : OUT std_logic
out3 : OUT std_logic
out4 : OUT std_logic);
END demux;
ARCHITECTURE rtl OF demux IS
BEGIN
demux : PROCESS (sel, in_rsvd, en, L_1, R_0, L_3, R_2)
VARIABLE out1_de std_logic;
VARIABLE out2_de std_logic;
VARIABLE out3_de std_logic;
VARIABLE out4_de std_logic;
VARIABLE c_uint : std_logic;
QT_O 0Т_1 Qtj
cz>
SR4
QD—
L_0
CD+-
CD-
O-
sei «—<33
CD—i
SR2 X
0B_3
-KID
R 1
-QD
R 0
-CD
R_2
8i ££ I
mux_4v1
Рис. 11. Маршрутизатор трассировочных ресурсов
Пример 6. Код языка VHDL дешифратора 5 в 1, используемого в маршрутизаторе:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;
ENTITY EML1_block IS PORT (
sel : IN std_logic_vector(2 DOWNTO 0); in1 : IN std_logic; in2 : IN std_logic; in3 : IN std_logic; in4 : IN std_logic; in5 : IN std_logic; out_rsvd : OUT std_logic); END EML1_block;
ARCHITECTURE rtl OF EML1_block IS BEGIN
EML1_block : PROCESS (sel, inl, in2, in3, in4, in5) BEGIN
out_rsvd <= '0';
CASE sel IS
WHEN "000" =>
out_rsvd <= inl; WHEN "001" =>
out_rsvd <= in2; WHEN "010" =>
out_rsvd <= in3; WHEN "011" =>
out_rsvd <= in4; WHEN "100" =>
out_rsvd <= in5; WHEN OTHERS => NULL; END CASE;
END PROCESS EML1_block;
END rtl;
VARIABLE b_c_uint : std_logic VARIABLE c_c_uint : std_logic VARIABLE d_c_uint : std_logic
out1_de out2_de out3_de out4_de
IF en /= '0' THEN
CASE sel IS
WHEN "00" =>
out1_de := in_rsvd;
WHEN "01" =>
out2_de := in_rsvd;
WHEN "10" =>
out3_de := in_rsvd;
WHEN "11" =>
out4_de := in_rsvd;
WHEN OTHERS => NULL;
END CASE; END IF;
c_uint := out1_de OR L_1; out1 <= c_uint; b_c_uint := out2_de OR R_0; out2 <= b_c_uint; c_c_uint := out3_de OR L_3; out3 <= c_c_uint;
d_c_uint := out4_de OR R_2; out4 <= d_c_uint; END PROCESS demux; END rtl;
Пример 5. M-файл мультиплексора 4 в 1, входящего в состав соединительного блока C1:
function out = mux_4v1(sel, in1, in2, in3, in4) hdl_fm = fimath(... 'RoundMode', 'floor', ... 'OverflowMode', 'wrap', ...
'ProductMode', 'FullPrecision', 'ProductWordLength', 32, ... 'SumMode', 'FullPrecision', 'SumWordLength', 32, ... 'CastBeforeSum', true);
out = fi(0, 0, 1, 0, hdl_fm); switch (uint8(sel)) case 0,
out = fi(in1, 0, 1, 0, hdl_fm); case 1,
out = fi(in2, 0, 1, 0, hdl_fm); case 2,
out = fi(in3, 0, 1, 0, hdl_fm); case 3,
out = fi(in4, 0, 1, 0, hdl_fm);
end
Выводы
Продемонстрирована возможность использования системы визуально-имитационного моделирования MATLAB/Simulink с приложением Simulink HDL Coder для разработки архитектуры академической ПЛИС с одноуровневой структурой межсоединений на уровне системы. Разработанная архитектура ПЛИС обеспечивает однотипность трассировочных ресурсов по всей площади кристалла. ■
Литература
1. Строгонов А., Мотылев М., Давыдов С., Быстрицкий А. ПЛИС типа ППВМ с одноуровневой структурой межсоединений // Компоненты и технологии. 2011. № 1.
2. Строгонов А., Мотылев М., Давыдов С., Быстрицкий А., Цыбин С. ПЛИС в ПЛИС, или Как спроектировать самому // Компоненты и технологии. 2011. № 4.
3. Строгонов А., Мотылев М., Давыдов С., Быстрицкий А., Цыбин С. Проектирование академических ПЛИС типа ППВМ с одноуровневой структурой межсоединений // Компоненты и технологии. 2011. № 6.
4. Солонина А. Моделирование цифровой обработки сигналов ЦОС в MATLAB. Ч. 4. Моделирование структур цифровых фильтров c фиксированной точкой программными средствами MATLAB: анализ характеристик КИХ-фильтров // Компоненты и технологии. 2009. № 2.
BEGIN