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

📄 fir.vhd

📁 浮点fir设计工具
💻 VHD
📖 第 1 页 / 共 2 页
字号:
--       AccelDSP 9.1.00 build 868 Production, compiled Feb 16 2007 
-- 
--    THIS IS UNPUBLISHED, LICENSED SOFTWARE THAT IS THE CONFIDENTIAL 
--        AND PROPRIETARY PROPERTY OF XILINX OR ITS LICENSORS 
-- 
--      Copyright(c) Xilinx, Inc., 2000-2007, All Rights Reserved. 
--   Reproduction or reuse, in any form, without the explicit written 
--          consent of Xilinx, Inc., is strictly prohibited. 
-- 
--  User: WangQian 
--  Machine: A2D3DF917F70473 (i1586, Windows XP Service Pack 2, 5.01.2600) 
--  Date: Mon May 12 10:57:37 2008 
-- 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
library work;


entity fir is 
	port (
		indatabuf : in signed( 11 downto 0 );
		outdatabuf : out signed( 25 downto 0 );
		ac_InputAvail : in std_logic;
		ac_OutputAvail : out std_logic;
		Reset : in std_logic;
		Clock : in std_logic
	);
end fir;


architecture RTL of fir is

	signal ac_is_busy : boolean;
	signal ac_latch_indatabuf_1 : signed( 11 downto 0 );
	constant ac_scalar_ac_input_mtimes_1_0 : unsigned( 11 downto 0 ) := "000000010001";
	constant ac_scalar_ac_input_mtimes_1_1 : unsigned( 11 downto 0 ) := "000000100011";
	constant ac_scalar_ac_input_mtimes_1_10 : unsigned( 11 downto 0 ) := "000110010000";
	constant ac_scalar_ac_input_mtimes_1_11 : unsigned( 11 downto 0 ) := "000100011000";
	constant ac_scalar_ac_input_mtimes_1_12 : unsigned( 11 downto 0 ) := "000010101000";
	constant ac_scalar_ac_input_mtimes_1_13 : unsigned( 11 downto 0 ) := "000001010011";
	constant ac_scalar_ac_input_mtimes_1_14 : unsigned( 11 downto 0 ) := "000000100011";
	constant ac_scalar_ac_input_mtimes_1_15 : unsigned( 11 downto 0 ) := "000000010001";
	constant ac_scalar_ac_input_mtimes_1_2 : unsigned( 11 downto 0 ) := "000001010011";
	constant ac_scalar_ac_input_mtimes_1_3 : unsigned( 11 downto 0 ) := "000010101000";
	constant ac_scalar_ac_input_mtimes_1_4 : unsigned( 11 downto 0 ) := "000100011000";
	constant ac_scalar_ac_input_mtimes_1_5 : unsigned( 11 downto 0 ) := "000110010000";
	constant ac_scalar_ac_input_mtimes_1_6 : unsigned( 11 downto 0 ) := "000111110101";
	constant ac_scalar_ac_input_mtimes_1_7 : unsigned( 11 downto 0 ) := "001000101111";
	constant ac_scalar_ac_input_mtimes_1_8 : unsigned( 11 downto 0 ) := "001000101111";
	constant ac_scalar_ac_input_mtimes_1_9 : unsigned( 11 downto 0 ) := "000111110101";
	signal ac_scalar_tap_delay_0 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_1 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_10 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_11 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_12 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_13 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_14 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_15 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_2 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_3 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_4 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_5 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_6 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_7 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_8 : signed( 11 downto 0 );
	signal ac_scalar_tap_delay_9 : signed( 11 downto 0 );
	signal ac_tmp_0 : signed( 24 downto 0 );
	signal mtimes_001_accum_regmerge_1 : signed( 28 downto 0 );
	signal proceed_var : boolean;
	signal ac_shared_adder_1_result : signed( 28 downto 0 );
	signal ac_shared_multiply_0_result : signed( 24 downto 0 );
	type STATE_VAR_DEF_fir_process_state is 
	( 
		sm0_15,
		sm0_14,
		sm0_13,
		sm0_12,
		sm0_11,
		sm0_10,
		sm0_9,
		sm0_8,
		sm0_7,
		sm0_6,
		sm0_5,
		sm0_4,
		sm0_3,
		sm0_2,
		sm0_1,
		sm0_0
	);

	signal fir_process_state : STATE_VAR_DEF_fir_process_state;
begin
	proceed_var <= ((ac_InputAvail = '1') or ac_is_busy);

	ac_shared_multiply_0_process_combinational_1:
	process ( fir_process_state, ac_scalar_tap_delay_0, ac_scalar_tap_delay_1, ac_scalar_tap_delay_2, ac_scalar_tap_delay_3, ac_scalar_tap_delay_4, ac_scalar_tap_delay_5, ac_scalar_tap_delay_6, ac_scalar_tap_delay_7, ac_scalar_tap_delay_8, ac_scalar_tap_delay_9, ac_scalar_tap_delay_10, ac_scalar_tap_delay_11, ac_scalar_tap_delay_12, ac_scalar_tap_delay_13, ac_scalar_tap_delay_14, ac_scalar_tap_delay_15 ) is
		variable ac_shared_multiply_0_lhs : signed( 11 downto 0 );
		variable ac_shared_multiply_0_rhs : unsigned( 11 downto 0 );
		variable ac_tmp_52 : unsigned( 12 downto 0 );
	begin

		case fir_process_state is

			when sm0_15 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_0;

			when sm0_14 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_1;

			when sm0_13 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_2;

			when sm0_12 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_3;

			when sm0_11 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_4;

			when sm0_10 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_5;

			when sm0_9 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_6;

			when sm0_8 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_7;

			when sm0_7 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_8;

			when sm0_6 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_9;

			when sm0_5 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_10;

			when sm0_4 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_11;

			when sm0_3 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_12;

			when sm0_2 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_13;

			when sm0_1 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_14;

			when sm0_0 => 
				ac_shared_multiply_0_lhs := ac_scalar_tap_delay_15;

			when others => 
				ac_shared_multiply_0_lhs := "000000000000";

		end case; --fir_process_state


		case fir_process_state is

			when sm0_15 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_0;

			when sm0_14 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_1;

			when sm0_13 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_2;

			when sm0_12 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_3;

			when sm0_11 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_4;

			when sm0_10 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_5;

			when sm0_9 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_6;

			when sm0_8 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_7;

			when sm0_7 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_8;

			when sm0_6 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_9;

			when sm0_5 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_10;

			when sm0_4 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_11;

			when sm0_3 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_12;

			when sm0_2 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_13;

			when sm0_1 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_14;

			when sm0_0 => 
				ac_shared_multiply_0_rhs := ac_scalar_ac_input_mtimes_1_15;

			when others => 
				ac_shared_multiply_0_rhs := "000000000000";

		end case; --fir_process_state

		ac_tmp_52 := ('0' & ac_shared_multiply_0_rhs);
		ac_shared_multiply_0_result <= (ac_shared_multiply_0_lhs * signed(ac_tmp_52));

	end process ac_shared_multiply_0_process_combinational_1;


	ac_shared_adder_1_process_combinational_0:
	process ( ac_shared_multiply_0_result, ac_tmp_0, fir_process_state, mtimes_001_accum_regmerge_1 ) is
		variable ac_shared_adder_1_lhs : signed( 28 downto 0 );
		variable ac_shared_adder_1_rhs : signed( 28 downto 0 );
		variable ac_tmp_1 : signed( 24 downto 0 );

⌨️ 快捷键说明

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