# HG changeset patch # User pellion # Date 2014-10-30 15:28:40 # Node ID cd810ee8afe4715f7c3288f7f4fec50493211013 # Parent 22a9c3950a77fe474ac8c50bf6d8f4bdd54b4f3a temp_CIC diff --git a/designs/Validation_CIC/Makefile b/designs/Validation_CIC/Makefile new file mode 100644 --- /dev/null +++ b/designs/Validation_CIC/Makefile @@ -0,0 +1,53 @@ +#GRLIB=../.. +VHDLIB=../.. +SCRIPTSDIR=$(VHDLIB)/scripts/ +GRLIB := $(shell sh $(VHDLIB)/scripts/lpp_relpath.sh) +TOP=leon3mp +BOARD=em-LeonLPP-A3PE3kL-v3-core1 +include $(GRLIB)/boards/$(BOARD)/Makefile.inc +DEVICE=$(PART)-$(PACKAGE)$(SPEED) +UCF=$(GRLIB)/boards/$(BOARD)/$(TOP).ucf +QSF=$(GRLIB)/boards/$(BOARD)/$(TOP).qsf +EFFORT=high +XSTOPT= +SYNPOPT="set_option -pipe 0; set_option -retiming 0; set_option -write_apr_constraint 0" +#VHDLSYNFILES=config.vhd ahbrom.vhd leon3mp.vhd +VHDLSYNFILES= +VHDLSIMFILES= tb.vhd +SIMTOP=testbench +#SDCFILE=$(GRLIB)/boards/$(BOARD)/synplify.sdc +#SDC=$(GRLIB)/boards/$(BOARD)/leon3mp.sdc +PDC=$(GRLIB)/boards/$(BOARD)/em-LeonLPP-A3PE3kL.pdc +BITGEN=$(GRLIB)/boards/$(BOARD)/default.ut +CLEAN=soft-clean + +TECHLIBS = proasic3e + +LIBSKIP = core1553bbc core1553brm core1553brt gr1553 corePCIF \ + tmtc openchip hynix ihp gleichmann micron usbhc + +DIRSKIP = b1553 pcif leon2 leon2ft crypto satcan ddr usb ata i2c \ + pci grusbhc haps slink ascs pwm coremp7 spi ac97 \ + ./amba_lcd_16x2_ctrlr \ + ./general_purpose/lpp_AMR \ + ./general_purpose/lpp_balise \ + ./general_purpose/lpp_delay \ + ./lpp_bootloader \ + ./lpp_cna \ + ./lpp_uart \ + ./lpp_usb \ + ./dsp/lpp_fft_rtax \ + +FILESKIP = i2cmst.vhd \ + APB_MULTI_DIODE.vhd \ + APB_MULTI_DIODE.vhd \ + Top_MatrixSpec.vhd \ + APB_FFT.vhd \ + lpp_lfr_apbreg.vhd \ + CoreFFT.vhd + +include $(GRLIB)/bin/Makefile +include $(GRLIB)/software/leon3/Makefile + +################## project specific targets ########################## + diff --git a/designs/Validation_CIC/from_Paul/cic_with_RAM.ods b/designs/Validation_CIC/from_Paul/cic_with_RAM.ods new file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..785067941bca2496e04f4eda9b272ccc0f62fb73 GIT binary patch literal 31595 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 2, + S_stage_number => 3, + R_downsampling_decimation_factor => 16, + b_data_size => 16, + b_grow => 15) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + data_in => data_in, + data_in_valid => data_in_valid, + data_out => data_out, + data_out_valid => data_out_valid); + ----------------------------------------------------------------------------- + chirp_gen: chirp + GENERIC MAP ( + LOW_FREQUENCY_LIMIT => 0, + HIGH_FREQUENCY_LIMIT => 1000, + NB_POINT_TO_GEN => 10000, + AMPLITUDE => 200, + NB_BITS => 16) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + data_ack => data_in_valid, + data => data_in); + +END; diff --git a/designs/Validation_CIC/wave.do b/designs/Validation_CIC/wave.do new file mode 100644 --- /dev/null +++ b/designs/Validation_CIC/wave.do @@ -0,0 +1,30 @@ +onerror {resume} +quietly WaveActivateNextPane {} 0 +add wave -noupdate /testbench/dut_cic/d_delay_number +add wave -noupdate /testbench/dut_cic/s_stage_number +add wave -noupdate /testbench/dut_cic/r_downsampling_decimation_factor +add wave -noupdate -format Analog-Step -height 74 -max 1999.9999999999998 /testbench/chirp_gen/freq_chirp +add wave -noupdate -format Analog-Step -height 74 -max 10000.0 /testbench/chirp_gen/n +add wave -noupdate -format Analog-Step -height 74 -max 200.0 -min -200.0 -radix decimal /testbench/dut_cic/data_in +add wave -noupdate -format Analog-Step -height 74 -max 189.0 -min -172.0 -radix decimal /testbench/dut_cic/data_out +add wave -noupdate -divider COMB +add wave -noupdate -radix decimal -expand -subitemconfig {/testbench/dut_cic/c_data(3) {-format Analog-Step -height 74 -max 6208650.0000000009 -min -5630018.0 -radix decimal} /testbench/dut_cic/c_data(2) {-format Analog-Step -height 74 -max 22640530.0 -radix decimal} /testbench/dut_cic/c_data(1) {-format Analog-Step -height 74 -max 1067269590.0 -min -1072646474.0 -radix decimal} /testbench/dut_cic/c_data(0) {-format Analog-Step -height 74 -max 1071549238.9999998 -min -1068913901.0 -radix decimal}} /testbench/dut_cic/c_data +add wave -noupdate -divider INTEGRATOR +add wave -noupdate -radix decimal -expand -subitemconfig {/testbench/dut_cic/i_data(3) {-format Analog-Step -height 74 -max 1073731108.9999998 -min -1073537753.0 -radix decimal} /testbench/dut_cic/i_data(2) {-format Analog-Step -height 74 -max 164477947.0 -radix decimal} /testbench/dut_cic/i_data(1) {-format Analog-Step -height 74 -max 22580.0 -radix decimal} /testbench/dut_cic/i_data(0) {-format Analog-Step -height 74 -max 200.0 -min -200.0 -radix decimal}} /testbench/dut_cic/i_data +TreeUpdate [SetDefaultTree] +WaveRestoreCursors {{Cursor 1} {3685000 ps} 0} +configure wave -namecolwidth 370 +configure wave -valuecolwidth 40 +configure wave -justifyvalue left +configure wave -signalnamewidth 0 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ns +update +WaveRestoreZoom {0 ps} {110307750 ps} diff --git a/lib/lpp/dirs.txt b/lib/lpp/dirs.txt --- a/lib/lpp/dirs.txt +++ b/lib/lpp/dirs.txt @@ -4,6 +4,8 @@ ./general_purpose/lpp_balise ./general_purpose/lpp_delay ./lpp_amba +./dsp/chirp +./dsp/cic ./dsp/iir_filter ./dsp/lpp_downsampling ./dsp/lpp_fft_rtax diff --git a/lib/lpp/dsp/chirp/chirp.vhd b/lib/lpp/dsp/chirp/chirp.vhd new file mode 100644 --- /dev/null +++ b/lib/lpp/dsp/chirp/chirp.vhd @@ -0,0 +1,85 @@ +------------------------------------------------------------------------------ +-- This file is a part of the LPP VHDL IP LIBRARY +-- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS +-- +-- 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 3 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 +------------------------------------------------------------------------------- +-- Author : Jean-christophe Pellion +-- Mail : jean-christophe.pellion@lpp.polytechnique.fr +-- jean-christophe.pellion@easii-ic.com +---------------------------------------------------------------------------- + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE IEEE.std_logic_arith.ALL; +USE IEEE.std_logic_signed.ALL; +USE IEEE.MATH_real.ALL; + +ENTITY chirp IS + + GENERIC ( + LOW_FREQUENCY_LIMIT : INTEGER := 0; + HIGH_FREQUENCY_LIMIT : INTEGER := 2000; + NB_POINT_TO_GEN : INTEGER := 10000; + AMPLITUDE : INTEGER := 100; + NB_BITS : INTEGER := 16); + + PORT ( + clk : IN STD_LOGIC; + rstn : IN STD_LOGIC; + run : IN STD_LOGIC; + + data_ack : IN STD_LOGIC; + data : OUT STD_LOGIC_VECTOR(NB_BITS-1 DOWNTO 0) + ); + +END chirp; + +ARCHITECTURE beh OF chirp IS + + SIGNAL reg : STD_LOGIC_VECTOR(NB_BITS-1 DOWNTO 0); + SIGNAL n : INTEGER; + SIGNAL current_time : REAL := REAL(0); + SIGNAL freq_chirp : REAL := REAL(0); +BEGIN -- beh + + current_time <= REAL(n) / REAL(NB_POINT_TO_GEN); + freq_chirp <= REAL(LOW_FREQUENCY_LIMIT) + (REAL(HIGH_FREQUENCY_LIMIT) - REAL(LOW_FREQUENCY_LIMIT))*current_time; + + PROCESS (clk, rstn) + BEGIN -- PROCESS + IF rstn = '0' THEN -- asynchronous reset (active low) + reg <= (OTHERS => '0'); + n <= 0; + ELSIF clk'event AND clk = '1' THEN -- rising clock edge + IF run = '0' THEN + reg <= (OTHERS => '0'); + n <= 0; + ELSE + IF data_ack = '1' THEN + IF n < NB_POINT_TO_GEN THEN + n <= n+1; + reg <= conv_std_logic_vector(INTEGER(REAL(AMPLITUDE) * SIN(MATH_2_PI*current_time*freq_chirp)),NB_BITS); + ELSE + reg <= (OTHERS => '0'); + END IF; + END IF; + END IF; + END IF; + END PROCESS; + + data <= reg; + +END beh; diff --git a/lib/lpp/dsp/chirp/chirp_pkg.vhd b/lib/lpp/dsp/chirp/chirp_pkg.vhd new file mode 100644 --- /dev/null +++ b/lib/lpp/dsp/chirp/chirp_pkg.vhd @@ -0,0 +1,45 @@ +------------------------------------------------------------------------------ +-- This file is a part of the LPP VHDL IP LIBRARY +-- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS +-- +-- 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 3 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 +------------------------------------------------------------------------------- +-- Author : Jean-christophe Pellion +-- Mail : jean-christophe.pellion@lpp.polytechnique.fr +-- jean-christophe.pellion@easii-ic.com +---------------------------------------------------------------------------- + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; + +PACKAGE chirp_pkg IS + + COMPONENT chirp + GENERIC ( + LOW_FREQUENCY_LIMIT : INTEGER; + HIGH_FREQUENCY_LIMIT : INTEGER; + NB_POINT_TO_GEN : INTEGER; + AMPLITUDE : INTEGER; + NB_BITS : INTEGER); + PORT ( + clk : IN STD_LOGIC; + rstn : IN STD_LOGIC; + run : IN STD_LOGIC; + data_ack : IN STD_LOGIC; + data : OUT STD_LOGIC_VECTOR(NB_BITS-1 DOWNTO 0)); + END COMPONENT; + + +END chirp_pkg; diff --git a/lib/lpp/dsp/chirp/vhdlsyn.txt b/lib/lpp/dsp/chirp/vhdlsyn.txt new file mode 100644 --- /dev/null +++ b/lib/lpp/dsp/chirp/vhdlsyn.txt @@ -0,0 +1,2 @@ +chirp_pkg.vhd +chirp.vhd diff --git a/lib/lpp/dsp/cic/cic.vhd b/lib/lpp/dsp/cic/cic.vhd new file mode 100644 --- /dev/null +++ b/lib/lpp/dsp/cic/cic.vhd @@ -0,0 +1,122 @@ +------------------------------------------------------------------------------ +-- This file is a part of the LPP VHDL IP LIBRARY +-- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS +-- +-- 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 3 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 +------------------------------------------------------------------------------- +-- Author : Jean-christophe Pellion +-- Mail : jean-christophe.pellion@lpp.polytechnique.fr +-- jean-christophe.pellion@easii-ic.com +---------------------------------------------------------------------------- + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; + +LIBRARY lpp; +USE lpp.cic_pkg.ALL; + +ENTITY cic IS + + GENERIC ( + D_delay_number : INTEGER := 2; + S_stage_number : INTEGER := 3; + R_downsampling_decimation_factor : INTEGER := 16; + + b_data_size : INTEGER := 16; + b_grow : INTEGER := 5 -- + ); + + PORT ( + clk : IN STD_LOGIC; + rstn : IN STD_LOGIC; + run : IN STD_LOGIC; + + data_in : IN STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_in_valid : IN STD_LOGIC; + + data_out : OUT STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_out_valid : OUT STD_LOGIC + ); + +END cic; + +ARCHITECTURE beh OF cic IS + + TYPE data_vector IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(b_data_size + b_grow - 1 DOWNTO 0); + + SIGNAL I_data : data_vector(S_stage_number DOWNTO 0); + SIGNAL I_valid : STD_LOGIC_VECTOR(S_stage_number DOWNTO 0); + + SIGNAL C_data : data_vector(S_stage_number DOWNTO 0); + SIGNAL C_valid : STD_LOGIC_VECTOR(S_stage_number DOWNTO 0); + +BEGIN -- beh + ----------------------------------------------------------------------------- + I_valid(0) <= data_in_valid; + I_data(0)(b_data_size-1 DOWNTO 0) <= data_in; + all_bit_grow: FOR I IN 0 TO b_grow-1 GENERATE + I_data(0)(I+b_data_size) <= data_in(b_data_size-1); + END GENERATE all_bit_grow; + ----------------------------------------------------------------------------- + all_I: FOR S_i IN 1 TO S_stage_number GENERATE + I_1: cic_integrator + GENERIC MAP ( + b_data_size => b_data_size + b_grow) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + + data_in => I_data(S_i-1), + data_in_valid => I_valid(S_i-1), + data_out => I_data(S_i), + data_out_valid => I_valid(S_i) + ); + END GENERATE all_I; + ----------------------------------------------------------------------------- + cic_downsampler_1: cic_downsampler + GENERIC MAP ( + R_downsampling_decimation_factor => R_downsampling_decimation_factor, + b_data_size => b_data_size + b_grow) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + data_in => I_data(S_stage_number), + data_in_valid => I_valid(S_stage_number), + data_out => C_data(0), + data_out_valid => C_valid(0)); + ----------------------------------------------------------------------------- + all_C: FOR S_i IN 1 TO S_stage_number GENERATE + cic_comb_1: cic_comb + GENERIC MAP ( + b_data_size => b_data_size + b_grow, + D_delay_number => D_delay_number) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + + data_in => C_data(S_i-1), + data_in_valid => C_valid(S_i-1), + data_out => C_data(S_i), + data_out_valid => C_valid(S_i)); + END GENERATE all_C; + ----------------------------------------------------------------------------- + data_out <= C_data(S_stage_number)(b_data_size + b_grow - 1 DOWNTO b_grow); + data_out_valid <= C_valid(S_stage_number); + ----------------------------------------------------------------------------- +END beh; + diff --git a/lib/lpp/dsp/cic/cic_comb.vhd b/lib/lpp/dsp/cic/cic_comb.vhd new file mode 100644 --- /dev/null +++ b/lib/lpp/dsp/cic/cic_comb.vhd @@ -0,0 +1,94 @@ +------------------------------------------------------------------------------ +-- This file is a part of the LPP VHDL IP LIBRARY +-- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS +-- +-- 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 3 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 +------------------------------------------------------------------------------- +-- Author : Jean-christophe Pellion +-- Mail : jean-christophe.pellion@lpp.polytechnique.fr +-- jean-christophe.pellion@easii-ic.com +---------------------------------------------------------------------------- + +LIBRARY IEEE; +USE IEEE.numeric_std.ALL; +USE IEEE.std_logic_1164.ALL; + +ENTITY cic_comb IS + + GENERIC ( + b_data_size : INTEGER := 16; + D_delay_number : INTEGER := 2 + ); + + PORT ( + clk : IN STD_LOGIC; + rstn : IN STD_LOGIC; + run : IN STD_LOGIC; + + data_in : IN STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_in_valid : IN STD_LOGIC; + + data_out : OUT STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_out_valid : OUT STD_LOGIC + ); + +END cic_comb; + +ARCHITECTURE beh OF cic_comb IS + + TYPE data_vector IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(b_data_size - 1 DOWNTO 0); + + SIGNAL data_reg : data_vector(D_delay_number DOWNTO 0); + +BEGIN -- beh + + data_reg(0) <= data_in; + + all_D: FOR I IN D_delay_number DOWNTO 1 GENERATE + PROCESS (clk, rstn) + BEGIN + IF rstn = '0' THEN + data_reg(I) <= (OTHERS => '0'); + ELSIF clk'event AND clk = '1' THEN + IF run = '0' THEN + data_reg(I) <= (OTHERS => '0'); + ELSIF data_in_valid = '1' THEN + data_reg(I) <= data_reg(I-1); + END IF; + END IF; + END PROCESS; + END GENERATE all_D; + + PROCESS (clk, rstn) + BEGIN + IF rstn = '0' THEN + data_out <= (OTHERS => '0'); + data_out_valid <= '0'; + ELSIF clk'event AND clk = '1' THEN + IF run = '0' THEN + data_out <= (OTHERS => '0'); + data_out_valid <= '0'; + ELSE + data_out_valid <= data_in_valid; + IF data_in_valid = '1' THEN + data_out <= STD_LOGIC_VECTOR(resize(SIGNED(data_reg(0))-SIGNED(data_reg(D_delay_number)),b_data_size)); + END IF; + END IF; + END IF; + END PROCESS; + + +END beh; + diff --git a/lib/lpp/dsp/cic/cic_downsampler.vhd b/lib/lpp/dsp/cic/cic_downsampler.vhd new file mode 100644 --- /dev/null +++ b/lib/lpp/dsp/cic/cic_downsampler.vhd @@ -0,0 +1,87 @@ +------------------------------------------------------------------------------ +-- This file is a part of the LPP VHDL IP LIBRARY +-- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS +-- +-- 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 3 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 +------------------------------------------------------------------------------- +-- Author : Jean-christophe Pellion +-- Mail : jean-christophe.pellion@lpp.polytechnique.fr +-- jean-christophe.pellion@easii-ic.com +---------------------------------------------------------------------------- + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; + +ENTITY cic_downsampler IS + + GENERIC ( + R_downsampling_decimation_factor : INTEGER := 16; + b_data_size : INTEGER := 16 + ); + + PORT ( + clk : IN STD_LOGIC; + rstn : IN STD_LOGIC; + run : IN STD_LOGIC; + + data_in : IN STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_in_valid : IN STD_LOGIC; + + data_out : OUT STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_out_valid : OUT STD_LOGIC + ); + +END cic_downsampler; + +ARCHITECTURE beh OF cic_downsampler IS + + SUBTYPE INTEGER_downsampler IS INTEGER RANGE 0 TO R_downsampling_decimation_factor-1; + + SIGNAL counter_downsampler : INTEGER_downsampler; + +BEGIN -- beh + + PROCESS (clk, rstn) + BEGIN -- PROCESS + IF rstn = '0' THEN -- asynchronous reset (active low) + data_out <= (OTHERS => '0'); + data_out_valid <= '0'; + counter_downsampler <= 0; + ELSIF clk'event AND clk = '1' THEN -- rising clock edge + IF run = '0' THEN + data_out <= (OTHERS => '0'); + data_out_valid <= '0'; + counter_downsampler <= 0; + ELSE + data_out_valid <= '0'; + IF data_in_valid = '1' THEN + IF counter_downsampler = R_downsampling_decimation_factor-1 THEN + counter_downsampler <= 0; + ELSE + counter_downsampler <= counter_downsampler + 1; + END IF; + + IF counter_downsampler = 0 THEN + data_out_valid <= '1'; + data_out <= data_in; + END IF; + + END IF; + END IF; + END IF; + END PROCESS; + +END beh; + diff --git a/lib/lpp/dsp/cic/cic_integrator.vhd b/lib/lpp/dsp/cic/cic_integrator.vhd new file mode 100644 --- /dev/null +++ b/lib/lpp/dsp/cic/cic_integrator.vhd @@ -0,0 +1,78 @@ +------------------------------------------------------------------------------ +-- This file is a part of the LPP VHDL IP LIBRARY +-- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS +-- +-- 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 3 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 +------------------------------------------------------------------------------- +-- Author : Jean-christophe Pellion +-- Mail : jean-christophe.pellion@lpp.polytechnique.fr +-- jean-christophe.pellion@easii-ic.com +---------------------------------------------------------------------------- + +LIBRARY IEEE; +USE IEEE.numeric_std.ALL; +USE IEEE.std_logic_1164.ALL; + +ENTITY cic_integrator IS + + GENERIC ( + b_data_size : INTEGER := 16 + ); + + PORT ( + clk : IN STD_LOGIC; + rstn : IN STD_LOGIC; + run : IN STD_LOGIC; + + data_in : IN STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_in_valid : IN STD_LOGIC; + + data_out : OUT STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_out_valid : OUT STD_LOGIC + ); + +END cic_integrator; + +ARCHITECTURE beh OF cic_integrator IS + + SIGNAL data_reg : STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + SIGNAL data_add : STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + +BEGIN -- beh + + data_out <= data_reg; + + data_add <= STD_LOGIC_VECTOR(resize(SIGNED(data_in)+SIGNED(data_reg),b_data_size)); + + PROCESS (clk, rstn) + BEGIN -- PROCESS + IF rstn = '0' THEN -- asynchronous reset (active low) + data_reg <= (OTHERS => '0'); + data_out_valid <= '0'; + ELSIF clk'event AND clk = '1' THEN -- rising clock edge + IF run = '0' THEN + data_reg <= (OTHERS => '0'); + data_out_valid <= '0'; + ELSE + data_out_valid <= data_in_valid; + IF data_in_valid = '1' THEN + data_reg <= data_add; + END IF; + END IF; + END IF; + END PROCESS; + +END beh; + diff --git a/lib/lpp/dsp/cic/cic_lfr.vhd b/lib/lpp/dsp/cic/cic_lfr.vhd new file mode 100644 --- /dev/null +++ b/lib/lpp/dsp/cic/cic_lfr.vhd @@ -0,0 +1,55 @@ +------------------------------------------------------------------------------ +-- This file is a part of the LPP VHDL IP LIBRARY +-- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS +-- +-- 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 3 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 +------------------------------------------------------------------------------- +-- Author : Jean-christophe Pellion +-- Mail : jean-christophe.pellion@lpp.polytechnique.fr +-- jean-christophe.pellion@easii-ic.com +---------------------------------------------------------------------------- + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; + +LIBRARY lpp; +USE lpp.cic_pkg.ALL; +USE lpp.data_type_pkg.ALL; + +ENTITY cic_lfr IS + + PORT ( + clk : IN STD_LOGIC; + rstn : IN STD_LOGIC; + run : IN STD_LOGIC; + + data_in : IN sample_vector(5 DOWNTO 0,15 DOWNTO 0); + data_in_valid : IN STD_LOGIC; + + data_out_16 : OUT sample_vector(5 DOWNTO 0,15 DOWNTO 0); + data_out_256 : OUT sample_vector(5 DOWNTO 0,15 DOWNTO 0); + data_out_valid : OUT STD_LOGIC + ); + +END cic_lfr; + +ARCHITECTURE beh OF cic_lfr IS + +BEGIN + + + +END beh; + diff --git a/lib/lpp/dsp/cic/cic_pkg.vhd b/lib/lpp/dsp/cic/cic_pkg.vhd new file mode 100644 --- /dev/null +++ b/lib/lpp/dsp/cic/cic_pkg.vhd @@ -0,0 +1,89 @@ +------------------------------------------------------------------------------ +-- This file is a part of the LPP VHDL IP LIBRARY +-- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS +-- +-- 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 3 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 +------------------------------------------------------------------------------- +-- Author : Jean-christophe Pellion +-- Mail : jean-christophe.pellion@lpp.polytechnique.fr +-- jean-christophe.pellion@easii-ic.com +---------------------------------------------------------------------------- + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; + +PACKAGE cic_pkg IS + + ----------------------------------------------------------------------------- + COMPONENT cic + GENERIC ( + D_delay_number : INTEGER; + S_stage_number : INTEGER; + R_downsampling_decimation_factor : INTEGER; + b_data_size : INTEGER; + b_grow : INTEGER); + PORT ( + clk : IN STD_LOGIC; + rstn : IN STD_LOGIC; + run : IN STD_LOGIC; + data_in : IN STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_in_valid : IN STD_LOGIC; + data_out : OUT STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_out_valid : OUT STD_LOGIC); + END COMPONENT; + ----------------------------------------------------------------------------- + COMPONENT cic_integrator + GENERIC ( + b_data_size : INTEGER); + PORT ( + clk : IN STD_LOGIC; + rstn : IN STD_LOGIC; + run : IN STD_LOGIC; + data_in : IN STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_in_valid : IN STD_LOGIC; + data_out : OUT STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_out_valid : OUT STD_LOGIC); + END COMPONENT; + + COMPONENT cic_downsampler + GENERIC ( + R_downsampling_decimation_factor : INTEGER; + b_data_size : INTEGER); + PORT ( + clk : IN STD_LOGIC; + rstn : IN STD_LOGIC; + run : IN STD_LOGIC; + data_in : IN STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_in_valid : IN STD_LOGIC; + data_out : OUT STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_out_valid : OUT STD_LOGIC); + END COMPONENT; + + COMPONENT cic_comb + GENERIC ( + b_data_size : INTEGER; + D_delay_number : INTEGER); + PORT ( + clk : IN STD_LOGIC; + rstn : IN STD_LOGIC; + run : IN STD_LOGIC; + data_in : IN STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_in_valid : IN STD_LOGIC; + data_out : OUT STD_LOGIC_VECTOR(b_data_size-1 DOWNTO 0); + data_out_valid : OUT STD_LOGIC); + END COMPONENT; + ----------------------------------------------------------------------------- + +END cic_pkg; diff --git a/lib/lpp/dsp/cic/vhdlsyn.txt b/lib/lpp/dsp/cic/vhdlsyn.txt new file mode 100644 --- /dev/null +++ b/lib/lpp/dsp/cic/vhdlsyn.txt @@ -0,0 +1,6 @@ +cic_pkg.vhd +cic.vhd +cic_integrator.vhd +cic_downsampler.vhd +cic_comb.vhd +cic_lfr.vhd diff --git a/lib/lpp/general_purpose/data_type_pkg.vhd b/lib/lpp/general_purpose/data_type_pkg.vhd new file mode 100644 --- /dev/null +++ b/lib/lpp/general_purpose/data_type_pkg.vhd @@ -0,0 +1,31 @@ +------------------------------------------------------------------------------ +-- This file is a part of the LPP VHDL IP LIBRARY +-- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS +-- +-- 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 3 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 +------------------------------------------------------------------------------- +-- Author : Jean-christophe Pellion +-- Mail : jean-christophe.pellion@lpp.polytechnique.fr +-- jean-christophe.pellion@easii-ic.com +------------------------------------------------------------------------------- + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; + +PACKAGE data_type_pkg IS + + TYPE sample_vector IS ARRAY(NATURAL RANGE <>, NATURAL RANGE <>) OF STD_LOGIC; + +END data_type_pkg; diff --git a/lib/lpp/general_purpose/vhdlsyn.txt b/lib/lpp/general_purpose/vhdlsyn.txt --- a/lib/lpp/general_purpose/vhdlsyn.txt +++ b/lib/lpp/general_purpose/vhdlsyn.txt @@ -1,3 +1,4 @@ +data_type_pkg.vhd general_purpose.vhd ADDRcntr.vhd ALU.vhd