OpenCores
URL https://opencores.org/ocsvn/adaptive_lms_equalizer/adaptive_lms_equalizer/trunk

Subversion Repositories adaptive_lms_equalizer

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

/trunk/code/add16.vhd
0,0 → 1,36
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- 16 bit adder
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
 
 
entity add16 is
Port ( d1_in : in std_logic_vector(15 downto 0);
d2_in : in std_logic_vector(15 downto 0);
d_out : out std_logic_vector(15 downto 0));
end add16;
 
architecture Behavioral of add16 is
 
begin
d_out <= d1_in + d2_in;
 
end Behavioral;
/trunk/code/bin_to_7seg.vhd
0,0 → 1,56
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
-- seven segment display mapping from 8 bit no
 
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
 
entity bin_to_7seg is
Port ( din : in std_logic_vector(3 downto 0);
dis_out : out std_logic_vector(7 downto 0));
end bin_to_7seg;
 
architecture Behavioral of bin_to_7seg is
 
begin
 
 
dis_out <= "00000010" when din = "0000" else
"10011110" when din = "0001" else
"00100100" when din = "0010" else
"00001100" when din = "0011" else
"10011000" when din = "0100" else
"01001000" when din = "0101" else
"01000000" when din = "0110" else
"00011110" when din = "0111" else
"00000000" when din = "1000" else
"00011000" when din = "1001" else
"00010000" when din = "1010" else
"11000000" when din = "1011" else
"01100010" when din = "1100" else
"10000100" when din = "1101" else
"01100000" when din = "1110" else
"01110000";
 
 
end Behavioral;
/trunk/code/unit_calc.vhd
0,0 → 1,169
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- A.8
-- unit program module of filter core
-- we have to cascade instance of this module to make multi tap filter
 
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
 
 
entity unit_calc is
Port ( x_in : in std_logic_vector(7 downto 0);
x_N_in : in std_logic_vector(7 downto 0);
ue_in : in std_logic_vector(7 downto 0);
y_in : in std_logic_vector(7 downto 0);
x_out : out std_logic_vector(7 downto 0);
x_N_out : out std_logic_vector(7 downto 0);
ue_out : out std_logic_vector(7 downto 0);
y_out: out std_logic_vector(7 downto 0);
clock : in std_logic);
 
end unit_calc;
 
architecture standard of unit_calc is
-- component declarations
-- 8 bit multiplier
component mul8
Port ( d1_in : in std_logic_vector(7 downto 0);
d2_in : in std_logic_vector(7 downto 0);
d_out : out std_logic_vector(15 downto 0));
 
end component;
-- 16 bit adder
component add16
Port ( d1_in : in std_logic_vector(15 downto 0);
d2_in : in std_logic_vector(15 downto 0);
d_out : out std_logic_vector(15 downto 0));
 
end component;
 
-- saturation circuit
component saturation
Port ( d_in : in std_logic_vector(15 downto 0);
d_out : out std_logic_vector(15 downto 0));
end component;
 
-- u scaling circuit
component u_scaling
Port ( d_in : in std_logic_vector(15 downto 0);
d_out : out std_logic_vector(15 downto 0);
clock : in std_logic);
end component;
 
-- truncation circuit
component truncation
Port ( d_in : in std_logic_vector(15 downto 0);
d_out : out std_logic_vector(7 downto 0));
end component;
-- one sample delay
component shift_1d
Port ( xin : in std_logic_vector(7 downto 0);
xout : out std_logic_vector(7 downto 0);
clock : in std_logic);
end component;
-- shift regester
component shift_1d_16
Port ( xin : in std_logic_vector(15 downto 0);
xout : out std_logic_vector(15 downto 0);
clock : in std_logic);
end component;
 
 
signal shiftx: std_logic_vector(31 downto 0);
signal shiftxn: std_logic_vector(31 downto 0);
signal shiftue: std_logic_vector(23 downto 0);
signal shifty: std_logic_vector(15 downto 0);
 
