Add Test2 of RTPS Writer

Test RTPS Output (DATA and GAP Message Generation) of the RTPS Writer.
Backport some small changes to Test1.
Compiling and Passing
This commit is contained in:
Greek 2021-03-02 18:48:01 +01:00
parent 7ccf850adc
commit f96af25a6a
20 changed files with 10111 additions and 422 deletions

View File

@ -0,0 +1,98 @@
onerror {resume}
quietly WaveActivateNextPane {} 0
add wave -noupdate -divider SYSTEM
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/clk
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/reset
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_tbkdp/uut/time
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_tbkdp/uut/check_time
add wave -noupdate -divider INPUT
add wave -noupdate -group META /l1_rtps_writer_test1_tbkdp/uut/empty_meta
add wave -noupdate -group META /l1_rtps_writer_test1_tbkdp/uut/rd_meta
add wave -noupdate -group META /l1_rtps_writer_test1_tbkdp/uut/last_word_in_meta
add wave -noupdate -group META -radix hexadecimal /l1_rtps_writer_test1_tbkdp/uut/data_in_meta
add wave -noupdate -group USER /l1_rtps_writer_test1_tbkdp/uut/empty_user
add wave -noupdate -group USER /l1_rtps_writer_test1_tbkdp/uut/rd_user
add wave -noupdate -group USER -radix hexadecimal /l1_rtps_writer_test1_tbkdp/uut/data_in_user
add wave -noupdate -group USER /l1_rtps_writer_test1_tbkdp/uut/last_word_in_user
add wave -noupdate -divider HC
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_tbkdp/uut/data_available
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_tbkdp/uut/start_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_tbkdp/uut/opcode_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_tbkdp/uut/ack_hc
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_tbkdp/uut/seq_nr_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_tbkdp/uut/done_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_tbkdp/uut/ret_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_tbkdp/uut/get_data_hc
add wave -noupdate -expand -group HC -radix hexadecimal /l1_rtps_writer_test1_tbkdp/uut/data_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_tbkdp/uut/valid_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_tbkdp/uut/ready_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_tbkdp/uut/last_word_in_hc
add wave -noupdate -expand -group HC -radix hexadecimal /l1_rtps_writer_test1_tbkdp/uut/cc_instance_handle
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_tbkdp/uut/cc_kind
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_tbkdp/uut/cc_source_timestamp
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_tbkdp/uut/cc_seq_nr
add wave -noupdate -divider OUTPUT
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/full_rtps
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/wr_rtps
add wave -noupdate -radix hexadecimal /l1_rtps_writer_test1_tbkdp/uut/data_out_rtps
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/last_word_out_rtps
add wave -noupdate /l1_rtps_writer_test1_tbkdp/rtps_out_inst/wr
add wave -noupdate -radix hexadecimal /l1_rtps_writer_test1_tbkdp/rtps_out_inst/data_out
add wave -noupdate -divider {MAIN FSM}
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/stage
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/stage_next
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/cnt
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_tbkdp/uut/last_seq_nr
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_tbkdp/uut/global_ack_seq_nr_base
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_tbkdp/uut/next_seq_nr
add wave -noupdate -divider {MEMORY FSM}
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/mem_op_done
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/mem_op_start
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/mem_opcode
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/mem_stage
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/mem_stage_next
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/mem_cnt
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/mem_pos
add wave -noupdate -radix unsigned -childformat {{/l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(6) -radix unsigned} {/l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(5) -radix unsigned} {/l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(4) -radix unsigned} {/l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(3) -radix unsigned} {/l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(2) -radix unsigned} {/l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(1) -radix unsigned} {/l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(0) -radix unsigned}} -subitemconfig {/l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(6) {-height 15 -radix unsigned} /l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(5) {-height 15 -radix unsigned} /l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(4) {-height 15 -radix unsigned} /l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(3) {-height 15 -radix unsigned} /l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(2) {-height 15 -radix unsigned} /l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(1) {-height 15 -radix unsigned} /l1_rtps_writer_test1_tbkdp/uut/mem_addr_base(0) {-height 15 -radix unsigned}} /l1_rtps_writer_test1_tbkdp/uut/mem_addr_base
add wave -noupdate -childformat {{/l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.guid -radix hexadecimal} {/l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.addr -radix hexadecimal} {/l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.portn -radix hexadecimal} {/l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.lease_deadline -radix hexadecimal} {/l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.res_time -radix unsigned} {/l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.ack_seq_nr_base -radix unsigned} {/l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.req_seq_nr_base -radix unsigned}} -expand -subitemconfig {/l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.guid {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.addr {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.portn {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.lease_deadline {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.res_time {-height 15 -radix unsigned} /l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.ack_seq_nr_base {-height 15 -radix unsigned} /l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data.req_seq_nr_base {-height 15 -radix unsigned}} /l1_rtps_writer_test1_tbkdp/uut/mem_endpoint_data
add wave -noupdate -group MEM_CTRL -radix unsigned /l1_rtps_writer_test1_tbkdp/uut/mem_addr
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_tbkdp/uut/mem_valid_in
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_tbkdp/uut/mem_ready_in
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_tbkdp/uut/mem_read
add wave -noupdate -group MEM_CTRL -radix hexadecimal /l1_rtps_writer_test1_tbkdp/uut/mem_write_data
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_tbkdp/uut/abort_read
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_tbkdp/uut/mem_valid_out
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_tbkdp/uut/mem_ready_out
add wave -noupdate -group MEM_CTRL -radix hexadecimal /l1_rtps_writer_test1_tbkdp/uut/mem_read_data
add wave -noupdate -divider TESTBENCH
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_tbkdp/start_meta
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_tbkdp/packet_sent_meta
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_tbkdp/start_user
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_tbkdp/packet_sent_user
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_tbkdp/stage_hc
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_tbkdp/out_check_done
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_tbkdp/stim_done
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_tbkdp/test_done
add wave -noupdate -divider MISC
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/req_bitmap_pos
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/req_seq_nr_bitmap
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/nack_bitmap_pos
add wave -noupdate /l1_rtps_writer_test1_tbkdp/uut/bitmap_latch
TreeUpdate [SetDefaultTree]
WaveRestoreCursors {Begin {49575000 ps} 1} {Error {7325000 ps} 1} {Cursor {62689107 ps} 0}
quietly wave cursor active 3
configure wave -namecolwidth 150
configure wave -valuecolwidth 135
configure wave -justifyvalue left
configure wave -signalnamewidth 1
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 {61771800 ps} {62773704 ps}

View File

@ -0,0 +1,98 @@
onerror {resume}
quietly WaveActivateNextPane {} 0
add wave -noupdate -divider SYSTEM
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/clk
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/reset
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_trkdp/uut/time
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_trkdp/uut/check_time
add wave -noupdate -divider INPUT
add wave -noupdate -group META /l1_rtps_writer_test1_trkdp/uut/empty_meta
add wave -noupdate -group META /l1_rtps_writer_test1_trkdp/uut/rd_meta
add wave -noupdate -group META /l1_rtps_writer_test1_trkdp/uut/last_word_in_meta
add wave -noupdate -group META -radix hexadecimal /l1_rtps_writer_test1_trkdp/uut/data_in_meta
add wave -noupdate -group USER /l1_rtps_writer_test1_trkdp/uut/empty_user
add wave -noupdate -group USER /l1_rtps_writer_test1_trkdp/uut/rd_user
add wave -noupdate -group USER -radix hexadecimal /l1_rtps_writer_test1_trkdp/uut/data_in_user
add wave -noupdate -group USER /l1_rtps_writer_test1_trkdp/uut/last_word_in_user
add wave -noupdate -divider HC
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_trkdp/uut/data_available
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_trkdp/uut/start_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_trkdp/uut/opcode_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_trkdp/uut/ack_hc
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_trkdp/uut/seq_nr_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_trkdp/uut/done_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_trkdp/uut/ret_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_trkdp/uut/get_data_hc
add wave -noupdate -expand -group HC -radix hexadecimal /l1_rtps_writer_test1_trkdp/uut/data_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_trkdp/uut/valid_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_trkdp/uut/ready_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_trkdp/uut/last_word_in_hc
add wave -noupdate -expand -group HC -radix hexadecimal /l1_rtps_writer_test1_trkdp/uut/cc_instance_handle
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_trkdp/uut/cc_kind
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_trkdp/uut/cc_source_timestamp
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_trkdp/uut/cc_seq_nr
add wave -noupdate -divider OUTPUT
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/full_rtps
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/wr_rtps
add wave -noupdate -radix hexadecimal /l1_rtps_writer_test1_trkdp/uut/data_out_rtps
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/last_word_out_rtps
add wave -noupdate /l1_rtps_writer_test1_trkdp/rtps_out_inst/wr
add wave -noupdate -radix hexadecimal /l1_rtps_writer_test1_trkdp/rtps_out_inst/data_out
add wave -noupdate -divider {MAIN FSM}
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/stage
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/stage_next
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/cnt
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_trkdp/uut/last_seq_nr
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_trkdp/uut/global_ack_seq_nr_base
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_trkdp/uut/next_seq_nr
add wave -noupdate -divider {MEMORY FSM}
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/mem_op_done
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/mem_op_start
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/mem_opcode
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/mem_stage
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/mem_stage_next
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/mem_cnt
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/mem_pos
add wave -noupdate -radix unsigned -childformat {{/l1_rtps_writer_test1_trkdp/uut/mem_addr_base(6) -radix unsigned} {/l1_rtps_writer_test1_trkdp/uut/mem_addr_base(5) -radix unsigned} {/l1_rtps_writer_test1_trkdp/uut/mem_addr_base(4) -radix unsigned} {/l1_rtps_writer_test1_trkdp/uut/mem_addr_base(3) -radix unsigned} {/l1_rtps_writer_test1_trkdp/uut/mem_addr_base(2) -radix unsigned} {/l1_rtps_writer_test1_trkdp/uut/mem_addr_base(1) -radix unsigned} {/l1_rtps_writer_test1_trkdp/uut/mem_addr_base(0) -radix unsigned}} -subitemconfig {/l1_rtps_writer_test1_trkdp/uut/mem_addr_base(6) {-height 15 -radix unsigned} /l1_rtps_writer_test1_trkdp/uut/mem_addr_base(5) {-height 15 -radix unsigned} /l1_rtps_writer_test1_trkdp/uut/mem_addr_base(4) {-height 15 -radix unsigned} /l1_rtps_writer_test1_trkdp/uut/mem_addr_base(3) {-height 15 -radix unsigned} /l1_rtps_writer_test1_trkdp/uut/mem_addr_base(2) {-height 15 -radix unsigned} /l1_rtps_writer_test1_trkdp/uut/mem_addr_base(1) {-height 15 -radix unsigned} /l1_rtps_writer_test1_trkdp/uut/mem_addr_base(0) {-height 15 -radix unsigned}} /l1_rtps_writer_test1_trkdp/uut/mem_addr_base
add wave -noupdate -childformat {{/l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.guid -radix hexadecimal} {/l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.addr -radix hexadecimal} {/l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.portn -radix hexadecimal} {/l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.lease_deadline -radix hexadecimal} {/l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.res_time -radix unsigned} {/l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.ack_seq_nr_base -radix unsigned} {/l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.req_seq_nr_base -radix unsigned}} -expand -subitemconfig {/l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.guid {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.addr {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.portn {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.lease_deadline {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.res_time {-height 15 -radix unsigned} /l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.ack_seq_nr_base {-height 15 -radix unsigned} /l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data.req_seq_nr_base {-height 15 -radix unsigned}} /l1_rtps_writer_test1_trkdp/uut/mem_endpoint_data
add wave -noupdate -group MEM_CTRL -radix unsigned /l1_rtps_writer_test1_trkdp/uut/mem_addr
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_trkdp/uut/mem_valid_in
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_trkdp/uut/mem_ready_in
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_trkdp/uut/mem_read
add wave -noupdate -group MEM_CTRL -radix hexadecimal /l1_rtps_writer_test1_trkdp/uut/mem_write_data
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_trkdp/uut/abort_read
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_trkdp/uut/mem_valid_out
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_trkdp/uut/mem_ready_out
add wave -noupdate -group MEM_CTRL -radix hexadecimal /l1_rtps_writer_test1_trkdp/uut/mem_read_data
add wave -noupdate -divider TESTBENCH
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_trkdp/start_meta
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_trkdp/packet_sent_meta
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_trkdp/start_user
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_trkdp/packet_sent_user
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_trkdp/stage_hc
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_trkdp/out_check_done
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_trkdp/stim_done
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_trkdp/test_done
add wave -noupdate -divider MISC
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/req_bitmap_pos
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/req_seq_nr_bitmap
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/nack_bitmap_pos
add wave -noupdate /l1_rtps_writer_test1_trkdp/uut/bitmap_latch
TreeUpdate [SetDefaultTree]
WaveRestoreCursors {Begin {49575000 ps} 1} {Error {7325000 ps} 1} {Cursor {62689107 ps} 0}
quietly wave cursor active 3
configure wave -namecolwidth 150
configure wave -valuecolwidth 135
configure wave -justifyvalue left
configure wave -signalnamewidth 1
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 {61771800 ps} {62773704 ps}

View File

@ -0,0 +1,98 @@
onerror {resume}
quietly WaveActivateNextPane {} 0
add wave -noupdate -divider SYSTEM
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/clk
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/reset
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vbkdp/uut/time
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vbkdp/uut/check_time
add wave -noupdate -divider INPUT
add wave -noupdate -group META /l1_rtps_writer_test1_vbkdp/uut/empty_meta
add wave -noupdate -group META /l1_rtps_writer_test1_vbkdp/uut/rd_meta
add wave -noupdate -group META /l1_rtps_writer_test1_vbkdp/uut/last_word_in_meta
add wave -noupdate -group META -radix hexadecimal /l1_rtps_writer_test1_vbkdp/uut/data_in_meta
add wave -noupdate -group USER /l1_rtps_writer_test1_vbkdp/uut/empty_user
add wave -noupdate -group USER /l1_rtps_writer_test1_vbkdp/uut/rd_user
add wave -noupdate -group USER -radix hexadecimal /l1_rtps_writer_test1_vbkdp/uut/data_in_user
add wave -noupdate -group USER /l1_rtps_writer_test1_vbkdp/uut/last_word_in_user
add wave -noupdate -divider HC
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vbkdp/uut/data_available
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vbkdp/uut/start_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vbkdp/uut/opcode_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vbkdp/uut/ack_hc
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_vbkdp/uut/seq_nr_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vbkdp/uut/done_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vbkdp/uut/ret_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vbkdp/uut/get_data_hc
add wave -noupdate -expand -group HC -radix hexadecimal /l1_rtps_writer_test1_vbkdp/uut/data_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vbkdp/uut/valid_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vbkdp/uut/ready_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vbkdp/uut/last_word_in_hc
add wave -noupdate -expand -group HC -radix hexadecimal /l1_rtps_writer_test1_vbkdp/uut/cc_instance_handle
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vbkdp/uut/cc_kind
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_vbkdp/uut/cc_source_timestamp
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_vbkdp/uut/cc_seq_nr
add wave -noupdate -divider OUTPUT
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/full_rtps
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/wr_rtps
add wave -noupdate -radix hexadecimal /l1_rtps_writer_test1_vbkdp/uut/data_out_rtps
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/last_word_out_rtps
add wave -noupdate /l1_rtps_writer_test1_vbkdp/rtps_out_inst/wr
add wave -noupdate -radix hexadecimal /l1_rtps_writer_test1_vbkdp/rtps_out_inst/data_out
add wave -noupdate -divider {MAIN FSM}
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/stage
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/stage_next
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/cnt
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vbkdp/uut/last_seq_nr
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vbkdp/uut/global_ack_seq_nr_base
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vbkdp/uut/next_seq_nr
add wave -noupdate -divider {MEMORY FSM}
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/mem_op_done
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/mem_op_start
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/mem_opcode
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/mem_stage
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/mem_stage_next
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/mem_cnt
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/mem_pos
add wave -noupdate -radix unsigned -childformat {{/l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(6) -radix unsigned} {/l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(5) -radix unsigned} {/l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(4) -radix unsigned} {/l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(3) -radix unsigned} {/l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(2) -radix unsigned} {/l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(1) -radix unsigned} {/l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(0) -radix unsigned}} -subitemconfig {/l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(6) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(5) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(4) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(3) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(2) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(1) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vbkdp/uut/mem_addr_base(0) {-height 15 -radix unsigned}} /l1_rtps_writer_test1_vbkdp/uut/mem_addr_base
add wave -noupdate -childformat {{/l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.guid -radix hexadecimal} {/l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.addr -radix hexadecimal} {/l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.portn -radix hexadecimal} {/l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.lease_deadline -radix hexadecimal} {/l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.res_time -radix unsigned} {/l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.ack_seq_nr_base -radix unsigned} {/l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.req_seq_nr_base -radix unsigned}} -expand -subitemconfig {/l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.guid {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.addr {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.portn {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.lease_deadline {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.res_time {-height 15 -radix unsigned} /l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.ack_seq_nr_base {-height 15 -radix unsigned} /l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data.req_seq_nr_base {-height 15 -radix unsigned}} /l1_rtps_writer_test1_vbkdp/uut/mem_endpoint_data
add wave -noupdate -group MEM_CTRL -radix unsigned /l1_rtps_writer_test1_vbkdp/uut/mem_addr
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vbkdp/uut/mem_valid_in
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vbkdp/uut/mem_ready_in
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vbkdp/uut/mem_read
add wave -noupdate -group MEM_CTRL -radix hexadecimal /l1_rtps_writer_test1_vbkdp/uut/mem_write_data
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vbkdp/uut/abort_read
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vbkdp/uut/mem_valid_out
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vbkdp/uut/mem_ready_out
add wave -noupdate -group MEM_CTRL -radix hexadecimal /l1_rtps_writer_test1_vbkdp/uut/mem_read_data
add wave -noupdate -divider TESTBENCH
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vbkdp/start_meta
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vbkdp/packet_sent_meta
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vbkdp/start_user
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vbkdp/packet_sent_user
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vbkdp/stage_hc
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vbkdp/out_check_done
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vbkdp/stim_done
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vbkdp/test_done
add wave -noupdate -divider MISC
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/req_bitmap_pos
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/req_seq_nr_bitmap
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/nack_bitmap_pos
add wave -noupdate /l1_rtps_writer_test1_vbkdp/uut/bitmap_latch
TreeUpdate [SetDefaultTree]
WaveRestoreCursors {Begin {49575000 ps} 1} {Error {7325000 ps} 1} {Cursor {62689107 ps} 0}
quietly wave cursor active 3
configure wave -namecolwidth 150
configure wave -valuecolwidth 135
configure wave -justifyvalue left
configure wave -signalnamewidth 1
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 {61771800 ps} {62773704 ps}

View File

@ -0,0 +1,98 @@
onerror {resume}
quietly WaveActivateNextPane {} 0
add wave -noupdate -divider SYSTEM
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/clk
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/reset
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrkdn/uut/time
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrkdn/uut/check_time
add wave -noupdate -divider INPUT
add wave -noupdate -group META /l1_rtps_writer_test1_vrkdn/uut/empty_meta
add wave -noupdate -group META /l1_rtps_writer_test1_vrkdn/uut/rd_meta
add wave -noupdate -group META /l1_rtps_writer_test1_vrkdn/uut/last_word_in_meta
add wave -noupdate -group META -radix hexadecimal /l1_rtps_writer_test1_vrkdn/uut/data_in_meta
add wave -noupdate -group USER /l1_rtps_writer_test1_vrkdn/uut/empty_user
add wave -noupdate -group USER /l1_rtps_writer_test1_vrkdn/uut/rd_user
add wave -noupdate -group USER -radix hexadecimal /l1_rtps_writer_test1_vrkdn/uut/data_in_user
add wave -noupdate -group USER /l1_rtps_writer_test1_vrkdn/uut/last_word_in_user
add wave -noupdate -divider HC
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdn/uut/data_available
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdn/uut/start_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdn/uut/opcode_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdn/uut/ack_hc
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_vrkdn/uut/seq_nr_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdn/uut/done_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdn/uut/ret_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdn/uut/get_data_hc
add wave -noupdate -expand -group HC -radix hexadecimal /l1_rtps_writer_test1_vrkdn/uut/data_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdn/uut/valid_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdn/uut/ready_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdn/uut/last_word_in_hc
add wave -noupdate -expand -group HC -radix hexadecimal /l1_rtps_writer_test1_vrkdn/uut/cc_instance_handle
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdn/uut/cc_kind
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_vrkdn/uut/cc_source_timestamp
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_vrkdn/uut/cc_seq_nr
add wave -noupdate -divider OUTPUT
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/full_rtps
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/wr_rtps
add wave -noupdate -radix hexadecimal /l1_rtps_writer_test1_vrkdn/uut/data_out_rtps
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/last_word_out_rtps
add wave -noupdate /l1_rtps_writer_test1_vrkdn/rtps_out_inst/wr
add wave -noupdate -radix hexadecimal /l1_rtps_writer_test1_vrkdn/rtps_out_inst/data_out
add wave -noupdate -divider {MAIN FSM}
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/stage
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/stage_next
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/cnt
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrkdn/uut/last_seq_nr
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrkdn/uut/global_ack_seq_nr_base
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrkdn/uut/next_seq_nr
add wave -noupdate -divider {MEMORY FSM}
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/mem_op_done
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/mem_op_start
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/mem_opcode
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/mem_stage
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/mem_stage_next
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/mem_cnt
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/mem_pos
add wave -noupdate -radix unsigned -childformat {{/l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(6) -radix unsigned} {/l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(5) -radix unsigned} {/l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(4) -radix unsigned} {/l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(3) -radix unsigned} {/l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(2) -radix unsigned} {/l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(1) -radix unsigned} {/l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(0) -radix unsigned}} -subitemconfig {/l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(6) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(5) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(4) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(3) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(2) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(1) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdn/uut/mem_addr_base(0) {-height 15 -radix unsigned}} /l1_rtps_writer_test1_vrkdn/uut/mem_addr_base
add wave -noupdate -childformat {{/l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.guid -radix hexadecimal} {/l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.addr -radix hexadecimal} {/l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.portn -radix hexadecimal} {/l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.lease_deadline -radix hexadecimal} {/l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.res_time -radix unsigned} {/l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.ack_seq_nr_base -radix unsigned} {/l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.req_seq_nr_base -radix unsigned}} -expand -subitemconfig {/l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.guid {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.addr {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.portn {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.lease_deadline {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.res_time {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.ack_seq_nr_base {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data.req_seq_nr_base {-height 15 -radix unsigned}} /l1_rtps_writer_test1_vrkdn/uut/mem_endpoint_data
add wave -noupdate -group MEM_CTRL -radix unsigned /l1_rtps_writer_test1_vrkdn/uut/mem_addr
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrkdn/uut/mem_valid_in
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrkdn/uut/mem_ready_in
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrkdn/uut/mem_read
add wave -noupdate -group MEM_CTRL -radix hexadecimal /l1_rtps_writer_test1_vrkdn/uut/mem_write_data
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrkdn/uut/abort_read
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrkdn/uut/mem_valid_out
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrkdn/uut/mem_ready_out
add wave -noupdate -group MEM_CTRL -radix hexadecimal /l1_rtps_writer_test1_vrkdn/uut/mem_read_data
add wave -noupdate -divider TESTBENCH
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdn/start_meta
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdn/packet_sent_meta
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdn/start_user
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdn/packet_sent_user
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdn/stage_hc
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdn/out_check_done
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdn/stim_done
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdn/test_done
add wave -noupdate -divider MISC
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/req_bitmap_pos
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/req_seq_nr_bitmap
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/nack_bitmap_pos
add wave -noupdate /l1_rtps_writer_test1_vrkdn/uut/bitmap_latch
TreeUpdate [SetDefaultTree]
WaveRestoreCursors {Begin {49575000 ps} 1} {Error {7325000 ps} 1} {Cursor {62689107 ps} 0}
quietly wave cursor active 3
configure wave -namecolwidth 150
configure wave -valuecolwidth 135
configure wave -justifyvalue left
configure wave -signalnamewidth 1
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 {61771800 ps} {62773704 ps}

View File

@ -0,0 +1,98 @@
onerror {resume}
quietly WaveActivateNextPane {} 0
add wave -noupdate -divider SYSTEM
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/clk
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/reset
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrkdp/uut/time
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrkdp/uut/check_time
add wave -noupdate -divider INPUT
add wave -noupdate -group META /l1_rtps_writer_test1_vrkdp/uut/empty_meta
add wave -noupdate -group META /l1_rtps_writer_test1_vrkdp/uut/rd_meta
add wave -noupdate -group META /l1_rtps_writer_test1_vrkdp/uut/last_word_in_meta
add wave -noupdate -group META -radix hexadecimal /l1_rtps_writer_test1_vrkdp/uut/data_in_meta
add wave -noupdate -group USER /l1_rtps_writer_test1_vrkdp/uut/empty_user
add wave -noupdate -group USER /l1_rtps_writer_test1_vrkdp/uut/rd_user
add wave -noupdate -group USER -radix hexadecimal /l1_rtps_writer_test1_vrkdp/uut/data_in_user
add wave -noupdate -group USER /l1_rtps_writer_test1_vrkdp/uut/last_word_in_user
add wave -noupdate -divider HC
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdp/uut/data_available
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdp/uut/start_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdp/uut/opcode_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdp/uut/ack_hc
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_vrkdp/uut/seq_nr_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdp/uut/done_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdp/uut/ret_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdp/uut/get_data_hc
add wave -noupdate -expand -group HC -radix hexadecimal /l1_rtps_writer_test1_vrkdp/uut/data_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdp/uut/valid_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdp/uut/ready_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdp/uut/last_word_in_hc
add wave -noupdate -expand -group HC -radix hexadecimal /l1_rtps_writer_test1_vrkdp/uut/cc_instance_handle
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrkdp/uut/cc_kind
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_vrkdp/uut/cc_source_timestamp
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_vrkdp/uut/cc_seq_nr
add wave -noupdate -divider OUTPUT
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/full_rtps
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/wr_rtps
add wave -noupdate -radix hexadecimal /l1_rtps_writer_test1_vrkdp/uut/data_out_rtps
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/last_word_out_rtps
add wave -noupdate /l1_rtps_writer_test1_vrkdp/rtps_out_inst/wr
add wave -noupdate -radix hexadecimal /l1_rtps_writer_test1_vrkdp/rtps_out_inst/data_out
add wave -noupdate -divider {MAIN FSM}
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/stage
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/stage_next
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/cnt
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrkdp/uut/last_seq_nr
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrkdp/uut/global_ack_seq_nr_base
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrkdp/uut/next_seq_nr
add wave -noupdate -divider {MEMORY FSM}
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/mem_op_done
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/mem_op_start
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/mem_opcode
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/mem_stage
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/mem_stage_next
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/mem_cnt
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/mem_pos
add wave -noupdate -radix unsigned -childformat {{/l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(6) -radix unsigned} {/l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(5) -radix unsigned} {/l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(4) -radix unsigned} {/l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(3) -radix unsigned} {/l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(2) -radix unsigned} {/l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(1) -radix unsigned} {/l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(0) -radix unsigned}} -subitemconfig {/l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(6) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(5) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(4) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(3) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(2) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(1) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdp/uut/mem_addr_base(0) {-height 15 -radix unsigned}} /l1_rtps_writer_test1_vrkdp/uut/mem_addr_base
add wave -noupdate -childformat {{/l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.guid -radix hexadecimal} {/l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.addr -radix hexadecimal} {/l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.portn -radix hexadecimal} {/l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.lease_deadline -radix hexadecimal} {/l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.res_time -radix unsigned} {/l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.ack_seq_nr_base -radix unsigned} {/l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.req_seq_nr_base -radix unsigned}} -expand -subitemconfig {/l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.guid {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.addr {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.portn {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.lease_deadline {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.res_time {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.ack_seq_nr_base {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data.req_seq_nr_base {-height 15 -radix unsigned}} /l1_rtps_writer_test1_vrkdp/uut/mem_endpoint_data
add wave -noupdate -group MEM_CTRL -radix unsigned /l1_rtps_writer_test1_vrkdp/uut/mem_addr
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrkdp/uut/mem_valid_in
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrkdp/uut/mem_ready_in
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrkdp/uut/mem_read
add wave -noupdate -group MEM_CTRL -radix hexadecimal /l1_rtps_writer_test1_vrkdp/uut/mem_write_data
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrkdp/uut/abort_read
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrkdp/uut/mem_valid_out
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrkdp/uut/mem_ready_out
add wave -noupdate -group MEM_CTRL -radix hexadecimal /l1_rtps_writer_test1_vrkdp/uut/mem_read_data
add wave -noupdate -divider TESTBENCH
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdp/start_meta
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdp/packet_sent_meta
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdp/start_user
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdp/packet_sent_user
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdp/stage_hc
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdp/out_check_done
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdp/stim_done
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrkdp/test_done
add wave -noupdate -divider MISC
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/req_bitmap_pos
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/req_seq_nr_bitmap
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/nack_bitmap_pos
add wave -noupdate /l1_rtps_writer_test1_vrkdp/uut/bitmap_latch
TreeUpdate [SetDefaultTree]
WaveRestoreCursors {Begin {49575000 ps} 1} {Error {7325000 ps} 1} {Cursor {62689107 ps} 0}
quietly wave cursor active 3
configure wave -namecolwidth 150
configure wave -valuecolwidth 135
configure wave -justifyvalue left
configure wave -signalnamewidth 1
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 {61771800 ps} {62773704 ps}

View File

@ -0,0 +1,98 @@
onerror {resume}
quietly WaveActivateNextPane {} 0
add wave -noupdate -divider SYSTEM
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/clk
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/reset
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrndp/uut/time
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrndp/uut/check_time
add wave -noupdate -divider INPUT
add wave -noupdate -group META /l1_rtps_writer_test1_vrndp/uut/empty_meta
add wave -noupdate -group META /l1_rtps_writer_test1_vrndp/uut/rd_meta
add wave -noupdate -group META /l1_rtps_writer_test1_vrndp/uut/last_word_in_meta
add wave -noupdate -group META -radix hexadecimal /l1_rtps_writer_test1_vrndp/uut/data_in_meta
add wave -noupdate -group USER /l1_rtps_writer_test1_vrndp/uut/empty_user
add wave -noupdate -group USER /l1_rtps_writer_test1_vrndp/uut/rd_user
add wave -noupdate -group USER -radix hexadecimal /l1_rtps_writer_test1_vrndp/uut/data_in_user
add wave -noupdate -group USER /l1_rtps_writer_test1_vrndp/uut/last_word_in_user
add wave -noupdate -divider HC
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrndp/uut/data_available
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrndp/uut/start_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrndp/uut/opcode_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrndp/uut/ack_hc
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_vrndp/uut/seq_nr_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrndp/uut/done_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrndp/uut/ret_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrndp/uut/get_data_hc
add wave -noupdate -expand -group HC -radix hexadecimal /l1_rtps_writer_test1_vrndp/uut/data_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrndp/uut/valid_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrndp/uut/ready_in_hc
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrndp/uut/last_word_in_hc
add wave -noupdate -expand -group HC -radix hexadecimal /l1_rtps_writer_test1_vrndp/uut/cc_instance_handle
add wave -noupdate -expand -group HC /l1_rtps_writer_test1_vrndp/uut/cc_kind
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_vrndp/uut/cc_source_timestamp
add wave -noupdate -expand -group HC -radix unsigned /l1_rtps_writer_test1_vrndp/uut/cc_seq_nr
add wave -noupdate -divider OUTPUT
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/full_rtps
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/wr_rtps
add wave -noupdate -radix hexadecimal /l1_rtps_writer_test1_vrndp/uut/data_out_rtps
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/last_word_out_rtps
add wave -noupdate /l1_rtps_writer_test1_vrndp/rtps_out_inst/wr
add wave -noupdate -radix hexadecimal /l1_rtps_writer_test1_vrndp/rtps_out_inst/data_out
add wave -noupdate -divider {MAIN FSM}
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/stage
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/stage_next
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/cnt
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrndp/uut/last_seq_nr
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrndp/uut/global_ack_seq_nr_base
add wave -noupdate -radix unsigned /l1_rtps_writer_test1_vrndp/uut/next_seq_nr
add wave -noupdate -divider {MEMORY FSM}
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/mem_op_done
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/mem_op_start
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/mem_opcode
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/mem_stage
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/mem_stage_next
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/mem_cnt
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/mem_pos
add wave -noupdate -radix unsigned -childformat {{/l1_rtps_writer_test1_vrndp/uut/mem_addr_base(6) -radix unsigned} {/l1_rtps_writer_test1_vrndp/uut/mem_addr_base(5) -radix unsigned} {/l1_rtps_writer_test1_vrndp/uut/mem_addr_base(4) -radix unsigned} {/l1_rtps_writer_test1_vrndp/uut/mem_addr_base(3) -radix unsigned} {/l1_rtps_writer_test1_vrndp/uut/mem_addr_base(2) -radix unsigned} {/l1_rtps_writer_test1_vrndp/uut/mem_addr_base(1) -radix unsigned} {/l1_rtps_writer_test1_vrndp/uut/mem_addr_base(0) -radix unsigned}} -subitemconfig {/l1_rtps_writer_test1_vrndp/uut/mem_addr_base(6) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrndp/uut/mem_addr_base(5) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrndp/uut/mem_addr_base(4) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrndp/uut/mem_addr_base(3) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrndp/uut/mem_addr_base(2) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrndp/uut/mem_addr_base(1) {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrndp/uut/mem_addr_base(0) {-height 15 -radix unsigned}} /l1_rtps_writer_test1_vrndp/uut/mem_addr_base
add wave -noupdate -childformat {{/l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.guid -radix hexadecimal} {/l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.addr -radix hexadecimal} {/l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.portn -radix hexadecimal} {/l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.lease_deadline -radix hexadecimal} {/l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.res_time -radix unsigned} {/l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.ack_seq_nr_base -radix unsigned} {/l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.req_seq_nr_base -radix unsigned}} -expand -subitemconfig {/l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.guid {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.addr {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.portn {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.lease_deadline {-height 15 -radix hexadecimal} /l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.res_time {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.ack_seq_nr_base {-height 15 -radix unsigned} /l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data.req_seq_nr_base {-height 15 -radix unsigned}} /l1_rtps_writer_test1_vrndp/uut/mem_endpoint_data
add wave -noupdate -group MEM_CTRL -radix unsigned /l1_rtps_writer_test1_vrndp/uut/mem_addr
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrndp/uut/mem_valid_in
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrndp/uut/mem_ready_in
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrndp/uut/mem_read
add wave -noupdate -group MEM_CTRL -radix hexadecimal /l1_rtps_writer_test1_vrndp/uut/mem_write_data
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrndp/uut/abort_read
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrndp/uut/mem_valid_out
add wave -noupdate -group MEM_CTRL /l1_rtps_writer_test1_vrndp/uut/mem_ready_out
add wave -noupdate -group MEM_CTRL -radix hexadecimal /l1_rtps_writer_test1_vrndp/uut/mem_read_data
add wave -noupdate -divider TESTBENCH
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrndp/start_meta
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrndp/packet_sent_meta
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrndp/start_user
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrndp/packet_sent_user
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrndp/stage_hc
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrndp/out_check_done
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrndp/stim_done
add wave -noupdate -group TESTBENCH /l1_rtps_writer_test1_vrndp/test_done
add wave -noupdate -divider MISC
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/req_bitmap_pos
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/req_seq_nr_bitmap
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/nack_bitmap_pos
add wave -noupdate /l1_rtps_writer_test1_vrndp/uut/bitmap_latch
TreeUpdate [SetDefaultTree]
WaveRestoreCursors {Begin {49575000 ps} 1} {Error {7325000 ps} 1} {Cursor {62689107 ps} 0}
quietly wave cursor active 3
configure wave -namecolwidth 150
configure wave -valuecolwidth 135
configure wave -justifyvalue left
configure wave -signalnamewidth 1
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 {61771800 ps} {62773704 ps}

View File

@ -58,7 +58,7 @@ Optional features may not be supported by all RTPS implementations.
--------------------------------------------
ENTITYID_UKNOWN also for Built-In?
ENTITYID_UNKNOWN also for Built-In?
Ignore Participant/Topic/Publication/Subscription (handle argument of Sampleinfo)
ENDIANNESS

View File

@ -258,9 +258,15 @@ DESIGN DECISIONS
sense to implement dual port RAMs for the History Cache.
* Since the RTPS Writer only gets ACKNACK Messages from the matched Readers, and these Messages are
dropped by the rtps_handler if samller than expected, we do not need a "READ GUARD" in the RTPS
dropped by the rtps_handler if smaller than expected, we do not need a "READ GUARD" in the RTPS
Writer.
* Because "Once Acknowledged, Always Acknowledged" the Base of an ACKNACK can only be bigger or
equal to the SN of the last ACKNACK. It is also reasonable, that the Reader will always request
ALL missing segments each time it sends an ACKNACK (i.e. does not assume once requested, always
requested until reception). This means that during the ACKNACK response delay, we can just parse
the new request bitmap and overwrite the last old one.
PROTOCOL UNCOMPLIANCE
=====================
* Partition QoS

View File

@ -116,7 +116,8 @@ begin
last_word_in_hc => '0',
cc_instance_handle => HANDLE_NIL,
cc_kind => ALIVE,
cc_source_timestamp => TIME_INVALID
cc_source_timestamp => TIME_INVALID,
cc_seq_nr => SEQUENCENUMBER_UNKNOWN
);
stimulus_prc : process
@ -170,7 +171,7 @@ begin
e1.participant := p0;
e1.entityid := RV.RandSlv(ENTITYID_WIDTH);
e1.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
e1.expectsInlineQoS(0) := '1';
e1.reliability := BEST_EFFORT_RELIABILITY_QOS;
-- Endpoint 3
e2 := DEFAULT_ENDPOINT_DATA;
e2.participant := p1;
@ -184,7 +185,7 @@ begin
e3.participant := p1;
e3.entityid := RV.RandSlv(ENTITYID_WIDTH);
e3.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
e3.reliability := BEST_EFFORT_RELIABILITY_QOS;
e3.expectsInlineQoS(0) := '1';
Log("Initiating Test", INFO);
stim_done <= '0';

View File

@ -116,7 +116,8 @@ begin
last_word_in_hc => '0',
cc_instance_handle => HANDLE_NIL,
cc_kind => ALIVE,
cc_source_timestamp => TIME_INVALID
cc_source_timestamp => TIME_INVALID,
cc_seq_nr => SEQUENCENUMBER_UNKNOWN
);
stimulus_prc : process
@ -170,7 +171,7 @@ begin
e1.participant := p0;
e1.entityid := RV.RandSlv(ENTITYID_WIDTH);
e1.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
e1.expectsInlineQoS(0) := '1';
e1.reliability := BEST_EFFORT_RELIABILITY_QOS;
-- Endpoint 3
e2 := DEFAULT_ENDPOINT_DATA;
e2.participant := p1;
@ -184,7 +185,7 @@ begin
e3.participant := p1;
e3.entityid := RV.RandSlv(ENTITYID_WIDTH);
e3.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
e3.reliability := BEST_EFFORT_RELIABILITY_QOS;
e3.expectsInlineQoS(0) := '1';
Log("Initiating Test", INFO);
stim_done <= '0';

View File

@ -0,0 +1,964 @@
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
library osvvm; -- Utility Library
context osvvm.OsvvmContext;
use work.rtps_package.all;
use work.user_config.all;
use work.rtps_config_package.all;
use work.rtps_test_package.all;
-- This testbench tests the RTPS Message generation of the RTPS Writer (DATA and GAP Generation).
-- This testbench covers following:
-- * (Best Effort/Transient Local/Expecting Inline Qos) Remote Readers
-- * New Data Push
-- * ACK Handling
-- * NACK/Request Handling
entity L1_rtps_writer_test1_tbkdp is
end entity;
architecture testbench of L1_rtps_writer_test1_tbkdp is
-- *CONSTANT DECLARATION*
constant MAX_REMOTE_ENDPOINTS : natural := 5;
constant MAX_CC : natural := 10;
-- *TYPE DECLARATION*
type SEND_STAGE_TYPE is (IDLE, BUSY);
type TEST_CC_ARRAY_TYPE is array (0 to MAX_CC-1) of CACHE_CHANGE_TYPE;
type HC_STAGE_TYPE is (IDLE, PUSH, DONE, INVALID);
-- *SIGNAL DECLARATION*
signal clk, empty_user, empty_meta, rd_user, rd_meta, last_word_in_user, last_word_in_meta, last_word_in_hc, last_word_out_rtps : std_logic := '0';
signal reset : std_logic := '1';
signal data_in_user, data_in_meta, data_out, data_in_hc : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal wr_sig, full, data_available : std_logic := '0';
signal ready_in_hc, valid_in_hc, ack_hc, done_hc, get_data_hc, start_hc : std_logic := '0';
signal seq_nr_hc : SEQUENCENUMBER_TYPE := SEQUENCENUMBER_UNKNOWN;
signal stim_stage_user, stim_stage_meta : SEND_STAGE_TYPE := IDLE;
signal opcode_hc : HISTORY_CACHE_OPCODE_TYPE := NOP;
signal ret_hc : HISTORY_CACHE_RESPONSE_TYPE := ERROR;
signal cc_instance_handle : INSTANCE_HANDLE_TYPE := HANDLE_NIL;
signal cc_kind : CACHE_CHANGE_KIND_TYPE := ALIVE;
signal cc_source_timestamp : TIME_TYPE := TIME_INVALID;
signal cc_seq_nr : SEQUENCENUMBER_TYPE := SEQUENCENUMBER_UNKNOWN;
shared variable stimulus_user, stimulus_meta, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent_user, packet_sent_meta : std_logic := '0';
signal cnt_stim_meta, cnt_stim_user, count : natural := 0;
signal start_meta, start_user : std_logic := '0';
shared variable SB_out, SB_hc : osvvm.ScoreBoardPkg_slv.ScoreBoardPType;
signal stim_done, out_check_done, hc_check_done, test_done : std_logic := '0';
signal test_time : TIME_TYPE := TIME_ZERO;
signal fifo_in, fifo_out : std_logic_vector(WORD_WIDTH downto 0) := (others => '0');
signal fifo_wr, fifo_empty, fifo_full : std_logic := '0';
signal rtps_out_data : RTPS_OUT_DATA_TYPE := (others => (others => '0'));
signal rtps_out_rd, rtps_out_last_word_in, rtps_out_empty : std_logic_vector(0 to NUM_ENDPOINTS) := (others => '0');
signal test_cc : TEST_CC_ARRAY_TYPE := (others => DEFAULT_CACHE_CHANGE);
-- Signal containing the current fill level of the test_cc array
signal test_cc_fill : natural := 0;
signal stage_hc : HC_STAGE_TYPE := IDLE;
signal new_cc : std_logic := '0';
signal cnt : natural := 0;
-- *FUNCTION DECLARATION*
function gen_sn(input : natural) return SEQUENCENUMBER_TYPE is
variable ret : SEQUENCENUMBER_TYPE;
begin
ret(0) := (others => '0');
ret(1) := unsigned(int(input, WORD_WIDTH));
return ret;
end function;
begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
ACKNACK_RESPONSE_DELAY => gen_duration(1,0),
ACKNACK_SUPPRESSION_DELAY => DURATION_ZERO,
LEASE_DURATION => DURATION_INFINITE,
HEARTBEAT_PERIOD => DURATION_INFINITE,
ENTITYID => DEFAULT_WRITER_ENTITYID,
WITH_KEY => TRUE,
PUSH_MODE => TRUE,
INLINE_QOS => gen_inline_qos(NUM_READERS+7),
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
)
port map (
clk => clk,
reset => reset,
time => test_time,
empty_user => empty_user or packet_sent_user,
rd_user => rd_user,
data_in_user => data_in_user,
last_word_in_user => last_word_in_user,
empty_meta => empty_meta or packet_sent_meta,
rd_meta => rd_meta,
data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta,
alive_sig => open,
wr_rtps => fifo_wr,
full_rtps => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
assert_liveliness => '0',
data_available => data_available,
start_hc => start_hc,
opcode_hc => opcode_hc,
ack_hc => ack_hc,
seq_nr_hc => seq_nr_hc,
done_hc => done_hc,
ret_hc => ret_hc,
get_data_hc => get_data_hc,
data_in_hc => data_in_hc,
valid_in_hc => valid_in_hc,
ready_in_hc => ready_in_hc,
last_word_in_hc => last_word_in_hc,
cc_instance_handle => cc_instance_handle,
cc_kind => cc_kind,
cc_source_timestamp => cc_source_timestamp,
cc_seq_nr => cc_seq_nr
);
fifo_inst : entity work.FWFT_FIFO(arch)
generic map (
FIFO_DEPTH => 2,
DATA_WIDTH => WORD_WIDTH+1
)
port map
(
reset => reset,
clk => clk,
data_in => fifo_in,
write => fifo_wr,
read => rtps_out_rd(0),
data_out => fifo_out,
empty => fifo_empty,
full => fifo_full,
free => open
);
rtps_out_data <= (0 => fifo_out(WORD_WIDTH-1 downto 0), others => (others => '0'));
rtps_out_last_word_in <= (0 => fifo_out(WORD_WIDTH), others => '0');
rtps_out_empty <= (0 => fifo_empty, others => '1');
rtps_out_inst : entity work.rtps_out(arch)
port map (
clk => clk,
reset => reset,
data_in => rtps_out_data,
last_word_in=> rtps_out_last_word_in,
rd => rtps_out_rd,
empty => rtps_out_empty,
data_out => data_out,
wr => wr_sig,
full => full
);
stimulus_prc : process
variable RV : RandomPType;
variable e0, e1, e2, e3, e4, endpoint : ENDPOINT_DATA_TYPE := DEFAULT_ENDPOINT_DATA;
variable sub : RTPS_SUBMESSAGE_TYPE := DEFAULT_RTPS_SUBMESSAGE;
variable cc : CACHE_CHANGE_TYPE := DEFAULT_CACHE_CHANGE;
variable OUT_HEADER : OUTPUT_HEADER_TYPE := DEFAULT_OUTPUT_HEADER;
variable rtps_header : RTPS_HEADER_TYPE := DEFAULT_RTPS_HEADER;
alias idle_sig is <<signal uut.idle_sig : std_logic>>;
-- Wrapper to use procedure as function
impure function gen_rand_loc_2 return LOCATOR_TYPE is
variable ret : LOCATOR_TYPE := EMPTY_LOCATOR;
begin
gen_rand_loc(RV, ret);
return ret;
end function;
impure function gen_rand_entityid_2(reader : boolean) return std_logic_vector is
variable ret : std_logic_vector(ENTITYID_WIDTH-1 downto 0) := (others => '0');
begin
gen_rand_entityid(RV, reader, ret);
return ret;
end function;
impure function gen_rand_guid_prefix return GUIDPREFIX_TYPE is
variable ret : GUIDPREFIX_TYPE;
begin
ret := (0 => RV.RandSlv(WORD_WIDTH), 1 => RV.RandSlv(WORD_WIDTH), 2 => RV.RandSlv(WORD_WIDTH));
return ret;
end function;
impure function gen_key_hash return KEY_HASH_TYPE is
variable ret : KEY_HASH_TYPE := (others => (others => '0'));
begin
for i in 0 to KEY_HASH_TYPE'length-1 loop
ret(i) := RV.RandSlv(WORD_WIDTH);
end loop;
return ret;
end function;
impure function gen_payload return TEST_PACKET_TYPE is
variable ret : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
begin
for i in 0 to RV.RandInt(1,10) loop
ret.data(ret.length) := RV.RandSlv(WORD_WIDTH);
ret.length := ret.length + 1;
end loop;
ret.last(ret.length-1) := '1';
return ret;
end function;
procedure start_meta_test is
begin
start_meta <= '1';
wait until rising_edge(clk);
start_meta <= '0';
wait until rising_edge(clk);
end procedure;
procedure start_user_test is
begin
start_user <= '1';
wait until rising_edge(clk);
start_user <= '0';
wait until rising_edge(clk);
end procedure;
procedure wait_on_meta_sent is
begin
wait until rising_edge(packet_sent_meta);
end procedure;
procedure wait_on_user_sent is
begin
wait until rising_edge(packet_sent_user);
end procedure;
procedure wait_on_out_check is
begin
if (out_check_done /= '1') then
wait until out_check_done = '1';
end if;
end procedure;
procedure wait_on_hc_check is
begin
if (hc_check_done /= '1') then
wait until hc_check_done = '1';
end if;
end procedure;
procedure wait_on_completion is
begin
if (test_done /= '1') then
wait until test_done = '1';
end if;
end procedure;
procedure wait_on_idle is
begin
if (idle_sig /= '1') then
wait until idle_sig = '1';
end if;
end procedure;
procedure push_hc(opcode : in HISTORY_CACHE_OPCODE_TYPE; sn : in SEQUENCENUMBER_TYPE) is
begin
SB_hc.push(std_logic_vector(to_unsigned(HISTORY_CACHE_OPCODE_TYPE'pos(opcode),WORD_WIDTH)));
SB_hc.push(std_logic_vector(sn(0)));
SB_hc.push(std_logic_vector(sn(1)));
end procedure;
procedure gen_header(endpoint : in ENDPOINT_DATA_TYPE) is
begin
reference := EMPTY_TEST_PACKET;
-- OUTPUT HEADER
OUT_HEADER := DEFAULT_OUTPUT_HEADER;
OUT_HEADER := (dest => get_loc(endpoint), src => DEST_LOC.user.locator(1));
gen_output_header(OUT_HEADER, reference);
-- RTPS HEADER
rtps_header := DEFAULT_RTPS_HEADER;
rtps_header.guidPrefix := GUIDPREFIX;
gen_rtps_header(rtps_header, reference);
end procedure;
procedure gen_data(endpoint : in ENDPOINT_DATA_TYPE; ref : in CACHE_CHANGE_TYPE) is
begin
sub := DEFAULT_RTPS_SUBMESSAGE;
sub.submessageID := SID_DATA;
sub.writerId := DEFAULT_WRITER_ENTITYID;
sub.readerId := ENTITYID_UNKNOWN;
sub.submessageLength := (others => '0');
sub.writerSN := ref.seq_nr;
sub.flags(SUBMESSAGE_DATA_FLAG_POS) := '1' when (ref.kind = ALIVE) else '0';
sub.flags(SUBMESSAGE_KEY_FLAG_POS) := '1' when (ref.kind /= ALIVE) else '0';
sub.flags(SUBMESSAGE_INLINE_QOS_FLAG_POS) := '1';
gen_inline_qos(ref, gen_endpoint(NUM_READERS+7), (endpoint.expectsInlineQoS(0) = '1'), '0', sub.inlineQos);
gen_sentinel(sub.inlineQos);
assert (ref.payload /= EMPTY_TEST_PACKET) severity FAILURE;
sub.data := ref.payload;
gen_rtps_submessage(sub, reference);
end procedure;
procedure gen_ts(ts : TIME_TYPE) is
begin
sub := DEFAULT_RTPS_SUBMESSAGE;
sub.submessageID := SID_INFO_TS;
sub.timestamp := ts;
gen_rtps_submessage(sub, reference);
end procedure;
procedure gen_gap(first : SEQUENCENUMBER_TYPE; last : SEQUENCENUMBER_TYPE) is
begin
sub := DEFAULT_RTPS_SUBMESSAGE;
sub.submessageID := SID_GAP;
sub.writerId := DEFAULT_WRITER_ENTITYID;
sub.readerId := ENTITYID_UNKNOWN;
sub.gapStart := first;
sub.gapList := (base => last, numBits => int(0, CDR_LONG_WIDTH), bitmap => (others => '0'));
gen_rtps_submessage(sub, reference);
end procedure;
procedure push_reference is
begin
fix_output_packet(reference);
for i in 0 to reference.length-1 loop
SB_out.Push(reference.data(i));
end loop;
end procedure;
begin
SetAlertLogName("rtps_writer (Transient Local, Best Effort, Keyed, By Reception Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
SetLogEnable(DEBUG, FALSE);
SetLogEnable(PASSED, FALSE);
SetLogEnable(INFO, TRUE);
RV.InitSeed(RV'instance_name);
-- Endpoint 0
e0 := DEFAULT_ENDPOINT_DATA;
e0.nr := 0;
e0.match := MATCH;
e0.entityid := RV.RandSlv(ENTITYID_WIDTH);
e0.participant.guidPrefix := gen_rand_guid_prefix;
e0.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
-- Endpoint 1
e1 := DEFAULT_ENDPOINT_DATA;
e1.nr := 1;
e1.match := MATCH;
e1.entityid := RV.RandSlv(ENTITYID_WIDTH);
e1.participant.guidPrefix := gen_rand_guid_prefix;
e1.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
e1.reliability := BEST_EFFORT_RELIABILITY_QOS;
-- Endpoint 2
e2 := DEFAULT_ENDPOINT_DATA;
e2.nr := 2;
e2.match := MATCH;
e2.entityid := RV.RandSlv(ENTITYID_WIDTH);
e2.participant.guidPrefix := gen_rand_guid_prefix;
e2.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
e2.expectsInlineQoS(0) := '1';
-- Endpoint 3
e3 := DEFAULT_ENDPOINT_DATA;
e3.nr := 3;
e3.match := MATCH;
e3.entityid := RV.RandSlv(ENTITYID_WIDTH);
e3.participant.guidPrefix := gen_rand_guid_prefix;
e3.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
e3.durability := TRANSIENT_LOCAL_DURABILITY_QOS;
-- Endpoint 4
e4 := DEFAULT_ENDPOINT_DATA;
e4.nr := 4;
e4.match := MATCH;
e4.entityid := RV.RandSlv(ENTITYID_WIDTH);
e4.participant.guidPrefix := gen_rand_guid_prefix;
e4.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
e4.expectsInlineQoS(0) := '1';
e4.durability := TRANSIENT_LOCAL_DURABILITY_QOS;
e4.reliability := BEST_EFFORT_RELIABILITY_QOS;
Log("Initiating Test", INFO);
Log("Current Time: 0s", INFO);
count <= 1;
test_time <= TIME_ZERO;
new_cc <= '0';
stim_done <= '0';
start_meta <= '0';
start_user <= '0';
reset <= '1';
wait until rising_edge(clk);
wait until rising_edge(clk);
reset <= '0';
Log("Insert Endpoint 0,1", INFO);
gen_endpoint_match_frame(e0, stimulus_meta);
gen_endpoint_match_frame(e1, stimulus_meta);
start_meta_test;
wait_on_meta_sent;
stimulus_meta := EMPTY_TEST_PACKET;
stimulus_user := EMPTY_TEST_PACKET;
wait_on_idle;
Log("Add Cache Change [SN 1] (Send DATA to Endpoint 0,1)", INFO);
test_cc(0).kind <= ALIVE;
test_cc(0).instance <= gen_key_hash;
test_cc(0).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(0).seq_nr <= gen_sn(1);
test_cc(0).src_timestamp <= gen_duration(1,0);
test_cc(0).payload <= gen_payload;
test_cc_fill <= 1;
new_cc <= '1';
wait until rising_edge(clk);
new_cc <= '0';
wait until rising_edge(clk);
push_hc(ACK_CACHE_CHANGE, gen_sn(1));
gen_header(e0);
gen_data(e0, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(0));
push_reference;
wait_on_out_check;
wait_on_idle;
Log("Add Cache Change [SN 2,3] (Send DATA to Endpoint 0,1)", INFO);
test_cc(1).kind <= ALIVE;
test_cc(1).instance <= gen_key_hash;
test_cc(1).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(1).seq_nr <= gen_sn(2);
test_cc(1).src_timestamp <= gen_duration(2,0);
test_cc(1).payload <= gen_payload;
test_cc(2).kind <= ALIVE;
test_cc(2).instance <= gen_key_hash;
test_cc(2).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(2).seq_nr <= gen_sn(3);
test_cc(2).src_timestamp <= gen_duration(3,0);
test_cc(2).payload <= gen_payload;
test_cc_fill <= 3;
new_cc <= '1';
wait until rising_edge(clk);
new_cc <= '0';
wait until rising_edge(clk);
push_hc(ACK_CACHE_CHANGE, gen_sn(2));
push_hc(ACK_CACHE_CHANGE, gen_sn(3));
gen_header(e0);
gen_data(e0, test_cc(1));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(1));
push_reference;
wait_on_out_check;
gen_header(e0);
gen_data(e0, test_cc(2));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(2));
push_reference;
wait_on_out_check;
wait_on_idle;
Log("Insert Endpoint 2,3 (Send Historical DATA to Endpoint 3)", INFO);
gen_endpoint_match_frame(e2, stimulus_meta);
gen_endpoint_match_frame(e3, stimulus_meta);
start_meta_test;
wait_on_meta_sent;
stimulus_meta := EMPTY_TEST_PACKET;
stimulus_user := EMPTY_TEST_PACKET;
gen_header(e3);
gen_data(e3, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(1));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(2));
push_reference;
wait_on_out_check;
wait_on_idle;
Log("Add Cache Change [SN 4] (Send DATA to Endpoint 0,1,2,3)", INFO);
test_cc(3).kind <= ALIVE_FILTERED;
test_cc(3).instance <= gen_key_hash;
test_cc(3).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(3).seq_nr <= gen_sn(4);
test_cc(3).src_timestamp <= gen_duration(4,0);
test_cc(3).payload <= gen_payload;
test_cc_fill <= 4;
new_cc <= '1';
wait until rising_edge(clk);
new_cc <= '0';
wait until rising_edge(clk);
push_hc(ACK_CACHE_CHANGE, gen_sn(4));
gen_header(e0);
gen_data(e0, test_cc(3));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(3));
push_reference;
wait_on_out_check;
gen_header(e2);
gen_data(e2, test_cc(3));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(3));
push_reference;
wait_on_out_check;
wait_on_idle;
Log("Add Cache Change [SN 10,11,15,46,50], Remove Cache Change [SN 1,2] (Send DATA to Endpoint 0,1,2,3)", INFO);
test_cc(0) <= test_cc(2);
test_cc(1) <= test_cc(3);
test_cc(2).kind <= ALIVE;
test_cc(2).instance <= gen_key_hash;
test_cc(2).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(2).seq_nr <= gen_sn(10);
test_cc(2).src_timestamp <= gen_duration(5,0);
test_cc(2).payload <= gen_payload;
test_cc(3).kind <= NOT_ALIVE_DISPOSED;
test_cc(3).instance <= gen_key_hash;
test_cc(3).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(3).seq_nr <= gen_sn(11);
test_cc(3).src_timestamp <= gen_duration(6,0);
test_cc(3).payload <= gen_payload;
test_cc(4).kind <= NOT_ALIVE_UNREGISTERED;
test_cc(4).instance <= gen_key_hash;
test_cc(4).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(4).seq_nr <= gen_sn(15);
test_cc(4).src_timestamp <= gen_duration(7,0);
test_cc(4).payload <= gen_payload;
test_cc(5).kind <= NOT_ALIVE_DISPOSED;
test_cc(5).instance <= gen_key_hash;
test_cc(5).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(5).seq_nr <= gen_sn(37);
test_cc(5).src_timestamp <= gen_duration(8,0);
test_cc(5).payload <= gen_payload;
test_cc(6).kind <= ALIVE;
test_cc(6).instance <= gen_key_hash;
test_cc(6).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(6).seq_nr <= gen_sn(50);
test_cc(6).src_timestamp <= gen_duration(9,0);
test_cc(6).payload <= gen_payload;
test_cc_fill <= 7;
new_cc <= '1';
wait until rising_edge(clk);
new_cc <= '0';
wait until rising_edge(clk);
push_hc(ACK_CACHE_CHANGE, gen_sn(10));
push_hc(ACK_CACHE_CHANGE, gen_sn(11));
push_hc(ACK_CACHE_CHANGE, gen_sn(15));
push_hc(ACK_CACHE_CHANGE, gen_sn(37));
push_hc(ACK_CACHE_CHANGE, gen_sn(50));
gen_header(e0);
gen_data(e0, test_cc(2));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(2));
push_reference;
wait_on_out_check;
gen_header(e2);
gen_data(e2, test_cc(2));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(2));
push_reference;
wait_on_out_check;
gen_header(e0);
gen_data(e0, test_cc(3));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(3));
push_reference;
wait_on_out_check;
gen_header(e2);
gen_data(e2, test_cc(3));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(3));
push_reference;
wait_on_out_check;
gen_header(e0);
gen_data(e0, test_cc(4));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(4));
push_reference;
wait_on_out_check;
gen_header(e2);
gen_data(e2, test_cc(4));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(4));
push_reference;
wait_on_out_check;
gen_header(e0);
gen_data(e0, test_cc(5));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(5));
push_reference;
wait_on_out_check;
gen_header(e2);
gen_data(e2, test_cc(5));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(5));
push_reference;
wait_on_out_check;
gen_header(e0);
gen_data(e0, test_cc(6));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(6));
push_reference;
wait_on_out_check;
gen_header(e2);
gen_data(e2, test_cc(6));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(6));
push_reference;
wait_on_out_check;
wait_on_idle;
Log("Endpoint 0 sent ACKNACK [Request SN 10,15,37]", INFO);
endpoint := e0;
sub := DEFAULT_RTPS_SUBMESSAGE;
sub.submessageID := SID_ACKNACK;
sub.writerId := DEFAULT_WRITER_ENTITYID;
sub.readerId := endpoint.entityid;
sub.count := std_logic_vector(to_unsigned(count, CDR_LONG_WIDTH));
sub.readerSNState := (base => gen_sn(5), numBits => int(35, CDR_LONG_WIDTH), bitmap => (5 => '1', 10 => '1', 32 => '1', others => '0'));
sub.flags(SUBMESSAGE_FINAL_FLAG_POS) := '1';
gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus_user);
start_user_test;
wait_on_user_sent;
stimulus_meta := EMPTY_TEST_PACKET;
stimulus_user := EMPTY_TEST_PACKET;
wait_on_idle;
Log("Current Time: 1s", INFO);
test_time <= gen_duration(1,0);
wait until rising_edge(clk);
wait until rising_edge(clk); -- Allow idle_sig to go low
wait_on_idle;
Log("Insert Endpoint 4 (Send Historical DATA to Endpoint 4)", INFO);
gen_endpoint_match_frame(e4, stimulus_meta);
start_meta_test;
wait_on_meta_sent;
stimulus_meta := EMPTY_TEST_PACKET;
stimulus_user := EMPTY_TEST_PACKET;
gen_header(e4);
gen_data(e4, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e4);
gen_data(e4, test_cc(1));
push_reference;
wait_on_out_check;
gen_header(e4);
gen_gap(gen_sn(5), gen_sn(10));
gen_data(e4, test_cc(2));
push_reference;
wait_on_out_check;
gen_header(e4);
gen_data(e4, test_cc(3));
push_reference;
wait_on_out_check;
gen_header(e4);
gen_gap(gen_sn(12), gen_sn(15));
gen_data(e4, test_cc(4));
push_reference;
wait_on_out_check;
gen_header(e4);
gen_gap(gen_sn(16), gen_sn(37));
gen_data(e4, test_cc(5));
push_reference;
wait_on_out_check;
gen_header(e4);
gen_gap(gen_sn(38), gen_sn(50));
gen_data(e4, test_cc(6));
push_reference;
wait_on_out_check;
wait_on_idle;
stim_done <= '1';
wait_on_completion;
TranscriptOpen(RESULTS_FILE, APPEND_MODE);
SetTranscriptMirror;
ReportAlerts;
TranscriptClose;
std.env.stop;
wait;
end process;
clock_prc : process
begin
clk <= '0';
wait for 25 ns;
clk <= '1';
wait for 25 ns;
end process;
empty_meta_prc : process
begin
empty_meta <= '0';
wait until rd_meta = '1';
wait until rising_edge(clk);
empty_meta <= '1';
wait until rising_edge(clk);
end process;
empty_user_prc : process
begin
empty_user <= '0';
wait until rd_user = '1';
wait until rising_edge(clk);
empty_user <= '1';
wait until rising_edge(clk);
end process;
rtps_full_prc : process
begin
full <= '0';
wait until wr_sig = '1';
wait until rising_edge(clk);
full <= '1';
wait until rising_edge(clk);
end process;
alert_prc : process(all)
begin
if rising_edge(clk) then
alertif(empty_meta = '1' and rd_meta = '1', "Input FIFO read signal high while empty signal high (meta)", ERROR);
alertif(empty_user = '1' and rd_user = '1', "Input FIFO read signal high while empty signal high (user)", ERROR);
alertif(full = '1' and wr_sig = '1', "Output FIFO write signal high while full signal high", ERROR);
end if;
end process;
input_meta_prc : process(all)
begin
data_in_meta <= stimulus_meta.data(cnt_stim_meta);
last_word_in_meta <= stimulus_meta.last(cnt_stim_meta);
if rising_edge(clk) then
if (reset = '1') then
cnt_stim_meta <= 0;
stim_stage_meta <= IDLE;
packet_sent_meta <= '1';
else
case (stim_stage_meta) is
when IDLE =>
if (start_meta = '1' and stimulus_meta.length /= 0) then
stim_stage_meta <= BUSY;
packet_sent_meta <= '0';
end if;
when BUSY =>
if (rd_meta = '1') then
if (cnt_stim_meta = stimulus_meta.length-1) then
stim_stage_meta <= IDLE;
packet_sent_meta <= '1';
cnt_stim_meta <= 0;
else
cnt_stim_meta <= cnt_stim_meta + 1;
end if;
end if;
end case;
end if;
end if;
end process;
input_user_prc : process(all)
begin
data_in_user <= stimulus_user.data(cnt_stim_user);
last_word_in_user <= stimulus_user.last(cnt_stim_user);
if rising_edge(clk) then
if (reset = '1') then
cnt_stim_user <= 0;
stim_stage_user <= IDLE;
packet_sent_user <= '1';
else
case (stim_stage_user) is
when IDLE =>
if (start_user = '1' and stimulus_user.length /= 0) then
stim_stage_user <= BUSY;
packet_sent_user <= '0';
end if;
when BUSY =>
if (rd_user = '1') then
if (cnt_stim_user = stimulus_user.length-1) then
stim_stage_user <= IDLE;
packet_sent_user <= '1';
cnt_stim_user <= 0;
else
cnt_stim_user <= cnt_stim_user + 1;
end if;
end if;
end case;
end if;
end if;
end process;
done_proc : process(clk)
begin
if rising_edge(clk) then
if (stim_done = '1' and SB_out.empty and SB_hc.empty) then
test_done <= '1';
else
test_done <= '0';
end if;
end if;
end process;
hc_prc : process (all)
variable stimulus : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
variable bool : boolean := FALSE;
begin
if (new_cc = '1') then
data_available <= '1';
end if;
if rising_edge(clk) then
hc_check_done <= '0';
case (stage_hc) is
when IDLE =>
if (start_hc = '1') then
ack_hc <= '1';
case (opcode_hc) is
when GET_CACHE_CHANGE =>
bool := FALSE;
for i in 0 to test_cc_fill-1 loop
if (test_cc(i).seq_nr = seq_nr_hc) then
cc_instance_handle <= test_cc(i).instance;
cc_source_timestamp <= test_cc(i).src_timestamp;
cc_kind <= test_cc(i).kind;
stimulus := test_cc(i).payload;
stage_hc <= DONE;
bool := TRUE;
end if;
end loop;
if (not bool) then
stage_hc <= INVALID;
end if;
when GET_MIN_SN =>
stimulus := EMPTY_TEST_PACKET;
cc_seq_nr <= test_cc(0).seq_nr;
stage_hc <= DONE;
when GET_MAX_SN =>
data_available <= '0';
stimulus := EMPTY_TEST_PACKET;
cc_seq_nr <= test_cc(test_cc_fill-1).seq_nr when (test_cc_fill /= 0) else SEQUENCENUMBER_UNKNOWN;
stage_hc <= DONE;
when others =>
SB_hc.Check(std_logic_vector(to_unsigned(HISTORY_CACHE_OPCODE_TYPE'pos(opcode_hc), WORD_WIDTH)));
SB_hc.Check(std_logic_vector(seq_nr_hc(0)));
SB_hc.Check(std_logic_vector(seq_nr_hc(1)));
hc_check_done <= '1';
stage_hc <= DONE;
end case;
end if;
when DONE =>
if (get_data_hc = '1') then
alertif(stimulus = EMPTY_TEST_PACKET, "Requested empty Payload", FAILURE);
stage_hc <= PUSH;
cnt <= 0;
else
stage_hc <= IDLE;
end if;
when PUSH =>
if (ready_in_hc = '1') then
cnt <= cnt + 1;
if (cnt = stimulus.length-1) then
stage_hc <= IDLE;
end if;
end if;
when INVALID =>
stage_hc <= IDLE;
when others =>
null;
end case;
end if;
-- DEFAULT
ack_hc <= '0';
valid_in_hc <= '0';
data_in_hc <= (others => '0');
last_word_in_hc <= '0';
done_hc <= '0';
ret_hc <= ERROR;
case (stage_hc) is
when IDLE =>
if (start_hc = '1') then
ack_hc <= '1';
end if;
when DONE =>
done_hc <= '1';
ret_hc <= OK;
when PUSH =>
valid_in_hc <= '1';
data_in_hc <= stimulus.data(cnt);
last_word_in_hc <= stimulus.last(cnt);
when INVALID =>
done_hc <= '1';
ret_hc <= INVALID;
when others =>
null;
end case;
end process;
output_check_prc : process(all)
begin
if (SB_out.empty) then
out_check_done <= '1';
else
out_check_done <= '0';
end if;
if rising_edge(clk) then
if (wr_sig = '1') then
SB_out.Check(data_out);
end if;
end if;
end process;
watchdog : process
begin
wait for 1 ms;
Alert("Test timeout", FAILURE);
std.env.stop;
end process;
end architecture;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,922 @@
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
library osvvm; -- Utility Library
context osvvm.OsvvmContext;
use work.rtps_package.all;
use work.user_config.all;
use work.rtps_config_package.all;
use work.rtps_test_package.all;
-- This testbench tests the RTPS Message generation of the RTPS Writer (DATA and GAP Generation).
-- This testbench covers following:
-- * (Best Effort/Transient Local/Expecting Inline Qos) Remote Readers
-- * New Data Push
-- * ACK Handling
-- * NACK/Request Handling
entity L1_rtps_writer_test1_vbkdp is
end entity;
architecture testbench of L1_rtps_writer_test1_vbkdp is
-- *CONSTANT DECLARATION*
constant MAX_REMOTE_ENDPOINTS : natural := 5;
constant MAX_CC : natural := 10;
-- *TYPE DECLARATION*
type SEND_STAGE_TYPE is (IDLE, BUSY);
type TEST_CC_ARRAY_TYPE is array (0 to MAX_CC-1) of CACHE_CHANGE_TYPE;
type HC_STAGE_TYPE is (IDLE, PUSH, DONE, INVALID);
-- *SIGNAL DECLARATION*
signal clk, empty_user, empty_meta, rd_user, rd_meta, last_word_in_user, last_word_in_meta, last_word_in_hc, last_word_out_rtps : std_logic := '0';
signal reset : std_logic := '1';
signal data_in_user, data_in_meta, data_out, data_in_hc : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal wr_sig, full, data_available : std_logic := '0';
signal ready_in_hc, valid_in_hc, ack_hc, done_hc, get_data_hc, start_hc : std_logic := '0';
signal seq_nr_hc : SEQUENCENUMBER_TYPE := SEQUENCENUMBER_UNKNOWN;
signal stim_stage_user, stim_stage_meta : SEND_STAGE_TYPE := IDLE;
signal opcode_hc : HISTORY_CACHE_OPCODE_TYPE := NOP;
signal ret_hc : HISTORY_CACHE_RESPONSE_TYPE := ERROR;
signal cc_instance_handle : INSTANCE_HANDLE_TYPE := HANDLE_NIL;
signal cc_kind : CACHE_CHANGE_KIND_TYPE := ALIVE;
signal cc_source_timestamp : TIME_TYPE := TIME_INVALID;
signal cc_seq_nr : SEQUENCENUMBER_TYPE := SEQUENCENUMBER_UNKNOWN;
shared variable stimulus_user, stimulus_meta, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent_user, packet_sent_meta : std_logic := '0';
signal cnt_stim_meta, cnt_stim_user, count : natural := 0;
signal start_meta, start_user : std_logic := '0';
shared variable SB_out, SB_hc : osvvm.ScoreBoardPkg_slv.ScoreBoardPType;
signal stim_done, out_check_done, hc_check_done, test_done : std_logic := '0';
signal test_time : TIME_TYPE := TIME_ZERO;
signal fifo_in, fifo_out : std_logic_vector(WORD_WIDTH downto 0) := (others => '0');
signal fifo_wr, fifo_empty, fifo_full : std_logic := '0';
signal rtps_out_data : RTPS_OUT_DATA_TYPE := (others => (others => '0'));
signal rtps_out_rd, rtps_out_last_word_in, rtps_out_empty : std_logic_vector(0 to NUM_ENDPOINTS) := (others => '0');
signal test_cc : TEST_CC_ARRAY_TYPE := (others => DEFAULT_CACHE_CHANGE);
-- Signal containing the current fill level of the test_cc array
signal test_cc_fill : natural := 0;
signal stage_hc : HC_STAGE_TYPE := IDLE;
signal new_cc : std_logic := '0';
signal cnt : natural := 0;
-- *FUNCTION DECLARATION*
function gen_sn(input : natural) return SEQUENCENUMBER_TYPE is
variable ret : SEQUENCENUMBER_TYPE;
begin
ret(0) := (others => '0');
ret(1) := unsigned(int(input, WORD_WIDTH));
return ret;
end function;
begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
ACKNACK_RESPONSE_DELAY => gen_duration(1,0),
ACKNACK_SUPPRESSION_DELAY => DURATION_ZERO,
LEASE_DURATION => DURATION_INFINITE,
HEARTBEAT_PERIOD => DURATION_INFINITE,
ENTITYID => DEFAULT_WRITER_ENTITYID,
WITH_KEY => TRUE,
PUSH_MODE => TRUE,
INLINE_QOS => gen_inline_qos(NUM_READERS+7),
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
)
port map (
clk => clk,
reset => reset,
time => test_time,
empty_user => empty_user or packet_sent_user,
rd_user => rd_user,
data_in_user => data_in_user,
last_word_in_user => last_word_in_user,
empty_meta => empty_meta or packet_sent_meta,
rd_meta => rd_meta,
data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta,
alive_sig => open,
wr_rtps => fifo_wr,
full_rtps => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
assert_liveliness => '0',
data_available => data_available,
start_hc => start_hc,
opcode_hc => opcode_hc,
ack_hc => ack_hc,
seq_nr_hc => seq_nr_hc,
done_hc => done_hc,
ret_hc => ret_hc,
get_data_hc => get_data_hc,
data_in_hc => data_in_hc,
valid_in_hc => valid_in_hc,
ready_in_hc => ready_in_hc,
last_word_in_hc => last_word_in_hc,
cc_instance_handle => cc_instance_handle,
cc_kind => cc_kind,
cc_source_timestamp => cc_source_timestamp,
cc_seq_nr => cc_seq_nr
);
fifo_inst : entity work.FWFT_FIFO(arch)
generic map (
FIFO_DEPTH => 2,
DATA_WIDTH => WORD_WIDTH+1
)
port map
(
reset => reset,
clk => clk,
data_in => fifo_in,
write => fifo_wr,
read => rtps_out_rd(0),
data_out => fifo_out,
empty => fifo_empty,
full => fifo_full,
free => open
);
rtps_out_data <= (0 => fifo_out(WORD_WIDTH-1 downto 0), others => (others => '0'));
rtps_out_last_word_in <= (0 => fifo_out(WORD_WIDTH), others => '0');
rtps_out_empty <= (0 => fifo_empty, others => '1');
rtps_out_inst : entity work.rtps_out(arch)
port map (
clk => clk,
reset => reset,
data_in => rtps_out_data,
last_word_in=> rtps_out_last_word_in,
rd => rtps_out_rd,
empty => rtps_out_empty,
data_out => data_out,
wr => wr_sig,
full => full
);
stimulus_prc : process
variable RV : RandomPType;
variable e0, e1, e2, e3, e4, endpoint : ENDPOINT_DATA_TYPE := DEFAULT_ENDPOINT_DATA;
variable sub : RTPS_SUBMESSAGE_TYPE := DEFAULT_RTPS_SUBMESSAGE;
variable cc : CACHE_CHANGE_TYPE := DEFAULT_CACHE_CHANGE;
variable OUT_HEADER : OUTPUT_HEADER_TYPE := DEFAULT_OUTPUT_HEADER;
variable rtps_header : RTPS_HEADER_TYPE := DEFAULT_RTPS_HEADER;
alias idle_sig is <<signal uut.idle_sig : std_logic>>;
-- Wrapper to use procedure as function
impure function gen_rand_loc_2 return LOCATOR_TYPE is
variable ret : LOCATOR_TYPE := EMPTY_LOCATOR;
begin
gen_rand_loc(RV, ret);
return ret;
end function;
impure function gen_rand_entityid_2(reader : boolean) return std_logic_vector is
variable ret : std_logic_vector(ENTITYID_WIDTH-1 downto 0) := (others => '0');
begin
gen_rand_entityid(RV, reader, ret);
return ret;
end function;
impure function gen_rand_guid_prefix return GUIDPREFIX_TYPE is
variable ret : GUIDPREFIX_TYPE;
begin
ret := (0 => RV.RandSlv(WORD_WIDTH), 1 => RV.RandSlv(WORD_WIDTH), 2 => RV.RandSlv(WORD_WIDTH));
return ret;
end function;
impure function gen_key_hash return KEY_HASH_TYPE is
variable ret : KEY_HASH_TYPE := (others => (others => '0'));
begin
for i in 0 to KEY_HASH_TYPE'length-1 loop
ret(i) := RV.RandSlv(WORD_WIDTH);
end loop;
return ret;
end function;
impure function gen_payload return TEST_PACKET_TYPE is
variable ret : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
begin
for i in 0 to RV.RandInt(1,10) loop
ret.data(ret.length) := RV.RandSlv(WORD_WIDTH);
ret.length := ret.length + 1;
end loop;
ret.last(ret.length-1) := '1';
return ret;
end function;
procedure start_meta_test is
begin
start_meta <= '1';
wait until rising_edge(clk);
start_meta <= '0';
wait until rising_edge(clk);
end procedure;
procedure start_user_test is
begin
start_user <= '1';
wait until rising_edge(clk);
start_user <= '0';
wait until rising_edge(clk);
end procedure;
procedure wait_on_meta_sent is
begin
wait until rising_edge(packet_sent_meta);
end procedure;
procedure wait_on_user_sent is
begin
wait until rising_edge(packet_sent_user);
end procedure;
procedure wait_on_out_check is
begin
if (out_check_done /= '1') then
wait until out_check_done = '1';
end if;
end procedure;
procedure wait_on_hc_check is
begin
if (hc_check_done /= '1') then
wait until hc_check_done = '1';
end if;
end procedure;
procedure wait_on_completion is
begin
if (test_done /= '1') then
wait until test_done = '1';
end if;
end procedure;
procedure wait_on_idle is
begin
if (idle_sig /= '1') then
wait until idle_sig = '1';
end if;
end procedure;
procedure push_hc(opcode : in HISTORY_CACHE_OPCODE_TYPE; sn : in SEQUENCENUMBER_TYPE) is
begin
SB_hc.push(std_logic_vector(to_unsigned(HISTORY_CACHE_OPCODE_TYPE'pos(opcode),WORD_WIDTH)));
SB_hc.push(std_logic_vector(sn(0)));
SB_hc.push(std_logic_vector(sn(1)));
end procedure;
procedure gen_header(endpoint : in ENDPOINT_DATA_TYPE) is
begin
reference := EMPTY_TEST_PACKET;
-- OUTPUT HEADER
OUT_HEADER := DEFAULT_OUTPUT_HEADER;
OUT_HEADER := (dest => get_loc(endpoint), src => DEST_LOC.user.locator(1));
gen_output_header(OUT_HEADER, reference);
-- RTPS HEADER
rtps_header := DEFAULT_RTPS_HEADER;
rtps_header.guidPrefix := GUIDPREFIX;
gen_rtps_header(rtps_header, reference);
end procedure;
procedure gen_data(endpoint : in ENDPOINT_DATA_TYPE; ref : in CACHE_CHANGE_TYPE) is
begin
sub := DEFAULT_RTPS_SUBMESSAGE;
sub.submessageID := SID_DATA;
sub.writerId := DEFAULT_WRITER_ENTITYID;
sub.readerId := ENTITYID_UNKNOWN;
sub.submessageLength := (others => '0');
sub.writerSN := ref.seq_nr;
sub.flags(SUBMESSAGE_DATA_FLAG_POS) := '1' when (ref.kind = ALIVE) else '0';
sub.flags(SUBMESSAGE_KEY_FLAG_POS) := '1' when (ref.kind /= ALIVE) else '0';
sub.flags(SUBMESSAGE_INLINE_QOS_FLAG_POS) := '1';
gen_inline_qos(ref, gen_endpoint(NUM_READERS+7), (endpoint.expectsInlineQoS(0) = '1'), '0', sub.inlineQos);
gen_sentinel(sub.inlineQos);
assert (ref.payload /= EMPTY_TEST_PACKET) severity FAILURE;
sub.data := ref.payload;
gen_rtps_submessage(sub, reference);
end procedure;
procedure gen_ts(ts : TIME_TYPE) is
begin
sub := DEFAULT_RTPS_SUBMESSAGE;
sub.submessageID := SID_INFO_TS;
sub.timestamp := ts;
gen_rtps_submessage(sub, reference);
end procedure;
procedure gen_gap(first : SEQUENCENUMBER_TYPE; last : SEQUENCENUMBER_TYPE) is
begin
sub := DEFAULT_RTPS_SUBMESSAGE;
sub.submessageID := SID_GAP;
sub.writerId := DEFAULT_WRITER_ENTITYID;
sub.readerId := ENTITYID_UNKNOWN;
sub.gapStart := first;
sub.gapList := (base => last, numBits => int(0, CDR_LONG_WIDTH), bitmap => (others => '0'));
gen_rtps_submessage(sub, reference);
end procedure;
procedure push_reference is
begin
fix_output_packet(reference);
for i in 0 to reference.length-1 loop
SB_out.Push(reference.data(i));
end loop;
end procedure;
begin
SetAlertLogName("rtps_writer (Volatile, Best Effort, Keyed, By Reception Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
SetLogEnable(DEBUG, FALSE);
SetLogEnable(PASSED, FALSE);
SetLogEnable(INFO, TRUE);
RV.InitSeed(RV'instance_name);
-- Endpoint 0
e0 := DEFAULT_ENDPOINT_DATA;
e0.nr := 0;
e0.match := MATCH;
e0.entityid := RV.RandSlv(ENTITYID_WIDTH);
e0.participant.guidPrefix := gen_rand_guid_prefix;
e0.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
-- Endpoint 1
e1 := DEFAULT_ENDPOINT_DATA;
e1.nr := 1;
e1.match := MATCH;
e1.entityid := RV.RandSlv(ENTITYID_WIDTH);
e1.participant.guidPrefix := gen_rand_guid_prefix;
e1.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
e1.reliability := BEST_EFFORT_RELIABILITY_QOS;
-- Endpoint 2
e2 := DEFAULT_ENDPOINT_DATA;
e2.nr := 2;
e2.match := MATCH;
e2.entityid := RV.RandSlv(ENTITYID_WIDTH);
e2.participant.guidPrefix := gen_rand_guid_prefix;
e2.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
e2.expectsInlineQoS(0) := '1';
-- Endpoint 3
e3 := DEFAULT_ENDPOINT_DATA;
e3.nr := 3;
e3.match := MATCH;
e3.entityid := RV.RandSlv(ENTITYID_WIDTH);
e3.participant.guidPrefix := gen_rand_guid_prefix;
e3.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
e3.durability := TRANSIENT_LOCAL_DURABILITY_QOS;
-- Endpoint 4
e4 := DEFAULT_ENDPOINT_DATA;
e4.nr := 4;
e4.match := MATCH;
e4.entityid := RV.RandSlv(ENTITYID_WIDTH);
e4.participant.guidPrefix := gen_rand_guid_prefix;
e4.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
e4.expectsInlineQoS(0) := '1';
e4.durability := TRANSIENT_LOCAL_DURABILITY_QOS;
e4.reliability := BEST_EFFORT_RELIABILITY_QOS;
Log("Initiating Test", INFO);
Log("Current Time: 0s", INFO);
count <= 1;
test_time <= TIME_ZERO;
new_cc <= '0';
stim_done <= '0';
start_meta <= '0';
start_user <= '0';
reset <= '1';
wait until rising_edge(clk);
wait until rising_edge(clk);
reset <= '0';
Log("Insert Endpoint 0,1", INFO);
gen_endpoint_match_frame(e0, stimulus_meta);
gen_endpoint_match_frame(e1, stimulus_meta);
start_meta_test;
wait_on_meta_sent;
stimulus_meta := EMPTY_TEST_PACKET;
stimulus_user := EMPTY_TEST_PACKET;
wait_on_idle;
Log("Add Cache Change [SN 1] (Send DATA to Endpoint 0,1 and Remove)", INFO);
test_cc(0).kind <= ALIVE;
test_cc(0).instance <= gen_key_hash;
test_cc(0).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(0).seq_nr <= gen_sn(1);
test_cc(0).src_timestamp <= gen_duration(1,0);
test_cc(0).payload <= gen_payload;
test_cc_fill <= 1;
new_cc <= '1';
wait until rising_edge(clk);
new_cc <= '0';
wait until rising_edge(clk);
push_hc(REMOVE_CACHE_CHANGE, gen_sn(1));
gen_header(e0);
gen_data(e0, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(0));
push_reference;
wait_on_out_check;
wait_on_idle;
test_cc_fill <= 0;
Log("Add Cache Change [SN 2,3] (Send DATA to Endpoint 0,1 and Remove)", INFO);
test_cc(0).kind <= ALIVE;
test_cc(0).instance <= gen_key_hash;
test_cc(0).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(0).seq_nr <= gen_sn(2);
test_cc(0).src_timestamp <= gen_duration(2,0);
test_cc(0).payload <= gen_payload;
test_cc(1).kind <= ALIVE;
test_cc(1).instance <= gen_key_hash;
test_cc(1).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(1).seq_nr <= gen_sn(3);
test_cc(1).src_timestamp <= gen_duration(3,0);
test_cc(1).payload <= gen_payload;
test_cc_fill <= 2;
new_cc <= '1';
wait until rising_edge(clk);
new_cc <= '0';
push_hc(REMOVE_CACHE_CHANGE, gen_sn(2));
push_hc(REMOVE_CACHE_CHANGE, gen_sn(3));
gen_header(e0);
gen_data(e0, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e0);
gen_data(e0, test_cc(1));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(1));
push_reference;
wait_on_out_check;
wait_on_idle;
test_cc_fill <= 0;
Log("Insert Endpoint 2,3", INFO);
gen_endpoint_match_frame(e2, stimulus_meta);
gen_endpoint_match_frame(e3, stimulus_meta);
start_meta_test;
wait_on_meta_sent;
stimulus_meta := EMPTY_TEST_PACKET;
stimulus_user := EMPTY_TEST_PACKET;
wait_on_idle;
Log("Add Cache Change [SN 4] (Send DATA to Endpoint 0,1,2,3 and Remove)", INFO);
test_cc(0).kind <= ALIVE_FILTERED;
test_cc(0).instance <= gen_key_hash;
test_cc(0).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(0).seq_nr <= gen_sn(4);
test_cc(0).src_timestamp <= gen_duration(4,0);
test_cc(0).payload <= gen_payload;
test_cc_fill <= 1;
new_cc <= '1';
wait until rising_edge(clk);
new_cc <= '0';
wait until rising_edge(clk);
push_hc(REMOVE_CACHE_CHANGE, gen_sn(4));
gen_header(e0);
gen_data(e0, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e2);
gen_data(e2, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(0));
push_reference;
wait_on_out_check;
wait_on_idle;
test_cc_fill <= 0;
Log("Add Cache Change [SN 10,11,15,46,50], (Send DATA to Endpoint 0,1,2,3 and Remove)", INFO);
test_cc(0).kind <= ALIVE;
test_cc(0).instance <= gen_key_hash;
test_cc(0).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(0).seq_nr <= gen_sn(10);
test_cc(0).src_timestamp <= gen_duration(5,0);
test_cc(0).payload <= gen_payload;
test_cc(1).kind <= NOT_ALIVE_DISPOSED;
test_cc(1).instance <= gen_key_hash;
test_cc(1).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(1).seq_nr <= gen_sn(11);
test_cc(1).src_timestamp <= gen_duration(6,0);
test_cc(1).payload <= gen_payload;
test_cc(2).kind <= NOT_ALIVE_UNREGISTERED;
test_cc(2).instance <= gen_key_hash;
test_cc(2).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(2).seq_nr <= gen_sn(15);
test_cc(2).src_timestamp <= gen_duration(7,0);
test_cc(2).payload <= gen_payload;
test_cc(3).kind <= NOT_ALIVE_DISPOSED;
test_cc(3).instance <= gen_key_hash;
test_cc(3).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(3).seq_nr <= gen_sn(37);
test_cc(3).src_timestamp <= gen_duration(8,0);
test_cc(3).payload <= gen_payload;
test_cc(4).kind <= ALIVE;
test_cc(4).instance <= gen_key_hash;
test_cc(4).writer_guid <= to_guid(GUIDPREFIX, DEFAULT_WRITER_ENTITYID);
test_cc(4).seq_nr <= gen_sn(50);
test_cc(4).src_timestamp <= gen_duration(9,0);
test_cc(4).payload <= gen_payload;
test_cc_fill <= 5;
new_cc <= '1';
wait until rising_edge(clk);
new_cc <= '0';
wait until rising_edge(clk);
push_hc(REMOVE_CACHE_CHANGE, gen_sn(10));
push_hc(REMOVE_CACHE_CHANGE, gen_sn(11));
push_hc(REMOVE_CACHE_CHANGE, gen_sn(15));
push_hc(REMOVE_CACHE_CHANGE, gen_sn(37));
push_hc(REMOVE_CACHE_CHANGE, gen_sn(50));
gen_header(e0);
gen_data(e0, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e2);
gen_data(e2, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(0));
push_reference;
wait_on_out_check;
gen_header(e0);
gen_data(e0, test_cc(1));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(1));
push_reference;
wait_on_out_check;
gen_header(e2);
gen_data(e2, test_cc(1));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(1));
push_reference;
wait_on_out_check;
gen_header(e0);
gen_data(e0, test_cc(2));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(2));
push_reference;
wait_on_out_check;
gen_header(e2);
gen_data(e2, test_cc(2));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(2));
push_reference;
wait_on_out_check;
gen_header(e0);
gen_data(e0, test_cc(3));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(3));
push_reference;
wait_on_out_check;
gen_header(e2);
gen_data(e2, test_cc(3));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(3));
push_reference;
wait_on_out_check;
gen_header(e0);
gen_data(e0, test_cc(4));
push_reference;
wait_on_out_check;
gen_header(e1);
gen_data(e1, test_cc(4));
push_reference;
wait_on_out_check;
gen_header(e2);
gen_data(e2, test_cc(4));
push_reference;
wait_on_out_check;
gen_header(e3);
gen_data(e3, test_cc(4));
push_reference;
wait_on_out_check;
wait_on_idle;
test_cc_fill <= 0;
Log("Endpoint 0 sent ACKNACK [Request SN 10,15,37]", INFO);
endpoint := e0;
sub := DEFAULT_RTPS_SUBMESSAGE;
sub.submessageID := SID_ACKNACK;
sub.writerId := DEFAULT_WRITER_ENTITYID;
sub.readerId := endpoint.entityid;
sub.count := std_logic_vector(to_unsigned(count, CDR_LONG_WIDTH));
sub.readerSNState := (base => gen_sn(5), numBits => int(35, CDR_LONG_WIDTH), bitmap => (5 => '1', 10 => '1', 32 => '1', others => '0'));
sub.flags(SUBMESSAGE_FINAL_FLAG_POS) := '1';
gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus_user);
start_user_test;
wait_on_user_sent;
stimulus_meta := EMPTY_TEST_PACKET;
stimulus_user := EMPTY_TEST_PACKET;
wait_on_idle;
Log("Current Time: 1s", INFO);
Log("Send SN 10,15,37 to Endpoint 0", INFO);
test_time <= gen_duration(1,0);
wait until rising_edge(clk);
wait until rising_edge(clk); -- Allow idle_sig to go low
wait_on_idle;
Log("Insert Endpoint 4", INFO);
gen_endpoint_match_frame(e4, stimulus_meta);
start_meta_test;
wait_on_meta_sent;
stimulus_meta := EMPTY_TEST_PACKET;
stimulus_user := EMPTY_TEST_PACKET;
wait_on_idle;
stim_done <= '1';
wait_on_completion;
TranscriptOpen(RESULTS_FILE, APPEND_MODE);
SetTranscriptMirror;
ReportAlerts;
TranscriptClose;
std.env.stop;
wait;
end process;
clock_prc : process
begin
clk <= '0';
wait for 25 ns;
clk <= '1';
wait for 25 ns;
end process;
empty_meta_prc : process
begin
empty_meta <= '0';
wait until rd_meta = '1';
wait until rising_edge(clk);
empty_meta <= '1';
wait until rising_edge(clk);
end process;
empty_user_prc : process
begin
empty_user <= '0';
wait until rd_user = '1';
wait until rising_edge(clk);
empty_user <= '1';
wait until rising_edge(clk);
end process;
rtps_full_prc : process
begin
full <= '0';
wait until wr_sig = '1';
wait until rising_edge(clk);
full <= '1';
wait until rising_edge(clk);
end process;
alert_prc : process(all)
begin
if rising_edge(clk) then
alertif(empty_meta = '1' and rd_meta = '1', "Input FIFO read signal high while empty signal high (meta)", ERROR);
alertif(empty_user = '1' and rd_user = '1', "Input FIFO read signal high while empty signal high (user)", ERROR);
alertif(full = '1' and wr_sig = '1', "Output FIFO write signal high while full signal high", ERROR);
end if;
end process;
input_meta_prc : process(all)
begin
data_in_meta <= stimulus_meta.data(cnt_stim_meta);
last_word_in_meta <= stimulus_meta.last(cnt_stim_meta);
if rising_edge(clk) then
if (reset = '1') then
cnt_stim_meta <= 0;
stim_stage_meta <= IDLE;
packet_sent_meta <= '1';
else
case (stim_stage_meta) is
when IDLE =>
if (start_meta = '1' and stimulus_meta.length /= 0) then
stim_stage_meta <= BUSY;
packet_sent_meta <= '0';
end if;
when BUSY =>
if (rd_meta = '1') then
if (cnt_stim_meta = stimulus_meta.length-1) then
stim_stage_meta <= IDLE;
packet_sent_meta <= '1';
cnt_stim_meta <= 0;
else
cnt_stim_meta <= cnt_stim_meta + 1;
end if;
end if;
end case;
end if;
end if;
end process;
input_user_prc : process(all)
begin
data_in_user <= stimulus_user.data(cnt_stim_user);
last_word_in_user <= stimulus_user.last(cnt_stim_user);
if rising_edge(clk) then
if (reset = '1') then
cnt_stim_user <= 0;
stim_stage_user <= IDLE;
packet_sent_user <= '1';
else
case (stim_stage_user) is
when IDLE =>
if (start_user = '1' and stimulus_user.length /= 0) then
stim_stage_user <= BUSY;
packet_sent_user <= '0';
end if;
when BUSY =>
if (rd_user = '1') then
if (cnt_stim_user = stimulus_user.length-1) then
stim_stage_user <= IDLE;
packet_sent_user <= '1';
cnt_stim_user <= 0;
else
cnt_stim_user <= cnt_stim_user + 1;
end if;
end if;
end case;
end if;
end if;
end process;
done_proc : process(clk)
begin
if rising_edge(clk) then
if (stim_done = '1' and SB_out.empty and SB_hc.empty) then
test_done <= '1';
else
test_done <= '0';
end if;
end if;
end process;
hc_prc : process (all)
variable stimulus : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
variable bool : boolean := FALSE;
begin
-- Data Setter
if (new_cc = '1') then
data_available <= '1';
end if;
if rising_edge(clk) then
hc_check_done <= '0';
case (stage_hc) is
when IDLE =>
if (start_hc = '1') then
ack_hc <= '1';
case (opcode_hc) is
when GET_CACHE_CHANGE =>
bool := FALSE;
for i in 0 to test_cc_fill-1 loop
if (test_cc(i).seq_nr = seq_nr_hc) then
cc_instance_handle <= test_cc(i).instance;
cc_source_timestamp <= test_cc(i).src_timestamp;
cc_kind <= test_cc(i).kind;
stimulus := test_cc(i).payload;
stage_hc <= DONE;
bool := TRUE;
end if;
end loop;
if (not bool) then
stage_hc <= INVALID;
end if;
when GET_MIN_SN =>
stimulus := EMPTY_TEST_PACKET;
cc_seq_nr <= test_cc(0).seq_nr;
stage_hc <= DONE;
when GET_MAX_SN =>
data_available <= '0';
stimulus := EMPTY_TEST_PACKET;
cc_seq_nr <= test_cc(test_cc_fill-1).seq_nr when (test_cc_fill /= 0) else SEQUENCENUMBER_UNKNOWN;
stage_hc <= DONE;
when others =>
SB_hc.Check(std_logic_vector(to_unsigned(HISTORY_CACHE_OPCODE_TYPE'pos(opcode_hc), WORD_WIDTH)));
SB_hc.Check(std_logic_vector(seq_nr_hc(0)));
SB_hc.Check(std_logic_vector(seq_nr_hc(1)));
hc_check_done <= '1';
stage_hc <= DONE;
end case;
end if;
when DONE =>
if (get_data_hc = '1') then
alertif(stimulus = EMPTY_TEST_PACKET, "Requested empty Payload", FAILURE);
stage_hc <= PUSH;
cnt <= 0;
else
stage_hc <= IDLE;
end if;
when PUSH =>
if (ready_in_hc = '1') then
cnt <= cnt + 1;
if (cnt = stimulus.length-1) then
stage_hc <= IDLE;
end if;
end if;
when INVALID =>
stage_hc <= IDLE;
when others =>
null;
end case;
end if;
-- DEFAULT
ack_hc <= '0';
valid_in_hc <= '0';
data_in_hc <= (others => '0');
last_word_in_hc <= '0';
done_hc <= '0';
ret_hc <= ERROR;
case (stage_hc) is
when IDLE =>
if (start_hc = '1') then
ack_hc <= '1';
end if;
when DONE =>
done_hc <= '1';
ret_hc <= OK;
when PUSH =>
valid_in_hc <= '1';
data_in_hc <= stimulus.data(cnt);
last_word_in_hc <= stimulus.last(cnt);
when INVALID =>
done_hc <= '1';
ret_hc <= INVALID;
when others =>
null;
end case;
end process;
output_check_prc : process(all)
begin
if (SB_out.empty) then
out_check_done <= '1';
else
out_check_done <= '0';
end if;
if rising_edge(clk) then
if (wr_sig = '1') then
SB_out.Check(data_out);
end if;
end if;
end process;
watchdog : process
begin
wait for 1 ms;
Alert("Test timeout", FAILURE);
std.env.stop;
end process;
end architecture;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -43,6 +43,14 @@ analyze Level_1/L1_rtps_reader_test1_vrk.vhd
analyze Level_1/L1_rtps_reader_test1_trk.vhd
analyze Level_0/L0_rtps_writer_test1_vrkdp.vhd
analyze Level_0/L0_rtps_writer_test1_vbkdp.vhd
analyze Level_1/L1_rtps_writer_test1_vrkdp.vhd
analyze Level_1/L1_rtps_writer_test1_trkdp.vhd
analyze Level_1/L1_rtps_writer_test1_tbkdp.vhd
analyze Level_1/L1_rtps_writer_test1_vbkdp.vhd
analyze Level_1/L1_rtps_writer_test1_vrndp.vhd
analyze Level_1/L1_rtps_writer_test1_vrksp.vhd
analyze Level_1/L1_rtps_writer_test1_vrkdn.vhd
analyze Level_1/L1_rtps_writer_test1_trkdn.vhd
#simulate L0_rtps_handler_test1
#simulate L0_rtps_handler_test2
@ -68,4 +76,12 @@ analyze Level_0/L0_rtps_writer_test1_vbkdp.vhd
#simulate L1_rtps_reader_test1_vrk
#simulate L1_rtps_reader_test1_trk
#simulate L0_rtps_writer_test1_vrkdp
simulate L0_rtps_writer_test1_vbkdp
#simulate L0_rtps_writer_test1_vbkdp
simulate L1_rtps_writer_test1_vrkdp
#simulate L1_rtps_writer_test1_trkdp
#simulate L1_rtps_writer_test1_tbkdp
#simulate L1_rtps_writer_test1_vbkdp
#simulate L1_rtps_writer_test1_vrndp
#simulate L1_rtps_writer_test1_vrksp
#simulate L1_rtps_writer_test1_vrkdn
#simulate L1_rtps_writer_test1_trkdn

File diff suppressed because it is too large Load Diff