|
@@
-187,6
+187,48
ARCHITECTURE behav OF testbench IS
|
|
187
|
-----------------------------------------------------------------------------
|
|
187
|
-----------------------------------------------------------------------------
|
|
188
|
SIGNAL run_test_waveform_picker : STD_LOGIC := '1';
|
|
188
|
SIGNAL run_test_waveform_picker : STD_LOGIC := '1';
|
|
189
|
SIGNAL state_read_buffer_on_going : STD_LOGIC;
|
|
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
|
BEGIN
|
|
233
|
BEGIN
|
|
192
|
|
|
234
|
|
|
@@
-392,7
+434,7
BEGIN
|
|
392
|
APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F0 , X"00000060");--"00000019"
|
|
434
|
APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F0 , X"00000060");--"00000019"
|
|
393
|
APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F0_2 , X"00000007");--"00000007"
|
|
435
|
APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F0_2 , X"00000007");--"00000007"
|
|
394
|
APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F1 , X"00000062");--"00000019"
|
|
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"00000060");--"00000001"
|
|
437
|
APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F2 , X"00000001");--"00000001"
|
|
396
|
|
|
438
|
|
|
397
|
APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_NB_DATA_IN_BUFFER , X"0000003f"); -- X"00000010"
|
|
439
|
APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_NB_DATA_IN_BUFFER , X"0000003f"); -- X"00000010"
|
|
398
|
APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_NBSNAPSHOT , X"00000040");
|
|
440
|
APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_NBSNAPSHOT , X"00000040");
|
|
@@
-414,16
+456,14
BEGIN
|
|
414
|
|
|
456
|
|
|
415
|
WAIT UNTIL clk25MHz = '1';
|
|
457
|
WAIT UNTIL clk25MHz = '1';
|
|
416
|
|
|
458
|
|
|
417
|
read_buffer <= '0';
|
|
|
|
|
418
|
while_loop: WHILE run_test_waveform_picker = '1' LOOP
|
|
459
|
while_loop: WHILE run_test_waveform_picker = '1' LOOP
|
|
419
|
WAIT UNTIL apbo(INDEX_WAVEFORM_PICKER).pirq(14) = '1';
|
|
460
|
WAIT UNTIL apbo(INDEX_WAVEFORM_PICKER).pirq(14) = '1';
|
|
420
|
APB_READ(clk25MHz,INDEX_WAVEFORM_PICKER,apbi,apbo(INDEX_WAVEFORM_PICKER),ADDR_WAVEFORM_PICKER_STATUS,status);
|
|
461
|
APB_READ(clk25MHz,INDEX_WAVEFORM_PICKER,apbi,apbo(INDEX_WAVEFORM_PICKER),ADDR_WAVEFORM_PICKER_STATUS,status);
|
|
|
|
|
462
|
|
|
421
|
IF status(2 DOWNTO 0) = "111" THEN
|
|
463
|
IF status(2 DOWNTO 0) = "111" THEN
|
|
422
|
APB_WRITE(clk25MHz,INDEX_WAVEFORM_PICKER,apbi,ADDR_WAVEFORM_PICKER_STATUS,X"00000000");
|
|
464
|
APB_WRITE(clk25MHz,INDEX_WAVEFORM_PICKER,apbi,ADDR_WAVEFORM_PICKER_STATUS,X"00000000");
|
|
423
|
read_buffer <= '1';
|
|
|
|
|
424
|
END IF;
|
|
465
|
END IF;
|
|
425
|
WAIT UNTIL clk25MHz = '1';
|
|
466
|
WAIT UNTIL clk25MHz = '1';
|
|
426
|
read_buffer <= '0';
|
|
|
|
|
427
|
END LOOP while_loop;
|
|
467
|
END LOOP while_loop;
|
|
428
|
|
|
468
|
|
|
429
|
|
|
469
|
|
|
@@
-447,49
+487,104
BEGIN
|
|
447
|
--REPORT "*** END simulation ***" SEVERITY failure;
|
|
487
|
--REPORT "*** END simulation ***" SEVERITY failure;
|
|
448
|
|
|
488
|
|
|
449
|
|
|
489
|
|
|
|
|
|
490
|
|
|
450
|
WAIT;
|
|
491
|
WAIT;
|
|
451
|
|
|
492
|
|
|
452
|
END PROCESS WaveGen_Proc;
|
|
493
|
END PROCESS WaveGen_Proc;
|
|
453
|
-----------------------------------------------------------------------------
|
|
494
|
-----------------------------------------------------------------------------
|
|
454
|
|
|
495
|
|
|
455
|
-----------------------------------------------------------------------------
|
|
496
|
read_buffer_temp <= '1' WHEN status(2 DOWNTO 0) = "111" ELSE '0';
|
|
456
|
-- IRQ
|
|
|
|
|
457
|
-----------------------------------------------------------------------------
|
|
|
|
|
458
|
PROCESS (clk25MHz, rstn)
|
|
497
|
PROCESS (clk25MHz, rstn)
|
|
459
|
BEGIN -- PROCESS
|
|
498
|
BEGIN -- PROCESS
|
|
460
|
IF rstn = '0' THEN -- asynchronous reset (active low)
|
|
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
|
state_read_buffer_on_going <= '0';
|
|
513
|
state_read_buffer_on_going <= '0';
|
|
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
|
IF read_buffer = '1' THEN
|
|
526
|
IF read_buffer = '1' THEN
|
|
464
|
state_read_buffer_on_going <= '1';
|
|
527
|
state_read_buffer_on_going <= '1';
|
|
465
|
|
|
528
|
|
|
466
|
AHB_READ(clk, hindex, ahbmi, ahbmo, X"40000000", time_mem_f0(31 DOWNTO 0));
|
|
529
|
AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40000000", time_mem_f0(31 DOWNTO 0));
|
|
467
|
AHB_READ(clk, hindex, ahbmi, ahbmo, X"40020000", time_mem_f1(31 DOWNTO 0));
|
|
530
|
AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40020000", time_mem_f1(31 DOWNTO 0));
|
|
468
|
AHB_READ(clk, hindex, ahbmi, ahbmo, X"40040000", time_mem_f2(31 DOWNTO 0));
|
|
531
|
AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40040000", time_mem_f2(31 DOWNTO 0));
|
|
469
|
AHB_READ(clk, hindex, ahbmi, ahbmo, X"40060000", time_mem_f3(31 DOWNTO 0));
|
|
|
|
|
470
|
|
|
532
|
|
|
471
|
AHB_READ(clk, hindex, ahbmi, ahbmo, X"40000004", time_mem_f0(63 DOWNTO 32));
|
|
533
|
AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40000004", time_mem_f0(63 DOWNTO 32));
|
|
472
|
AHB_READ(clk, hindex, ahbmi, ahbmo, X"40020004", time_mem_f1(63 DOWNTO 32));
|
|
534
|
AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40020004", time_mem_f1(63 DOWNTO 32));
|
|
473
|
AHB_READ(clk, hindex, ahbmi, ahbmo, X"40040004", time_mem_f2(63 DOWNTO 32));
|
|
535
|
AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40040004", time_mem_f2(63 DOWNTO 32));
|
|
474
|
AHB_READ(clk, hindex, ahbmi, ahbmo, X"40060004", time_mem_f3(63 DOWNTO 32));
|
|
|
|
|
475
|
|
|
536
|
|
|
476
|
current_data <= 8;
|
|
537
|
current_data <= 8;
|
|
477
|
ELSE
|
|
538
|
ELSE
|
|
478
|
IF state_read_buffer_on_going = '1' THEN
|
|
539
|
IF state_read_buffer_on_going = '1' THEN
|
|
479
|
-- READ ALL DATA in memory
|
|
540
|
-- READ ALL DATA in memory
|
|
480
|
AHB_READ(clk, hindex, ahbmi, ahbmo, X"40000000" + current_data, data_mem_f0);
|
|
541
|
AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40000000" + current_data, data_mem_f0);
|
|
481
|
AHB_READ(clk, hindex, ahbmi, ahbmo, X"40020000" + current_data, data_mem_f1);
|
|
542
|
AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40020000" + current_data, data_mem_f1);
|
|
482
|
AHB_READ(clk, hindex, ahbmi, ahbmo, X"40040000" + current_data, data_mem_f2);
|
|
543
|
AHB_READ(clk25MHz, hindex, ahbmi, ahbmo(hindex), X"40040000" + current_data, data_mem_f2);
|
|
483
|
AHB_READ(clk, hindex, ahbmi, ahbmo, X"40060000" + current_data, data_mem_f3);
|
|
544
|
data_0_f0 <= data_mem_f0(15 DOWNTO 0);
|
|
484
|
IF current_data < LIMIT_DATA THEN
|
|
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
|
current_data <= current_data + 4;
|
|
572
|
current_data <= current_data + 4;
|
|
487
|
ELSE
|
|
573
|
|
|
|
|
|
574
|
IF current_data > LIMIT_DATA THEN
|
|
488
|
state_read_buffer_on_going <= '0';
|
|
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
|
END IF;
|
|
584
|
END IF;
|
|
490
|
END IF;
|
|
585
|
END IF;
|
|
491
|
END IF;
|
|
586
|
END IF;
|
|
492
|
END IF;
|
|
587
|
END LOOP while_loop2;
|
|
493
|
END PROCESS;
|
|
588
|
END PROCESS;
|
|
494
|
-----------------------------------------------------------------------------
|
|
589
|
-----------------------------------------------------------------------------
|
|
495
|
|
|
590
|
|