⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fir.vhd

📁 This is the course for VHDL programming
💻 VHD
字号:
--             LINEAR PHASE FIR FILTERLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;package filt is    type const_array is array(positive range <>)OF SIGNED(7 downto 0);end package;use work.filt.all;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_textio.ALL;use std.textio.all;ENTITY FIRFILT8 IS	generic(con:const_array:=("00110110","00110001","00100011","00010000"));	--generic(con:const_array:=(54,49,35,16));	PORT( X:IN  SIGNED( 7 DOWNTO 0);		Y:OUT SIGNED(15 DOWNTO 0);		CLK,RST:IN STD_LOGIC	    );END FIRFILT8;ARCHITECTURE RTL OF FIRFILT8 IS	TYPE X_ARRAY IS ARRAY(1 TO 2*con'high-2) OF SIGNED( 7 DOWNTO 0);	SIGNAL XA:X_ARRAY;--FIR SHIFT REGISTERBEGIN	SHIFT_PROC:PROCESS(CLK,RST,XA,X)	BEGIN		IF RST = '1' THEN XA <= (OTHERS => "00000000");		ELSIF CLK'EVENT AND CLK = '1' THEN			XA(1) <= X;			FOR I IN 1 TO XA'HIGH-1 LOOP				XA(I+1) <= XA(I);--SHIFT CONTENTS OF X ARRAY			END LOOP;		END IF;	END PROCESS SHIFT_PROC;		SUM_PROC:PROCESS(XA,X)		variable sum :SIGNED(18 downto 0);		variable sum1:SIGNED( 8 downto 0);		variable sum2:SIGNED( 8 downto 0);	BEGIN		--X IS NOT PART OF X ARRAY, HENCE HANDLED SEPARATELY		sum1:= (X(7) & X) + XA(XA'HIGH);		sum:= (sum1(8)&sum1(8)&sum1) * con(con'high);		sum:= sum + XA(con'high-1)*con(1);--Center element				FOR I IN 1 to (con'high-2) LOOP			sum2:= (XA(con'high-1-I)(7) &  XA(con'high-1-I))+XA(con'high-1+I);		   	sum := sum+ sum2 * con(I+1);		END LOOP;		Y <= sum(15 downto 0);	END PROCESS SUM_PROC;	END RTL;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -