Міністерство освіти та науки України
Національний університет «Львівська політехніка»
Звіт
з лабораторної роботи №5
з дисципліни:«Основи проектування цифрових засобів на ПЛІС»
на тему: «Розробка цифрового нерекурсивного CIX (FIR) фільтра»
Львів-2017
Тема: Розробка цифрового нерекурсивного CIX (FIR) фільтра.
Мета роботи: Розробити цифровий нерекурсивний СІХ (FIR) фільтр.
Постановка задачі: розробити цифровий нерекурсивний СІХ (FIR) фільтр.
Завдання: 5. 97, 97, 97, 106, 106.
Оптимізація чисел
Переведемо дані числа у двійкові:
10610 = 11010102
9710 = 11000012
В даному випадку нам не потрібно оптимізовувати числа.
VHDL-реалізація першого перемножувача
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity kiv_mod1 is
Port ( KIV_A : in STD_LOGIC_VECTOR (7 downto 0);
KIV_out1 : out STD_LOGIC_VECTOR (15 downto 0));
end kiv_mod1;
architecture Behavioral of kiv_mod1 is
signal kiv_prod,kiv_p7,kiv_p6,kiv_p5,kiv_p4,kiv_p3,kiv_p2,kiv_p1,kiv_p0:unsigned (15 downto 0);
begin
kiv_p0 <="00000000" & unsigned (kiv_A) & "";
kiv_p5 <="000" & unsigned (kiv_A) & "00000";
kiv_p6 <="00" & unsigned (kiv_A) & "000000";
kiv_prod <= kiv_p0+kiv_p5 +kiv_p6;
kiv_out1 <= std_logic_vector (kiv_prod);
end Behavioral;
VHDL-реалізація другого перемножувача
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity kiv_mod2 is
Port ( KIV_A : in STD_LOGIC_VECTOR (7 downto 0);
KIV_out2 : out STD_LOGIC_VECTOR (15 downto 0));
end kiv_mod2;
architecture Behavioral of kiv_mod2 is
signal kiv_prod, kiv_p7,kiv_p6,kiv_p5,kiv_p4,kiv_p3,kiv_p2,kiv_p1,kiv_p0:unsigned (15 downto 0);
begin
kiv_p1 <="0000000" & unsigned (kiv_A) & "0";
kiv_p3 <="00000" & unsigned (kiv_A) & "000";
kiv_p5 <="000" & unsigned (kiv_A) & "00000";
kiv_p6 <="00" & unsigned (kiv_A) & "000000";
kiv_prod <= kiv_p1 +kiv_p3+kiv_p5 +kiv_p6;
kiv_out2 <= std_logic_vector (kiv_prod);
end Behavioral;
Реалізація схеми CIX фільтру у Xilinx
/
Рис. 1. Схема CIX фільтру з синхронізацією виводу результату опрацювання
Результат синтезу схеми CIX фільту, розробленого на основі ipcore
Створюємо CIX-фільтр:
/
Рис. 2. Створення CIX-фільтру на основі IPCore
VHDL-код тестового стенду
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY kiv_sh2_kiv_sh2_sch_tb IS
END kiv_sh2_kiv_sh2_sch_tb;
ARCHITECTURE behavioral OF kiv_sh2_kiv_sh2_sch_tb IS
COMPONENT kiv_sh2
PORT( KIV_A : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
CLK : IN STD_LOGIC;
CE : IN STD_LOGIC;
CLR : IN STD_LOGIC;
res_ip : OUT STD_LOGIC_VECTOR (16 DOWNTO 0);
rfd : OUT STD_LOGIC;
rdy : OUT STD_LOGIC;
res : OUT STD_LOGIC_VECTOR (15 DOWNTO 0));
END COMPONENT;
SIGNAL KIV_A : STD_LOGIC_VECTOR (7 DOWNTO 0) :=x"00";
SIGNAL CLK : STD_LOGIC :='0';
SIGNAL CE : STD_LOGIC :='1';
SIGNAL CLR : STD_LOGIC :='0';
SIGNAL res_ip : STD_LOGIC_VECTOR (16 DOWNTO 0);
SIGNAL rfd : STD_LOGIC;
SIGNAL rdy : STD_LOGIC;
SIGNAL res : STD_LOGIC_VECTOR (15 DOWNTO 0);
BEGIN
UUT: kiv_sh2 PORT MAP(
KIV_A => KIV_A,
CLK => CLK,
CE => CE,
CLR => CLR,
res_ip => res_ip,
rfd => rfd,
rdy => rdy,
res => res
);
clk_process : PROCESS
BEGIN
CLK <='0';
WAIT FOR 10 ns;
CLK <= '1';
WAIT FOR 10 ns;
END PROCESS;
data_change_process : PROCESS
VARIABLE I : INTEGER;
BEGIN
for i in 0 to 3 loop
WAIT FOR 20 ns;
kiv_A <= conv_std_logic_vector(conv_integer(kiv_A) + 1,8);
end loop;
kiv_a<="00000000";
for i in 0 to 4 loop
wait for 20 ns;
end loop;
for i in 0 to 3 loop
WAIT FOR 20 ns;
kiv_A <= conv_std_logic_vector(conv_integer(kiv_A) + 2,8);
end loop;
kiv_a<="00000000";
for i in 0 to 4 loop
wait for 20 ns;
end loop;
END PROCESS;
-- *** Test Bench - User Defined Section ***
tb : PROCESS
BEGIN
WAIT; -- will wait forever
END PROCESS;
-- *** End Test Bench - User Defined Section ***
END;
Часова діаграма для перевірки результатів обчислень
/
Рис. 3. Часова діаграма результатів
Висновок: на даній лабораторній роботі я навчився розробляти цифровий нерекурсивний СІХ (FIR) фільтр.