signal coeff8: std_logic_vector(7 downto 0);
signal coeff16:std_logic_vector(15 downto 0);
signal xnin_ue:std_logic_vector(15 downto 0);
signal xnin_ue_scaled:std_logic_vector(15 downto 0);
signal new_coeff_true:std_logic_vector(15 downto 0);
signal delayed_new_coeff_true:std_logic_vector(15 downto 0);
signal y_out16:std_logic_vector(15 downto 0);
signal y_out8:std_logic_vector(7 downto 0);
begin
-- basic pipelining
unit_process:
process (clock)
begin
if(clock'event and clock = '1') then
 
shiftx <= x_in & shiftx(31 downto 8);
shiftxn <= x_N_in & shiftxn(31 downto 8);
shiftue <= ue_in & shiftue(23 downto 8);
shifty <= y_in & shifty(15 downto 8);
 
end if;
end process;
 
x_out <= shiftx(7 downto 0);
x_N_out <= shiftxn(7 downto 0);
ue_out <= shiftue(7 downto 0);
 
mul_xnin_ue: mul8 -- no delay
port map( d1_in => x_N_in,
d2_in => ue_in,
d_out => xnin_ue);
 
u1:u_scaling -- 1 clock cycle
port map( d_in => xnin_ue,
d_out => xnin_ue_scaled,
clock => clock
);
 
add1:add16 -- no delay
port map( d1_in => xnin_ue_scaled,
d2_in => coeff16,
d_out => new_coeff_true
);
 
delay_2:shift_1d_16 -- each clock
port map( clock => clock,
xin => new_coeff_true,
xout => delayed_new_coeff_true
);
 
sat_1:saturation
port map( d_in => delayed_new_coeff_true,
d_out => coeff16
);
trunc_1:truncation
port map(
d_in => coeff16,
d_out => coeff8
);
mul_coeff_x_in:mul8
port map( d1_in => coeff8,
d2_in => shiftx(31 downto 24),
d_out => y_out16
);
trunc_2:truncation
port map(
d_in => y_out16,
d_out => y_out8
);
y_out <= y_out8 + shifty(7 downto 0);
end standard;
 
/trunk/code/test_data_gen.vhd
0,0 → 1,85
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- VHDL Test Bench Created from source file data_gen.vhd -- 09:38:13 03/25/2005
--
-- Notes:
-- This testbench has been automatically generated using types std_logic and
-- std_logic_vector for the ports of the unit under test. Xilinx recommends
-- that these types always be used for the top-level I/O of a design in order
-- to guarantee that the testbench will bind correctly to the post-implementation
-- simulation model.
--
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
 
ENTITY testbench IS
END testbench;
 
ARCHITECTURE behavior OF testbench IS
 
COMPONENT data_gen
PORT(
clock : IN std_logic;
reset : IN std_logic;
xout : OUT std_logic_vector(7 downto 0);
dxout : OUT std_logic_vector(7 downto 0)
);
END COMPONENT;
 
SIGNAL clock : std_logic;
SIGNAL reset : std_logic;
SIGNAL xout : std_logic_vector(7 downto 0);
SIGNAL dxout : std_logic_vector(7 downto 0);
 
CONSTANT clk_high : time := 10 ns;
CONSTANT clk_low : time := 10 ns;
CONSTANT clk_period : time := 20 ns;
CONSTANT clk_hold : time := 4 ns;
 
 
BEGIN
 
uut: data_gen PORT MAP(
clock => clock,
reset => reset,
xout => xout,
dxout => dxout
);
 
 
-- *** Test Bench - User Defined Section ***
clk_gen: PROCESS
BEGIN
clock <= '1';
WAIT FOR clk_high;
clock <= '0';
WAIT FOR clk_low;
 
END PROCESS clk_gen;
 
reset_gen: process
begin
reset <= '1';
wait for clk_period*5;
reset <= '0';
 
wait;
end process reset_gen;
-- *** End Test Bench - User Defined Section ***
 
END;
/trunk/code/filt_test_system.vhd
0,0 → 1,173
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- This File is Testing System For Equalizer
-- It Includes DATA generator Equalizer core and Error Display unit
 
-- File: Filt_test_system.vhd
-- Developer: Digish K. Pandya
-- Test bench file test_filt_test_sys.vhd
 
-- Main Testing system for LMS adaptive filter
-- Synthesised and tested on SPARTAN II xc2s100-6qt144
 
--Libraries from vendor
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
 
-- Pin Definations
entity filt_test_system is
Port ( clock : in std_logic;
error_led_out : out std_logic_vector(7 downto 0);
seg_select:out std_logic_vector(3 downto 0);
error_freq_out : out std_logic;
filt_data_out : out std_logic_vector(7 downto 0);
reset : in std_logic;
reset_clk : in std_logic;
adaption_enable : in std_logic);
end filt_test_system;
 
-- Architecture body
 
architecture test_chip of filt_test_system is
 
-- Component Declarations
 
-- 1 LMS filter Transpose form Architecture
component tf_lms
Port (
xin : in std_logic_vector(7 downto 0); -- data input
dxin : in std_logic_vector(7 downto 0); -- desired response input
clock : in std_logic; -- clock
adapt_en: in std_logic; -- enable adaption
 
err:out std_logic_vector(7 downto 0); -- error output
yout : out std_logic_vector(7 downto 0) -- output data
);
end component ;
 
-- 2 Data generator system
component data_gen
Port (
clock : in std_logic;
reset : in std_logic;
 
xout : out std_logic_vector(7 downto 0);
dxout : out std_logic_vector(7 downto 0)
);
end component ;
-- 3 Clock devider
-- Provides two clocks for different purpose
component clock_div
Port ( reset: in std_logic;
in_clk : in std_logic;
 
out1 : out std_logic; -- fast
out2 : out std_logic); -- slow
end component;
 
-- 4 Displays MSE on seven segment diplay
component Display_MSE
Port ( reset: in std_logic;
error_in : in std_logic_vector(7 downto 0);
clock : in std_logic;
 
an_out: out std_logic;
seg_select_out : out std_logic_vector(3 downto 0);
seg_dis_out : out std_logic_vector(7 downto 0));
end component;
 
-- global clock buffer primary (for input pin)
-- [Not able to display linkage but available in RTL]
component BUFGP
port (I: in std_logic; O: out std_logic);
end component;
-- clock buffer Secondary (for internal logic)
-- [Not able to display linkage but available in RTL]
component BUFGS
port (I: in STD_LOGIC;O: out STD_LOGIC);
end component;
 
 
-- Local Interconnects
signal xout_tmp: std_logic_vector( 7 downto 0);
signal dxout_tmp: std_logic_vector( 7 downto 0);
signal clock_fast,clock_slow: std_logic;
signal error_dis_in : std_logic_vector(7 downto 0);
signal CLK_SIG,clock_f,clock_s: std_logic;
 
begin
-- Clock Input through buffer
U1: BUFGP port map (I => clock, O => CLK_SIG);
-- Test DATA generator
data_gen1: data_gen
port map(
clock => clock_slow,
reset => reset,
xout => xout_tmp,
dxout => dxout_tmp
);
 
-- LMS core UNDER test
lms: tf_lms
Port map(
xin => xout_tmp,
dxin => dxout_tmp,
clock => clock_slow,
err => error_dis_in,
yout => filt_data_out,
adapt_en => adaption_enable
);
 
 
-- Fast clock used to avoide flicker
err_display:display_mse
port map(
reset => reset,
error_in => error_dis_in,
clock => clock_fast,
 
an_out => error_freq_out,
seg_select_out => seg_select,
seg_dis_out => error_led_out
);
 
 
-- Clock Devider
cd: clock_div
port map(
reset => reset_clk,
in_clk => clk_sig,
out1 => clock_f,
out2 => clock_s
);
 
-- Fast clock for Seven Segment Display refresh
U2: BUFGS port map (I => clock_f, O => clock_fast);
 
-- Slow clock for Filtering (SO we can see changes in on Sevensegment)
-- In actual application we have to keep maximum possible clock here
U3: BUFGS port map (I => clock_s, O => clock_slow);
 
 
end test_chip;
-- The End --
/trunk/code/data_gen.vhd
0,0 → 1,76
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- A.3 data_gen.vhd
-- datagenerator system for generating test data feed to lms filter
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
 
entity data_gen is
Port ( clock : in std_logic;
reset : in std_logic;
xout : out std_logic_vector(7 downto 0);
dxout : out std_logic_vector(7 downto 0));
end data_gen;
 
architecture structural of data_gen is
-- training sequence generator
component tr_seq_gen
Port ( clock : in std_logic;
reset : in std_logic;
data_out : out std_logic_vector(7 downto 0)
);
end component;
-- channel filter
component const_ch_filt
Port (
clock : in std_logic;
data_in : in std_logic_vector(7 downto 0);
shifted_data_out : out std_logic_vector(7 downto 0);
filtered_data_out : out std_logic_vector(7 downto 0)
);
end component;
 
signal data : std_logic_vector (7 downto 0);
 
begin
-- Test Data generator
data_generator:
process(clock,reset)
begin
if(clock'event and clock = '1') then
if (data = "01000000") then
data <= "11000000";
else
data <= "01000000";
end if;
end if;
if(reset = '0') then
data <= "01000000";
end if;
 
end process;
-- This Channel Filter will convolve our input Signal
channel: const_ch_filt
port map (
clock => clock,
data_in => data,
shifted_data_out => dxout,
filtered_data_out => xout
);
 
end structural;
/trunk/code/u_scaling.vhd
0,0 → 1,44
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- A.10
-- multiply by 0.0625
-- only simple shift logic is applied
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
 
 
entity u_scaling is
Port ( d_in : in std_logic_vector(15 downto 0);
d_out : out std_logic_vector(15 downto 0);
clock : in std_logic);
end u_scaling;
 
architecture combinational of u_scaling is
signal sign_bit:std_logic_vector(4 downto 0);
begin
p1:
process(clock)
begin
if(clock'event and clock = '1') then
d_out <= d_in(15) & d_in(15) & d_in(15) & d_in(15) & d_in(15) & d_in(14 downto 4);
end if;
end process;
end combinational;
/trunk/code/d_to_a_1bit.vhd
0,0 → 1,50
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- simple one bit analog output
-- is outputting frequency in responce to count no
-- so it repressent amount of error with frequency
 
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
entity d_a is
port (
clk : in std_logic;
data_in : in std_logic_vector (15 downto 0);
an_out : out std_logic;
reset: in std_logic
);
end d_a;
 
architecture d_a_arch of d_a is
signal d_a_Accumulator : std_logic_vector(8 downto 0);
begin
process(clk)
begin
if (clk'event and clk = '1') then
if (reset = '0') then
d_a_Accumulator <= "000000000";
else
d_a_Accumulator <= ("0" & d_a_Accumulator(7 downto 0)) + ("0" & data_in(7 downto 0));
end if;
end if;
end process;
 
an_out <= d_a_Accumulator(8);
end d_a_arch;
 
/trunk/code/core_filt.vhd
0,0 → 1,141
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
-- A.7
-- Filter core for adaptive equalizer
-- Five tap filter
-- structuaral description
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
entity core_filt is
Port (
x_in : in std_logic_vector(7 downto 0);
x_N_in : in std_logic_vector(7 downto 0);
ue_in : in std_logic_vector(7 downto 0);
clock : in std_logic;
y_out : out std_logic_vector(7 downto 0));
end core_filt;
 
architecture pm_chain of core_filt is
 
-- basic tap processing element
component unit_calc
Port ( x_in : in std_logic_vector(7 downto 0);
x_N_in : in std_logic_vector(7 downto 0);
ue_in : in std_logic_vector(7 downto 0);
y_in : in std_logic_vector(7 downto 0);
x_out : out std_logic_vector(7 downto 0);
x_N_out : out std_logic_vector(7 downto 0);
ue_out : out std_logic_vector(7 downto 0);
y_out: out std_logic_vector(7 downto 0);
clock : in std_logic);
end component ;
 
 
signal x_out_t1 :std_logic_vector(7 downto 0);
signal x_out_t2 :std_logic_vector(7 downto 0);
signal x_out_t3 :std_logic_vector(7 downto 0);
signal x_out_t4 :std_logic_vector(7 downto 0);
 
signal x_N_out_t1 :std_logic_vector(7 downto 0);
signal x_N_out_t2 :std_logic_vector(7 downto 0);
signal x_N_out_t3 :std_logic_vector(7 downto 0);
signal x_N_out_t4 :std_logic_vector(7 downto 0);
 
signal ue_out_t1 :std_logic_vector(7 downto 0);
signal ue_out_t2 :std_logic_vector(7 downto 0);
signal ue_out_t3 :std_logic_vector(7 downto 0);
signal ue_out_t4 :std_logic_vector(7 downto 0);
 
signal y_out_t1 :std_logic_vector(7 downto 0);
signal y_out_t2 :std_logic_vector(7 downto 0);
signal y_out_t3 :std_logic_vector(7 downto 0);
signal y_out_t4 :std_logic_vector(7 downto 0);
 
 
begin
 
tap1: unit_calc
port map (
x_in => x_in,
x_N_in => x_N_in,
ue_in => ue_in,
y_in => "00000000",
x_out => x_out_t1,
x_N_out => x_N_out_t1,
ue_out => ue_out_t1,
y_out => y_out_t1,
clock => clock
);
tap2: unit_calc
port map (
x_in => x_out_t1,
x_N_in => x_N_out_t1,
ue_in => ue_out_t1,
y_in => y_out_t1,
x_out => x_out_t2,
x_N_out => x_N_out_t2,
ue_out => ue_out_t2,
y_out => y_out_t2,
clock => clock
);
tap3: unit_calc
port map (
x_in => x_out_t2,
x_N_in => x_N_out_t2,
ue_in => ue_out_t2,
y_in => y_out_t2,
x_out => x_out_t3,
x_N_out => x_N_out_t3,
ue_out => ue_out_t3,
y_out => y_out_t3,
clock => clock
);
tap4: unit_calc
port map (
x_in => x_out_t3,
x_N_in => x_N_out_t3,
ue_in => ue_out_t3,
y_in => y_out_t3,
x_out => x_out_t4,
x_N_out => x_N_out_t4,
ue_out => ue_out_t4,
y_out => y_out_t4,
clock => clock
);
tap5: unit_calc
port map (
x_in => x_out_t4,
x_N_in => x_N_out_t4,
ue_in => ue_out_t4,
y_in => y_out_t4,
x_out => open,
x_N_out => open,
ue_out => open,
y_out => y_out,
clock => clock
);
 
 
 
 
end pm_chain;
/trunk/code/shift_1d_16.vhd
0,0 → 1,47
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- 16 vit shift regester
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
 
entity shift_1d_16 is
Port ( xin : in std_logic_vector(15 downto 0);
xout : out std_logic_vector(15 downto 0);
clock : in std_logic);
end shift_1d_16;
 
architecture Behavioral of shift_1d_16 is
signal shift_reg: std_logic_vector (15 downto 0);
 
begin
shift:
process(clock)
begin
if(clock'event and clock = '1') then
shift_reg <= xin ;
 
end if;
end process;
xout <= shift_reg;
 
 
end Behavioral;
/trunk/code/Display_MSE.vhd
0,0 → 1,140
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
-- ******************---
--
-- To be used with LMS testing rutine
-- process Error signal for proper display
--
-- ******************---
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
 
-- Main BLOCK BODY
entity Display_MSE is
Port (
reset: in std_logic;
error_in : in std_logic_vector(7 downto 0);
clock : in std_logic;
an_out: out std_logic;
seg_select_out : out std_logic_vector(3 downto 0);
seg_dis_out : out std_logic_vector(7 downto 0));
end Display_MSE;
 
-- Architecture
architecture mixed of Display_MSE is
 
-- Components Used
 
-- 1 Multiplexer For input to 7 segment module
component mux
Port ( in1 : in std_logic_vector(3 downto 0);
in2 : in std_logic_vector(3 downto 0);
in3 : in std_logic_vector(3 downto 0);
in4 : in std_logic_vector(3 downto 0);
sel : in std_logic_vector( 1 downto 0);
 
o_ut : out std_logic_vector(3 downto 0));
end component;
 
-- 2 Binary to sevenseg Mapping module
component bin_to_7seg
Port ( din : in std_logic_vector(3 downto 0);
dis_out : out std_logic_vector(7 downto 0));
end component;
 
-- 3 Digital to analog output 1 bit (frequency)
component d_a
port (
clk : in std_logic;
data_in : in std_logic_vector (15 downto 0);
reset:in std_logic;
 
an_out : out std_logic
);
end component;
-- Local Interconnects
signal error_tmp: std_logic_vector( 15 downto 0);
signal error_led_out_tmp:std_logic_vector(7 downto 0);
signal seg_in: std_logic_vector( 3 downto 0);
signal seg_sel: std_logic_vector( 1 downto 0);
 
begin
 
-- FSM for Selcting 7 segment display (Multiplexed mode)
 
mux_display_sel:
process (clock)
begin
if(clock'event and clock = '1') then
if reset = '0' then seg_sel <= "00";
elsif seg_sel = "00" then seg_sel <= "01";
elsif seg_sel = "01" then seg_sel <= "10";
elsif seg_sel = "10" then seg_sel <= "11";
elsif seg_sel = "11" then seg_sel <= "00";
else seg_sel <= "ZZ";
end if;
 
end if;
end process;
 
-- Selecting perticular segment for display
 
seg_select_out <= "0ZZZ" when seg_sel = "00" else
"Z0ZZ" when seg_sel = "01" else
"ZZ0Z" when seg_sel = "10" else
"ZZZ0" when seg_sel = "11" else
"ZZZZ";
 
-- IT is Square of ERROR
error_tmp <= error_in * error_in;
 
-- Converting Binary to Seven segment pattern
seven_seg:bin_to_7seg
Port map(
din => seg_in,
dis_out => error_led_out_tmp
);
 
-- Negative logic out
seg_dis_out <= not error_led_out_tmp;
 
-- MULTIPLEXED DISPLAY thats why ..
m1:mux
port map(in1 => error_tmp(3 downto 0),
in2 => error_tmp(7 downto 4),
in3 => error_tmp(11 downto 8),
in4 => error_tmp(15 downto 12),
sel => seg_sel, -- Changing with fast clock
o_ut => seg_in
);
 
-- NUMBER to FREQ Generator (1 bit Analog)
d_to_a:d_a
port map(
clk => clock,
data_in => error_tmp, -- 16 bit
an_out => an_out, -- 1 bit
reset => reset
);
 
end mixed;
--************ END *******-----
/trunk/code/Mux.vhd
0,0 → 1,43
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
 
entity Mux is
Port ( in1 : in std_logic_vector(3 downto 0);
in2 : in std_logic_vector(3 downto 0);
in3 : in std_logic_vector(3 downto 0);
in4 : in std_logic_vector(3 downto 0);
sel : in std_logic_vector(1 downto 0);
o_ut : out std_logic_vector(3 downto 0));
end Mux;
 
architecture Behavioral of Mux is
 
begin
 
o_ut <= in1 when sel = "00" else
in2 when sel = "01" else
in3 when sel = "10" else
in4 when sel = "11" else
"0000";
 
end Behavioral;
/trunk/code/ch_filt_tap.vhd
0,0 → 1,59
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
-- A.5
-- simple logic for filter tap operation optimized for the fact that
-- that there are only two possible data at input
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
 
 
 
entity ch_filt_tap is
Port ( din : in std_logic_vector(7 downto 0);
dout : out std_logic_vector(7 downto 0);
c1_in : in std_logic_vector(7 downto 0);
c2_in : in std_logic_vector(7 downto 0);
add_in : in std_logic_vector(7 downto 0);
add_out : out std_logic_vector(7 downto 0);
clock : in std_logic);
end ch_filt_tap;
 
architecture Behavioral of ch_filt_tap is
signal mul_res:std_logic_vector(7 downto 0);
 
begin
shift_process:
process (clock)
begin
if(clock'event and clock = '1') then
dout <= din;
end if;
end process;
 
 
with din select
mul_res <= c1_in when "11000000", -- -1
c2_in when others; -- +1
add_out <= add_in + mul_res;
 
end Behavioral;
/trunk/code/const_ch_filt.vhd
0,0 → 1,89
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
-- A.4
-- channel filter with optimized for constant input data and
-- constant coefficients
-- coefficients are rounded to power of two
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
 
entity const_ch_filt is
Port ( clock : in std_logic;
data_in : in std_logic_vector(7 downto 0);
shifted_data_out : out std_logic_vector(7 downto 0);
filtered_data_out : out std_logic_vector(7 downto 0));
end const_ch_filt;
 
architecture structural of const_ch_filt is
 
component ch_filt_tap
Port ( din : in std_logic_vector(7 downto 0);
dout : out std_logic_vector(7 downto 0);
c1_in : in std_logic_vector(7 downto 0);
c2_in : in std_logic_vector(7 downto 0);
add_in : in std_logic_vector(7 downto 0);
add_out : out std_logic_vector(7 downto 0);
clock : in std_logic);
end component;
 
signal t_data_out1: std_logic_vector (7 downto 0);
signal t_data_out2: std_logic_vector (7 downto 0);
signal t_res_out1: std_logic_vector (7 downto 0);
signal t_res_out2: std_logic_vector (7 downto 0);
 
begin
 
tap1: ch_filt_tap -- -0.2031
port map(
din => data_in,
dout => t_data_out1,
c1_in => "11110011", -- +1
c2_in => "00001101", -- -1
add_in => "00000000",
add_out => t_res_out1,
clock => clock
);
 
tap2: ch_filt_tap -- 0.4063
port map(
din => t_data_out1,
dout => t_data_out2,
c1_in => "00011010",
c2_in => "11100110",
add_in => t_res_out1,
add_out => t_res_out2,
clock => clock
);
tap3: ch_filt_tap -- -0.7969
port map(
din => t_data_out2,
dout => shifted_data_out,
c1_in => "11001101",
c2_in => "00110011",
add_in => t_res_out2,
add_out => filtered_data_out,
clock => clock
);
 
 
 
end structural;
/trunk/code/data_gen_translate.vhd
0,0 → 1,828
-- Xilinx Vhdl produced by program ngd2vhdl F.28
-- Command: -quiet -rpw 100 -tpw 0 -ar Structure -xon true -w -log __projnav/ngd2vhdl.log data_gen.ngd data_gen_translate.vhd
-- Input file: data_gen.ngd
-- Output file: data_gen_translate.vhd
-- Design name: data_gen
-- Xilinx: E:/xilinx
-- # of Entities: 1
-- Device: 2s100tq144-6
 
-- The output of ngd2vhdl is a simulation model. This file cannot be synthesized,
-- or used in any other manner other than simulation. This netlist uses simulation
-- primitives which may not represent the true implementation of the device, however
-- the netlist is functionally correct. Do not modify this file.
 
-- Model for ROC (Reset-On-Configuration) Cell
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.VITAL_Timing.all;
entity ROC is
generic (InstancePath: STRING := "*";
WIDTH : Time := 100 ns);
port(O : out std_ulogic := '1') ;
attribute VITAL_LEVEL0 of ROC : entity is TRUE;
end ROC;
 
architecture ROC_V of ROC is
attribute VITAL_LEVEL0 of ROC_V : architecture is TRUE;
begin
ONE_SHOT : process
begin
if (WIDTH <= 0 ns) then
assert FALSE report
"*** Error: a positive value of WIDTH must be specified ***"
severity failure;
else
wait for WIDTH;
O <= '0';
end if;
wait;
end process ONE_SHOT;
end ROC_V;
 
-- Model for TOC (Tristate-On-Configuration) Cell
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.VITAL_Timing.all;
entity TOC is
generic (InstancePath: STRING := "*";
WIDTH : Time := 0 ns);
port(O : out std_ulogic := '0');
attribute VITAL_LEVEL0 of TOC : entity is TRUE;
end TOC;
 
architecture TOC_V of TOC is
attribute VITAL_LEVEL0 of TOC_V : architecture is TRUE;
begin
ONE_SHOT : process
begin
O <= '1';
if (WIDTH <= 0 ns) then
O <= '0';
else
wait for WIDTH;
O <= '0';
end if;
wait;
end process ONE_SHOT;
end TOC_V;
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library SIMPRIM;
use SIMPRIM.VCOMPONENTS.ALL;
use SIMPRIM.VPACKAGE.ALL;
entity data_gen is
port (
reset : in STD_LOGIC := 'X';
clock : in STD_LOGIC := 'X';
dxout : out STD_LOGIC_VECTOR ( 7 downto 0 );
xout : out STD_LOGIC_VECTOR ( 7 downto 0 )
);
end data_gen;
 
architecture Structure of data_gen is
component ROC
generic (InstancePath: STRING := "*";
WIDTH : Time := 100 ns);
port (O : out STD_ULOGIC := '1');
end component;
component TOC
generic (InstancePath: STRING := "*";
WIDTH : Time := 0 ns);
port (O : out STD_ULOGIC := '1');
end component;
signal data_0_Q : STD_LOGIC;
signal reset_ibuf : STD_LOGIC;
signal clock_bufgp : STD_LOGIC;
signal Q_n0003 : STD_LOGIC;
signal xout_1_obuf : STD_LOGIC;
signal n2175 : STD_LOGIC;
signal channel_tap2_madd_add_out_inst_lut2_5 : STD_LOGIC;
signal xout_2_obuf : STD_LOGIC;
signal channel_tap2_madd_add_out_inst_lut2_4 : STD_LOGIC;
signal data_7_Q : STD_LOGIC;
signal channel_tap2_madd_add_out_inst_cy_3 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_lut2_3 : STD_LOGIC;
signal channel_tap1_madd_add_out_inst_cy_6 : STD_LOGIC;
signal channel_tap2_madd_add_out_inst_cy_5 : STD_LOGIC;
signal xout_7_obuf : STD_LOGIC;
signal xout_6_obuf : STD_LOGIC;
signal xout_5_obuf : STD_LOGIC;
signal xout_4_obuf : STD_LOGIC;
signal xout_3_obuf : STD_LOGIC;
signal channel_tap2_madd_add_out_inst_lut2_3 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_cy_1 : STD_LOGIC;
signal channel_tap2_madd_add_out_inst_lut2_6 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_lut2_7 : STD_LOGIC;
signal channel_tap2_madd_add_out_inst_cy_6 : STD_LOGIC;
signal channel_tap2_madd_add_out_inst_cy_1 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_cy_4 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_cy_3 : STD_LOGIC;
signal channel_tap2_madd_add_out_inst_lut2_1 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_lut2_5 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_lut2_2 : STD_LOGIC;
signal channel_tap2_madd_add_out_inst_lut2_2 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_lut2_1 : STD_LOGIC;
signal channel_tap2_madd_add_out_inst_cy_2 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_cy_2 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_lut2_6 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_cy_5 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_cy_6 : STD_LOGIC;
signal channel_tap2_madd_add_out_inst_cy_4 : STD_LOGIC;
signal channel_tap3_madd_add_out_inst_lut2_4 : STD_LOGIC;
signal Q_n0003_O : STD_LOGIC;
signal clock_bufgp_IBUFG : STD_LOGIC;
signal GSR : STD_LOGIC;
signal dxout_7_obuf_GTS_TRI : STD_LOGIC;
signal GTS : STD_LOGIC;
signal dxout_6_obuf_GTS_TRI : STD_LOGIC;
signal dxout_5_obuf_GTS_TRI : STD_LOGIC;
signal dxout_4_obuf_GTS_TRI : STD_LOGIC;
signal dxout_3_obuf_GTS_TRI : STD_LOGIC;
signal dxout_2_obuf_GTS_TRI : STD_LOGIC;
signal dxout_1_obuf_GTS_TRI : STD_LOGIC;
signal dxout_0_obuf_GTS_TRI : STD_LOGIC;
signal xout_7_obuf_GTS_TRI : STD_LOGIC;
signal xout_6_obuf_GTS_TRI : STD_LOGIC;
signal xout_5_obuf_GTS_TRI : STD_LOGIC;
signal xout_4_obuf_GTS_TRI : STD_LOGIC;
signal xout_3_obuf_GTS_TRI : STD_LOGIC;
signal xout_2_obuf_GTS_TRI : STD_LOGIC;
signal xout_1_obuf_GTS_TRI : STD_LOGIC;
signal xout_0_obuf_GTS_TRI : STD_LOGIC;
signal VCC : STD_LOGIC;
signal GND : STD_LOGIC;
signal NlwInverterSignal_dxout_7_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_dxout_6_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_dxout_5_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_dxout_4_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_dxout_3_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_dxout_2_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_dxout_1_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_dxout_0_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_xout_7_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_xout_6_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_xout_5_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_xout_4_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_xout_3_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_xout_2_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_xout_1_obuf_GTS_TRI_CTL : STD_LOGIC;
signal NlwInverterSignal_xout_0_obuf_GTS_TRI_CTL : STD_LOGIC;
signal channel_tap3_dout : STD_LOGIC_VECTOR ( 7 downto 7 );
signal channel_tap1_dout : STD_LOGIC_VECTOR ( 7 downto 7 );
signal channel_t_res_out2 : STD_LOGIC_VECTOR ( 7 downto 2 );
signal channel_tap2_mul_res : STD_LOGIC_VECTOR ( 2 downto 2 );
signal channel_tap3_mul_res : STD_LOGIC_VECTOR ( 5 downto 5 );
signal channel_tap2_dout : STD_LOGIC_VECTOR ( 7 downto 7 );
begin
channel_tap2_madd_add_out_inst_lut2_511 : X_LUT2
generic map(
INIT => X"6"
)
port map (
ADR0 => channel_tap2_mul_res(2),
ADR1 => data_7_Q,
O => n2175
);
channel_tap3_madd_add_out_inst_sum_1 : X_XOR2
port map (
I0 => data_0_Q,
I1 => channel_tap3_madd_add_out_inst_lut2_1,
O => xout_1_obuf
);
channel_tap2_madd_add_out_inst_lut2_41 : X_LUT2
generic map(
INIT => X"6"
)
port map (
ADR0 => channel_tap1_dout(7),
ADR1 => data_7_Q,
O => channel_tap2_madd_add_out_inst_lut2_4
);
channel_tap3_madd_add_out_inst_sum_6 : X_XOR2
port map (
I0 => channel_tap3_madd_add_out_inst_cy_5,
I1 => channel_tap3_madd_add_out_inst_lut2_6,
O => xout_6_obuf
);
data_7 : X_SFF
port map (
I => Q_n0003,
SRST => reset_ibuf,
CLK => clock_bufgp,
O => data_7_Q,
CE => VCC,
SET => GND,
RST => GSR,
SSET => GND
);
xout_0_obuf : X_BUF
port map (
I => channel_tap1_madd_add_out_inst_cy_6,
O => xout_0_obuf_GTS_TRI
);
channel_tap2_madd_add_out_inst_sum_6 : X_XOR2
port map (
I0 => channel_tap2_madd_add_out_inst_cy_5,
I1 => channel_tap2_madd_add_out_inst_lut2_6,
O => channel_t_res_out2(6)
);
dxout_0_obuf : X_BUF
port map (
I => data_0_Q,
O => dxout_0_obuf_GTS_TRI
);
channel_tap3_madd_add_out_inst_lut2_21 : X_LUT2
generic map(
INIT => X"6"
)
port map (
ADR0 => channel_t_res_out2(2),
ADR1 => channel_tap2_dout(7),
O => channel_tap3_madd_add_out_inst_lut2_2
);
channel_tap2_madd_add_out_inst_cy_1_0 : X_MUX2
port map (
IA => data_0_Q,
IB => channel_tap1_madd_add_out_inst_cy_6,
SEL => channel_tap2_madd_add_out_inst_lut2_1,
O => channel_tap2_madd_add_out_inst_cy_1
);
channel_tap2_madd_add_out_inst_lut2_111 : X_LUT2
generic map(
INIT => X"5"
)
port map (
ADR0 => data_7_Q,
O => channel_tap2_madd_add_out_inst_lut2_1,
ADR1 => GND
);
xst_vcc : X_ONE
port map (
O => data_0_Q
);
xst_gnd : X_ZERO
port map (
O => channel_tap1_madd_add_out_inst_cy_6
);
channel_tap3_madd_add_out_inst_cy_6_1 : X_MUX2
port map (
IA => channel_t_res_out2(6),
IB => channel_tap3_madd_add_out_inst_cy_5,
SEL => channel_tap3_madd_add_out_inst_lut2_6,
O => channel_tap3_madd_add_out_inst_cy_6
);
channel_tap2_madd_add_out_inst_cy_6_2 : X_MUX2
port map (
IA => channel_tap2_mul_res(2),
IB => channel_tap2_madd_add_out_inst_cy_5,
SEL => channel_tap2_madd_add_out_inst_lut2_6,
O => channel_tap2_madd_add_out_inst_cy_6
);
channel_tap3_madd_add_out_inst_lut2_61 : X_LUT2
generic map(
INIT => X"6"
)
port map (
ADR0 => channel_t_res_out2(6),
ADR1 => channel_tap2_dout(7),
O => channel_tap3_madd_add_out_inst_lut2_6
);
channel_tap2_madd_add_out_inst_lut2_31 : X_LUT2
generic map(
INIT => X"9"
)
port map (
ADR0 => channel_tap1_dout(7),
ADR1 => data_7_Q,
O => channel_tap2_madd_add_out_inst_lut2_3
);
channel_tap3_madd_add_out_inst_lut2_71 : X_LUT2
generic map(
INIT => X"6"
)
port map (
ADR0 => channel_tap2_dout(7),
ADR1 => channel_t_res_out2(7),
O => channel_tap3_madd_add_out_inst_lut2_7
);
channel_tap3_madd_add_out_inst_sum_5 : X_XOR2
port map (
I0 => channel_tap3_madd_add_out_inst_cy_4,
I1 => channel_tap3_madd_add_out_inst_lut2_5,
O => xout_5_obuf
);
channel_tap3_dout_7 : X_FF
port map (
I => channel_tap2_dout(7),
CLK => clock_bufgp,
O => channel_tap3_dout(7),
CE => VCC,
SET => GND,
RST => GSR
);
channel_tap2_madd_add_out_inst_cy_5_3 : X_MUX2
port map (
IA => channel_tap2_mul_res(2),
IB => channel_tap2_madd_add_out_inst_cy_4,
SEL => n2175,
O => channel_tap2_madd_add_out_inst_cy_5
);
dxout_5_obuf : X_BUF
port map (
I => channel_tap3_dout(7),
O => dxout_5_obuf_GTS_TRI
);
xout_7_obuf_4 : X_BUF
port map (
I => xout_7_obuf,
O => xout_7_obuf_GTS_TRI
);
xout_1_obuf_5 : X_BUF
port map (
I => xout_1_obuf,
O => xout_1_obuf_GTS_TRI
);
dxout_4_obuf : X_BUF
port map (
I => channel_tap3_dout(7),
O => dxout_4_obuf_GTS_TRI
);
reset_ibuf_6 : X_BUF
port map (
I => reset,
O => reset_ibuf
);
xout_5_obuf_7 : X_BUF
port map (
I => xout_5_obuf,
O => xout_5_obuf_GTS_TRI
);
channel_tap2_madd_add_out_inst_lut2_51 : X_LUT2
generic map(
INIT => X"6"
)
port map (
ADR0 => channel_tap2_mul_res(2),
ADR1 => data_7_Q,
O => channel_tap2_madd_add_out_inst_lut2_5
);
channel_tap3_madd_add_out_inst_cy_5_8 : X_MUX2
port map (
IA => channel_t_res_out2(5),
IB => channel_tap3_madd_add_out_inst_cy_4,
SEL => channel_tap3_madd_add_out_inst_lut2_5,
O => channel_tap3_madd_add_out_inst_cy_5
);
channel_tap3_madd_add_out_inst_lut2_41 : X_LUT2
generic map(
INIT => X"9"
)
port map (
ADR0 => channel_t_res_out2(4),
ADR1 => channel_tap2_dout(7),
O => channel_tap3_madd_add_out_inst_lut2_4
);
channel_tap3_madd_add_out_inst_cy_1_9 : X_MUX2
port map (
IA => channel_tap3_mul_res(5),
IB => data_0_Q,
SEL => channel_tap3_madd_add_out_inst_lut2_1,
O => channel_tap3_madd_add_out_inst_cy_1
);
channel_tap3_mmux_mul_res_i2_result1 : X_LUT2
generic map(
INIT => X"5"
)
port map (
ADR0 => channel_tap2_dout(7),
O => channel_tap3_mul_res(5),
ADR1 => GND
);
channel_tap2_madd_add_out_inst_sum_4 : X_XOR2
port map (
I0 => channel_tap2_madd_add_out_inst_cy_3,
I1 => channel_tap2_madd_add_out_inst_lut2_4,
O => channel_t_res_out2(4)
);
channel_tap2_madd_add_out_inst_cy_2_10 : X_MUX2
port map (
IA => channel_tap2_mul_res(2),
IB => channel_tap2_madd_add_out_inst_cy_1,
SEL => channel_tap2_madd_add_out_inst_lut2_2,
O => channel_tap2_madd_add_out_inst_cy_2
);
channel_tap2_madd_add_out_inst_cy_3_11 : X_MUX2
port map (
IA => channel_tap1_dout(7),
IB => channel_tap2_madd_add_out_inst_cy_2,
SEL => channel_tap2_madd_add_out_inst_lut2_3,
O => channel_tap2_madd_add_out_inst_cy_3
);
channel_tap2_dout_7 : X_FF
port map (
I => channel_tap1_dout(7),
CLK => clock_bufgp,
O => channel_tap2_dout(7),
CE => VCC,
SET => GND,
RST => GSR
);
channel_tap2_madd_add_out_inst_sum_5 : X_XOR2
port map (
I0 => channel_tap2_madd_add_out_inst_cy_4,
I1 => n2175,
O => channel_t_res_out2(5)
);
dxout_6_obuf : X_BUF
port map (
I => channel_tap3_dout(7),
O => dxout_6_obuf_GTS_TRI
);
dxout_3_obuf : X_BUF
port map (
I => channel_tap3_dout(7),
O => dxout_3_obuf_GTS_TRI
);
dxout_2_obuf : X_BUF
port map (
I => channel_tap3_dout(7),
O => dxout_2_obuf_GTS_TRI
);
xout_3_obuf_12 : X_BUF
port map (
I => xout_3_obuf,
O => xout_3_obuf_GTS_TRI
);
channel_tap3_madd_add_out_inst_sum_2 : X_XOR2
port map (
I0 => channel_tap3_madd_add_out_inst_cy_1,
I1 => channel_tap3_madd_add_out_inst_lut2_2,
O => xout_2_obuf
);
channel_tap3_madd_add_out_inst_cy_2_13 : X_MUX2
port map (
IA => channel_t_res_out2(2),
IB => channel_tap3_madd_add_out_inst_cy_1,
SEL => channel_tap3_madd_add_out_inst_lut2_2,
O => channel_tap3_madd_add_out_inst_cy_2
);
channel_tap3_madd_add_out_inst_sum_4 : X_XOR2
port map (
I0 => channel_tap3_madd_add_out_inst_cy_3,
I1 => channel_tap3_madd_add_out_inst_lut2_4,
O => xout_4_obuf
);
channel_tap2_madd_add_out_inst_lut2_21 : X_LUT2
generic map(
INIT => X"9"
)
port map (
ADR0 => channel_tap2_mul_res(2),
ADR1 => data_7_Q,
O => channel_tap2_madd_add_out_inst_lut2_2
);
channel_tap2_mmux_mul_res_i5_result1 : X_LUT2
generic map(
INIT => X"5"
)
port map (
ADR0 => channel_tap1_dout(7),
O => channel_tap2_mul_res(2),
ADR1 => GND
);
channel_tap3_madd_add_out_inst_cy_4_14 : X_MUX2
port map (
IA => channel_t_res_out2(4),
IB => channel_tap3_madd_add_out_inst_cy_3,
SEL => channel_tap3_madd_add_out_inst_lut2_4,
O => channel_tap3_madd_add_out_inst_cy_4
);
channel_tap3_madd_add_out_inst_lut2_31 : X_LUT2
generic map(
INIT => X"6"
)
port map (
ADR0 => channel_t_res_out2(3),
ADR1 => channel_tap2_dout(7),
O => channel_tap3_madd_add_out_inst_lut2_3
);
channel_tap2_madd_add_out_inst_sum_3 : X_XOR2
port map (
I0 => channel_tap2_madd_add_out_inst_cy_2,
I1 => channel_tap2_madd_add_out_inst_lut2_3,
O => channel_t_res_out2(3)
);
channel_tap3_madd_add_out_inst_lut2_51 : X_LUT2
generic map(
INIT => X"9"
)
port map (
ADR0 => channel_t_res_out2(5),
ADR1 => channel_tap2_dout(7),
O => channel_tap3_madd_add_out_inst_lut2_5
);
xout_6_obuf_15 : X_BUF
port map (
I => xout_6_obuf,
O => xout_6_obuf_GTS_TRI
);
channel_tap3_madd_add_out_inst_sum_3 : X_XOR2
port map (
I0 => channel_tap3_madd_add_out_inst_cy_2,
I1 => channel_tap3_madd_add_out_inst_lut2_3,
O => xout_3_obuf
);
channel_tap1_dout_7 : X_FF
port map (
I => data_7_Q,
CLK => clock_bufgp,
O => channel_tap1_dout(7),
CE => VCC,
SET => GND,
RST => GSR
);
channel_tap2_madd_add_out_inst_lut2_61 : X_LUT2
generic map(
INIT => X"6"
)
port map (
ADR0 => channel_tap2_mul_res(2),
ADR1 => data_7_Q,
O => channel_tap2_madd_add_out_inst_lut2_6
);
dxout_7_obuf : X_BUF
port map (
I => channel_tap3_dout(7),
O => dxout_7_obuf_GTS_TRI
);
xout_2_obuf_16 : X_BUF
port map (
I => xout_2_obuf,
O => xout_2_obuf_GTS_TRI
);
xout_4_obuf_17 : X_BUF
port map (
I => xout_4_obuf,
O => xout_4_obuf_GTS_TRI
);
channel_tap2_madd_add_out_inst_sum_7 : X_XOR2
port map (
I0 => channel_tap2_madd_add_out_inst_cy_6,
I1 => channel_tap2_madd_add_out_inst_lut2_5,
O => channel_t_res_out2(7)
);
channel_tap2_madd_add_out_inst_cy_4_18 : X_MUX2
port map (
IA => channel_tap1_dout(7),
IB => channel_tap2_madd_add_out_inst_cy_3,
SEL => channel_tap2_madd_add_out_inst_lut2_4,
O => channel_tap2_madd_add_out_inst_cy_4
);
channel_tap2_madd_add_out_inst_sum_2 : X_XOR2
port map (
I0 => channel_tap2_madd_add_out_inst_cy_1,
I1 => channel_tap2_madd_add_out_inst_lut2_2,
O => channel_t_res_out2(2)
);
channel_tap3_madd_add_out_inst_cy_3_19 : X_MUX2
port map (
IA => channel_t_res_out2(3),
IB => channel_tap3_madd_add_out_inst_cy_2,
SEL => channel_tap3_madd_add_out_inst_lut2_3,
O => channel_tap3_madd_add_out_inst_cy_3
);
dxout_1_obuf : X_BUF
port map (
I => channel_tap3_dout(7),
O => dxout_1_obuf_GTS_TRI
);
channel_tap3_madd_add_out_inst_sum_7 : X_XOR2
port map (
I0 => channel_tap3_madd_add_out_inst_cy_6,
I1 => channel_tap3_madd_add_out_inst_lut2_7,
O => xout_7_obuf
);
channel_tap3_madd_add_out_inst_lut2_11 : X_LUT2
generic map(
INIT => X"6"
)
port map (
ADR0 => channel_tap2_dout(7),
ADR1 => data_7_Q,
O => channel_tap3_madd_add_out_inst_lut2_1
);
Q_n0003_22 : X_LUT2
generic map(
INIT => X"5"
)
port map (
ADR0 => data_7_Q,
ADR1 => GND,
O => Q_n0003_O
);
Q_n0003_LUT1_L_BUF : X_BUF
port map (
I => Q_n0003_O,
O => Q_n0003
);
clock_bufgp_IBUFG_23 : X_CKBUF
port map (
I => clock,
O => clock_bufgp_IBUFG
);
clock_bufgp_BUFG : X_CKBUF
port map (
I => clock_bufgp_IBUFG,
O => clock_bufgp
);
dxout_7_obuf_GTS_TRI_24 : X_TRI
port map (
I => dxout_7_obuf_GTS_TRI,
CTL => NlwInverterSignal_dxout_7_obuf_GTS_TRI_CTL,
O => dxout(7)
);
dxout_6_obuf_GTS_TRI_25 : X_TRI
port map (
I => dxout_6_obuf_GTS_TRI,
CTL => NlwInverterSignal_dxout_6_obuf_GTS_TRI_CTL,
O => dxout(6)
);
dxout_5_obuf_GTS_TRI_26 : X_TRI
port map (
I => dxout_5_obuf_GTS_TRI,
CTL => NlwInverterSignal_dxout_5_obuf_GTS_TRI_CTL,
O => dxout(5)
);
dxout_4_obuf_GTS_TRI_27 : X_TRI
port map (
I => dxout_4_obuf_GTS_TRI,
CTL => NlwInverterSignal_dxout_4_obuf_GTS_TRI_CTL,
O => dxout(4)
);
dxout_3_obuf_GTS_TRI_28 : X_TRI
port map (
I => dxout_3_obuf_GTS_TRI,
CTL => NlwInverterSignal_dxout_3_obuf_GTS_TRI_CTL,
O => dxout(3)
);
dxout_2_obuf_GTS_TRI_29 : X_TRI
port map (
I => dxout_2_obuf_GTS_TRI,
CTL => NlwInverterSignal_dxout_2_obuf_GTS_TRI_CTL,
O => dxout(2)
);
dxout_1_obuf_GTS_TRI_30 : X_TRI
port map (
I => dxout_1_obuf_GTS_TRI,
CTL => NlwInverterSignal_dxout_1_obuf_GTS_TRI_CTL,
O => dxout(1)
);
dxout_0_obuf_GTS_TRI_31 : X_TRI
port map (
I => dxout_0_obuf_GTS_TRI,
CTL => NlwInverterSignal_dxout_0_obuf_GTS_TRI_CTL,
O => dxout(0)
);
xout_7_obuf_GTS_TRI_32 : X_TRI
port map (
I => xout_7_obuf_GTS_TRI,
CTL => NlwInverterSignal_xout_7_obuf_GTS_TRI_CTL,
O => xout(7)
);
xout_6_obuf_GTS_TRI_33 : X_TRI
port map (
I => xout_6_obuf_GTS_TRI,
CTL => NlwInverterSignal_xout_6_obuf_GTS_TRI_CTL,
O => xout(6)
);
xout_5_obuf_GTS_TRI_34 : X_TRI
port map (
I => xout_5_obuf_GTS_TRI,
CTL => NlwInverterSignal_xout_5_obuf_GTS_TRI_CTL,
O => xout(5)
);
xout_4_obuf_GTS_TRI_35 : X_TRI
port map (
I => xout_4_obuf_GTS_TRI,
CTL => NlwInverterSignal_xout_4_obuf_GTS_TRI_CTL,
O => xout(4)
);
xout_3_obuf_GTS_TRI_36 : X_TRI
port map (
I => xout_3_obuf_GTS_TRI,
CTL => NlwInverterSignal_xout_3_obuf_GTS_TRI_CTL,
O => xout(3)
);
xout_2_obuf_GTS_TRI_37 : X_TRI
port map (
I => xout_2_obuf_GTS_TRI,
CTL => NlwInverterSignal_xout_2_obuf_GTS_TRI_CTL,
O => xout(2)
);
xout_1_obuf_GTS_TRI_38 : X_TRI
port map (
I => xout_1_obuf_GTS_TRI,
CTL => NlwInverterSignal_xout_1_obuf_GTS_TRI_CTL,
O => xout(1)
);
xout_0_obuf_GTS_TRI_39 : X_TRI
port map (
I => xout_0_obuf_GTS_TRI,
CTL => NlwInverterSignal_xout_0_obuf_GTS_TRI_CTL,
O => xout(0)
);
NlwBlock_data_gen_VCC : X_ONE
port map (
O => VCC
);
NlwBlock_data_gen_GND : X_ZERO
port map (
O => GND
);
NlwInverterBlock_dxout_7_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_dxout_7_obuf_GTS_TRI_CTL
);
NlwInverterBlock_dxout_6_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_dxout_6_obuf_GTS_TRI_CTL
);
NlwInverterBlock_dxout_5_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_dxout_5_obuf_GTS_TRI_CTL
);
NlwInverterBlock_dxout_4_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_dxout_4_obuf_GTS_TRI_CTL
);
NlwInverterBlock_dxout_3_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_dxout_3_obuf_GTS_TRI_CTL
);
NlwInverterBlock_dxout_2_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_dxout_2_obuf_GTS_TRI_CTL
);
NlwInverterBlock_dxout_1_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_dxout_1_obuf_GTS_TRI_CTL
);
NlwInverterBlock_dxout_0_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_dxout_0_obuf_GTS_TRI_CTL
);
NlwInverterBlock_xout_7_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_xout_7_obuf_GTS_TRI_CTL
);
NlwInverterBlock_xout_6_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_xout_6_obuf_GTS_TRI_CTL
);
NlwInverterBlock_xout_5_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_xout_5_obuf_GTS_TRI_CTL
);
NlwInverterBlock_xout_4_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_xout_4_obuf_GTS_TRI_CTL
);
NlwInverterBlock_xout_3_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_xout_3_obuf_GTS_TRI_CTL
);
NlwInverterBlock_xout_2_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_xout_2_obuf_GTS_TRI_CTL
);
NlwInverterBlock_xout_1_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_xout_1_obuf_GTS_TRI_CTL
);
NlwInverterBlock_xout_0_obuf_GTS_TRI_CTL : X_INV
port map (
I => GTS,
O => NlwInverterSignal_xout_0_obuf_GTS_TRI_CTL
);
NlwBlockROC : ROC generic map ( WIDTH => 100 ns)
port map (O => GSR);
NlwBlockTOC : TOC port map (O => GTS);
end Structure;
 
