@@ -18,6 +18,6 vsim work.testbench | |||
|
18 | 18 | |
|
19 | 19 | log -r * |
|
20 | 20 | |
|
21 |
do |
|
|
21 | do wave_waveform_longsim.do | |
|
22 | 22 | |
|
23 | run -all | |
|
23 | run 500 ms |
@@ -187,6 +187,48 ARCHITECTURE behav OF testbench IS | |||
|
187 | 187 | ----------------------------------------------------------------------------- |
|
188 | 188 | SIGNAL run_test_waveform_picker : STD_LOGIC := '1'; |
|
189 | 189 | SIGNAL state_read_buffer_on_going : STD_LOGIC; |
|
190 | CONSTANT hindex : INTEGER := 1; | |
|
191 | SIGNAL time_mem_f0 : STD_LOGIC_VECTOR(63 DOWNTO 0); | |
|
192 | SIGNAL time_mem_f1 : STD_LOGIC_VECTOR(63 DOWNTO 0); | |
|
193 | SIGNAL time_mem_f2 : STD_LOGIC_VECTOR(63 DOWNTO 0); | |
|
194 | SIGNAL time_mem_f3 : STD_LOGIC_VECTOR(63 DOWNTO 0); | |
|
195 | ||
|
196 | SIGNAL data_mem_f0 : STD_LOGIC_VECTOR(31 DOWNTO 0); | |
|
197 | SIGNAL data_mem_f1 : STD_LOGIC_VECTOR(31 DOWNTO 0); | |
|
198 | SIGNAL data_mem_f2 : STD_LOGIC_VECTOR(31 DOWNTO 0); | |
|
199 | SIGNAL data_mem_f3 : STD_LOGIC_VECTOR(31 DOWNTO 0); | |
|
200 | ||
|
201 | SIGNAL data_0_f1 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
202 | SIGNAL data_0_f2 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
203 | SIGNAL data_0_f0 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
204 | ||
|
205 | SIGNAL data_1_f1 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
206 | SIGNAL data_1_f2 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
207 | SIGNAL data_1_f0 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
208 | ||
|
209 | SIGNAL data_2_f1 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
210 | SIGNAL data_2_f2 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
211 | SIGNAL data_2_f0 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
212 | ||
|
213 | SIGNAL data_3_f1 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
214 | SIGNAL data_3_f2 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
215 | SIGNAL data_3_f0 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
216 | ||
|
217 | SIGNAL data_4_f1 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
218 | SIGNAL data_4_f2 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
219 | SIGNAL data_4_f0 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
220 | ||
|
221 | SIGNAL data_5_f1 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
222 | SIGNAL data_5_f2 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
223 | SIGNAL data_5_f0 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
|
224 | ----------------------------------------------------------------------------- | |
|
225 | ||
|
226 | SIGNAL current_data : INTEGER; | |
|
227 | SIGNAL LIMIT_DATA : INTEGER := 194; | |
|
228 | ||
|
229 | SIGNAL read_buffer_temp : STD_LOGIC; | |
|
230 | SIGNAL read_buffer_temp_2 : STD_LOGIC; | |
|
231 | ||
|
190 | 232 |
|
|
191 | 233 | BEGIN |
|
192 | 234 | |
@@ -392,7 +434,7 BEGIN | |||
|
392 | 434 | APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F0 , X"00000060");--"00000019" |
|
393 | 435 | APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F0_2 , X"00000007");--"00000007" |
|
394 | 436 | APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F1 , X"00000062");--"00000019" |
|
395 |
APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F2 , X"000000 |
|
|
437 | APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F2 , X"00000001");--"00000001" | |
|
396 | 438 | |
|
397 | 439 | APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_NB_DATA_IN_BUFFER , X"0000003f"); -- X"00000010" |
|
398 | 440 | APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_NBSNAPSHOT , X"00000040"); |
@@ -414,16 +456,14 BEGIN | |||
|
414 | 456 | |
|
415 | 457 | WAIT UNTIL clk25MHz = '1'; |
|
416 | 458 | |
|
417 | read_buffer <= '0'; | |
|
418 | 459 |
|
|
419 | 460 | WAIT UNTIL apbo(INDEX_WAVEFORM_PICKER).pirq(14) = '1'; |
|
420 | 461 | APB_READ(clk25MHz,INDEX_WAVEFORM_PICKER,apbi,apbo(INDEX_WAVEFORM_PICKER),ADDR_WAVEFORM_PICKER_STATUS,status); |
|
462 | ||
|
421 | 463 |
|
|
422 | 464 | APB_WRITE(clk25MHz,INDEX_WAVEFORM_PICKER,apbi,ADDR_WAVEFORM_PICKER_STATUS,X"00000000"); |
|
423 | read_buffer <= '1'; | |
|
424 | 465 | END IF; |
|
425 | 466 |
WAIT UNTIL clk25MHz = '1'; |
|
426 | read_buffer <= '0'; | |
|
427 | 467 |
|
|
428 | 468 | |
|
429 | 469 | |
@@ -447,49 +487,104 BEGIN | |||
|
447 | 487 | --REPORT "*** END simulation ***" SEVERITY failure; |
|
448 | 488 | |
|
449 | 489 | |
|
490 | ||
|
450 | 491 | WAIT; |
|
451 | 492 | |
|
452 | 493 | END PROCESS WaveGen_Proc; |
|
453 | 494 | ----------------------------------------------------------------------------- |
|
454 | 495 | |
|
455 | ----------------------------------------------------------------------------- | |
|
456 | -- IRQ | |
|
457 | ----------------------------------------------------------------------------- | |
|
496 | read_buffer_temp <= '1' WHEN status(2 DOWNTO 0) = "111" ELSE '0'; | |
|
458 | 497 | PROCESS (clk25MHz, rstn) |
|
459 | 498 | BEGIN -- PROCESS |
|
460 | 499 | IF rstn = '0' THEN -- asynchronous reset (active low) |
|
500 | read_buffer <= '0'; | |
|
501 | read_buffer_temp_2 <= '0'; | |
|
502 | ELSIF clk25MHz'event AND clk25MHz = '1' THEN -- rising clock edge | |
|
503 | read_buffer_temp_2 <= read_buffer_temp; | |
|
504 | read_buffer <= read_buffer_temp AND NOT read_buffer_temp_2; | |
|
505 | END IF; | |
|
506 | END PROCESS; | |
|
507 | ||
|
508 | ----------------------------------------------------------------------------- | |
|
509 | -- IRQ | |
|
510 | ----------------------------------------------------------------------------- | |
|
511 | PROCESS | |
|
512 | BEGIN -- PROCESS | |
|
461 | 513 |
|
|
462 | ELSIF clk25MHz'EVENT AND clk25MHz = '1' THEN -- rising clock edge | |
|
514 | current_data <= 0; | |
|
515 | time_mem_f0 <= (OTHERS => '0'); | |
|
516 | time_mem_f1 <= (OTHERS => '0'); | |
|
517 | time_mem_f2 <= (OTHERS => '0'); | |
|
518 | time_mem_f3 <= (OTHERS => '0'); | |
|
519 | data_mem_f0 <= (OTHERS => '0'); | |
|
520 | data_mem_f1 <= (OTHERS => '0'); | |
|
521 | data_mem_f2 <= (OTHERS => '0'); | |
|
522 | data_mem_f3 <= (OTHERS => '0'); | |
|
523 | ||
|
524 | while_loop2: WHILE run_test_waveform_picker = '1' LOOP | |
|
525 | WAIT UNTIL clk25MHz = '1'; | |
|
463 | 526 | IF read_buffer = '1' THEN |
|
464 | 527 | state_read_buffer_on_going <= '1'; |
|
465 | 528 | |
|
466 | AHB_READ(clk, hindex, ahbmi, ahbmo, X"40000000", time_mem_f0(31 DOWNTO 0)); | |
|
467 | AHB_READ(clk, hindex, ahbmi, ahbmo, X"40020000", time_mem_f1(31 DOWNTO 0)); | |
|
468 | AHB_READ(clk, hindex, ahbmi, ahbmo, X"40040000", time_mem_f2(31 DOWNTO 0)); | |
|
469 | AHB_READ(clk, hindex, ahbmi, ahbmo, X"40060000", time_mem_f3(31 DOWNTO 0)); | |
|
529 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40000000", time_mem_f0(31 DOWNTO 0)); | |
|
530 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40020000", time_mem_f1(31 DOWNTO 0)); | |
|
531 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40040000", time_mem_f2(31 DOWNTO 0)); | |
|
470 | 532 | |
|
471 | AHB_READ(clk, hindex, ahbmi, ahbmo, X"40000004", time_mem_f0(63 DOWNTO 32)); | |
|
472 | AHB_READ(clk, hindex, ahbmi, ahbmo, X"40020004", time_mem_f1(63 DOWNTO 32)); | |
|
473 | AHB_READ(clk, hindex, ahbmi, ahbmo, X"40040004", time_mem_f2(63 DOWNTO 32)); | |
|
474 | AHB_READ(clk, hindex, ahbmi, ahbmo, X"40060004", time_mem_f3(63 DOWNTO 32)); | |
|
533 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40000004", time_mem_f0(63 DOWNTO 32)); | |
|
534 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40020004", time_mem_f1(63 DOWNTO 32)); | |
|
535 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40040004", time_mem_f2(63 DOWNTO 32)); | |
|
475 | 536 | |
|
476 | 537 | current_data <= 8; |
|
477 | 538 | ELSE |
|
478 | 539 | IF state_read_buffer_on_going = '1' THEN |
|
479 | 540 | -- READ ALL DATA in memory |
|
480 | AHB_READ(clk, hindex, ahbmi, ahbmo, X"40000000" + current_data, data_mem_f0); | |
|
481 | AHB_READ(clk, hindex, ahbmi, ahbmo, X"40020000" + current_data, data_mem_f1); | |
|
482 | AHB_READ(clk, hindex, ahbmi, ahbmo, X"40040000" + current_data, data_mem_f2); | |
|
483 | AHB_READ(clk, hindex, ahbmi, ahbmo, X"40060000" + current_data, data_mem_f3); | |
|
484 | IF current_data < LIMIT_DATA THEN | |
|
541 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40000000" + current_data, data_mem_f0); | |
|
542 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40020000" + current_data, data_mem_f1); | |
|
543 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40040000" + current_data, data_mem_f2); | |
|
544 | data_0_f0 <= data_mem_f0(15 DOWNTO 0); | |
|
545 | data_1_f0 <= data_mem_f0(31 DOWNTO 16); | |
|
546 | data_0_f1 <= data_mem_f1(15 DOWNTO 0); | |
|
547 | data_1_f1 <= data_mem_f1(31 DOWNTO 16); | |
|
548 | data_0_f2 <= data_mem_f2(15 DOWNTO 0); | |
|
549 | data_1_f2 <= data_mem_f2(31 DOWNTO 16); | |
|
550 | current_data <= current_data + 4; | |
|
551 | ||
|
552 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40000000" + current_data, data_mem_f0); | |
|
553 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40020000" + current_data, data_mem_f1); | |
|
554 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40040000" + current_data, data_mem_f2); | |
|
555 | data_2_f0 <= data_mem_f0(15 DOWNTO 0); | |
|
556 | data_3_f0 <= data_mem_f0(31 DOWNTO 16); | |
|
557 | data_2_f1 <= data_mem_f1(15 DOWNTO 0); | |
|
558 | data_3_f1 <= data_mem_f1(31 DOWNTO 16); | |
|
559 | data_2_f2 <= data_mem_f2(15 DOWNTO 0); | |
|
560 | data_3_f2 <= data_mem_f2(31 DOWNTO 16); | |
|
561 | current_data <= current_data + 4; | |
|
485 | 562 | |
|
563 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40000000" + current_data, data_mem_f0); | |
|
564 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40020000" + current_data, data_mem_f1); | |
|
565 | AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40040000" + current_data, data_mem_f2); | |
|
566 | data_4_f0 <= data_mem_f0(15 DOWNTO 0); | |
|
567 | data_5_f0 <= data_mem_f0(31 DOWNTO 16); | |
|
568 | data_4_f1 <= data_mem_f1(15 DOWNTO 0); | |
|
569 | data_5_f1 <= data_mem_f1(31 DOWNTO 16); | |
|
570 | data_4_f2 <= data_mem_f2(15 DOWNTO 0); | |
|
571 | data_5_f2 <= data_mem_f2(31 DOWNTO 16); | |
|
486 | 572 |
|
|
487 |
|
|
|
573 | ||
|
574 | IF current_data > LIMIT_DATA THEN | |
|
488 | 575 | state_read_buffer_on_going <= '0'; |
|
576 | time_mem_f0 <= (OTHERS => '0'); | |
|
577 | time_mem_f1 <= (OTHERS => '0'); | |
|
578 | time_mem_f2 <= (OTHERS => '0'); | |
|
579 | time_mem_f3 <= (OTHERS => '0'); | |
|
580 | data_mem_f0 <= (OTHERS => '0'); | |
|
581 | data_mem_f1 <= (OTHERS => '0'); | |
|
582 | data_mem_f2 <= (OTHERS => '0'); | |
|
583 | data_mem_f3 <= (OTHERS => '0'); | |
|
489 | 584 | END IF; |
|
490 | 585 | END IF; |
|
491 | 586 | END IF; |
|
492 | END IF; | |
|
587 | END LOOP while_loop2; | |
|
493 | 588 | END PROCESS; |
|
494 | 589 | ----------------------------------------------------------------------------- |
|
495 | 590 |
@@ -33,9 +33,9 PACKAGE testbench_package IS | |||
|
33 | 33 | |
|
34 | 34 | PROCEDURE AHB_READ ( |
|
35 | 35 | SIGNAL clk : IN STD_LOGIC; |
|
36 | CONSTANT hindex : IN INTEGER | |
|
37 |
SIGNAL ahbmi : |
|
|
38 |
SIGNAL ahbmo : |
|
|
36 | CONSTANT hindex : IN INTEGER; | |
|
37 | SIGNAL ahbmi : IN ahb_mst_in_type; | |
|
38 | SIGNAL ahbmo : OUT ahb_mst_out_type; | |
|
39 | 39 | CONSTANT haddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0); |
|
40 | 40 | SIGNAL hrdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) |
|
41 | 41 | ); |
@@ -63,6 +63,7 PACKAGE BODY testbench_package IS | |||
|
63 | 63 | apbi.penable <= '0'; |
|
64 | 64 | apbi.paddr <= (OTHERS => '0'); |
|
65 | 65 | apbi.pwdata <= (OTHERS => '0'); |
|
66 | WAIT UNTIL clk = '1'; | |
|
66 | 67 | |
|
67 | 68 | END APB_WRITE; |
|
68 | 69 | |
@@ -90,16 +91,30 PACKAGE BODY testbench_package IS | |||
|
90 | 91 | |
|
91 | 92 | PROCEDURE AHB_READ ( |
|
92 | 93 | SIGNAL clk : IN STD_LOGIC; |
|
93 | CONSTANT hindex : IN INTEGER | |
|
94 |
SIGNAL ahbmi : |
|
|
95 |
SIGNAL ahbmo : |
|
|
94 | CONSTANT hindex : IN INTEGER; | |
|
95 | SIGNAL ahbmi : IN ahb_mst_in_type; | |
|
96 | SIGNAL ahbmo : OUT ahb_mst_out_type; | |
|
96 | 97 | CONSTANT haddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0); |
|
97 | 98 | SIGNAL hrdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) |
|
98 | 99 | ) IS |
|
99 | 100 | BEGIN |
|
100 | ||
|
101 | ahbmo.HADDR <= haddr; | |
|
102 | ahbmo.HPROT <= "0011"; | |
|
103 | ahbmo.HIRQ <= (OTHERS => '0'); | |
|
104 | ahbmo.HCONFIG <= (0 => (OTHERS => '0'), OTHERS => (OTHERS => '0')); | |
|
105 | ahbmo.HINDEX <= hindex; | |
|
106 | ahbmo.HBUSREQ <= '1'; | |
|
107 | ahbmo.HLOCK <= '1'; | |
|
108 | ahbmo.HSIZE <= HSIZE_WORD; | |
|
109 | ahbmo.HBURST <= HBURST_SINGLE; | |
|
110 | ahbmo.HTRANS <= HTRANS_NONSEQ; | |
|
111 | ahbmo.HWRITE <= '0'; | |
|
112 | WAIT UNTIL clk = '1' AND ahbmi.HREADY = '1' AND ahbmi.HGRANT(hindex) = '1'; | |
|
113 | hrdata <= ahbmi.HRDATA; | |
|
114 | WAIT UNTIL clk = '1' AND ahbmi.HREADY = '1' AND ahbmi.HGRANT(hindex) = '1'; | |
|
115 | ahbmo.HTRANS <= HTRANS_IDLE; | |
|
116 | ahbmo.HBUSREQ <= '0'; | |
|
117 | ahbmo.HLOCK <= '0'; | |
|
101 | 118 | END AHB_READ; |
|
102 | 119 | |
|
103 | ||
|
104 | ||
|
105 | 120 | END testbench_package; |
@@ -425,7 +425,7 BEGIN -- beh | |||
|
425 | 425 | pirq_ms => 6, |
|
426 | 426 | pirq_wfp => 14, |
|
427 | 427 | hindex => 2, |
|
428 |
top_lfr_version => X"00000 |
|
|
428 | top_lfr_version => X"00000F") -- aa.bb.cc version | |
|
429 | 429 | PORT MAP ( |
|
430 | 430 | clk => clk_25, |
|
431 | 431 | rstn => reset, |
@@ -446,7 +446,7 BEGIN -- beh | |||
|
446 | 446 | ChannelCount => 8, |
|
447 | 447 | SampleNbBits => 14, |
|
448 | 448 | ncycle_cnv_high => 40, -- at least 32 cycles at 25 MHz, 32 * 49.152 / 25 /2 = 31.5 |
|
449 |
ncycle_cnv => 2 |
|
|
449 | ncycle_cnv => 249) -- 49 152 000 / 98304 /2 | |
|
450 | 450 | PORT MAP ( |
|
451 | 451 | -- CONV |
|
452 | 452 | cnv_clk => clk_24, |
General Comments 0
You need to be logged in to leave comments.
Login now