@@ -0,0 +1,7 | |||
|
1 | import numpy as np | |
|
2 | import random | |
|
3 | ||
|
4 | W,H=8,100000 | |
|
5 | test = np.ones((H,W))*[(random.random()*65535)-32768 for col in range(W)] | |
|
6 | np.savetxt("input.txt", test,fmt="%d", delimiter=" ") | |
|
7 |
@@ -0,0 +1,7 | |||
|
1 | import numpy as np | |
|
2 | import random | |
|
3 | ||
|
4 | W,H=8,100000 | |
|
5 | test = np.ones((H,W))*[(random.random()*65535)-32768 for col in range(W)] | |
|
6 | np.savetxt("input.txt", test,fmt="%d", delimiter=" ") | |
|
7 |
@@ -0,0 +1,7 | |||
|
1 | import numpy as np | |
|
2 | import random | |
|
3 | ||
|
4 | W,H=8,100000 | |
|
5 | test = np.ones((H,W))*[(random.random()*65535)-32768 for col in range(W)] | |
|
6 | np.savetxt("input.txt", test,fmt="%d", delimiter=" ") | |
|
7 |
@@ -1,69 +1,84 | |||
|
1 | 1 | VHDLIB=../.. |
|
2 | 2 | SCRIPTSDIR=$(VHDLIB)/scripts/ |
|
3 | 3 | GRLIB := $(shell sh $(VHDLIB)/scripts/lpp_relpath.sh) |
|
4 | 4 | TOP=testbench |
|
5 | 5 | BOARD=LFR-EQM |
|
6 | 6 | include $(VHDLIB)/boards/$(BOARD)/Makefile_RTAX.inc |
|
7 | 7 | DEVICE=$(PART)-$(PACKAGE)$(SPEED) |
|
8 | 8 | UCF= |
|
9 | 9 | QSF= |
|
10 | 10 | EFFORT=high |
|
11 | 11 | XSTOPT= |
|
12 | 12 | SYNPOPT= |
|
13 | 13 | VHDLSYNFILES= |
|
14 | 14 | VHDLSIMFILES= tb.vhd |
|
15 | 15 | SIMTOP=testbench |
|
16 | 16 | CLEAN=soft-clean |
|
17 | 17 | |
|
18 | 18 | TECHLIBS = axcelerator |
|
19 | 19 | |
|
20 | 20 | LIBSKIP = core1553bbc core1553brm core1553brt gr1553 corePCIF \ |
|
21 | tmtc openchip hynix ihp gleichmann micron usbhc opencores | |
|
21 | tmtc openchip hynix ihp gleichmann micron usbhc opencores fmf ftlib gsi | |
|
22 | 22 | |
|
23 | 23 | DIRSKIP = b1553 pcif leon2 leon3v3 leon2ft crypto satcan ddr usb ata i2c \ |
|
24 | pci grusbhc haps slink ascs can pwm greth coremp7 spi ac97 \ | |
|
24 | pci grusbhc haps slink ascs can pwm greth coremp7 spi ac97 srmmu atf \ | |
|
25 | grlfpc \ | |
|
25 | 26 | ./dsp/lpp_fft_rtax \ |
|
26 | 27 | ./amba_lcd_16x2_ctrlr \ |
|
27 | 28 | ./general_purpose/lpp_AMR \ |
|
28 | 29 | ./general_purpose/lpp_balise \ |
|
29 | 30 | ./general_purpose/lpp_delay \ |
|
30 | 31 | ./lpp_bootloader \ |
|
31 | 32 | ./lfr_management \ |
|
32 | 33 | ./lpp_sim/CY7C1061DV33 \ |
|
33 | 34 | ./lpp_cna \ |
|
34 | 35 | ./lpp_uart \ |
|
35 | 36 | ./lpp_usb \ |
|
36 | 37 | ./dsp/lpp_fft \ |
|
37 | 38 | ./lpp_leon3_soc \ |
|
38 | 39 | ./lpp_debug_lfr |
|
39 | 40 | |
|
40 | 41 | FILESKIP = i2cmst.vhd \ |
|
41 | 42 | APB_MULTI_DIODE.vhd \ |
|
42 | 43 | APB_MULTI_DIODE.vhd \ |
|
43 | 44 | Top_MatrixSpec.vhd \ |
|
44 | 45 | APB_FFT.vhd \ |
|
45 |
|
|
|
46 | lpp_lfr_ms_FFT.vhd \ | |
|
46 | 47 | lpp_lfr_apbreg.vhd \ |
|
47 | 48 | CoreFFT.vhd \ |
|
48 | 49 | lpp_lfr_ms.vhd \ |
|
49 | lpp_lfr_sim_pkg.vhd | |
|
50 | lpp_lfr_sim_pkg.vhd \ | |
|
51 | mtie_maps.vhd \ | |
|
52 | ftsrctrlc.vhd \ | |
|
53 | ftsdctrl.vhd \ | |
|
54 | ftsrctrl8.vhd \ | |
|
55 | ftmctrl.vhd \ | |
|
56 | ftsdctrl64.vhd \ | |
|
57 | ftahbram.vhd \ | |
|
58 | ftahbram2.vhd \ | |
|
59 | sramft.vhd \ | |
|
60 | nandfctrlx.vhd | |
|
50 | 61 | |
|
51 | 62 | include $(GRLIB)/bin/Makefile |
|
52 | 63 | include $(GRLIB)/software/leon3/Makefile |
|
53 | 64 | |
|
54 | 65 | ################## project specific targets ########################## |
|
55 | 66 | distclean:myclean |
|
67 | vsim:cp_for_vsim | |
|
56 | 68 | |
|
57 | 69 | myclean: |
|
58 | 70 | rm -f input.txt output_fx.txt |
|
59 | 71 | rm -rf ./2016* |
|
60 | 72 | |
|
61 | 73 | generate : |
|
62 |
|
|
|
74 | python ./generate.py | |
|
75 | ||
|
76 | cp_for_vsim: generate | |
|
77 | cp ./input.txt simulation/ | |
|
63 | 78 | |
|
64 | 79 | archivate: |
|
65 | 80 | xonsh ./archivate.xsh |
|
66 | 81 | |
|
67 | 82 | test: | generate ghdl ghdl-run archivate |
|
68 | 83 | |
|
69 | 84 |
@@ -1,202 +1,202 | |||
|
1 | 1 | |
|
2 | 2 | LIBRARY ieee; |
|
3 | 3 | USE ieee.std_logic_1164.ALL; |
|
4 | 4 | USE ieee.numeric_std.ALL; |
|
5 | 5 | USE IEEE.std_logic_signed.ALL; |
|
6 | 6 | USE IEEE.MATH_real.ALL; |
|
7 | 7 | |
|
8 | 8 | LIBRARY techmap; |
|
9 | 9 | USE techmap.gencomp.ALL; |
|
10 | 10 | |
|
11 | 11 | LIBRARY std; |
|
12 | 12 | USE std.textio.ALL; |
|
13 | 13 | |
|
14 | 14 | LIBRARY lpp; |
|
15 | 15 | USE lpp.iir_filter.ALL; |
|
16 | 16 | USE lpp.lpp_ad_conv.ALL; |
|
17 | 17 | USE lpp.FILTERcfg.ALL; |
|
18 | 18 | USE lpp.lpp_lfr_filter_coeff.ALL; |
|
19 | 19 | USE lpp.general_purpose.ALL; |
|
20 | 20 | USE lpp.data_type_pkg.ALL; |
|
21 | 21 | USE lpp.lpp_lfr_pkg.ALL; |
|
22 | 22 | USE lpp.general_purpose.ALL; |
|
23 | 23 | USE lpp.lpp_sim_pkg.ALL; |
|
24 | 24 | |
|
25 | 25 | ENTITY testbench IS |
|
26 | 26 | GENERIC( |
|
27 | 27 | tech : INTEGER := 0; --axcel,0 |
|
28 | 28 | Mem_use : INTEGER := use_CEL --use_RAM,use_CEL |
|
29 | 29 | ); |
|
30 | 30 | END; |
|
31 | 31 | |
|
32 | 32 | ARCHITECTURE behav OF testbench IS |
|
33 | 33 | CONSTANT ChanelCount : INTEGER := 8; |
|
34 | 34 | CONSTANT Coef_SZ : INTEGER := 9; |
|
35 | 35 | CONSTANT CoefCntPerCel : INTEGER := 6; |
|
36 | 36 | CONSTANT CoefPerCel : INTEGER := 5; |
|
37 | 37 | CONSTANT Cels_count : INTEGER := 5; |
|
38 | 38 | |
|
39 | 39 | SIGNAL sample : samplT(ChanelCount-1 DOWNTO 0, 17 DOWNTO 0); |
|
40 | 40 | SIGNAL sample_val : STD_LOGIC; |
|
41 | 41 | |
|
42 | 42 | SIGNAL sample_fx : samplT(ChanelCount-1 DOWNTO 0, 17 DOWNTO 0); |
|
43 | 43 | SIGNAL sample_fx_val : STD_LOGIC; |
|
44 | 44 | |
|
45 | 45 | |
|
46 | 46 | SIGNAL TSTAMP : INTEGER := 0; |
|
47 | 47 | SIGNAL clk : STD_LOGIC := '0'; |
|
48 | 48 | SIGNAL clk_98304Hz : STD_LOGIC := '0'; |
|
49 | 49 | SIGNAL clk_98304Hz_r : STD_LOGIC := '0'; |
|
50 | 50 | SIGNAL rstn : STD_LOGIC; |
|
51 | 51 | |
|
52 | 52 | SIGNAL signal_gen : sample_vector(0 to ChanelCount-1,17 downto 0); |
|
53 | 53 | SIGNAL sample_fx_wdata : Samples(ChanelCount-1 DOWNTO 0); |
|
54 | 54 | SIGNAL signal_rec : sample_vector(0 to ChanelCount-1,15 downto 0); |
|
55 | 55 | |
|
56 | 56 | SIGNAL end_of_simu : STD_LOGIC := '0'; |
|
57 | 57 | |
|
58 |
CONSTANT half_samplig_period : time := |
|
|
58 | CONSTANT half_samplig_period : time := 5086263 ps;--INTEGER( REAL(1000**4) / REAL(24576.0*4.0*2)) * 1 ps; | |
|
59 | 59 | |
|
60 | 60 | BEGIN |
|
61 | 61 | |
|
62 | 62 | ----------------------------------------------------------------------------- |
|
63 | 63 | -- CLOCK and RESET |
|
64 | 64 | ----------------------------------------------------------------------------- |
|
65 | 65 | PROCESS |
|
66 | 66 | BEGIN -- PROCESS |
|
67 | 67 | WAIT UNTIL clk = '1'; |
|
68 | 68 | rstn <= '0'; |
|
69 | 69 | WAIT UNTIL clk = '1'; |
|
70 | 70 | WAIT UNTIL clk = '1'; |
|
71 | 71 | WAIT UNTIL clk = '1'; |
|
72 | 72 | rstn <= '1'; |
|
73 | 73 | WAIT UNTIL end_of_simu = '1'; |
|
74 | 74 | WAIT UNTIL clk = '1'; |
|
75 | 75 | assert false report "end of test" severity note; |
|
76 | 76 | -- Wait forever; this will finish the simulation. |
|
77 | 77 | wait; |
|
78 | 78 | END PROCESS; |
|
79 | 79 | ----------------------------------------------------------------------------- |
|
80 | 80 | |
|
81 | 81 | |
|
82 | 82 | clk_98304Hz_gen:PROCESS |
|
83 | 83 | BEGIN |
|
84 | 84 | IF end_of_simu /= '1' THEN |
|
85 | 85 | clk_98304Hz <= NOT clk_98304Hz; |
|
86 | 86 | WAIT FOR half_samplig_period; |
|
87 | 87 | ELSE |
|
88 | 88 | assert false report "end of test" severity note; |
|
89 | 89 | WAIT; |
|
90 | 90 | END IF; |
|
91 | 91 | END PROCESS; |
|
92 | 92 | |
|
93 | 93 | clk_25M_gen:PROCESS |
|
94 | 94 | BEGIN |
|
95 | 95 | IF end_of_simu /= '1' THEN |
|
96 | 96 | clk <= NOT clk; |
|
97 | 97 | TSTAMP <= TSTAMP+20; |
|
98 | 98 | WAIT FOR 20 ns; |
|
99 | 99 | ELSE |
|
100 | 100 | assert false report "end of test" severity note; |
|
101 | 101 | WAIT; |
|
102 | 102 | END IF; |
|
103 | 103 | END PROCESS; |
|
104 | 104 | |
|
105 | 105 | |
|
106 | 106 | ----------------------------------------------------------------------------- |
|
107 | 107 | -- LPP_LFR_FILTER f0 |
|
108 | 108 | ----------------------------------------------------------------------------- |
|
109 | 109 | |
|
110 | 110 | IIR_CEL_CTRLR_v2_1 : IIR_CEL_CTRLR_v2 |
|
111 | 111 | GENERIC MAP ( |
|
112 | 112 | tech => tech, |
|
113 | 113 | Mem_use => Mem_use, |
|
114 | 114 | Sample_SZ => 18, |
|
115 | 115 | Coef_SZ => Coef_SZ, |
|
116 | 116 | Coef_Nb => 25, |
|
117 | 117 | Coef_sel_SZ => 5, |
|
118 | 118 | Cels_count => Cels_count, |
|
119 | 119 | ChanelsCount => ChanelCount, |
|
120 | 120 | FILENAME => "") |
|
121 | 121 | PORT MAP ( |
|
122 | 122 | rstn => rstn, |
|
123 | 123 | clk => clk, |
|
124 | 124 | virg_pos => 7, |
|
125 | 125 | coefs => CoefsInitValCst_v2, |
|
126 | 126 | |
|
127 | 127 | sample_in_val => sample_val, |
|
128 | 128 | sample_in => sample, |
|
129 | 129 | sample_out_val => sample_fx_val, |
|
130 | 130 | sample_out => sample_fx); |
|
131 | 131 | ----------------------------------------------------------------------------- |
|
132 | 132 | |
|
133 | 133 | |
|
134 | 134 | ----------------------------------------------------------------------------- |
|
135 | 135 | -- SAMPLE GENERATION |
|
136 | 136 | ----------------------------------------------------------------------------- |
|
137 | 137 | |
|
138 | 138 | |
|
139 | 139 | PROCESS (clk, rstn) |
|
140 | 140 | BEGIN -- PROCESS |
|
141 | 141 | IF rstn = '0' THEN -- asynchronous reset (active low) |
|
142 | 142 | sample_val <= '0'; |
|
143 | 143 | clk_98304Hz_r <= '0'; |
|
144 | 144 | ELSIF clk'EVENT AND clk = '1' THEN -- rising clock edge |
|
145 | 145 | clk_98304Hz_r <= clk_98304Hz; |
|
146 | 146 | IF clk_98304Hz = '1' AND clk_98304Hz_r = '0' THEN |
|
147 | 147 | sample_val <= '1'; |
|
148 | 148 | ELSE |
|
149 | 149 | sample_val <= '0'; |
|
150 | 150 | END IF; |
|
151 | 151 | END IF; |
|
152 | 152 | END PROCESS; |
|
153 | 153 | ----------------------------------------------------------------------------- |
|
154 | 154 | |
|
155 | 155 | ChanelLoop : FOR i IN 0 TO ChanelCount-1 GENERATE |
|
156 | 156 | SampleLoop : FOR j IN 0 TO 15 GENERATE |
|
157 | 157 | sample_fx_wdata(i)(j) <= sample_fx(i,j); |
|
158 | 158 | signal_rec(i,j) <= sample_fx_wdata(i)(j); |
|
159 | 159 | sample(i,j) <= signal_gen(i,j); |
|
160 | 160 | END GENERATE; |
|
161 | 161 | sample(i,16) <= signal_gen(i,16); |
|
162 | 162 | sample(i,17) <= signal_gen(i,17); |
|
163 | 163 | END GENERATE; |
|
164 | 164 | |
|
165 | 165 | |
|
166 | 166 | |
|
167 | 167 | ----------------------------------------------------------------------------- |
|
168 | 168 | -- READ INPUT SIGNALS |
|
169 | 169 | ----------------------------------------------------------------------------- |
|
170 | 170 | |
|
171 | 171 | gen: sig_reader |
|
172 | 172 | GENERIC MAP( |
|
173 | 173 | FNAME => "input.txt", |
|
174 | 174 | WIDTH => ChanelCount, |
|
175 | 175 | RESOLUTION => 18, |
|
176 | 176 | GAIN => 1.0 |
|
177 | 177 | ) |
|
178 | 178 | PORT MAP( |
|
179 | 179 | clk => sample_val, |
|
180 | 180 | end_of_simu => end_of_simu, |
|
181 | 181 | out_signal => signal_gen |
|
182 | 182 | ); |
|
183 | 183 | |
|
184 | 184 | |
|
185 | 185 | ----------------------------------------------------------------------------- |
|
186 | 186 | -- RECORD OUTPUT SIGNALS |
|
187 | 187 | ----------------------------------------------------------------------------- |
|
188 | 188 | |
|
189 | 189 | rec : sig_recorder |
|
190 | 190 | GENERIC MAP( |
|
191 | 191 | FNAME => "output_fx.txt", |
|
192 | 192 | WIDTH => ChanelCount, |
|
193 | 193 | RESOLUTION => 16 |
|
194 | 194 | ) |
|
195 | 195 | PORT MAP( |
|
196 | 196 | clk => sample_fx_val, |
|
197 | 197 | end_of_simu => end_of_simu, |
|
198 | 198 | timestamp => TSTAMP, |
|
199 | 199 | input_signal => signal_rec |
|
200 | 200 | ); |
|
201 | 201 | |
|
202 | 202 | END; |
@@ -1,69 +1,84 | |||
|
1 | 1 | VHDLIB=../.. |
|
2 | 2 | SCRIPTSDIR=$(VHDLIB)/scripts/ |
|
3 | 3 | GRLIB := $(shell sh $(VHDLIB)/scripts/lpp_relpath.sh) |
|
4 | 4 | TOP=testbench |
|
5 | 5 | BOARD=LFR-EQM |
|
6 | 6 | include $(VHDLIB)/boards/$(BOARD)/Makefile_RTAX.inc |
|
7 | 7 | DEVICE=$(PART)-$(PACKAGE)$(SPEED) |
|
8 | 8 | UCF= |
|
9 | 9 | QSF= |
|
10 | 10 | EFFORT=high |
|
11 | 11 | XSTOPT= |
|
12 | 12 | SYNPOPT= |
|
13 | 13 | VHDLSYNFILES= |
|
14 | 14 | VHDLSIMFILES= tb.vhd |
|
15 | 15 | SIMTOP=testbench |
|
16 | 16 | CLEAN=soft-clean |
|
17 | 17 | |
|
18 | 18 | TECHLIBS = axcelerator |
|
19 | 19 | |
|
20 | 20 | LIBSKIP = core1553bbc core1553brm core1553brt gr1553 corePCIF \ |
|
21 | tmtc openchip hynix ihp gleichmann micron usbhc opencores | |
|
21 | tmtc openchip hynix ihp gleichmann micron usbhc opencores fmf ftlib gsi | |
|
22 | 22 | |
|
23 | 23 | DIRSKIP = b1553 pcif leon2 leon3v3 leon2ft crypto satcan ddr usb ata i2c \ |
|
24 | pci grusbhc haps slink ascs can pwm greth coremp7 spi ac97 \ | |
|
24 | pci grusbhc haps slink ascs can pwm greth coremp7 spi ac97 srmmu atf \ | |
|
25 | grlfpc \ | |
|
25 | 26 | ./dsp/lpp_fft_rtax \ |
|
26 | 27 | ./amba_lcd_16x2_ctrlr \ |
|
27 | 28 | ./general_purpose/lpp_AMR \ |
|
28 | 29 | ./general_purpose/lpp_balise \ |
|
29 | 30 | ./general_purpose/lpp_delay \ |
|
30 | 31 | ./lpp_bootloader \ |
|
31 | 32 | ./lfr_management \ |
|
32 | 33 | ./lpp_sim/CY7C1061DV33 \ |
|
33 | 34 | ./lpp_cna \ |
|
34 | 35 | ./lpp_uart \ |
|
35 | 36 | ./lpp_usb \ |
|
36 | 37 | ./dsp/lpp_fft \ |
|
37 | 38 | ./lpp_leon3_soc \ |
|
38 | 39 | ./lpp_debug_lfr |
|
39 | 40 | |
|
40 | 41 | FILESKIP = i2cmst.vhd \ |
|
41 | 42 | APB_MULTI_DIODE.vhd \ |
|
42 | 43 | APB_MULTI_DIODE.vhd \ |
|
43 | 44 | Top_MatrixSpec.vhd \ |
|
44 | 45 | APB_FFT.vhd \ |
|
45 |
|
|
|
46 | lpp_lfr_ms_FFT.vhd \ | |
|
46 | 47 | lpp_lfr_apbreg.vhd \ |
|
47 | 48 | CoreFFT.vhd \ |
|
48 | 49 | lpp_lfr_ms.vhd \ |
|
49 | lpp_lfr_sim_pkg.vhd | |
|
50 | lpp_lfr_sim_pkg.vhd \ | |
|
51 | mtie_maps.vhd \ | |
|
52 | ftsrctrlc.vhd \ | |
|
53 | ftsdctrl.vhd \ | |
|
54 | ftsrctrl8.vhd \ | |
|
55 | ftmctrl.vhd \ | |
|
56 | ftsdctrl64.vhd \ | |
|
57 | ftahbram.vhd \ | |
|
58 | ftahbram2.vhd \ | |
|
59 | sramft.vhd \ | |
|
60 | nandfctrlx.vhd | |
|
50 | 61 | |
|
51 | 62 | include $(GRLIB)/bin/Makefile |
|
52 | 63 | include $(GRLIB)/software/leon3/Makefile |
|
53 | 64 | |
|
54 | 65 | ################## project specific targets ########################## |
|
55 | 66 | distclean:myclean |
|
67 | vsim:cp_for_vsim | |
|
56 | 68 | |
|
57 | 69 | myclean: |
|
58 | 70 | rm -f input.txt output_fx.txt |
|
59 | 71 | rm -rf ./2016* |
|
60 | 72 | |
|
61 | 73 | generate : |
|
62 |
|
|
|
74 | python ./generate.py | |
|
75 | ||
|
76 | cp_for_vsim: generate | |
|
77 | cp ./input.txt simulation/ | |
|
63 | 78 | |
|
64 | 79 | archivate: |
|
65 | 80 | xonsh ./archivate.xsh |
|
66 | 81 | |
|
67 | 82 | test: | generate ghdl ghdl-run archivate |
|
68 | 83 | |
|
69 | 84 |
@@ -1,230 +1,230 | |||
|
1 | 1 | |
|
2 | 2 | LIBRARY ieee; |
|
3 | 3 | USE ieee.std_logic_1164.ALL; |
|
4 | 4 | USE ieee.numeric_std.ALL; |
|
5 | 5 | USE IEEE.std_logic_signed.ALL; |
|
6 | 6 | USE IEEE.MATH_real.ALL; |
|
7 | 7 | |
|
8 | 8 | LIBRARY techmap; |
|
9 | 9 | USE techmap.gencomp.ALL; |
|
10 | 10 | |
|
11 | 11 | LIBRARY std; |
|
12 | 12 | USE std.textio.ALL; |
|
13 | 13 | |
|
14 | 14 | LIBRARY lpp; |
|
15 | 15 | USE lpp.iir_filter.ALL; |
|
16 | 16 | USE lpp.lpp_ad_conv.ALL; |
|
17 | 17 | USE lpp.FILTERcfg.ALL; |
|
18 | 18 | USE lpp.lpp_lfr_filter_coeff.ALL; |
|
19 | 19 | USE lpp.general_purpose.ALL; |
|
20 | 20 | USE lpp.data_type_pkg.ALL; |
|
21 | 21 | USE lpp.lpp_lfr_pkg.ALL; |
|
22 | 22 | USE lpp.general_purpose.ALL; |
|
23 | 23 | USE lpp.lpp_sim_pkg.ALL; |
|
24 | 24 | USE lpp.lpp_waveform_pkg.ALL; |
|
25 | 25 | |
|
26 | 26 | ENTITY testbench IS |
|
27 | 27 | GENERIC( |
|
28 | 28 | tech : INTEGER := 0; --axcel,0 |
|
29 | 29 | Mem_use : INTEGER := use_CEL --use_RAM,use_CEL |
|
30 | 30 | ); |
|
31 | 31 | END; |
|
32 | 32 | |
|
33 | 33 | ARCHITECTURE behav OF testbench IS |
|
34 | 34 | ----------------------------------------------------------------------------- |
|
35 | 35 | -- CONFIG FILTER IIR f0 to f1 |
|
36 | 36 | ----------------------------------------------------------------------------- |
|
37 | 37 | CONSTANT f0_to_f1_CEL_NUMBER : INTEGER := 5; |
|
38 | 38 | CONSTANT f0_to_f1_COEFFICIENT_SIZE : INTEGER := 10; |
|
39 | 39 | CONSTANT f0_to_f1_POINT_POSITION : INTEGER := 8; |
|
40 | 40 | |
|
41 | 41 | CONSTANT f0_to_f1_sos : COEFF_CEL_ARRAY_REAL(1 TO 5) := |
|
42 | 42 | ( |
|
43 | 43 | (1.0, -1.61171504942096, 1.0, 1.0, -1.68876443778669, 0.908610171614583), |
|
44 | 44 | (1.0, -1.53324505744412, 1.0, 1.0, -1.51088513595779, 0.732564401274351), |
|
45 | 45 | (1.0, -1.30646173160060, 1.0, 1.0, -1.30571711968384, 0.546869268827102), |
|
46 | 46 | (1.0, -0.651038739239370, 1.0, 1.0, -1.08747326287406, 0.358436944718464), |
|
47 | 47 | (1.0, 1.24322747034001, 1.0, 1.0, -0.929530176676438, 0.224862726961691) |
|
48 | 48 | ); |
|
49 | 49 | CONSTANT f0_to_f1_gain : COEFF_CEL_REAL := |
|
50 | 50 | ( 0.566196896119831, 0.474937156750133, 0.347712822970540, 0.200868393871900, 0.0910613125308450, 1.0); |
|
51 | 51 | |
|
52 | 52 | CONSTANT coefs_iir_cel_f0_to_f1 : STD_LOGIC_VECTOR((f0_to_f1_CEL_NUMBER*f0_to_f1_COEFFICIENT_SIZE*5)-1 DOWNTO 0) |
|
53 | 53 | := get_IIR_CEL_FILTER_CONFIG( |
|
54 | 54 | f0_to_f1_COEFFICIENT_SIZE, |
|
55 | 55 | f0_to_f1_POINT_POSITION, |
|
56 | 56 | f0_to_f1_CEL_NUMBER, |
|
57 | 57 | f0_to_f1_sos, |
|
58 | 58 | f0_to_f1_gain); |
|
59 | 59 | |
|
60 | 60 | CONSTANT ChanelCount : INTEGER := 6; |
|
61 | 61 | ----------------------------------------------------------------------------- |
|
62 | 62 | |
|
63 | 63 | SIGNAL sample : samplT(ChanelCount-1 DOWNTO 0, 17 DOWNTO 0); |
|
64 | 64 | SIGNAL sample_val : STD_LOGIC; |
|
65 | 65 | |
|
66 | 66 | SIGNAL sample_fx : samplT(ChanelCount-1 DOWNTO 0, 17 DOWNTO 0); |
|
67 | 67 | SIGNAL sample_fx_val : STD_LOGIC; |
|
68 | 68 | |
|
69 | 69 | |
|
70 | 70 | SIGNAL TSTAMP : INTEGER := 0; |
|
71 | 71 | SIGNAL clk : STD_LOGIC := '0'; |
|
72 | 72 | SIGNAL clk_24576Hz : STD_LOGIC := '0'; |
|
73 | 73 | SIGNAL clk_24576Hz_r : STD_LOGIC := '0'; |
|
74 | 74 | SIGNAL rstn : STD_LOGIC; |
|
75 | 75 | |
|
76 | 76 | SIGNAL signal_gen : sample_vector(0 to ChanelCount-1,17 downto 0); |
|
77 | 77 | SIGNAL sample_fx_wdata : Samples(ChanelCount-1 DOWNTO 0); |
|
78 | 78 | SIGNAL signal_rec : sample_vector(0 to ChanelCount-1,15 downto 0); |
|
79 | 79 | |
|
80 | 80 | SIGNAL end_of_simu : STD_LOGIC := '0'; |
|
81 | 81 | |
|
82 |
CONSTANT half_samplig_period : time := |
|
|
82 | CONSTANT half_samplig_period : time := 20345052 ps; --INTEGER( REAL(1000**4) / REAL(2.0*24576.0)) * 1 ps; | |
|
83 | 83 | |
|
84 | 84 | BEGIN |
|
85 | 85 | |
|
86 | 86 | ----------------------------------------------------------------------------- |
|
87 | 87 | -- CLOCK and RESET |
|
88 | 88 | ----------------------------------------------------------------------------- |
|
89 | 89 | PROCESS |
|
90 | 90 | BEGIN -- PROCESS |
|
91 | 91 | WAIT UNTIL clk = '1'; |
|
92 | 92 | rstn <= '0'; |
|
93 | 93 | WAIT UNTIL clk = '1'; |
|
94 | 94 | WAIT UNTIL clk = '1'; |
|
95 | 95 | WAIT UNTIL clk = '1'; |
|
96 | 96 | rstn <= '1'; |
|
97 | 97 | WAIT UNTIL end_of_simu = '1'; |
|
98 | 98 | WAIT FOR 10 ps; |
|
99 | 99 | assert false report "end of test" severity note; |
|
100 | 100 | -- Wait forever; this will finish the simulation. |
|
101 | 101 | wait; |
|
102 | 102 | END PROCESS; |
|
103 | 103 | ----------------------------------------------------------------------------- |
|
104 | 104 | |
|
105 | 105 | |
|
106 | 106 | clk_24576Hz_gen:PROCESS |
|
107 | 107 | BEGIN |
|
108 | 108 | IF end_of_simu /= '1' THEN |
|
109 | 109 | clk_24576Hz <= NOT clk_24576Hz; |
|
110 | 110 | WAIT FOR half_samplig_period; |
|
111 | 111 | ELSE |
|
112 | 112 | WAIT FOR 10 ps; |
|
113 | 113 | assert false report "end of test" severity note; |
|
114 | 114 | WAIT; |
|
115 | 115 | END IF; |
|
116 | 116 | END PROCESS; |
|
117 | 117 | |
|
118 | 118 | clk_25M_gen:PROCESS |
|
119 | 119 | BEGIN |
|
120 | 120 | IF end_of_simu /= '1' THEN |
|
121 | 121 | clk <= NOT clk; |
|
122 | 122 | TSTAMP <= TSTAMP+20; |
|
123 | 123 | WAIT FOR 20 ns; |
|
124 | 124 | ELSE |
|
125 | 125 | WAIT FOR 10 ps; |
|
126 | 126 | assert false report "end of test" severity note; |
|
127 | 127 | WAIT; |
|
128 | 128 | END IF; |
|
129 | 129 | END PROCESS; |
|
130 | 130 | |
|
131 | 131 | |
|
132 | 132 | ----------------------------------------------------------------------------- |
|
133 | 133 | -- LPP_LFR_FILTER f1 |
|
134 | 134 | ----------------------------------------------------------------------------- |
|
135 | 135 | |
|
136 | 136 | IIR_CEL_f0_to_f1 : IIR_CEL_CTRLR_v2 |
|
137 | 137 | GENERIC MAP ( |
|
138 | 138 | tech => tech, |
|
139 | 139 | Mem_use => Mem_use, -- use_RAM |
|
140 | 140 | Sample_SZ => 18, |
|
141 | 141 | Coef_SZ => f0_to_f1_COEFFICIENT_SIZE, |
|
142 | 142 | Coef_Nb => f0_to_f1_CEL_NUMBER*5, |
|
143 | 143 | Coef_sel_SZ => 5, |
|
144 | 144 | Cels_count => f0_to_f1_CEL_NUMBER, |
|
145 | 145 | ChanelsCount => ChanelCount, |
|
146 | 146 | FILENAME => "" |
|
147 | 147 | ) |
|
148 | 148 | PORT MAP ( |
|
149 | 149 | rstn => rstn, |
|
150 | 150 | clk => clk, |
|
151 | 151 | virg_pos => f0_to_f1_POINT_POSITION, |
|
152 | 152 | coefs => coefs_iir_cel_f0_to_f1, |
|
153 | 153 | |
|
154 | 154 | sample_in_val => sample_val, |
|
155 | 155 | sample_in => sample, |
|
156 | 156 | sample_out_val => sample_fx_val, |
|
157 | 157 | sample_out => sample_fx); |
|
158 | 158 | |
|
159 | 159 | ----------------------------------------------------------------------------- |
|
160 | 160 | |
|
161 | 161 | |
|
162 | 162 | ----------------------------------------------------------------------------- |
|
163 | 163 | -- SAMPLE GENERATION |
|
164 | 164 | ----------------------------------------------------------------------------- |
|
165 | 165 | |
|
166 | 166 | |
|
167 | 167 | PROCESS (clk, rstn) |
|
168 | 168 | BEGIN -- PROCESS |
|
169 | 169 | IF rstn = '0' THEN -- asynchronous reset (active low) |
|
170 | 170 | sample_val <= '0'; |
|
171 | 171 | clk_24576Hz_r <= '0'; |
|
172 | 172 | ELSIF clk'EVENT AND clk = '1' THEN -- rising clock edge |
|
173 | 173 | clk_24576Hz_r <= clk_24576Hz; |
|
174 | 174 | IF clk_24576Hz = '1' AND clk_24576Hz_r = '0' THEN |
|
175 | 175 | sample_val <= '1'; |
|
176 | 176 | ELSE |
|
177 | 177 | sample_val <= '0'; |
|
178 | 178 | END IF; |
|
179 | 179 | END IF; |
|
180 | 180 | END PROCESS; |
|
181 | 181 | ----------------------------------------------------------------------------- |
|
182 | 182 | |
|
183 | 183 | ChanelLoop : FOR i IN 0 TO ChanelCount-1 GENERATE |
|
184 | 184 | SampleLoop : FOR j IN 0 TO 15 GENERATE |
|
185 | 185 | sample_fx_wdata(i)(j) <= sample_fx(i,j); |
|
186 | 186 | signal_rec(i,j) <= sample_fx_wdata(i)(j); |
|
187 | 187 | sample(i,j) <= signal_gen(i,j); |
|
188 | 188 | END GENERATE; |
|
189 | 189 | sample(i,16) <= signal_gen(i,16); |
|
190 | 190 | sample(i,17) <= signal_gen(i,17); |
|
191 | 191 | END GENERATE; |
|
192 | 192 | |
|
193 | 193 | |
|
194 | 194 | |
|
195 | 195 | ----------------------------------------------------------------------------- |
|
196 | 196 | -- READ INPUT SIGNALS |
|
197 | 197 | ----------------------------------------------------------------------------- |
|
198 | 198 | |
|
199 | 199 | gen: sig_reader |
|
200 | 200 | GENERIC MAP( |
|
201 | 201 | FNAME => "input.txt", |
|
202 | 202 | WIDTH => ChanelCount, |
|
203 | 203 | RESOLUTION => 18, |
|
204 | 204 | GAIN => 1.0 |
|
205 | 205 | ) |
|
206 | 206 | PORT MAP( |
|
207 | 207 | clk => sample_val, |
|
208 | 208 | end_of_simu => end_of_simu, |
|
209 | 209 | out_signal => signal_gen |
|
210 | 210 | ); |
|
211 | 211 | |
|
212 | 212 | |
|
213 | 213 | ----------------------------------------------------------------------------- |
|
214 | 214 | -- RECORD OUTPUT SIGNALS |
|
215 | 215 | ----------------------------------------------------------------------------- |
|
216 | 216 | |
|
217 | 217 | rec : sig_recorder |
|
218 | 218 | GENERIC MAP( |
|
219 | 219 | FNAME => "output_fx.txt", |
|
220 | 220 | WIDTH => ChanelCount, |
|
221 | 221 | RESOLUTION => 16 |
|
222 | 222 | ) |
|
223 | 223 | PORT MAP( |
|
224 | 224 | clk => sample_fx_val, |
|
225 | 225 | end_of_simu => end_of_simu, |
|
226 | 226 | timestamp => TSTAMP, |
|
227 | 227 | input_signal => signal_rec |
|
228 | 228 | ); |
|
229 | 229 | |
|
230 | 230 | END; |
@@ -1,66 +1,81 | |||
|
1 | 1 | VHDLIB=../.. |
|
2 | 2 | SCRIPTSDIR=$(VHDLIB)/scripts/ |
|
3 | 3 | GRLIB := $(shell sh $(VHDLIB)/scripts/lpp_relpath.sh) |
|
4 | 4 | TOP=testbench |
|
5 | 5 | BOARD=LFR-EQM |
|
6 | 6 | include $(VHDLIB)/boards/$(BOARD)/Makefile_RTAX.inc |
|
7 | 7 | DEVICE=$(PART)-$(PACKAGE)$(SPEED) |
|
8 | 8 | UCF= |
|
9 | 9 | QSF= |
|
10 | 10 | EFFORT=high |
|
11 | 11 | XSTOPT= |
|
12 | 12 | SYNPOPT= |
|
13 | 13 | VHDLSYNFILES= |
|
14 | 14 | VHDLSIMFILES= tb.vhd |
|
15 | 15 | SIMTOP=testbench |
|
16 | 16 | CLEAN=soft-clean |
|
17 | 17 | |
|
18 | 18 | TECHLIBS = axcelerator |
|
19 | 19 | |
|
20 | 20 | LIBSKIP = core1553bbc core1553brm core1553brt gr1553 corePCIF \ |
|
21 | tmtc openchip hynix ihp gleichmann micron usbhc opencores | |
|
21 | tmtc openchip hynix ihp gleichmann micron usbhc opencores fmf ftlib gsi | |
|
22 | 22 | |
|
23 | 23 | DIRSKIP = b1553 pcif leon2 leon3v3 leon2ft crypto satcan ddr usb ata i2c \ |
|
24 | pci grusbhc haps slink ascs can pwm greth coremp7 spi ac97 \ | |
|
24 | pci grusbhc haps slink ascs can pwm greth coremp7 spi ac97 srmmu atf \ | |
|
25 | grlfpc \ | |
|
25 | 26 | ./dsp/lpp_fft_rtax \ |
|
26 | 27 | ./amba_lcd_16x2_ctrlr \ |
|
27 | 28 | ./general_purpose/lpp_AMR \ |
|
28 | 29 | ./general_purpose/lpp_balise \ |
|
29 | 30 | ./general_purpose/lpp_delay \ |
|
30 | 31 | ./lpp_bootloader \ |
|
31 | 32 | ./lfr_management \ |
|
32 | 33 | ./lpp_sim/CY7C1061DV33 \ |
|
33 | 34 | ./lpp_cna \ |
|
34 | 35 | ./lpp_uart \ |
|
35 | 36 | ./lpp_usb \ |
|
36 | 37 | ./dsp/lpp_fft \ |
|
37 | 38 | ./lpp_leon3_soc \ |
|
38 | 39 | ./lpp_debug_lfr |
|
39 | 40 | |
|
40 | 41 | FILESKIP = i2cmst.vhd \ |
|
41 | 42 | APB_MULTI_DIODE.vhd \ |
|
42 | 43 | APB_MULTI_DIODE.vhd \ |
|
43 | 44 | Top_MatrixSpec.vhd \ |
|
44 | 45 | APB_FFT.vhd \ |
|
45 |
|
|
|
46 | lpp_lfr_ms_FFT.vhd \ | |
|
46 | 47 | lpp_lfr_apbreg.vhd \ |
|
47 | 48 | CoreFFT.vhd \ |
|
48 | 49 | lpp_lfr_ms.vhd \ |
|
49 | lpp_lfr_sim_pkg.vhd | |
|
50 | lpp_lfr_sim_pkg.vhd \ | |
|
51 | mtie_maps.vhd \ | |
|
52 | ftsrctrlc.vhd \ | |
|
53 | ftsdctrl.vhd \ | |
|
54 | ftsrctrl8.vhd \ | |
|
55 | ftmctrl.vhd \ | |
|
56 | ftsdctrl64.vhd \ | |
|
57 | ftahbram.vhd \ | |
|
58 | ftahbram2.vhd \ | |
|
59 | sramft.vhd \ | |
|
60 | nandfctrlx.vhd | |
|
50 | 61 | |
|
51 | 62 | include $(GRLIB)/bin/Makefile |
|
52 | 63 | include $(GRLIB)/software/leon3/Makefile |
|
53 | 64 | ################## project specific targets ########################## |
|
54 | 65 | distclean:myclean |
|
66 | vsim:cp_for_vsim | |
|
55 | 67 | |
|
56 | 68 | myclean: |
|
57 | 69 | rm -f input.txt output_f*.txt |
|
58 | 70 | rm -rf ./2016* |
|
59 | 71 | |
|
60 | 72 | generate : |
|
61 |
|
|
|
73 | python ./generate.py | |
|
74 | ||
|
75 | cp_for_vsim: generate | |
|
76 | cp ./input.txt simulation/ | |
|
62 | 77 | |
|
63 | 78 | archivate: |
|
64 | 79 | xonsh ./archivate.xsh |
|
65 | 80 | |
|
66 | 81 | test: | generate ghdl ghdl-run archivate |
@@ -1,113 +1,113 | |||
|
1 | 1 | { |
|
2 | 2 | "cells": [ |
|
3 | 3 | { |
|
4 | 4 | "cell_type": "code", |
|
5 |
"execution_count": |
|
|
5 | "execution_count": 2, | |
|
6 | 6 | "metadata": { |
|
7 | 7 | "collapsed": true |
|
8 | 8 | }, |
|
9 | 9 | "outputs": [], |
|
10 | 10 | "source": [ |
|
11 | 11 | "import numpy as np\n", |
|
12 | 12 | "import matplotlib.pyplot as plt\n", |
|
13 | 13 | "import glob \n", |
|
14 | 14 | "import pandas as pds" |
|
15 | 15 | ] |
|
16 | 16 | }, |
|
17 | 17 | { |
|
18 | 18 | "cell_type": "code", |
|
19 | 19 | "execution_count": null, |
|
20 | 20 | "metadata": { |
|
21 | 21 | "collapsed": false |
|
22 | 22 | }, |
|
23 | 23 | "outputs": [], |
|
24 | 24 | "source": [] |
|
25 | 25 | }, |
|
26 | 26 | { |
|
27 | 27 | "cell_type": "code", |
|
28 | 28 | "execution_count": 2, |
|
29 | 29 | "metadata": { |
|
30 | 30 | "collapsed": false |
|
31 | 31 | }, |
|
32 | 32 | "outputs": [ |
|
33 | 33 | { |
|
34 | 34 | "ename": "NameError", |
|
35 | 35 | "evalue": "name 'glob' is not defined", |
|
36 | 36 | "output_type": "error", |
|
37 | 37 | "traceback": [ |
|
38 | 38 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
|
39 | 39 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", |
|
40 | 40 | "\u001b[0;32m<ipython-input-2-9719ee11a4bd>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mfolder\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mglob\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mglob\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"./2016*\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0minputsig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfolder\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m\"/input.txt\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0msep\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\" \"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mheader\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0minputsig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m \u001b[0;34m\"CH{}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputsig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0moutputsig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfolder\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m\"/output_f0.txt\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0msep\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\" \"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mheader\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0moutputsig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"Tstamp\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m[\u001b[0m \u001b[0;34m\"CH{}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutputsig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", |
|
41 | 41 | "\u001b[0;31mNameError\u001b[0m: name 'glob' is not defined" |
|
42 | 42 | ] |
|
43 | 43 | } |
|
44 | 44 | ], |
|
45 | 45 | "source": [ |
|
46 | 46 | "for folder in glob.glob(\"./2016*\"):\n", |
|
47 | 47 | " inputsig = pds.read_csv(folder+\"/input.txt\",sep=\" \",header=None)\n", |
|
48 | 48 | " inputsig.columns=[ \"CH{}\".format(i) for i in range(inputsig.shape[1])]\n", |
|
49 | 49 | " outputsig = pds.read_csv(folder+\"/output_f0.txt\",sep=\" \",header=None)\n", |
|
50 | 50 | " outputsig.columns=[\"Tstamp\"]+[ \"CH{}\".format(i) for i in range(outputsig.shape[1]-1)]\n", |
|
51 | 51 | " f, axarr = plt.subplots(1,2,figsize=(14, 6))\n", |
|
52 | 52 | " (outputsig.filter(regex=\"CH*\")- inputsig*0.8912)[150:].plot(ax=axarr[0])\n", |
|
53 | 53 | " axarr[0].legend(loc='upper right')\n", |
|
54 | 54 | " (outputsig.filter(regex=\"CH*\")[:100]/0.8912).plot(ax=axarr[1])\n", |
|
55 | 55 | " axarr[1].legend(loc='upper right')\n", |
|
56 | 56 | " plt.show()" |
|
57 | 57 | ] |
|
58 | 58 | }, |
|
59 | 59 | { |
|
60 | 60 | "cell_type": "code", |
|
61 |
"execution_count": |
|
|
61 | "execution_count": 5, | |
|
62 | 62 | "metadata": { |
|
63 | 63 | "collapsed": false |
|
64 | 64 | }, |
|
65 | 65 | "outputs": [ |
|
66 | 66 | { |
|
67 | 67 | "data": { |
|
68 | "image/png": "iVBORw0KGgoAAAANSUhEUgAABI4AAAH/CAYAAAAxLZZaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xt8VNW5//HPmsk9mYRrgIAQEkXAFBVUsKJI66UoIF7Q\nYDW1iKVU0IOt9GdttS1yjpRWbKo1yqFFq1hFoSJgaRXFUhRbPAgV8BYuGpRwnyEhM5Nk//7YMyGX\nyQXIZCaZ7/v1mlcye6+91hqmlYdnP2ttY1kWIiIiIiIiIiIi9TkiPQEREREREREREYlOShyJiIiI\niIiIiEhIShyJiIiIiIiIiEhIShyJiIiIiIiIiEhIShyJiIiIiIiIiEhIShyJiIiIiIiIiEhIShyJ\niIiIiIiIiEhIShyJiIiIiIiIiEhIShyJiIiIiIiIiEhIShyJiIiIiIiIiEhIYU0cGWO+b4z5wBhz\nJPBab4z5Vq3zicaYx40x+40xHmPMS8aYzHp9nGaMWWmMKTPGfGWM+ZUxxlGvzaXGmI3GmApjzMfG\nmO+EmMudxpgdxphjxph3jTHnh++Ti4iIiJwcxU8iIiISTcJdcfQ58GNgWOC1BnjFGDMocP5R4Grg\neuASIAt4OXhxIMBZBcQBI4DvALcBv6zVJhtYAbwBnA38FvhfY8zltdrcBPwGeBA4F/gAWG2M6da6\nH1dERETklCl+EhERkahhLMtq2wGNOQD8CDvA2QfkW5a1LHDuTGAbMMKyrPeMMWOA5UAvy7L2B9pM\nBR4GuluWVWmMmQuMsSxrSK0xngcyLMu6KvD+XWCDZVl3B94b7KCs0LKsX7XJBxcRERE5SYqfRERE\nJFLabI8jY4zDGJMPpADvYN9Bi8O+0wWAZVkfAbuBCwOHRgBbgkFPwGogAzirVpvX6w23OtiHMSY+\nMFbtcazANRciIiIiEqUUP4mIiEikxYV7AGNMHnagkwR4gGsty9pujDkX8FmW5a53yV6gZ+D3noH3\n9c8Hz33QRJt0Y0wi0AVwNtLmzCbm3RW4EtgJVDTxEUVERCSykoBsYLVlWQciPJdWofhJREREwqzF\n8VPYE0fAduy1852w1+I/Y4y5pIn2BmjJ+rmm2pgWtmnq/JXAcy2Yh4iIiESHbwOLIz2JVqL4SURE\nRNpCs/FT2BNHlmVVAsWBt+8bYy4A7gZeBBKMMen17pplcvzu1ldA/ad39Kh1LvizR702mYDbsiyf\nMWY/UNVIm/p30WrbCfDss88yaNCgJppJuM2cOZP58+dHehqCvotoou8iOuh7iA7btm3jlltugcDf\n3R2B4idpLfrvVPTQdxFd9H1ED30XkXEi8VNbVBzV5wASgY1AJfBNILi54wCgL7A+0PYd4CfGmG61\n1ulfARzB3gQy2GZMvTGuCBzHsiy/MWZjYJzlgXFM4H1hE/OsABg0aBBDhw49qQ8qrSMjI0PfQZTQ\ndxE99F1EB30PUacjL41S/CQnRf+dih76LqKLvo/ooe8i4pqNn8KaODLGzAFew34Chwu7BGoUcIVl\nWW5jzELgEWPMIez1+4XAPy3L+legi78BW4E/GWN+DPQCZgOPWZblD7QpAqYHng7yB+yA5gbgqlpT\neQR4OhAAvQfMxN5kclFYPriIiIjISVL8JCIiItEk3BVHPYBnsAOWI8Bm7KBnTeD8TOwy6Jew76L9\nFbgzeLFlWdXGmLHAE9h30cqwg5UHa7XZaYy5Gju4uQv4ArjdsqzXa7V50RjTDfhlYE6bgCsty9oX\nhs8sIiIicioUP4mIiEjUCGviyLKsKc2c9wIzAq/G2nwOjG2mn7XYj4xtqs3vgd831UZEREQk0hQ/\niYiISDRxRHoCIs2ZNGlSpKcgAfouooe+i+ig70FEop3+OxU99F1EF30f0UPfRfQzltWSJ7fGHmPM\nUGDjxo0btVGXiIhIFHv//fcZNmwYwDDLst6P9HximeInERGR9uFE4qdIPFVNRESkXdq9ezf79+9v\nvqG0um7dutG3b99IT0NEREROkOKnyGmt+EmJIxERkRbYvXs3gwYNory8PNJTiUkpKSls27ZNySMR\nEZF2RPFTZLVW/KTEkYiISAvs37+f8vJynn32WQYNGhTp6cSUbdu2ccstt7B//34ljkRERNoRxU+R\n05rxkxJHIiIiJ2DQoEHau0VERETkBCh+at/0VDUREREREREREQlJiSMREREREREREQlJiSMRERER\nEREREQlJiSMREREREREREQlJiSMREREREREREQlJiSMRERGpUVxczNSpU8nNzSU5OZmMjAxGjhxJ\nYWEhFRUVAGRnZzN+/PiQ169duxaHw8HSpUvrHPf5fPz4xz+mT58+pKSkMGLECF5//fWwfx4RERGR\ncOvo8VNcm48oIiIiUWnVqlVMnDiRpKQkCgoKyMvLw+fzsW7dOmbNmsXWrVspKirCGNNkP6HOFxQU\n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\nwZEkSZJSIVvI0rmzk85dnZVuiiRJKjI4kiRJUirkGnIATleTJClFDI4kSZKUCrlCEhw5XU2SpPQw\nOJIkSVIqZAtZANobDY4kSUoLgyNJkiSlwu6patucqiZJUloYHEmSJCkVnKomSVL6GBxJkiQpFbIN\nTlWTJCltDI4kSZKUCpmaDKEqOFVNkqQUMTiSJElSKoQQyBVyTlWTJClFDI4kSZKUGtmGrFPVJElK\nEYMjSZIkpUaukHOqmiRJKWJwJEmSpNRwqpokSelicCRJkqTUcKqaJEnpYnAkSZKk1HCqmiRJ6WJw\nJEmSpNRwqpokSelicCRJkqTUcKqaJEnpYnAkSZKk1HCqmiRJ6WJwJEmSpNTIFXK0N7YTY6x0UyRJ\nEpCrdAPS7rMrVzK+ru6Ajm1qb+edEyfy3smTB7hVkiRJL0/Zhix0QseODnKj9+6qtqxuoWpyFdma\nbAVaJ0nSyGNw1IfVLS1sam4+oGMDsL6tbWAbJEmS9DKWKyTd045t5YOjJf/fEqb83RRmXT1rqJsm\nSdKIZHDUh1uOOop58+ZVuhmSJEkjQldw1L6tnepDq7vta9/eTtuf21j/w/Uc/rnDCSFUoomSJI0o\nrnEkSZKk1Mg2JFPQyt1ZrXVNKwAty1vY/vj2IW2XJEkjlcGRJEmSUqN0qlpPLatbAAj5wIbbNwxp\nuyRJGqkMjiRJkpQafY44ysKksyex4bYN3nlNkqQhYHAkSZKk1MjV71njqKeW1S1UH1rNpLMnsfO5\nnex4esdQN0+SpBHH4EiSJEmpEbKBbH22/FS1NS3UzKhh7MljyRayTleTJGkIGBxJkiQpVbIN2fJT\n1Va3Uj29mkw+w4QzJhgcSZI0BAyOJEmSlCq5Qq78VLXiiCOAie+aSPPTzexY2v/pav1ZEynGyPrb\n19O2oa3/DZYk6WXM4EiSJEmpkivk9pqq1tneSeuLrdRMT4KjsaeMJVufZcMd/Rt1tPHHG3loykOs\nvnr1PuvW/ttanjnrGZ58x5N07Nx7utzu9rR1suaLa2h+trlf15ckabgyOJIkSVKqlJuq1vbnNuiA\n6hnVSU1NlvGnje9zulrnrk6WX7qcp05/iqrxVaz89Mpew6amR5t4/h+fZ/wZ49nx1A6ePf/ZsqOU\nOnd18szZz7DiEyt49LWPsum+Tb1ev21dG6uvXs2W+7d4FzhJ0rCUG6wThxBmAJcDfwVMAV4EbgWu\n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\n", | |
|
68 | "image/png": "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\nTkSuQmCC\n", | |
|
69 | 69 | "text/plain": [ |
|
70 |
"<matplotlib.figure.Figure at 0x |
|
|
70 | "<matplotlib.figure.Figure at 0x8c1def0>" | |
|
71 | 71 | ] |
|
72 | 72 | }, |
|
73 | 73 | "metadata": {}, |
|
74 | 74 | "output_type": "display_data" |
|
75 | 75 | } |
|
76 | 76 | ], |
|
77 | 77 | "source": [ |
|
78 | "folder=\"./\"\n", | |
|
78 | "folder=\"./simulation/\"\n", | |
|
79 | 79 | "inputsig = pds.read_csv(folder+\"/input.txt\",sep=\" \",header=None)\n", |
|
80 | 80 | "inputsig.columns=[ \"CH{}\".format(i) for i in range(inputsig.shape[1])]\n", |
|
81 |
"outputsig = pds.read_csv(folder+\"/output_f |
|
|
81 | "outputsig = pds.read_csv(folder+\"/output_f2.txt\",sep=\" \",header=None)\n", | |
|
82 | 82 | "outputsig.columns=[\"Tstamp\"]+[ \"CH{}\".format(i) for i in range(outputsig.shape[1]-1)]\n", |
|
83 | 83 | "f, axarr = plt.subplots(1,2,figsize=(14, 6))\n", |
|
84 | 84 | "(outputsig.filter(regex=\"CH*\")- inputsig*0.8912)[150:].plot(ax=axarr[0])\n", |
|
85 | 85 | "axarr[0].legend(loc='upper right')\n", |
|
86 | 86 | "(outputsig.filter(regex=\"CH*\")[:100]/0.8912).plot(ax=axarr[1])\n", |
|
87 | 87 | "axarr[1].legend(loc='upper right')\n", |
|
88 | 88 | "plt.show()" |
|
89 | 89 | ] |
|
90 | 90 | } |
|
91 | 91 | ], |
|
92 | 92 | "metadata": { |
|
93 | 93 | "kernelspec": { |
|
94 | 94 | "display_name": "Python 3", |
|
95 | 95 | "language": "python", |
|
96 | 96 | "name": "python3" |
|
97 | 97 | }, |
|
98 | 98 | "language_info": { |
|
99 | 99 | "codemirror_mode": { |
|
100 | 100 | "name": "ipython", |
|
101 | 101 | "version": 3 |
|
102 | 102 | }, |
|
103 | 103 | "file_extension": ".py", |
|
104 | 104 | "mimetype": "text/x-python", |
|
105 | 105 | "name": "python", |
|
106 | 106 | "nbconvert_exporter": "python", |
|
107 | 107 | "pygments_lexer": "ipython3", |
|
108 | 108 | "version": "3.5.2" |
|
109 | 109 | } |
|
110 | 110 | }, |
|
111 | 111 | "nbformat": 4, |
|
112 | 112 | "nbformat_minor": 1 |
|
113 | 113 | } |
@@ -1,259 +1,259 | |||
|
1 | 1 | |
|
2 | 2 | LIBRARY ieee; |
|
3 | 3 | USE ieee.std_logic_1164.ALL; |
|
4 | 4 | use ieee.numeric_std.all; |
|
5 | 5 | USE IEEE.std_logic_signed.ALL; |
|
6 | 6 | USE IEEE.MATH_real.ALL; |
|
7 | 7 | |
|
8 | 8 | LIBRARY techmap; |
|
9 | 9 | USE techmap.gencomp.ALL; |
|
10 | 10 | |
|
11 | 11 | library std; |
|
12 | 12 | use std.textio.all; |
|
13 | 13 | |
|
14 | 14 | LIBRARY lpp; |
|
15 | 15 | USE lpp.iir_filter.ALL; |
|
16 | 16 | USE lpp.lpp_ad_conv.ALL; |
|
17 | 17 | USE lpp.FILTERcfg.ALL; |
|
18 | 18 | USE lpp.lpp_lfr_filter_coeff.ALL; |
|
19 | 19 | USE lpp.general_purpose.ALL; |
|
20 | 20 | USE lpp.data_type_pkg.ALL; |
|
21 | 21 | USE lpp.lpp_lfr_pkg.ALL; |
|
22 | 22 | USE lpp.general_purpose.ALL; |
|
23 | 23 | USE lpp.lpp_sim_pkg.ALL; |
|
24 | 24 | |
|
25 | 25 | ENTITY testbench IS |
|
26 | 26 | GENERIC( |
|
27 | 27 | tech : INTEGER := 0; --axcel,0 |
|
28 | 28 | Mem_use : INTEGER := use_CEL --use_RAM,use_CEL |
|
29 | 29 | ); |
|
30 | 30 | END; |
|
31 | 31 | |
|
32 | 32 | ARCHITECTURE behav OF testbench IS |
|
33 | 33 | CONSTANT ChanelCount : INTEGER := 8; |
|
34 | 34 | |
|
35 | 35 | SIGNAL TSTAMP : INTEGER:=0; |
|
36 | 36 | SIGNAL clk : STD_LOGIC := '0'; |
|
37 | 37 | SIGNAL clk_98304Hz : STD_LOGIC := '0'; |
|
38 | 38 | SIGNAL clk_98304Hz_r : STD_LOGIC := '0'; |
|
39 | 39 | SIGNAL rstn : STD_LOGIC; |
|
40 | 40 | |
|
41 | 41 | SIGNAL signal_gen : sample_vector(0 to ChanelCount-1,15 downto 0); |
|
42 | 42 | |
|
43 | 43 | SIGNAL sample : Samples(7 DOWNTO 0); |
|
44 | 44 | |
|
45 | 45 | SIGNAL sample_val : STD_LOGIC; |
|
46 | 46 | |
|
47 | 47 | SIGNAL sample_f0_val : STD_LOGIC; |
|
48 | 48 | SIGNAL sample_f1_val : STD_LOGIC; |
|
49 | 49 | SIGNAL sample_f2_val : STD_LOGIC; |
|
50 | 50 | SIGNAL sample_f3_val : STD_LOGIC; |
|
51 | 51 | |
|
52 | 52 | SIGNAL sample_f0_wdata : STD_LOGIC_VECTOR((6*16)-1 DOWNTO 0); |
|
53 | 53 | SIGNAL sample_f1_wdata : STD_LOGIC_VECTOR((6*16)-1 DOWNTO 0); |
|
54 | 54 | SIGNAL sample_f2_wdata : STD_LOGIC_VECTOR((6*16)-1 DOWNTO 0); |
|
55 | 55 | SIGNAL sample_f3_wdata : STD_LOGIC_VECTOR((6*16)-1 DOWNTO 0); |
|
56 | 56 | |
|
57 | 57 | SIGNAL signal_f0_rec : sample_vector(0 to 5,15 downto 0); |
|
58 | 58 | SIGNAL signal_f1_rec : sample_vector(0 to 5,15 downto 0); |
|
59 | 59 | SIGNAL signal_f2_rec : sample_vector(0 to 5,15 downto 0); |
|
60 | 60 | SIGNAL signal_f3_rec : sample_vector(0 to 5,15 downto 0); |
|
61 | 61 | |
|
62 | 62 | SIGNAL end_of_simu : STD_LOGIC := '0'; |
|
63 | 63 | |
|
64 |
CONSTANT half_samplig_period : time := |
|
|
64 | CONSTANT half_samplig_period : time := 5086263 ps;--INTEGER( REAL(REAL(1000**4) / REAL(2.0*4.0*24576.0))) * 1 ps; | |
|
65 | 65 | |
|
66 | 66 | |
|
67 | 67 | |
|
68 | 68 | BEGIN |
|
69 | 69 | |
|
70 | 70 | ----------------------------------------------------------------------------- |
|
71 | 71 | -- CLOCK and RESET |
|
72 | 72 | ----------------------------------------------------------------------------- |
|
73 | 73 | PROCESS |
|
74 | 74 | BEGIN -- PROCESS |
|
75 | 75 | WAIT UNTIL clk = '1'; |
|
76 | 76 | rstn <= '0'; |
|
77 | 77 | WAIT UNTIL clk = '1'; |
|
78 | 78 | WAIT UNTIL clk = '1'; |
|
79 | 79 | WAIT UNTIL clk = '1'; |
|
80 | 80 | rstn <= '1'; |
|
81 | 81 | WAIT UNTIL end_of_simu = '1'; |
|
82 | 82 | WAIT FOR 10 ps; |
|
83 | 83 | assert false report "end of test" severity note; |
|
84 | 84 | -- Wait forever; this will finish the simulation. |
|
85 | 85 | wait; |
|
86 | 86 | END PROCESS; |
|
87 | 87 | ----------------------------------------------------------------------------- |
|
88 | 88 | |
|
89 | 89 | |
|
90 | 90 | clk_98304Hz_gen:PROCESS |
|
91 | 91 | BEGIN |
|
92 | 92 | IF end_of_simu /= '1' THEN |
|
93 | 93 | clk_98304Hz <= NOT clk_98304Hz; |
|
94 | 94 | WAIT FOR half_samplig_period; |
|
95 | 95 | ELSE |
|
96 | 96 | WAIT FOR 10 ps; |
|
97 | 97 | assert false report "end of test" severity note; |
|
98 | 98 | WAIT; |
|
99 | 99 | END IF; |
|
100 | 100 | END PROCESS; |
|
101 | 101 | |
|
102 | 102 | clk_25M_gen:PROCESS |
|
103 | 103 | BEGIN |
|
104 | 104 | IF end_of_simu /= '1' THEN |
|
105 | 105 | clk <= NOT clk; |
|
106 | 106 | TSTAMP <= TSTAMP+20; |
|
107 | 107 | WAIT FOR 20 ns; |
|
108 | 108 | ELSE |
|
109 | 109 | WAIT FOR 10 ps; |
|
110 | 110 | assert false report "end of test" severity note; |
|
111 | 111 | WAIT; |
|
112 | 112 | END IF; |
|
113 | 113 | END PROCESS; |
|
114 | 114 | |
|
115 | 115 | |
|
116 | 116 | ----------------------------------------------------------------------------- |
|
117 | 117 | -- LPP_LFR_FILTER |
|
118 | 118 | ----------------------------------------------------------------------------- |
|
119 | 119 | lpp_lfr_filter_1: lpp_lfr_filter |
|
120 | 120 | GENERIC MAP ( |
|
121 | 121 | tech => tech, |
|
122 | 122 | Mem_use => Mem_use, |
|
123 | 123 | RTL_DESIGN_LIGHT =>1 |
|
124 | 124 | ) |
|
125 | 125 | PORT MAP ( |
|
126 | 126 | sample => sample, |
|
127 | 127 | sample_val => sample_val, |
|
128 | 128 | sample_time => (others=>'0'), |
|
129 | 129 | clk => clk, |
|
130 | 130 | rstn => rstn, |
|
131 | 131 | |
|
132 | 132 | data_shaping_SP0 => '0', |
|
133 | 133 | data_shaping_SP1 => '0', |
|
134 | 134 | data_shaping_R0 => '0', |
|
135 | 135 | data_shaping_R1 => '0', |
|
136 | 136 | data_shaping_R2 => '0', |
|
137 | 137 | |
|
138 | 138 | sample_f0_val => sample_f0_val, |
|
139 | 139 | sample_f1_val => sample_f1_val, |
|
140 | 140 | sample_f2_val => sample_f2_val, |
|
141 | 141 | sample_f3_val => sample_f3_val, |
|
142 | 142 | |
|
143 | 143 | sample_f0_wdata => sample_f0_wdata, |
|
144 | 144 | sample_f1_wdata => sample_f1_wdata, |
|
145 | 145 | sample_f2_wdata => sample_f2_wdata, |
|
146 | 146 | sample_f3_wdata => sample_f3_wdata |
|
147 | 147 | ); |
|
148 | 148 | ----------------------------------------------------------------------------- |
|
149 | 149 | |
|
150 | 150 | |
|
151 | 151 | ----------------------------------------------------------------------------- |
|
152 | 152 | -- SAMPLE PULSE GENERATION |
|
153 | 153 | ----------------------------------------------------------------------------- |
|
154 | 154 | PROCESS (clk, rstn) |
|
155 | 155 | BEGIN -- PROCESS |
|
156 | 156 | IF rstn = '0' THEN -- asynchronous reset (active low) |
|
157 | 157 | sample_val <= '0'; |
|
158 | 158 | clk_98304Hz_r <= '0'; |
|
159 | 159 | ELSIF clk'EVENT AND clk = '1' THEN -- rising clock edge |
|
160 | 160 | clk_98304Hz_r <= clk_98304Hz; |
|
161 | 161 | IF clk_98304Hz = '1' AND clk_98304Hz_r = '0' THEN |
|
162 | 162 | sample_val <= '1'; |
|
163 | 163 | ELSE |
|
164 | 164 | sample_val <= '0'; |
|
165 | 165 | END IF; |
|
166 | 166 | END IF; |
|
167 | 167 | END PROCESS; |
|
168 | 168 | ----------------------------------------------------------------------------- |
|
169 | 169 | |
|
170 | 170 | |
|
171 | 171 | ----------------------------------------------------------------------------- |
|
172 | 172 | -- READ INPUT SIGNALS |
|
173 | 173 | ----------------------------------------------------------------------------- |
|
174 | 174 | gen: sig_reader |
|
175 | 175 | GENERIC MAP( |
|
176 | 176 | FNAME => "input.txt", |
|
177 | 177 | WIDTH => ChanelCount, |
|
178 | 178 | RESOLUTION => 16, |
|
179 | 179 | GAIN => 1.0 |
|
180 | 180 | ) |
|
181 | 181 | PORT MAP( |
|
182 | 182 | clk => sample_val, |
|
183 | 183 | end_of_simu => end_of_simu, |
|
184 | 184 | out_signal => signal_gen |
|
185 | 185 | ); |
|
186 | 186 | |
|
187 | 187 | ChanelLoop : FOR i IN 0 TO ChanelCount-1 GENERATE |
|
188 | 188 | SampleLoop : FOR j IN 0 TO 15 GENERATE |
|
189 | 189 | sample(I)(J) <= signal_gen(I,J); |
|
190 | 190 | END GENERATE; |
|
191 | 191 | END GENERATE; |
|
192 | 192 | |
|
193 | 193 | output_splitter: FOR CHAN IN 0 TO 5 GENERATE |
|
194 | 194 | bits_splitter: FOR BIT IN 0 TO 15 GENERATE |
|
195 | 195 | signal_f0_rec(CHAN,BIT) <= sample_f0_wdata((CHAN*16) + BIT); |
|
196 | 196 | signal_f1_rec(CHAN,BIT) <= sample_f1_wdata((CHAN*16) + BIT); |
|
197 | 197 | signal_f2_rec(CHAN,BIT) <= sample_f2_wdata((CHAN*16) + BIT); |
|
198 | 198 | signal_f3_rec(CHAN,BIT) <= sample_f3_wdata((CHAN*16) + BIT); |
|
199 | 199 | END GENERATE bits_splitter; |
|
200 | 200 | END GENERATE output_splitter; |
|
201 | 201 | |
|
202 | 202 | |
|
203 | 203 | ----------------------------------------------------------------------------- |
|
204 | 204 | -- RECORD SIGNALS |
|
205 | 205 | ----------------------------------------------------------------------------- |
|
206 | 206 | |
|
207 | 207 | f0_rec : sig_recorder |
|
208 | 208 | GENERIC MAP( |
|
209 | 209 | FNAME => "output_f0.txt", |
|
210 | 210 | WIDTH => 6, |
|
211 | 211 | RESOLUTION => 16 |
|
212 | 212 | ) |
|
213 | 213 | PORT MAP( |
|
214 | 214 | clk => sample_f0_val, |
|
215 | 215 | end_of_simu => end_of_simu, |
|
216 | 216 | timestamp => TSTAMP, |
|
217 | 217 | input_signal => signal_f0_rec |
|
218 | 218 | ); |
|
219 | 219 | |
|
220 | 220 | f1_rec : sig_recorder |
|
221 | 221 | GENERIC MAP( |
|
222 | 222 | FNAME => "output_f1.txt", |
|
223 | 223 | WIDTH => 6, |
|
224 | 224 | RESOLUTION => 16 |
|
225 | 225 | ) |
|
226 | 226 | PORT MAP( |
|
227 | 227 | clk => sample_f1_val, |
|
228 | 228 | end_of_simu => end_of_simu, |
|
229 | 229 | timestamp => TSTAMP, |
|
230 | 230 | input_signal => signal_f1_rec |
|
231 | 231 | ); |
|
232 | 232 | |
|
233 | 233 | f2_rec : sig_recorder |
|
234 | 234 | GENERIC MAP( |
|
235 | 235 | FNAME => "output_f2.txt", |
|
236 | 236 | WIDTH => 6, |
|
237 | 237 | RESOLUTION => 16 |
|
238 | 238 | ) |
|
239 | 239 | PORT MAP( |
|
240 | 240 | clk => sample_f2_val, |
|
241 | 241 | end_of_simu => end_of_simu, |
|
242 | 242 | timestamp => TSTAMP, |
|
243 | 243 | input_signal => signal_f2_rec |
|
244 | 244 | ); |
|
245 | 245 | |
|
246 | 246 | f3_rec : sig_recorder |
|
247 | 247 | GENERIC MAP( |
|
248 | 248 | FNAME => "output_f3.txt", |
|
249 | 249 | WIDTH => 6, |
|
250 | 250 | RESOLUTION => 16 |
|
251 | 251 | ) |
|
252 | 252 | PORT MAP( |
|
253 | 253 | clk => sample_f3_val, |
|
254 | 254 | end_of_simu => end_of_simu, |
|
255 | 255 | timestamp => TSTAMP, |
|
256 | 256 | input_signal => signal_f3_rec |
|
257 | 257 | ); |
|
258 | 258 | |
|
259 | 259 | END; |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed | |
This diff has been collapsed as it changes many lines, (516 lines changed) Show them Hide them |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
General Comments 0
You need to be logged in to leave comments.
Login now