/trunk/code/tf_lms.vhd
0,0 → 1,101
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
-- A.6 tf_lms.vhd
-- Adaptive equalizer routine
--
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
 
 
entity tf_lms is
Port (
xin : in std_logic_vector(7 downto 0); -- data input
dxin : in std_logic_vector(7 downto 0); -- desired response input
clock : in std_logic; -- clock
err:out std_logic_vector(7 downto 0); -- error output
yout : out std_logic_vector(7 downto 0); -- output data
adapt_en: in std_logic -- enable adaption
);
end tf_lms;
 
architecture structural of tf_lms is
 
-- filter core
component core_filt
Port (
x_in : in std_logic_vector(7 downto 0);
x_N_in : in std_logic_vector(7 downto 0);
ue_in : in std_logic_vector(7 downto 0);
clock : in std_logic;
y_out : out std_logic_vector(7 downto 0));
end component ;
 
-- shift regesters
component shift_21d
Port ( xin : in std_logic_vector(7 downto 0);
x_N_out : out std_logic_vector(7 downto 0);
x_1_out : out std_logic_vector(7 downto 0);
clock : in std_logic);
end component;
 
component shift_20d
Port ( xin : in std_logic_vector(7 downto 0);
xout : out std_logic_vector(7 downto 0);
clock : in std_logic);
end component;
 
signal e,e_t,y_o,x_1,x_N:std_logic_vector(7 downto 0);
 
begin
 
-- if Adaption is not enabled then ERROR signal is ZERO
with adapt_en select
e <= y_o - e_t when '1',
"00000000" when others;
 
err <= e;
shift_1:shift_20d
port map (
xin => dxin,
xout => e_t,
clock => clock
);
 
shift_2:shift_21d
port map (
xin => xin,
x_N_out =>x_N,
x_1_out =>x_1,
clock => clock
);
 
cflt: core_filt
port map (
x_in => x_1,
x_N_in => x_N,
ue_in => e,
y_out => y_o,
clock => clock
);
 
yout <= y_o;
end structural;
/trunk/code/mul8.vhd
0,0 → 1,36
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- 8 bit multi plier
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
 
 
entity mul8 is
Port ( d1_in : in std_logic_vector(7 downto 0);
d2_in : in std_logic_vector(7 downto 0);
d_out : out std_logic_vector(15 downto 0));
end mul8;
 
architecture Behavioral of mul8 is
 
begin
 
d_out <= d1_in * d2_in;
end Behavioral;
/trunk/code/shift_15d.vhd
0,0 → 1,47
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- producing delay of 20 unit
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
 
entity shift_20d is
Port ( xin : in std_logic_vector(7 downto 0);
xout : out std_logic_vector(7 downto 0);
clock : in std_logic);
end shift_20d;
 
architecture Behavioral of shift_20d is
signal shift_reg: std_logic_vector (159 downto 0);
--signal shift_reg: std_logic_vector (119 downto 0);
begin
 
shift:
process(clock)
begin
if(clock'event and clock = '1') then
shift_reg <= xin & shift_reg(159 downto 8);
 
end if;
end process;
xout <= shift_reg(7 downto 0);
 
end Behavioral;
/trunk/code/tr_seq_gen.vhd
0,0 → 1,22
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
-- Uncomment the following lines to use the declarations that are
-- provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;
 
entity tr_seq_gen is
Port ( clock : in std_logic;
reset : in std_logic;
data_out : out std_logic_vector(7 downto 0));
end tr_seq_gen;
 
architecture Behavioral of tr_seq_gen is
 
begin
 
 
end Behavioral;
/trunk/code/truncation.vhd
0,0 → 1,36
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
-- simple 16 to 8 bit truncation circuit
-- it is only for fixed point(6,8) system
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
 
entity truncation is
Port ( d_in : in std_logic_vector(15 downto 0);
d_out : out std_logic_vector(7 downto 0));
end truncation;
 
architecture Behavioral of truncation is
 
begin
 
d_out <= d_in(13 downto 6);
end Behavioral;
/trunk/code/shift_16d.vhd
0,0 → 1,48
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- delay of 21 and 1 unit
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
 
entity shift_21d is
Port ( xin : in std_logic_vector(7 downto 0);
x_N_out : out std_logic_vector(7 downto 0);
x_1_out : out std_logic_vector(7 downto 0);
clock : in std_logic);
end shift_21d;
 
architecture Behavioral of shift_21d is
signal shift_reg: std_logic_vector (167 downto 0);
--signal shift_reg: std_logic_vector (127 downto 0);
begin
 
shift:
process(clock)
begin
if(clock'event and clock = '1') then
shift_reg <= xin & shift_reg(167 downto 8);
 
end if;
end process;
x_N_out <= shift_reg(7 downto 0);
x_1_out <= shift_reg(167 downto 160);
end Behavioral;
/trunk/code/saturation.vhd
0,0 → 1,45
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- A.9 saturation.vhd
-- saturation circuit
-- important for avoiding adverse effect of truncation
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
 
entity saturation is
Port ( d_in : in std_logic_vector(15 downto 0);
d_out : out std_logic_vector(15 downto 0));
end saturation;
 
architecture Behavioral of saturation is
signal sel:std_logic_vector(1 downto 0);
begin
 
sel(1) <= not(d_in(12) xor d_in(13)xor d_in(14) xor d_in(15));
sel(0) <= d_in(15);
 
with sel select
d_out <= d_in when "11"|"10",
"0001000000000000" when "00",
"1111000000000000" when "01",
"0000000000000000" when others;
 
end Behavioral;
/trunk/code/test_filt_test_sys.vhd
0,0 → 1,88
 
-- VHDL Test Bench Created from source file filt_test_system.vhd -- 13:41:17 03/25/2005
--
-- Notes:
-- This testbench has been automatically generated using types std_logic and
-- std_logic_vector for the ports of the unit under test. Xilinx recommends
-- that these types always be used for the top-level I/O of a design in order
-- to guarantee that the testbench will bind correctly to the post-implementation
-- simulation model.
--
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
 
ENTITY testbench IS
END testbench;
 
ARCHITECTURE behavior OF testbench IS
 
COMPONENT filt_test_system
PORT(
clock : IN std_logic;
reset : IN std_logic;
adaption_enable : IN std_logic;
error_led_out : OUT std_logic_vector(7 downto 0);
seg_select : OUT std_logic_vector(3 downto 0);
error_freq_out : OUT std_logic;
reset_clk : in std_logic;
filt_data_out : OUT std_logic_vector(7 downto 0)
);
END COMPONENT;
 
SIGNAL clock : std_logic;
SIGNAL error_led_out : std_logic_vector(7 downto 0);
SIGNAL seg_select : std_logic_vector(3 downto 0);
SIGNAL error_freq_out : std_logic;
SIGNAL filt_data_out : std_logic_vector(7 downto 0);
SIGNAL reset : std_logic;
signal reset_clk : std_logic;
SIGNAL adaption_enable : std_logic;
 
CONSTANT clk_high : time := 10 ns;
CONSTANT clk_low : time := 10 ns;
CONSTANT clk_period : time := 20 ns;
CONSTANT clk_hold : time := 4 ns;
 
 
 
 
BEGIN
 
uut: filt_test_system PORT MAP(
clock => clock,
error_led_out => error_led_out,
seg_select => seg_select,
error_freq_out => error_freq_out,
filt_data_out => filt_data_out,
reset => reset,
reset_clk => reset_clk,
adaption_enable => adaption_enable
);
 
 
-- *** Test Bench - User Defined Section ***
clk_gen: PROCESS
BEGIN
clock <= '1';
WAIT FOR clk_high;
clock <= '0';
WAIT FOR clk_low;
 
END PROCESS clk_gen;
 
reset_gen: process
begin
reset <= '0';
reset_clk <= '0';
wait for clk_period*2;
reset_clk <= '1';
adaption_enable <= '1';
wait for clk_period*10;
reset <= '1';
 
wait;
end process reset_gen;
-- *** End Test Bench - User Defined Section ***
 
END;
/trunk/code/test_lms.vhd
0,0 → 1,2185
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- VHDL Test Bench Created from source file tf_lms.vhd -- 14:23:32 02/24/2005
--
-- Notes:
-- This testbench has been automatically generated using types std_logic and
-- std_logic_vector for the ports of the unit under test. Xilinx recommends
-- that these types always be used for the top-level I/O of a design in order
-- to guarantee that the testbench will bind correctly to the post-implementation
-- simulation model.
--
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
 
LIBRARY ieee;
USE IEEE.STD_LOGIC_TEXTIO.ALL;
USE STD.TEXTIO.ALL;
 
ENTITY testbench IS
END testbench;
 
ARCHITECTURE behavior OF testbench IS
FILE RESULTS: TEXT IS OUT "yout.txt";
FILE ERRF: TEXT IS OUT "error.txt";
 
FUNCTION to_hex( x : IN std_logic_vector) RETURN string IS
VARIABLE result : STRING(1 TO 8); -- 1024 bits max
VARIABLE i : INTEGER;
VARIABLE imod : INTEGER;
VARIABLE j : INTEGER;
VARIABLE newx : std_logic_vector(1023 DOWNTO 0);
BEGIN
newx := (OTHERS => '0');
newx(x'RANGE) := x;
i := 7;
j := 1;
 
WHILE i >= 0 LOOP
IF newx(i) = '0' THEN result(j) := '0';
elsif newx(i) = '1' THEN result(j) := '1';
ELSE result(j) := 'X';
END IF;
 
i := i-1;
j := j+1;
END LOOP;
RETURN result(1 TO j-1);
END;
 
COMPONENT tf_lms
PORT(
xin : IN std_logic_vector(7 downto 0);
dxin : IN std_logic_vector(7 downto 0);
clock : IN std_logic;
err: out std_logic_vector(7 downto 0);
adapt_en: in std_logic;
yout : OUT std_logic_vector(7 downto 0)
);
END COMPONENT;
 
SIGNAL xin : std_logic_vector(7 downto 0);
SIGNAL dxin : std_logic_vector(7 downto 0);
SIGNAL clock : std_logic;
SIGNAL yout : std_logic_vector(7 downto 0);
signal err: std_logic_vector(7 downto 0);
signal adapt_en : std_logic;
CONSTANT clk_high : time := 10 ns;
CONSTANT clk_low : time := 10 ns;
CONSTANT clk_period : time := 20 ns;
CONSTANT clk_hold : time := 4 ns;
 
 
 
TYPE filter_data IS ARRAY (0 TO 999) OF std_logic_vector(7 downto 0);
TYPE filter_out_table IS ARRAY (0 TO 999)OF std_logic_vector(7 downto 0);
 
-- Constants
CONSTANT filter_dx_in : filter_data :=
(
 
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000",
"01000000",
"11000000"
);
CONSTANT filter_x_in : filter_data :=
(
 
"11110011",
"00100110",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010",
"10100110",
"01011010"
 
);
 
 
 
BEGIN
 
uut: tf_lms PORT MAP(
xin => xin,
dxin => dxin,
clock => clock,
err => err,
adapt_en => adapt_en,
yout => yout
);
 
 
-- *** Test Bench - User Defined Section ***
clk_gen: PROCESS
BEGIN
clock <= '1';
WAIT FOR clk_high;
clock <= '0';
WAIT FOR clk_low;
 
END PROCESS clk_gen;
 
tb:
PROCESS
variable IN_x,IN_dx:std_logic_vector(7 downto 0);
VARIABLE TX_STR : String(1 to 512);
VARIABLE TX_LOC : LINE;
VARIABLE RX_LOC : LINE;
 
BEGIN
adapt_en <= '1';
 
FOR n IN 0 TO 500 LOOP
-- readline(F_XIN,xin);
--xin <= IN_X;
--Deallocate(RX_LOC);
xin <= filter_x_in(n);
dxin <= filter_dx_in(n);
wait for clk_period;
write(TX_LOC,string'("'"));
write(TX_LOC, yout);
write(TX_LOC,string'("'"));
writeline(results, TX_LOC);
Deallocate(TX_LOC);
write(TX_LOC,string'("'"));
write(TX_LOC, err);
write(TX_LOC,string'("'"));
writeline(ERRF, TX_LOC);
Deallocate(TX_LOC);
end loop;
 
-- adapt_en <= '0';
 
FOR n IN 501 TO 999 LOOP
-- readline(F_XIN,xin);
--xin <= IN_X;
--Deallocate(RX_LOC);
xin <= filter_x_in(n);
dxin <= filter_dx_in(n);
wait for clk_period;
write(TX_LOC,string'("'"));
write(TX_LOC, yout);
write(TX_LOC,string'("'"));
writeline(results, TX_LOC);
Deallocate(TX_LOC);
write(TX_LOC,string'("'"));
write(TX_LOC, err);
write(TX_LOC,string'("'"));
writeline(ERRF, TX_LOC);
Deallocate(TX_LOC);
end loop;
 
wait; -- will wait forever
END PROCESS;
-- *** End Test Bench - User Defined Section ***
 
END;
/trunk/code/clock_div.vhd
0,0 → 1,57
-- Copyright (C) 2004-2005 Digish Pandya <digish.pandya@gmail.com>
 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-- clock devider routine
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
entity clock_div is
Port ( reset: in std_logic;
in_clk : in std_logic;
out1 : out std_logic;
out2 : out std_logic);
end clock_div;
 
architecture Behavioral of clock_div is
 
signal ct: std_logic_vector(19 downto 0);
--signal ct: std_logic_vector(1 downto 0);
 
begin
 
process(reset,in_clk)
begin
if reset = '0' then
ct <= "00000000000000000000";
-- ct <= "00";
elsif in_clk'event and in_clk = '1' then
ct <= ct + "00000000000000000001";
-- ct <= ct + "01";
end if;
end process;
-- Using this value we can adjust different clock speed
-- Fast Clock
out1 <= ct(5);
-- Slow clock
out2 <= ct(19);
 
--out1 <= ct(0);
--out2 <= ct(1);
 
end Behavioral;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.