Add Level 2 ROS Service Test (AddTwoInts)
This commit is contained in:
parent
b5741dc9ae
commit
5894fd9121
145
sim/L2_AddTwoInts_test1.do
Normal file
145
sim/L2_AddTwoInts_test1.do
Normal file
@ -0,0 +1,145 @@
|
||||
onerror {resume}
|
||||
radix define ROS_RETCODE {
|
||||
"10#0#" "ROS_RET_OK",
|
||||
"10#1#" "ROS_RET_ERROR",
|
||||
"10#2#" "ROS_RET_TIMEOUT",
|
||||
"10#3#" "ROS_RET_UNSUPPORTED",
|
||||
-default unsigned
|
||||
}
|
||||
quietly WaveActivateNextPane {} 0
|
||||
add wave -noupdate -divider SYSTEM
|
||||
add wave -noupdate /l2_addtwoints_test1/clk
|
||||
add wave -noupdate /l2_addtwoints_test1/reset
|
||||
add wave -noupdate -radix unsigned /l2_addtwoints_test1/time
|
||||
add wave -noupdate -divider CLIENT
|
||||
add wave -noupdate -expand -group CLIENT /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/stage
|
||||
add wave -noupdate -expand -group CLIENT /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/cnt
|
||||
add wave -noupdate -expand -group CLIENT /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/start_user
|
||||
add wave -noupdate -expand -group CLIENT /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/ack_user
|
||||
add wave -noupdate -expand -group CLIENT /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/opcode_user
|
||||
add wave -noupdate -expand -group CLIENT -radix hexadecimal /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/service_info_user
|
||||
add wave -noupdate -expand -group CLIENT -radix hexadecimal /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/sequence_id_user
|
||||
add wave -noupdate -expand -group CLIENT /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/data_available_user
|
||||
add wave -noupdate -expand -group CLIENT /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/taken_user
|
||||
add wave -noupdate -expand -group CLIENT -radix hexadecimal /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/a
|
||||
add wave -noupdate -expand -group CLIENT -radix hexadecimal /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/b
|
||||
add wave -noupdate -expand -group CLIENT -radix hexadecimal /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/sum
|
||||
add wave -noupdate -expand -group CLIENT /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/done_user
|
||||
add wave -noupdate -expand -group CLIENT -radix ROS_RETCODE /l2_addtwoints_test1/client_inst/AddTwoInts_srv_client_inst/return_code_user
|
||||
add wave -noupdate -group DMC /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/stage
|
||||
add wave -noupdate -group DMC /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/cnt
|
||||
add wave -noupdate -group DMC /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/empty
|
||||
add wave -noupdate -group DMC /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/rd
|
||||
add wave -noupdate -group DMC -radix hexadecimal /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/data_in
|
||||
add wave -noupdate -group DMC /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/last_word_in
|
||||
add wave -noupdate -group DMC /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/full_ro
|
||||
add wave -noupdate -group DMC /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/wr_ro
|
||||
add wave -noupdate -group DMC -radix hexadecimal /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/data_out_ro
|
||||
add wave -noupdate -group DMC /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/last_word_out_ro
|
||||
add wave -noupdate -group DMC /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/mem_op_start
|
||||
add wave -noupdate -group DMC /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/mem_op_done
|
||||
add wave -noupdate -group DMC /l2_addtwoints_test1/client_inst/rtps_discovery_module_inst/mem_opcode
|
||||
add wave -noupdate -expand -group RQ_W /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/stage
|
||||
add wave -noupdate -expand -group RQ_W /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/cnt
|
||||
add wave -noupdate -expand -group RQ_W /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/empty_meta
|
||||
add wave -noupdate -expand -group RQ_W /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/rd_user
|
||||
add wave -noupdate -expand -group RQ_W -radix hexadecimal /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/data_in_user
|
||||
add wave -noupdate -expand -group RQ_W /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/last_word_in_user
|
||||
add wave -noupdate -expand -group RQ_W /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/empty_meta
|
||||
add wave -noupdate -expand -group RQ_W /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/rd_meta
|
||||
add wave -noupdate -expand -group RQ_W -radix hexadecimal /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/data_in_meta
|
||||
add wave -noupdate -expand -group RQ_W /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/last_word_in_meta
|
||||
add wave -noupdate -expand -group RQ_W /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/full_ro
|
||||
add wave -noupdate -expand -group RQ_W /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/wr_ro
|
||||
add wave -noupdate -expand -group RQ_W -radix hexadecimal /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/data_out_ro
|
||||
add wave -noupdate -expand -group RQ_W /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/last_word_out_ro
|
||||
add wave -noupdate -group RR_R /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/stage
|
||||
add wave -noupdate -group RR_R /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/cnt
|
||||
add wave -noupdate -group RR_R /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/empty_user
|
||||
add wave -noupdate -group RR_R /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/rd_user
|
||||
add wave -noupdate -group RR_R -radix hexadecimal /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/data_in_user
|
||||
add wave -noupdate -group RR_R /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/last_word_in_user
|
||||
add wave -noupdate -group RR_R /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/empty_meta
|
||||
add wave -noupdate -group RR_R /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/rd_meta
|
||||
add wave -noupdate -group RR_R -radix hexadecimal /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/data_in_meta
|
||||
add wave -noupdate -group RR_R /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/last_word_in_meta
|
||||
add wave -noupdate -group RR_R /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/full_ro
|
||||
add wave -noupdate -group RR_R /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/wr_ro
|
||||
add wave -noupdate -group RR_R -radix hexadecimal /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/data_out_ro
|
||||
add wave -noupdate -group RR_R /l2_addtwoints_test1/client_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/last_word_out_ro
|
||||
add wave -noupdate -divider SERVER
|
||||
add wave -noupdate -group SERVER /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/stage
|
||||
add wave -noupdate -group SERVER /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/cnt
|
||||
add wave -noupdate -group SERVER /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/start_user
|
||||
add wave -noupdate -group SERVER /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/ack_user
|
||||
add wave -noupdate -group SERVER /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/opcode_user
|
||||
add wave -noupdate -group SERVER -radix hexadecimal /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/service_info_user
|
||||
add wave -noupdate -group SERVER -radix hexadecimal /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/request_id_user
|
||||
add wave -noupdate -group SERVER /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/data_available_user
|
||||
add wave -noupdate -group SERVER /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/taken_user
|
||||
add wave -noupdate -group SERVER -radix hexadecimal /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/a
|
||||
add wave -noupdate -group SERVER -radix hexadecimal /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/b
|
||||
add wave -noupdate -group SERVER -radix hexadecimal /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/sum
|
||||
add wave -noupdate -group SERVER /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/done_user
|
||||
add wave -noupdate -group SERVER -radix ROS_RETCODE /l2_addtwoints_test1/server_inst/AddTwoInts_srv_server_inst/return_code_user
|
||||
add wave -noupdate -group DMS /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/stage
|
||||
add wave -noupdate -group DMS /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/cnt
|
||||
add wave -noupdate -group DMS /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/empty
|
||||
add wave -noupdate -group DMS /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/rd
|
||||
add wave -noupdate -group DMS -radix hexadecimal /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/data_in
|
||||
add wave -noupdate -group DMS /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/last_word_in
|
||||
add wave -noupdate -group DMS /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/full_ro
|
||||
add wave -noupdate -group DMS /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/wr_ro
|
||||
add wave -noupdate -group DMS -radix hexadecimal /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/data_out_ro
|
||||
add wave -noupdate -group DMS /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/last_word_out_ro
|
||||
add wave -noupdate -group DMS /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/mem_op_start
|
||||
add wave -noupdate -group DMS /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/mem_op_done
|
||||
add wave -noupdate -group DMS /l2_addtwoints_test1/server_inst/rtps_discovery_module_inst/mem_opcode
|
||||
add wave -noupdate -group RQ_R /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/stage
|
||||
add wave -noupdate -group RQ_R /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/cnt
|
||||
add wave -noupdate -group RQ_R /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/empty_user
|
||||
add wave -noupdate -group RQ_R /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/rd_user
|
||||
add wave -noupdate -group RQ_R -radix hexadecimal /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/data_in_user
|
||||
add wave -noupdate -group RQ_R /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/last_word_in_user
|
||||
add wave -noupdate -group RQ_R /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/empty_meta
|
||||
add wave -noupdate -group RQ_R /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/rd_meta
|
||||
add wave -noupdate -group RQ_R -radix hexadecimal /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/data_in_meta
|
||||
add wave -noupdate -group RQ_R /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/last_word_in_meta
|
||||
add wave -noupdate -group RQ_R /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/full_ro
|
||||
add wave -noupdate -group RQ_R /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/wr_ro
|
||||
add wave -noupdate -group RQ_R -radix hexadecimal /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/data_out_ro
|
||||
add wave -noupdate -group RQ_R /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(0)/rtps_endpoint_if/rtps_reader_inst/last_word_out_ro
|
||||
add wave -noupdate -group RR_W /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/stage
|
||||
add wave -noupdate -group RR_W /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/cnt
|
||||
add wave -noupdate -group RR_W /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/empty_user
|
||||
add wave -noupdate -group RR_W /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/rd_user
|
||||
add wave -noupdate -group RR_W -radix hexadecimal /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/data_in_user
|
||||
add wave -noupdate -group RR_W /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/last_word_in_user
|
||||
add wave -noupdate -group RR_W /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/empty_meta
|
||||
add wave -noupdate -group RR_W /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/rd_meta
|
||||
add wave -noupdate -group RR_W -radix hexadecimal /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/data_in_meta
|
||||
add wave -noupdate -group RR_W /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/last_word_in_meta
|
||||
add wave -noupdate -group RR_W /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/alive_sig
|
||||
add wave -noupdate -group RR_W /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/full_ro
|
||||
add wave -noupdate -group RR_W /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/wr_ro
|
||||
add wave -noupdate -group RR_W -radix hexadecimal /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/data_out_ro
|
||||
add wave -noupdate -group RR_W /l2_addtwoints_test1/server_inst/rtps_endpoint_gen(1)/rtps_endpoint_if/rtps_writer_inst/last_word_out_ro
|
||||
add wave -noupdate -divider MISC
|
||||
TreeUpdate [SetDefaultTree]
|
||||
WaveRestoreCursors {{Cursor 1} {148360 ps} 0}
|
||||
quietly wave cursor active 1
|
||||
configure wave -namecolwidth 150
|
||||
configure wave -valuecolwidth 100
|
||||
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 {0 ps} {1024 ns}
|
||||
@ -24,6 +24,8 @@ Testbench_Lib4 = W:/HDL-SIM/OSVVM-Scripts/../sim/VHDL_LIBS/ModelSim-2020.02/Test
|
||||
Testbench_Lib5 = W:/HDL-SIM/OSVVM-Scripts/../sim/VHDL_LIBS/ModelSim-2020.02/Testbench_Lib5.lib
|
||||
Testbench_Lib1 = W:/HDL-SIM/OSVVM-Scripts/../sim/VHDL_LIBS/ModelSim-2020.02/Testbench_Lib1.lib
|
||||
Testbench_ROS_Lib1 = W:/HDL-SIM/OSVVM-Scripts/../sim/VHDL_LIBS/ModelSim-2020.02/Testbench_ROS_Lib1.lib
|
||||
Testbench_ROS_Lib2 = W:/HDL-SIM/OSVVM-Scripts/../sim/VHDL_LIBS/ModelSim-2020.02/Testbench_ROS_Lib2.lib
|
||||
Testbench_ROS_Lib3 = W:/HDL-SIM/OSVVM-Scripts/../sim/VHDL_LIBS/ModelSim-2020.02/Testbench_ROS_Lib3.lib
|
||||
[vcom]
|
||||
; VHDL93 variable selects language version as the default.
|
||||
; Default is VHDL-2002.
|
||||
|
||||
@ -4,6 +4,7 @@ include ../OSVVM/osvvm.pro
|
||||
library Testbench_Lib2
|
||||
analyze ../math_pkg.vhd
|
||||
analyze ../rtps_package.vhd
|
||||
analyze Type1_package.vhd
|
||||
analyze Level_2/L2_Testbench_Lib2_config.vhd
|
||||
analyze ../rtps_config_package.vhd
|
||||
analyze ../rtps_test_package.vhd
|
||||
@ -28,7 +29,6 @@ analyze ../dds_reader.vhd
|
||||
analyze ../key_holder.vhd
|
||||
analyze ../key_hash_generator.vhd
|
||||
analyze test_key_hash_generator.vhd
|
||||
analyze Type1_package.vhd
|
||||
analyze Type1_reader_interface.vhd
|
||||
analyze Type1_writer_interface.vhd
|
||||
analyze Type1_key_holder.vhd
|
||||
@ -38,6 +38,7 @@ analyze Type1_cfg.vhd
|
||||
library Testbench_Lib3
|
||||
analyze ../math_pkg.vhd
|
||||
analyze ../rtps_package.vhd
|
||||
analyze Type1_package.vhd
|
||||
analyze Level_2/L2_Testbench_Lib3_config.vhd
|
||||
analyze ../rtps_config_package.vhd
|
||||
analyze ../rtps_test_package.vhd
|
||||
@ -62,7 +63,6 @@ analyze ../dds_reader.vhd
|
||||
analyze ../key_holder.vhd
|
||||
analyze ../key_hash_generator.vhd
|
||||
analyze test_key_hash_generator.vhd
|
||||
analyze Type1_package.vhd
|
||||
analyze Type1_reader_interface.vhd
|
||||
analyze Type1_writer_interface.vhd
|
||||
analyze Type1_key_holder.vhd
|
||||
@ -72,6 +72,7 @@ analyze Type1_cfg.vhd
|
||||
library Testbench_Lib4
|
||||
analyze ../math_pkg.vhd
|
||||
analyze ../rtps_package.vhd
|
||||
analyze Type1_package.vhd
|
||||
analyze Level_2/L2_Testbench_Lib4_config.vhd
|
||||
analyze ../rtps_config_package.vhd
|
||||
analyze ../rtps_test_package.vhd
|
||||
@ -96,7 +97,6 @@ analyze ../dds_reader.vhd
|
||||
analyze ../key_holder.vhd
|
||||
analyze ../key_hash_generator.vhd
|
||||
analyze test_key_hash_generator.vhd
|
||||
analyze Type1_package.vhd
|
||||
analyze Type1_reader_interface.vhd
|
||||
analyze Type1_writer_interface.vhd
|
||||
analyze Type1_key_holder.vhd
|
||||
@ -107,6 +107,7 @@ analyze Type1_cfg.vhd
|
||||
library Testbench_Lib5
|
||||
analyze ../math_pkg.vhd
|
||||
analyze ../rtps_package.vhd
|
||||
analyze Type1_package.vhd
|
||||
analyze Level_2/L2_Testbench_Lib5_config.vhd
|
||||
analyze ../rtps_config_package.vhd
|
||||
analyze ../rtps_test_package.vhd
|
||||
@ -131,7 +132,6 @@ analyze ../dds_reader.vhd
|
||||
analyze ../key_holder.vhd
|
||||
analyze ../key_hash_generator.vhd
|
||||
analyze test_key_hash_generator.vhd
|
||||
analyze Type1_package.vhd
|
||||
analyze Type1_reader_interface.vhd
|
||||
analyze Type1_writer_interface.vhd
|
||||
analyze Type1_key_holder.vhd
|
||||
|
||||
121
src/ros2/Tests/AddTwoInts.vhd
Normal file
121
src/ros2/Tests/AddTwoInts.vhd
Normal file
@ -0,0 +1,121 @@
|
||||
-- altera vhdl_input_version vhdl_2008
|
||||
-- XXX: QSYS Fix (https://www.intel.com/content/www/us/en/support/programmable/articles/000079458.html)
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
use work.rtps_package.all;
|
||||
use work.ros_package.all;
|
||||
|
||||
entity AddTwoInts is
|
||||
port (
|
||||
-- SYSTEM
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
-- SERVICE SERVER
|
||||
start : out std_logic;
|
||||
ack : in std_logic;
|
||||
opcode : out ROS_SERVICE_OPCODE_TYPE;
|
||||
service_info : in SERVICE_INFO_TYPE;
|
||||
request_id : out REQUEST_ID_TYPE;
|
||||
taken : in std_logic;
|
||||
data_available : in std_logic;
|
||||
a : in std_logic_vector(CDR_LONG_LONG_WIDTH-1 downto 0);
|
||||
b : in std_logic_vector(CDR_LONG_LONG_WIDTH-1 downto 0);
|
||||
sum : out std_logic_vector(CDR_LONG_LONG_WIDTH-1 downto 0);
|
||||
done : in std_logic;
|
||||
return_code : in std_logic_vector(ROS_RETCODE_WIDTH-1 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture arch of AddTwoInts is
|
||||
|
||||
--*****TYPE DECLARATION*****
|
||||
type STAGE_TYPE is (IDLE,A1,B2,C3,D4);
|
||||
|
||||
--*****SIGNAL DECLARATION*****
|
||||
signal stage, stage_next : STAGE_TYPE;
|
||||
signal sum_sig, sum_sig_next : std_logic_vector(CDR_LONG_LONG_WIDTH-1 downto 0);
|
||||
signal request_id_sig, request_id_sig_next : REQUEST_ID_TYPE;
|
||||
|
||||
begin
|
||||
|
||||
sum <= sum_sig;
|
||||
request_id <= request_id_sig;
|
||||
|
||||
main_prc : process(all)
|
||||
begin
|
||||
-- DEFAULT
|
||||
stage_next <= stage;
|
||||
sum_sig_next <= sum_sig;
|
||||
request_id_sig_next <= request_id_sig;
|
||||
-- DEFAULT Unregistered
|
||||
start <= '0';
|
||||
opcode <= NOP;
|
||||
|
||||
case (stage) is
|
||||
when IDLE =>
|
||||
-- Reader has Available Data
|
||||
if (data_available = '1') then
|
||||
stage_next <= A1;
|
||||
end if;
|
||||
when A1 =>
|
||||
start <= '1';
|
||||
opcode <= TAKE_REQUEST;
|
||||
if (ack = '1') then
|
||||
stage_next <= B2;
|
||||
end if;
|
||||
when B2 =>
|
||||
if (done = '1') then
|
||||
case (return_code) is
|
||||
when ROS_RET_OK =>
|
||||
if (taken = '1') then
|
||||
sum_sig_next <= std_logic_vector(unsigned(a) + unsigned(b));
|
||||
request_id_sig_next <= service_info.request_id;
|
||||
|
||||
stage_next <= C3;
|
||||
else
|
||||
stage_next <= IDLE;
|
||||
end if;
|
||||
when others =>
|
||||
report "AddTwoInts: Error taking request" severity FAILURE;
|
||||
stage_next <= IDLE;
|
||||
end case;
|
||||
end if;
|
||||
when C3 =>
|
||||
start <= '1';
|
||||
opcode <= SEND_RESPONSE;
|
||||
if (ack = '1') then
|
||||
stage_next <= D4;
|
||||
end if;
|
||||
when D4 =>
|
||||
if (done = '1') then
|
||||
case (return_code) is
|
||||
when ROS_RET_OK =>
|
||||
-- DONE
|
||||
stage_next <= IDLE;
|
||||
when others =>
|
||||
report "AddTwoInts: Error sending response" severity FAILURE;
|
||||
stage_next <= IDLE;
|
||||
end case;
|
||||
end if;
|
||||
end case;
|
||||
end process;
|
||||
|
||||
sync_prc : process(clk)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
if (reset = '1') then
|
||||
stage <= IDLE;
|
||||
request_id_sig <= EMPTY_REQUEST_ID;
|
||||
sum_sig <= (others => '0');
|
||||
else
|
||||
stage <= stage_next;
|
||||
request_id_sig <= request_id_sig_next;
|
||||
sum_sig <= sum_sig_next;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
end architecture;
|
||||
229
src/ros2/Tests/Level_2/L2_AddTwoInts_test1.vhd
Normal file
229
src/ros2/Tests/Level_2/L2_AddTwoInts_test1.vhd
Normal file
@ -0,0 +1,229 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library osvvm; -- Utility Library
|
||||
context osvvm.OsvvmContext;
|
||||
|
||||
library Testbench_ROS_Lib2;
|
||||
library Testbench_ROS_Lib3;
|
||||
|
||||
use work.rtps_package.all;
|
||||
use work.ros_package.all;
|
||||
use work.rtps_test_package.all;
|
||||
|
||||
-- This testbench test the general the general ROS Service operation by interconnecting a system with a service client, with a system with a service server.
|
||||
-- Libraries are used to allow to use systems with different configurations. Testbench_ROS_Lib2 contains the ROS service server, and Testbench_ROS_Lib3
|
||||
-- contains the ROS service client.
|
||||
-- The ROS Service is the AddTwoInts service used in the example tutorials, with sends a request with 2 64-bit integers, and gets a response of their 64-bit
|
||||
-- summation.
|
||||
|
||||
|
||||
entity L2_AddTwoInts_test1 is
|
||||
end entity;
|
||||
|
||||
architecture testbench of L2_AddTwoInts_test1 is
|
||||
|
||||
signal clk, reset : std_logic := '0';
|
||||
signal time : TIME_TYPE := TIME_ZERO;
|
||||
signal empty_s, empty_c, read_s, read_c, full_s, full_c, write_s, write_c : std_logic := '0';
|
||||
signal data_in_s, data_in_c, data_out_s, data_out_c : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
|
||||
|
||||
signal start_c, ack_c, taken_c, done_c, data_available_c : std_logic := '0';
|
||||
signal opcode_c : ROS_SERVICE_OPCODE_TYPE := NOP;
|
||||
signal service_info_c : Testbench_ROS_Lib3.ros_package.SERVICE_INFO_TYPE := Testbench_ROS_Lib3.ros_package.EMPTY_SERVICE_INFO;
|
||||
signal sequence_id_c : std_logic_vector(ROS_SEQUENCE_ID_WIDTH-1 downto 0) := (others => '0');
|
||||
signal a_c, b_c, sum_c : std_logic_vector(CDR_LONG_LONG_WIDTH-1 downto 0) := (others => '0');
|
||||
signal return_code_c : std_logic_vector(ROS_RETCODE_WIDTH-1 downto 0) := ROS_RET_ERROR;
|
||||
|
||||
-- HACK: For some reason (possibly Modelsim/Questasim Bug) I cannot declare the opcode signals from their respective Library sources,
|
||||
-- because I cannot use a qualified expression to define an enumeration literal (and direct type casting cannot be done because
|
||||
-- the types are not closely related). So I have to do define explicit type conversions between the types...
|
||||
|
||||
function to_Lib3(input : ROS_SERVICE_OPCODE_TYPE) return Testbench_ROS_Lib3.ros_package.ROS_SERVICE_OPCODE_TYPE is
|
||||
begin
|
||||
return Testbench_ROS_Lib3.ros_package.ROS_SERVICE_OPCODE_TYPE'VAL(ROS_SERVICE_OPCODE_TYPE'POS(input));
|
||||
end function;
|
||||
|
||||
begin
|
||||
|
||||
server_inst : entity Testbench_ROS_Lib2.L2_Testbench_ROS_Lib2(arch)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => Testbench_ROS_Lib2.rtps_package.TIME_TYPE(time),
|
||||
-- INPUT
|
||||
empty => empty_s,
|
||||
read => read_s,
|
||||
data_in => data_in_s,
|
||||
-- OUTPUT
|
||||
full => full_s,
|
||||
write => write_s,
|
||||
data_out => data_out_s
|
||||
);
|
||||
|
||||
fifo_s_c_inst : configuration Testbench_ROS_Lib2.FWFT_FIFO_cfg
|
||||
generic map (
|
||||
FIFO_DEPTH => 65536/(WORD_WIDTH/BYTE_WIDTH),
|
||||
DATA_WIDTH => WORD_WIDTH
|
||||
)
|
||||
port map
|
||||
(
|
||||
reset => reset,
|
||||
clk => clk,
|
||||
data_in => data_out_s,
|
||||
write => write_s,
|
||||
read => read_c,
|
||||
data_out => data_in_c,
|
||||
empty => empty_c,
|
||||
full => full_s,
|
||||
free => open
|
||||
);
|
||||
|
||||
fifo_c_s_inst : configuration Testbench_ROS_Lib2.FWFT_FIFO_cfg
|
||||
generic map (
|
||||
FIFO_DEPTH => 65536/(WORD_WIDTH/BYTE_WIDTH),
|
||||
DATA_WIDTH => WORD_WIDTH
|
||||
)
|
||||
port map
|
||||
(
|
||||
reset => reset,
|
||||
clk => clk,
|
||||
data_in => data_out_c,
|
||||
write => write_c,
|
||||
read => read_s,
|
||||
data_out => data_in_s,
|
||||
empty => empty_s,
|
||||
full => full_c,
|
||||
free => open
|
||||
);
|
||||
|
||||
client_inst : entity Testbench_ROS_Lib3.L2_Testbench_ROS_Lib3(arch)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => Testbench_ROS_Lib3.rtps_package.TIME_TYPE(time),
|
||||
-- INPUT
|
||||
empty => empty_c,
|
||||
read => read_c,
|
||||
data_in => data_in_c,
|
||||
-- OUTPUT
|
||||
full => full_c,
|
||||
write => write_c,
|
||||
data_out => data_out_c,
|
||||
-- SERVICE CLIENT
|
||||
start_c => start_c,
|
||||
ack_c => ack_c,
|
||||
opcode_c => to_Lib3(opcode_c),
|
||||
service_info_c => service_info_c,
|
||||
sequence_id_c => sequence_id_c,
|
||||
taken_c => taken_c,
|
||||
data_available_c => data_available_c,
|
||||
a_c => a_c,
|
||||
b_c => b_c,
|
||||
sum_c => sum_c,
|
||||
done_c => done_c,
|
||||
return_code_c => return_code_c
|
||||
);
|
||||
|
||||
stimulus_prc : process
|
||||
variable RV : RandomPType;
|
||||
variable ref : std_logic_vector(CDR_LONG_LONG_WIDTH-1 downto 0);
|
||||
variable sid : std_logic_vector(ROS_SEQUENCE_ID_WIDTH-1 downto 0);
|
||||
|
||||
-- Waits until signal toggles high for at least 1 ps
|
||||
procedure wait_on_sig(signal sig : std_logic) is
|
||||
begin
|
||||
loop
|
||||
if (sig /= '1') then
|
||||
wait on sig until sig = '1';
|
||||
end if;
|
||||
-- Prevent triggering on glitches
|
||||
wait for 1 ps;
|
||||
if (sig = '1') then
|
||||
exit;
|
||||
end if;
|
||||
end loop;
|
||||
end procedure;
|
||||
begin
|
||||
|
||||
SetAlertLogName("ROS Service - Level 2 - (AddTwoInts) - General");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
SetLogEnable(DEBUG, FALSE);
|
||||
SetLogEnable(PASSED, FALSE);
|
||||
SetLogEnable(INFO, TRUE);
|
||||
RV.InitSeed(RV'instance_name);
|
||||
|
||||
Log("Initial Reset", INFO);
|
||||
reset <= '1';
|
||||
wait until rising_edge(clk);
|
||||
wait until rising_edge(clk);
|
||||
reset <= '0';
|
||||
|
||||
Log("Sent Request", INFO);
|
||||
start_c <= '1';
|
||||
opcode_c <= SEND_REQUEST;
|
||||
a_c <= std_logic_vector(resize(unsigned(RV.RandSlv(CDR_LONG_WIDTH)),a_c'length));
|
||||
b_c <= std_logic_vector(resize(unsigned(RV.RandSlv(CDR_LONG_WIDTH)),a_c'length));
|
||||
wait_on_sig(ack_c);
|
||||
wait until rising_edge(clk);
|
||||
start_c <= '0';
|
||||
wait_on_sig(done_c);
|
||||
wait for 1 ps; -- Make sure all signals stable
|
||||
AlertIf(return_code_c /= ROS_RET_OK, "Unexpected client response", FAILURE);
|
||||
sid := sequence_id_c;
|
||||
|
||||
Log("Wait for Response", INFO);
|
||||
wait_on_sig(data_available_c);
|
||||
|
||||
Log("Take & compare Response", INFO);
|
||||
start_c <= '1';
|
||||
opcode_c <= TAKE_RESPONSE;
|
||||
wait_on_sig(ack_c);
|
||||
wait until rising_edge(clk);
|
||||
start_c <= '0';
|
||||
wait_on_sig(done_c);
|
||||
wait for 1 ps; -- Make sure all signals stable
|
||||
AlertIf(return_code_c /= ROS_RET_OK, "Unexpected client response", FAILURE);
|
||||
AffirmIfEqual(unsigned(sum_c), unsigned(a_c) + unsigned(b_c));
|
||||
AffirmIfEqual(to_unsigned(SEQUENCENUMBER_TYPE(service_info_c.request_id.sequence_number)), unsigned(sid));
|
||||
|
||||
TranscriptOpen(RESULTS_FILE, APPEND_MODE);
|
||||
SetTranscriptMirror;
|
||||
ReportAlerts;
|
||||
TranscriptClose;
|
||||
std.env.stop;
|
||||
wait;
|
||||
end process;
|
||||
|
||||
clock_prc : process
|
||||
begin
|
||||
clk <= '0';
|
||||
wait for TEST_CLOCK_PERIOD/2;
|
||||
clk <= '1';
|
||||
wait for TEST_CLOCK_PERIOD/2;
|
||||
end process;
|
||||
|
||||
time_prc : process(clk)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
if (reset = '1') then
|
||||
time <= TIME_ZERO;
|
||||
else
|
||||
time <= time + gen_duration(TEST_CLOCK_PERIOD);
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
watchdog : process
|
||||
begin
|
||||
wait for 1 ms;
|
||||
Alert("Test timeout", FAILURE);
|
||||
std.env.stop;
|
||||
end process;
|
||||
|
||||
end architecture;
|
||||
726
src/ros2/Tests/Level_2/L2_Testbench_ROS_Lib2.vhd
Normal file
726
src/ros2/Tests/Level_2/L2_Testbench_ROS_Lib2.vhd
Normal file
@ -0,0 +1,726 @@
|
||||
-- altera vhdl_input_version vhdl_2008
|
||||
-- XXX: QSYS Fix (https://www.intel.com/content/www/us/en/support/programmable/articles/000079458.html)
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
use work.ros_package.all;
|
||||
use work.ros_config.all;
|
||||
use work.rtps_package.all;
|
||||
use work.user_config.all;
|
||||
use work.rtps_config_package.all;
|
||||
use work.rtps_test_package.all;
|
||||
|
||||
|
||||
|
||||
entity L2_Testbench_ROS_Lib2 is
|
||||
port (
|
||||
-- SYSTEM
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
time : in TIME_TYPE;
|
||||
-- INPUT
|
||||
empty : in std_logic;
|
||||
read : out std_logic;
|
||||
data_in : in std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
-- OUTPUT
|
||||
full : in std_logic;
|
||||
write : out std_logic;
|
||||
data_out : out std_logic_vector(WORD_WIDTH-1 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture arch of L2_Testbench_ROS_Lib2 is
|
||||
|
||||
type EARRAY_DATA_TYPE is array (0 to NUM_ENDPOINTS-1) of std_logic_vector(WORD_WIDTH downto 0);
|
||||
type HISTORY_CACHE_OPCODE_RARRAY_TYPE is array (0 to NUM_READERS-1) of HISTORY_CACHE_OPCODE_TYPE;
|
||||
type HISTORY_CACHE_OPCODE_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of HISTORY_CACHE_OPCODE_TYPE;
|
||||
type HISTORY_CACHE_RESPONSE_RARRAY_TYPE is array (0 to NUM_READERS-1) of HISTORY_CACHE_RESPONSE_TYPE;
|
||||
type HISTORY_CACHE_RESPONSE_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of HISTORY_CACHE_RESPONSE_TYPE;
|
||||
type RARRAY_DATA_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(WORD_WIDTH downto 0);
|
||||
type WARRAY_DATA_TYPE is array (0 to NUM_WRITERS-1) of std_logic_vector(WORD_WIDTH downto 0);
|
||||
type SEQUENCENUMBER_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of SEQUENCENUMBER_TYPE;
|
||||
type INSTANCE_HANDLE_RARRAY_TYPE is array (0 to NUM_READERS-1) of INSTANCE_HANDLE_TYPE;
|
||||
type INSTANCE_HANDLE_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of INSTANCE_HANDLE_TYPE;
|
||||
type CACHE_CHANGE_KIND_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of CACHE_CHANGE_KIND_TYPE;
|
||||
type TIME_RARRAY_TYPE is array (0 to NUM_READERS-1) of TIME_TYPE;
|
||||
type TIME_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of TIME_TYPE;
|
||||
type DDS_READER_OPCODE_RARRAY_TYPE is array (0 to NUM_READERS-1) of DDS_READER_OPCODE_TYPE;
|
||||
type DDS_WRITER_OPCODE_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of DDS_WRITER_OPCODE_TYPE;
|
||||
type INSTANCE_STATE_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(INSTANCE_STATE_KIND_WIDTH-1 downto 0);
|
||||
type VIEW_STATE_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(VIEW_STATE_KIND_WIDTH-1 downto 0);
|
||||
type SAMPLE_STATE_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0);
|
||||
type MAX_SAMPLES_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(MAX_SAMPLES_WIDTH-1 downto 0);
|
||||
type RETURN_CODE_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
|
||||
type RETURN_CODE_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
|
||||
type DISPOSED_GENERATION_COUNT_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(DISPOSED_GENERATION_COUNT_WIDTH-1 downto 0);
|
||||
type NO_WRITERS_GENERATION_COUNT_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(NO_WRITERS_GENERATION_COUNT_WIDTH-1 downto 0);
|
||||
type SAMPLE_RANK_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(SAMPLE_RANK_WIDTH-1 downto 0);
|
||||
type GENERATION_RANK_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(GENERATION_RANK_WIDTH-1 downto 0);
|
||||
type ABSOLUTE_GENERATION_RANK_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(ABSOLUTE_GENERATION_COUNT_WIDTH-1 downto 0);
|
||||
type STATUS_KIND_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(STATUS_KIND_WIDTH-1 downto 0);
|
||||
type STATUS_KIND_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of std_logic_vector(STATUS_KIND_WIDTH-1 downto 0);
|
||||
type DURATION_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of DURATION_TYPE;
|
||||
|
||||
signal full_fire_rh, write_rh_fire : std_logic_vector(0 to NUM_ENDPOINTS-1);
|
||||
signal data_rh_fire, data_rh_fidm : std_logic_vector(WORD_WIDTH downto 0);
|
||||
signal full_fidm_rh, write_rh_fidm : std_logic;
|
||||
signal read_dm_fidm, empty_fidm_dm : std_logic;
|
||||
signal data_fidm_dm : std_logic_vector(WORD_WIDTH downto 0);
|
||||
signal read_re_fire, empty_fire_re : std_logic_vector(0 to NUM_ENDPOINTS);
|
||||
signal data_fire_re : EARRAY_DATA_TYPE;
|
||||
signal alive_re_dm, full_fdmre_re, write_dm_fdmre : std_logic_vector(0 to NUM_ENDPOINTS-1);
|
||||
signal data_dm_fdmre , data_dm_firo : std_logic_vector(WORD_WIDTH downto 0);
|
||||
signal full_firo_dm, write_dm_firo : std_logic;
|
||||
signal empty_fdmre_re, read_re_fdmre : std_logic_vector(0 to NUM_ENDPOINTS-1);
|
||||
signal data_fdmre_re : EARRAY_DATA_TYPE;
|
||||
signal full_firo_re, write_re_firo : std_logic_vector(0 to NUM_ENDPOINTS-1);
|
||||
signal data_re_firo : EARRAY_DATA_TYPE;
|
||||
signal start_rr_dr, ack_dr_rr, done_dr_rr, valid_rr_dr, ready_dr_rr : std_logic_vector(0 to NUM_READERS-1);
|
||||
signal opcode_rr_dr : HISTORY_CACHE_OPCODE_RARRAY_TYPE;
|
||||
signal ret_dr_rr : HISTORY_CACHE_RESPONSE_RARRAY_TYPE;
|
||||
signal data_rr_dr : RARRAY_DATA_TYPE;
|
||||
signal liveliness_assertion_dw_rw, data_available_dw_rw, start_rw_dw, ack_dw_rw, done_rw_dw, get_data_rw_dw, valid_dw_rw, ready_rw_dw : std_logic_vector(0 to NUM_WRITERS-1);
|
||||
signal opcode_rw_dw : HISTORY_CACHE_OPCODE_WARRAY_TYPE;
|
||||
signal seq_nr_rw_dw, cc_seq_nr_dw_rw : SEQUENCENUMBER_WARRAY_TYPE;
|
||||
signal ret_dw_rw : HISTORY_CACHE_RESPONSE_WARRAY_TYPE;
|
||||
signal data_dw_rw : WARRAY_DATA_TYPE;
|
||||
signal cc_instance_handle_dw_rw : INSTANCE_HANDLE_WARRAY_TYPE;
|
||||
signal cc_kind_dw_rw : CACHE_CHANGE_KIND_WARRAY_TYPE;
|
||||
signal cc_source_timestamp_dw_rw : TIME_WARRAY_TYPE;
|
||||
signal start_ri_dr, ack_dr_ri, get_data_ri_dr, done_dr_ri, ready_ri_dr, valid_dr_ri, si_valid_data_dr_ri, si_valid_dr_ri, si_ack_ri_dr, eoc_dr_ri : std_logic_vector(0 to NUM_READERS-1);
|
||||
signal opcode_ri_dr : DDS_READER_OPCODE_RARRAY_TYPE;
|
||||
signal instance_state_ri_dr, si_instance_state_dr_ri : INSTANCE_STATE_RARRAY_TYPE;
|
||||
signal view_state_ri_dr, si_view_state_dr_ri : VIEW_STATE_RARRAY_TYPE;
|
||||
signal sample_state_ri_dr, si_sample_state_dr_ri : SAMPLE_STATE_RARRAY_TYPE;
|
||||
signal instance_handle_ri_dr, si_instance_handle_dr_ri, si_publication_handle_dr_ri : INSTANCE_HANDLE_RARRAY_TYPE;
|
||||
signal max_samples_ri_dr : MAX_SAMPLES_RARRAY_TYPE;
|
||||
signal return_code_dr_ri : RETURN_CODE_RARRAY_TYPE;
|
||||
signal data_dr_ri : RARRAY_DATA_TYPE;
|
||||
signal si_source_timestamp_dr_ri : TIME_RARRAY_TYPE;
|
||||
signal si_disposed_generation_count_dr_ri : DISPOSED_GENERATION_COUNT_RARRAY_TYPE;
|
||||
signal si_no_writers_generation_count_dr_ri : NO_WRITERS_GENERATION_COUNT_RARRAY_TYPE;
|
||||
signal si_sample_rank_dr_ri : SAMPLE_RANK_RARRAY_TYPE;
|
||||
signal si_generation_rank_dr_ri : GENERATION_RANK_RARRAY_TYPE;
|
||||
signal si_absolute_generation_rank_dr_ri : ABSOLUTE_GENERATION_RANK_RARRAY_TYPE;
|
||||
signal status_dr_ri : STATUS_KIND_RARRAY_TYPE;
|
||||
signal start_wi_dw, ack_dw_wi, done_dw_wi, valid_wi_dw, valid_dw_wi, ready_wi_dw, ready_dw_wi : std_logic_vector(0 to NUM_WRITERS-1);
|
||||
signal opcode_wi_dw : DDS_WRITER_OPCODE_WARRAY_TYPE;
|
||||
signal instance_handle_wi_dw, instance_handle_dw_wi : INSTANCE_HANDLE_WARRAY_TYPE;
|
||||
signal source_ts_wi_dw : TIME_WARRAY_TYPE;
|
||||
signal max_wait_wi_dw : DURATION_WARRAY_TYPE;
|
||||
signal return_code_dw_wi : RETURN_CODE_WARRAY_TYPE;
|
||||
signal data_dw_wi, data_wi_dw : WARRAY_DATA_TYPE;
|
||||
signal status_dw_wi : STATUS_KIND_WARRAY_TYPE;
|
||||
signal empty_firo_ro, read_ro_firo, last_word_firo_ro : std_logic_vector(0 to NUM_ENDPOINTS);
|
||||
signal data_firo_ro : RTPS_OUT_DATA_TYPE;
|
||||
signal service_if : SERVICE_INTERFACE_ARRAY_TYPE(0 to NUM_SERVICES-1);
|
||||
|
||||
-- ###GENERATED START###
|
||||
signal start_s, ack_s, taken_s, done_s, data_available_s : std_logic;
|
||||
signal opcode_s : ROS_SERVICE_OPCODE_TYPE;
|
||||
signal service_info_s : SERVICE_INFO_TYPE;
|
||||
signal request_id_s : REQUEST_ID_TYPE;
|
||||
signal a_s, b_s, sum_s : std_logic_vector(CDR_LONG_LONG_WIDTH-1 downto 0);
|
||||
signal return_code_s : std_logic_vector(ROS_RETCODE_WIDTH-1 downto 0);
|
||||
-- ###GENERATED END###
|
||||
|
||||
begin
|
||||
|
||||
|
||||
rtps_handler_inst : entity work.rtps_handler(arch)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
-- INPUT
|
||||
empty => empty,
|
||||
rd => read,
|
||||
data_in => data_in,
|
||||
-- TO DISCOVERY MODULE
|
||||
full_dm => full_fidm_rh,
|
||||
wr_dm => write_rh_fidm,
|
||||
data_out_dm => data_rh_fidm(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_dm => data_rh_fidm(WORD_WIDTH),
|
||||
-- TO USER ENDPOINTS
|
||||
full_rtps => full_fire_rh,
|
||||
wr_rtps => write_rh_fire,
|
||||
data_out_rtps => data_rh_fire(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_rtps => data_rh_fire(WORD_WIDTH)
|
||||
);
|
||||
|
||||
|
||||
fifo_in_dm_inst : configuration work.FWFT_FIFO_cfg
|
||||
generic map (
|
||||
FIFO_DEPTH => 2,
|
||||
DATA_WIDTH => WORD_WIDTH+1
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
reset => reset,
|
||||
clk => clk,
|
||||
-- INPUT
|
||||
full => full_fidm_rh,
|
||||
write => write_rh_fidm,
|
||||
data_in => data_rh_fidm,
|
||||
-- OUTPUT
|
||||
empty => empty_fidm_dm,
|
||||
read => read_dm_fidm,
|
||||
data_out => data_fidm_dm,
|
||||
-- MISC
|
||||
free => open
|
||||
);
|
||||
|
||||
|
||||
fifo_in_re_gen : for i in 0 to NUM_ENDPOINTS-1 generate
|
||||
fifo_in_re_inst : configuration work.FWFT_FIFO_cfg
|
||||
generic map (
|
||||
FIFO_DEPTH => 2,
|
||||
DATA_WIDTH => WORD_WIDTH+1
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
reset => reset,
|
||||
clk => clk,
|
||||
-- INPUT
|
||||
full => full_fire_rh(i),
|
||||
write => write_rh_fire(i),
|
||||
data_in => data_rh_fire, -- Multicast
|
||||
-- OUTPUT
|
||||
empty => empty_fire_re(i),
|
||||
read => read_re_fire(i),
|
||||
data_out => data_fire_re(i),
|
||||
-- MISC
|
||||
free => open
|
||||
);
|
||||
end generate;
|
||||
|
||||
|
||||
rtps_discovery_module_inst : entity work.rtps_discovery_module(arch)
|
||||
generic map (
|
||||
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
|
||||
)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
-- FROM RTPS HANDLER
|
||||
empty => empty_fidm_dm,
|
||||
rd => read_dm_fidm,
|
||||
data_in => data_fidm_dm(WORD_WIDTH-1 downto 0),
|
||||
last_word_in => data_fidm_dm(WORD_WIDTH),
|
||||
-- FROM RTPS ENDPOINTS
|
||||
alive => alive_re_dm,
|
||||
-- TO RTPS ENDPOINTS
|
||||
full_rtps => full_fdmre_re,
|
||||
wr_rtps => write_dm_fdmre,
|
||||
data_out_rtps => data_dm_fdmre(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_rtps => data_dm_fdmre(WORD_WIDTH),
|
||||
-- TO RTPS OUT
|
||||
full_ro => full_firo_dm,
|
||||
wr_ro => write_dm_firo,
|
||||
data_out_ro => data_dm_firo(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_ro => data_dm_firo(WORD_WIDTH)
|
||||
);
|
||||
|
||||
|
||||
fifo_dm_re_gen : for i in 0 to NUM_ENDPOINTS-1 generate
|
||||
fifo_dm_re_inst : configuration work.FWFT_FIFO_cfg
|
||||
generic map (
|
||||
FIFO_DEPTH => 2,
|
||||
DATA_WIDTH => WORD_WIDTH+1
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
reset => reset,
|
||||
clk => clk,
|
||||
-- INPUT
|
||||
full => full_fdmre_re(i),
|
||||
write => write_dm_fdmre(i),
|
||||
data_in => data_dm_fdmre, -- Multicast
|
||||
-- OUTPUT
|
||||
empty => empty_fdmre_re(i),
|
||||
read => read_re_fdmre(i),
|
||||
data_out => data_fdmre_re(i),
|
||||
-- MISC
|
||||
free => open
|
||||
);
|
||||
end generate;
|
||||
|
||||
|
||||
rtps_endpoint_gen : for i in 0 to NUM_ENDPOINTS-1 generate
|
||||
rtps_endpoint_if : if (i < NUM_READERS) generate
|
||||
rtps_reader_inst : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => ENTITYID(i),
|
||||
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS,
|
||||
DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_RESPONSE_DELAY,
|
||||
HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_SUPPRESSION_DELAY,
|
||||
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
-- FROM RTPS_HANDLER (USER TRAFFIC)
|
||||
empty_user => empty_fire_re(i),
|
||||
rd_user => read_re_fire(i),
|
||||
data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_user => data_fire_re(i)(WORD_WIDTH),
|
||||
-- FROM DISCOVERY MODULE (META TRAFFIC)
|
||||
empty_meta => empty_fdmre_re(i),
|
||||
rd_meta => read_re_fdmre(i),
|
||||
data_in_meta => data_fdmre_re(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_meta => data_fdmre_re(i)(WORD_WIDTH),
|
||||
-- RTPS OUTPUT
|
||||
full_ro => full_firo_re(i),
|
||||
wr_ro => write_re_firo(i),
|
||||
data_out_ro => data_re_firo(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_ro => data_re_firo(i)(WORD_WIDTH),
|
||||
-- TO HISTORY CACHE
|
||||
start_hc => start_rr_dr(i),
|
||||
opcode_hc => opcode_rr_dr(i),
|
||||
ack_hc => ack_dr_rr(i),
|
||||
done_hc => done_dr_rr(i),
|
||||
ret_hc => ret_dr_rr(i),
|
||||
valid_out_hc => valid_rr_dr(i),
|
||||
ready_out_hc => ready_dr_rr(i),
|
||||
data_out_hc => data_rr_dr(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_hc => data_rr_dr(i)(WORD_WIDTH)
|
||||
);
|
||||
|
||||
-- Set Alive Signals of Readers to Zero
|
||||
alive_re_dm(i) <= ('0');
|
||||
else generate
|
||||
rtps_writer_inst : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS,
|
||||
DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS,
|
||||
ACKNACK_RESPONSE_DELAY => ENDPOINT_CONFIG(i).ACKNACK_RESPONSE_DELAY,
|
||||
ACKNACK_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).ACKNACK_SUPPRESSION_DELAY,
|
||||
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||
HEARTBEAT_PERIOD => ENDPOINT_CONFIG(i).HEARTBEAT_PERIOD,
|
||||
ENTITYID => ENTITYID(i),
|
||||
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||
PUSH_MODE => ENDPOINT_CONFIG(i).PUSH_MODE,
|
||||
INLINE_QOS => gen_inline_qos(i),
|
||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
-- FROM RTPS_HANDLER (USER TRAFFIC)
|
||||
empty_user => empty_fire_re(i),
|
||||
rd_user => read_re_fire(i),
|
||||
data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_user => data_fire_re(i)(WORD_WIDTH),
|
||||
-- FROM DISCOVERY MODULE (META TRAFFIC)
|
||||
empty_meta => empty_fdmre_re(i),
|
||||
rd_meta => read_re_fdmre(i),
|
||||
data_in_meta => data_fdmre_re(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_meta => data_fdmre_re(i)(WORD_WIDTH),
|
||||
-- TO DISCOVERY MODULE (META TRAFFIC)
|
||||
alive_sig => alive_re_dm(i),
|
||||
-- RTPS OUTPUT
|
||||
full_ro => full_firo_re(i),
|
||||
wr_ro => write_re_firo(i),
|
||||
data_out_ro => data_re_firo(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_ro => data_re_firo(i)(WORD_WIDTH),
|
||||
-- FROM HC
|
||||
liveliness_assertion => liveliness_assertion_dw_rw(i-NUM_READERS),
|
||||
data_available => data_available_dw_rw(i-NUM_READERS),
|
||||
start_hc => start_rw_dw(i-NUM_READERS),
|
||||
opcode_hc => opcode_rw_dw(i-NUM_READERS),
|
||||
ack_hc => ack_dw_rw(i-NUM_READERS),
|
||||
seq_nr_hc => seq_nr_rw_dw(i-NUM_READERS),
|
||||
done_hc => done_rw_dw(i-NUM_READERS),
|
||||
ret_hc => ret_dw_rw(i-NUM_READERS),
|
||||
get_data_hc => get_data_rw_dw(i-NUM_READERS),
|
||||
valid_in_hc => valid_dw_rw(i-NUM_READERS),
|
||||
ready_in_hc => ready_rw_dw(i-NUM_READERS),
|
||||
data_in_hc => data_dw_rw(i-NUM_READERS)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_hc => data_dw_rw(i-NUM_READERS)(WORD_WIDTH),
|
||||
cc_instance_handle => cc_instance_handle_dw_rw(i-NUM_READERS),
|
||||
cc_kind => cc_kind_dw_rw(i-NUM_READERS),
|
||||
cc_source_timestamp => cc_source_timestamp_dw_rw(i-NUM_READERS),
|
||||
cc_seq_nr => cc_seq_nr_dw_rw(i-NUM_READERS)
|
||||
);
|
||||
end generate;
|
||||
end generate;
|
||||
|
||||
|
||||
dds_endpoint_gen : for i in 0 to NUM_ENDPOINTS-2 generate
|
||||
dds_endpoint_if : if (i < NUM_READERS) generate
|
||||
dds_reader_inst : entity work.dds_reader(arch)
|
||||
generic map (
|
||||
TIME_BASED_FILTER_QOS => ENDPOINT_CONFIG(i).TIME_BASED_FILTER_QOS,
|
||||
DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS,
|
||||
MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES,
|
||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE,
|
||||
MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES,
|
||||
HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS,
|
||||
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||
PRESENTATION_QOS => ENDPOINT_CONFIG(i).PRESENTATION_QOS,
|
||||
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS,
|
||||
COHERENT_ACCESS => ENDPOINT_CONFIG(i).COHERENT_ACCESS,
|
||||
ORDERED_ACCESS => ENDPOINT_CONFIG(i).ORDERED_ACCESS,
|
||||
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||
PAYLOAD_FRAME_SIZE => ENDPOINT_CONFIG(i).MAX_PAYLOAD_SIZE,
|
||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
-- FROM RTPS ENDPOINT
|
||||
start_rtps => start_rr_dr(i),
|
||||
opcode_rtps => opcode_rr_dr(i),
|
||||
ack_rtps => ack_dr_rr(i),
|
||||
done_rtps => done_dr_rr(i),
|
||||
ret_rtps => ret_dr_rr(i),
|
||||
valid_in_rtps => valid_rr_dr(i),
|
||||
ready_in_rtps => ready_dr_rr(i),
|
||||
data_in_rtps => data_rr_dr(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_rtps => data_rr_dr(i)(WORD_WIDTH),
|
||||
-- TO USER ENTITY
|
||||
start_dds => start_ri_dr(i),
|
||||
ack_dds => ack_dr_ri(i),
|
||||
opcode_dds => opcode_ri_dr(i),
|
||||
instance_state_dds => instance_state_ri_dr(i),
|
||||
view_state_dds => view_state_ri_dr(i),
|
||||
sample_state_dds => sample_state_ri_dr(i),
|
||||
instance_handle_dds => instance_handle_ri_dr(i),
|
||||
max_samples_dds => max_samples_ri_dr(i),
|
||||
get_data_dds => get_data_ri_dr(i),
|
||||
done_dds => done_dr_ri(i),
|
||||
return_code_dds => return_code_dr_ri(i),
|
||||
valid_out_dds => valid_dr_ri(i),
|
||||
ready_out_dds => ready_ri_dr(i),
|
||||
data_out_dds => data_dr_ri(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_dds => data_dr_ri(i)(WORD_WIDTH),
|
||||
-- Sample Info
|
||||
si_sample_state => si_sample_state_dr_ri(i),
|
||||
si_view_state => si_view_state_dr_ri(i),
|
||||
si_instance_state => si_instance_state_dr_ri(i),
|
||||
si_source_timestamp => si_source_timestamp_dr_ri(i),
|
||||
si_instance_handle => si_instance_handle_dr_ri(i),
|
||||
si_publication_handle => si_publication_handle_dr_ri(i),
|
||||
si_disposed_generation_count => si_disposed_generation_count_dr_ri(i),
|
||||
si_no_writers_generation_count => si_no_writers_generation_count_dr_ri(i),
|
||||
si_sample_rank => si_sample_rank_dr_ri(i),
|
||||
si_generation_rank => si_generation_rank_dr_ri(i),
|
||||
si_absolute_generation_rank => si_absolute_generation_rank_dr_ri(i),
|
||||
si_valid_data => si_valid_data_dr_ri(i),
|
||||
si_valid => si_valid_dr_ri(i),
|
||||
si_ack => si_ack_ri_dr(i),
|
||||
eoc => eoc_dr_ri(i),
|
||||
-- Communication Status
|
||||
status => status_dr_ri(i)
|
||||
);
|
||||
else generate
|
||||
dds_writer_inst : entity work.dds_writer(arch)
|
||||
generic map (
|
||||
HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS,
|
||||
DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS,
|
||||
LIFESPAN_QOS => ENDPOINT_CONFIG(i).LIFESPAN_QOS,
|
||||
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||
MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES,
|
||||
MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES,
|
||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE,
|
||||
PAYLOAD_FRAME_SIZE => ENDPOINT_CONFIG(i).MAX_PAYLOAD_SIZE
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
-- TO/FROM RTPS ENDPOINT
|
||||
start_rtps => start_rw_dw(i-NUM_READERS),
|
||||
opcode_rtps => opcode_rw_dw(i-NUM_READERS),
|
||||
ack_rtps => ack_dw_rw(i-NUM_READERS),
|
||||
done_rtps => done_rw_dw(i-NUM_READERS),
|
||||
ret_rtps => ret_dw_rw(i-NUM_READERS),
|
||||
seq_nr_rtps => seq_nr_rw_dw(i-NUM_READERS),
|
||||
get_data_rtps => get_data_rw_dw(i-NUM_READERS),
|
||||
valid_out_rtps => valid_dw_rw(i-NUM_READERS),
|
||||
ready_out_rtps => ready_rw_dw(i-NUM_READERS),
|
||||
data_out_rtps => data_dw_rw(i-NUM_READERS)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_rtps => data_dw_rw(i-NUM_READERS)(WORD_WIDTH),
|
||||
liveliness_assertion => liveliness_assertion_dw_rw(i-NUM_READERS),
|
||||
data_available => data_available_dw_rw(i-NUM_READERS),
|
||||
-- Cache Change
|
||||
cc_instance_handle => cc_instance_handle_dw_rw(i-NUM_READERS),
|
||||
cc_kind => cc_kind_dw_rw(i-NUM_READERS),
|
||||
cc_source_timestamp => cc_source_timestamp_dw_rw(i-NUM_READERS),
|
||||
cc_seq_nr => cc_seq_nr_dw_rw(i-NUM_READERS),
|
||||
-- TO/FROM USER ENTITY
|
||||
start_dds => start_wi_dw(i-NUM_READERS),
|
||||
ack_dds => ack_dw_wi(i-NUM_READERS),
|
||||
opcode_dds => opcode_wi_dw(i-NUM_READERS),
|
||||
instance_handle_in_dds => instance_handle_wi_dw(i-NUM_READERS),
|
||||
source_ts_dds => source_ts_wi_dw(i-NUM_READERS),
|
||||
max_wait_dds => max_wait_wi_dw(i-NUM_READERS),
|
||||
done_dds => done_dw_wi(i-NUM_READERS),
|
||||
return_code_dds => return_code_dw_wi(i-NUM_READERS),
|
||||
instance_handle_out_dds => instance_handle_dw_wi(i-NUM_READERS),
|
||||
valid_in_dds => valid_wi_dw(i-NUM_READERS),
|
||||
ready_in_dds => ready_dw_wi(i-NUM_READERS),
|
||||
data_in_dds => data_wi_dw(i-NUM_READERS)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_dds => data_wi_dw(i-NUM_READERS)(WORD_WIDTH),
|
||||
valid_out_dds => valid_dw_wi(i-NUM_READERS),
|
||||
ready_out_dds => ready_wi_dw(i-NUM_READERS),
|
||||
data_out_dds => data_dw_wi(i-NUM_READERS)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_dds => data_dw_wi(i-NUM_READERS)(WORD_WIDTH),
|
||||
-- Communication Status
|
||||
status => status_dw_wi(i-NUM_READERS)
|
||||
);
|
||||
end generate;
|
||||
end generate;
|
||||
|
||||
ros_discovery_writer_inst : entity work.ros_static_discovery_writer(arch)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
-- TO/FROM RTPS ENDPOINT
|
||||
start => start_rw_dw(NUM_WRITERS-1),
|
||||
opcode => opcode_rw_dw(NUM_WRITERS-1),
|
||||
ack => ack_dw_rw(NUM_WRITERS-1),
|
||||
done => done_rw_dw(NUM_WRITERS-1),
|
||||
ret => ret_dw_rw(NUM_WRITERS-1),
|
||||
seq_nr => seq_nr_rw_dw(NUM_WRITERS-1),
|
||||
get_data => get_data_rw_dw(NUM_WRITERS-1),
|
||||
valid_out => valid_dw_rw(NUM_WRITERS-1),
|
||||
ready_out => ready_rw_dw(NUM_WRITERS-1),
|
||||
data_out => data_dw_rw(NUM_WRITERS-1)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out => data_dw_rw(NUM_WRITERS-1)(WORD_WIDTH),
|
||||
liveliness_assertion => liveliness_assertion_dw_rw(NUM_WRITERS-1),
|
||||
data_available => data_available_dw_rw(NUM_WRITERS-1),
|
||||
-- Cache Change
|
||||
cc_instance_handle => cc_instance_handle_dw_rw(NUM_WRITERS-1),
|
||||
cc_kind => cc_kind_dw_rw(NUM_WRITERS-1),
|
||||
cc_source_timestamp => cc_source_timestamp_dw_rw(NUM_WRITERS-1),
|
||||
cc_seq_nr => cc_seq_nr_dw_rw(NUM_WRITERS-1)
|
||||
);
|
||||
|
||||
|
||||
fifo_in_ro_gen : for i in 0 to NUM_ENDPOINTS generate
|
||||
fifo_in_ro_if : if (i = NUM_ENDPOINTS) generate
|
||||
fifo_in_ro_inst : configuration work.FWFT_FIFO_cfg
|
||||
generic map (
|
||||
FIFO_DEPTH => 2,
|
||||
DATA_WIDTH => WORD_WIDTH+1
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
reset => reset,
|
||||
clk => clk,
|
||||
-- INPUT
|
||||
full => full_firo_dm,
|
||||
write => write_dm_firo,
|
||||
data_in => data_dm_firo,
|
||||
-- OUTPUT
|
||||
empty => empty_firo_ro(i),
|
||||
read => read_ro_firo(i),
|
||||
data_out(WORD_WIDTH) => last_word_firo_ro(i),
|
||||
data_out(WORD_WIDTH-1 downto 0) => data_firo_ro(i),
|
||||
-- MISC
|
||||
free => open
|
||||
);
|
||||
else generate
|
||||
fifo_in_ro_inst : configuration work.FWFT_FIFO_cfg
|
||||
generic map (
|
||||
FIFO_DEPTH => 2,
|
||||
DATA_WIDTH => WORD_WIDTH+1
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
reset => reset,
|
||||
clk => clk,
|
||||
-- INPUT
|
||||
full => full_firo_re(i),
|
||||
write => write_re_firo(i),
|
||||
data_in => data_re_firo(i),
|
||||
-- OUTPUT
|
||||
empty => empty_firo_ro(i),
|
||||
read => read_ro_firo(i),
|
||||
data_out(WORD_WIDTH) => last_word_firo_ro(i),
|
||||
data_out(WORD_WIDTH-1 downto 0) => data_firo_ro(i),
|
||||
-- MISC
|
||||
free => open
|
||||
);
|
||||
end generate;
|
||||
end generate;
|
||||
|
||||
|
||||
rtps_out_inst : entity work.rtps_out(arch)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
-- INPUT
|
||||
empty => empty_firo_ro,
|
||||
rd => read_ro_firo,
|
||||
data_in => data_firo_ro,
|
||||
last_word_in => last_word_firo_ro,
|
||||
-- OUTPUT
|
||||
full => full,
|
||||
wr => write,
|
||||
data_out => data_out
|
||||
);
|
||||
|
||||
service_if_gen : for i in 0 to NUM_SERVICES-1 generate
|
||||
start_ri_dr(i) <= service_if(i).start_r;
|
||||
service_if(i).ack_r <= ack_dr_ri(i);
|
||||
opcode_ri_dr(i) <= service_if(i).opcode_r;
|
||||
instance_state_ri_dr(i) <= service_if(i).instance_state_r;
|
||||
view_state_ri_dr(i) <= service_if(i).view_state_r;
|
||||
sample_state_ri_dr(i) <= service_if(i).sample_state_r;
|
||||
instance_handle_ri_dr(i) <= service_if(i).instance_handle_r;
|
||||
max_samples_ri_dr(i) <= service_if(i).max_samples_r;
|
||||
get_data_ri_dr(i) <= service_if(i).get_data_r;
|
||||
service_if(i).done_r <= done_dr_ri(i);
|
||||
service_if(i).return_code_r <= return_code_dr_ri(i);
|
||||
service_if(i).valid_in_r <= valid_dr_ri(i);
|
||||
ready_ri_dr(i) <= service_if(i).ready_in_r;
|
||||
service_if(i).data_in_r <= data_dr_ri(i)(WORD_WIDTH-1 downto 0);
|
||||
service_if(i).last_word_in_r <= data_dr_ri(i)(WORD_WIDTH);
|
||||
service_if(i).si_sample_state_r <= si_sample_state_dr_ri(i);
|
||||
service_if(i).si_view_state_r <= si_view_state_dr_ri(i);
|
||||
service_if(i).si_instance_state_r <= si_instance_state_dr_ri(i);
|
||||
service_if(i).si_source_timestamp_r <= si_source_timestamp_dr_ri(i);
|
||||
service_if(i).si_instance_handle_r <= si_instance_handle_dr_ri(i);
|
||||
service_if(i).si_publication_handle_r <= si_publication_handle_dr_ri(i);
|
||||
service_if(i).si_disposed_generation_count_r <= si_disposed_generation_count_dr_ri(i);
|
||||
service_if(i).si_no_writers_generation_count_r <= si_no_writers_generation_count_dr_ri(i);
|
||||
service_if(i).si_sample_rank_r <= si_sample_rank_dr_ri(i);
|
||||
service_if(i).si_generation_rank_r <= si_generation_rank_dr_ri(i);
|
||||
service_if(i).si_absolute_generation_rank_r <= si_absolute_generation_rank_dr_ri(i);
|
||||
service_if(i).si_valid_data_r <= si_valid_data_dr_ri(i);
|
||||
service_if(i).si_valid_r <= si_valid_dr_ri(i);
|
||||
si_ack_ri_dr(i) <= service_if(i).si_ack_r;
|
||||
service_if(i).eoc_r <= eoc_dr_ri(i);
|
||||
service_if(i).status_r <= status_dr_ri(i);
|
||||
start_wi_dw(i) <= service_if(i).start_w;
|
||||
service_if(i).ack_w <= ack_dw_wi(i);
|
||||
opcode_wi_dw(i) <= service_if(i).opcode_w;
|
||||
service_if(i).instance_handle_out_w <= instance_handle_dw_wi(i);
|
||||
source_ts_wi_dw(i) <= service_if(i).source_ts_w;
|
||||
max_wait_wi_dw(i) <= service_if(i).max_wait_w;
|
||||
service_if(i).done_w <= done_dw_wi(i);
|
||||
service_if(i).return_code_w <= return_code_dw_wi(i);
|
||||
instance_handle_wi_dw(i) <= service_if(i).instance_handle_in_w;
|
||||
valid_wi_dw(i) <= service_if(i).valid_out_w;
|
||||
service_if(i).ready_out_w <= ready_dw_wi(i);
|
||||
data_wi_dw(i)(WORD_WIDTH-1 downto 0) <= service_if(i).data_out_w;
|
||||
data_wi_dw(i)(WORD_WIDTH) <= service_if(i).last_word_out_w;
|
||||
service_if(i).valid_in_w <= valid_dw_wi(i);
|
||||
ready_wi_dw(i) <= service_if(i).ready_in_w;
|
||||
service_if(i).data_in_w <= data_dw_wi(i)(WORD_WIDTH-1 downto 0);
|
||||
service_if(i).last_word_in_w <= data_dw_wi(i)(WORD_WIDTH);
|
||||
service_if(i).status_w <= status_dw_wi(i);
|
||||
end generate;
|
||||
|
||||
-- ######GENERATED START######
|
||||
|
||||
AddTwoInts_srv_server_inst : entity work.AddTwoInts_srv_server(arch)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
start_r => service_if(0).start_r,
|
||||
ack_r => service_if(0).ack_r,
|
||||
opcode_r => service_if(0).opcode_r,
|
||||
instance_state_r => service_if(0).instance_state_r,
|
||||
view_state_r => service_if(0).view_state_r,
|
||||
sample_state_r => service_if(0).sample_state_r,
|
||||
instance_handle_r => service_if(0).instance_handle_r,
|
||||
max_samples_r => service_if(0).max_samples_r,
|
||||
get_data_r => service_if(0).get_data_r,
|
||||
done_r => service_if(0).done_r,
|
||||
return_code_r => service_if(0).return_code_r,
|
||||
valid_in_r => service_if(0).valid_in_r,
|
||||
ready_in_r => service_if(0).ready_in_r,
|
||||
data_in_r => service_if(0).data_in_r,
|
||||
last_word_in_r => service_if(0).last_word_in_r,
|
||||
si_sample_state_r => service_if(0).si_sample_state_r,
|
||||
si_view_state_r => service_if(0).si_view_state_r,
|
||||
si_instance_state_r => service_if(0).si_instance_state_r,
|
||||
si_source_timestamp_r => service_if(0).si_source_timestamp_r,
|
||||
si_instance_handle_r => service_if(0).si_instance_handle_r,
|
||||
si_publication_handle_r => service_if(0).si_publication_handle_r,
|
||||
si_disposed_generation_count_r => service_if(0).si_disposed_generation_count_r,
|
||||
si_no_writers_generation_count_r => service_if(0).si_no_writers_generation_count_r,
|
||||
si_sample_rank_r => service_if(0).si_sample_rank_r,
|
||||
si_generation_rank_r => service_if(0).si_generation_rank_r,
|
||||
si_absolute_generation_rank_r => service_if(0).si_absolute_generation_rank_r,
|
||||
si_valid_data_r => service_if(0).si_valid_data_r,
|
||||
si_valid_r => service_if(0).si_valid_r,
|
||||
si_ack_r => service_if(0).si_ack_r,
|
||||
eoc_r => service_if(0).eoc_r,
|
||||
status_r => service_if(0).status_r,
|
||||
start_w => service_if(0).start_w,
|
||||
ack_w => service_if(0).ack_w,
|
||||
opcode_w => service_if(0).opcode_w,
|
||||
instance_handle_out_w => service_if(0).instance_handle_out_w,
|
||||
source_ts_w => service_if(0).source_ts_w,
|
||||
max_wait_w => service_if(0).max_wait_w,
|
||||
done_w => service_if(0).done_w,
|
||||
return_code_w => service_if(0).return_code_w,
|
||||
instance_handle_in_w => service_if(0).instance_handle_in_w,
|
||||
valid_out_w => service_if(0).valid_out_w,
|
||||
ready_out_w => service_if(0).ready_out_w,
|
||||
data_out_w => service_if(0).data_out_w,
|
||||
last_word_out_w => service_if(0).last_word_out_w,
|
||||
valid_in_w => service_if(0).valid_in_w,
|
||||
ready_in_w => service_if(0).ready_in_w,
|
||||
data_in_w => service_if(0).data_in_w,
|
||||
last_word_in_w => service_if(0).last_word_in_w,
|
||||
status_w => service_if(0).status_w,
|
||||
|
||||
start_user => start_s,
|
||||
ack_user => ack_s,
|
||||
opcode_user => opcode_s,
|
||||
service_info_user => service_info_s,
|
||||
request_id_user => request_id_s,
|
||||
taken_user => taken_s,
|
||||
data_available_user => data_available_s,
|
||||
a => a_s,
|
||||
b => b_s,
|
||||
sum => sum_s,
|
||||
done_user => done_s,
|
||||
return_code_user => return_code_s
|
||||
);
|
||||
|
||||
|
||||
AddTwoInts_inst : entity work.AddTwoInts(arch)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
start => start_s,
|
||||
ack => ack_s,
|
||||
opcode => opcode_s,
|
||||
service_info => service_info_s,
|
||||
request_id => request_id_s,
|
||||
taken => taken_s,
|
||||
data_available => data_available_s,
|
||||
a => a_s,
|
||||
b => b_s,
|
||||
sum => sum_s,
|
||||
done => done_s,
|
||||
return_code => return_code_s
|
||||
);
|
||||
-- ######GENERATED END######
|
||||
|
||||
end architecture;
|
||||
78
src/ros2/Tests/Level_2/L2_Testbench_ROS_Lib2_config.vhd
Normal file
78
src/ros2/Tests/Level_2/L2_Testbench_ROS_Lib2_config.vhd
Normal file
@ -0,0 +1,78 @@
|
||||
-- altera vhdl_input_version vhdl_2008
|
||||
-- XXX: QSYS Fix (https://www.intel.com/content/www/us/en/support/programmable/articles/000079458.html)
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
use work.rtps_package.all;
|
||||
use work.ros_package.all;
|
||||
use work.AddTwoInts_package.all;
|
||||
|
||||
package ros_config is
|
||||
|
||||
-- IPv4 Address of ROS System [Default 192.168.0.129]
|
||||
constant ROS_ADDRESS : std_logic_vector(IPv4_ADDRESS_WIDTH-1 downto 0) := x"C0A80081";
|
||||
-- Random Key used to generate GUIDs
|
||||
constant ROS_RAND_KEY : std_logic_vector(47 downto 0) := x"1D4EEC915C7C";
|
||||
|
||||
constant NUM_NODES : natural := 1;
|
||||
|
||||
constant ROS_NODES : ROS_NODE_ARRAY_TYPE(0 to NUM_NODES-1) := (
|
||||
0 => (
|
||||
name => gen_user_string("add_two_ints_server"),
|
||||
namespace => gen_user_string(""),
|
||||
domain_id => 0,
|
||||
NUM_PUBS => 0,
|
||||
NUM_SUBS => 0,
|
||||
NUM_SERVICES => 1,
|
||||
NUM_ACTIONS => 0
|
||||
)
|
||||
);
|
||||
|
||||
constant NUM_PUBS : natural := get_num_pubs(ROS_NODES);
|
||||
constant NUM_SUBS : natural := get_num_subs(ROS_NODES);
|
||||
constant NUM_SERVICES : natural := get_num_services(ROS_NODES);
|
||||
constant NUM_ACTIONS : natural := get_num_actions(ROS_NODES);
|
||||
|
||||
constant ROS_PUBLICATIONS : ROS_TOPIC_ARRAY_TYPE(0 to NUM_PUBS-1) := (
|
||||
others => (
|
||||
node_id => 0,
|
||||
TOPICNAME => gen_user_string(""),
|
||||
TYPENAME => gen_user_string(""),
|
||||
QOS => ROS_QOS_PROFILE_DEFAULT,
|
||||
MAX_SIZE => 0
|
||||
)
|
||||
);
|
||||
|
||||
constant ROS_SUBSCRIPTIONS : ROS_TOPIC_ARRAY_TYPE(0 to NUM_SUBS-1) := (
|
||||
others => (
|
||||
node_id => 0,
|
||||
TOPICNAME => gen_user_string(""),
|
||||
TYPENAME => gen_user_string(""),
|
||||
QOS => ROS_QOS_PROFILE_DEFAULT,
|
||||
MAX_SIZE => 0
|
||||
)
|
||||
);
|
||||
|
||||
constant ROS_SERVICES : ROS_SERVICE_ARRAY_TYPE(0 to NUM_SERVICES-1) := (
|
||||
0 => (
|
||||
node_id => 0,
|
||||
SERVICENAME => gen_user_string("add_two_ints"),
|
||||
TYPENAME => gen_user_string("example_interfaces::srv::dds_::AddTwoInts_Request_"),
|
||||
QOS => ROS_QOS_PROFILE_TRANSIENT,
|
||||
MAX_RQ_SIZE => MAX_ADDTWOINTS_RQ_SIZE,
|
||||
MAX_RR_SIZE => MAX_ADDTWOINTS_RR_SIZE,
|
||||
is_client => FALSE
|
||||
)
|
||||
);
|
||||
|
||||
constant ROS_ACTIONS : ROS_ACTION_ARRAY_TYPE(0 to NUM_ACTIONS-1) := (
|
||||
others => (
|
||||
node_id => 0
|
||||
)
|
||||
);
|
||||
|
||||
-- Defines sensible RTPS timings for simulation
|
||||
constant SIMULATION_TIMING : boolean := TRUE;
|
||||
end package;
|
||||
715
src/ros2/Tests/Level_2/L2_Testbench_ROS_Lib3.vhd
Normal file
715
src/ros2/Tests/Level_2/L2_Testbench_ROS_Lib3.vhd
Normal file
@ -0,0 +1,715 @@
|
||||
-- altera vhdl_input_version vhdl_2008
|
||||
-- XXX: QSYS Fix (https://www.intel.com/content/www/us/en/support/programmable/articles/000079458.html)
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
use work.ros_package.all;
|
||||
use work.ros_config.all;
|
||||
use work.rtps_package.all;
|
||||
use work.user_config.all;
|
||||
use work.rtps_config_package.all;
|
||||
use work.rtps_test_package.all;
|
||||
|
||||
|
||||
|
||||
entity L2_Testbench_ROS_Lib3 is
|
||||
port (
|
||||
-- SYSTEM
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
time : in TIME_TYPE;
|
||||
-- INPUT
|
||||
empty : in std_logic;
|
||||
read : out std_logic;
|
||||
data_in : in std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
-- OUTPUT
|
||||
full : in std_logic;
|
||||
write : out std_logic;
|
||||
data_out : out std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
|
||||
-- SERVICE CLIENT
|
||||
start_c : in std_logic;
|
||||
ack_c : out std_logic;
|
||||
opcode_c : in ROS_SERVICE_OPCODE_TYPE;
|
||||
service_info_c : out SERVICE_INFO_TYPE;
|
||||
sequence_id_c : out std_logic_vector(ROS_SEQUENCE_ID_WIDTH-1 downto 0);
|
||||
data_available_c: out std_logic;
|
||||
taken_c : out std_logic;
|
||||
a_c : in std_logic_vector(CDR_LONG_LONG_WIDTH-1 downto 0);
|
||||
b_c : in std_logic_vector(CDR_LONG_LONG_WIDTH-1 downto 0);
|
||||
sum_c : out std_logic_vector(CDR_LONG_LONG_WIDTH-1 downto 0);
|
||||
done_c : out std_logic;
|
||||
return_code_c : out std_logic_vector(ROS_RETCODE_WIDTH-1 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture arch of L2_Testbench_ROS_Lib3 is
|
||||
|
||||
type EARRAY_DATA_TYPE is array (0 to NUM_ENDPOINTS-1) of std_logic_vector(WORD_WIDTH downto 0);
|
||||
type HISTORY_CACHE_OPCODE_RARRAY_TYPE is array (0 to NUM_READERS-1) of HISTORY_CACHE_OPCODE_TYPE;
|
||||
type HISTORY_CACHE_OPCODE_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of HISTORY_CACHE_OPCODE_TYPE;
|
||||
type HISTORY_CACHE_RESPONSE_RARRAY_TYPE is array (0 to NUM_READERS-1) of HISTORY_CACHE_RESPONSE_TYPE;
|
||||
type HISTORY_CACHE_RESPONSE_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of HISTORY_CACHE_RESPONSE_TYPE;
|
||||
type RARRAY_DATA_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(WORD_WIDTH downto 0);
|
||||
type WARRAY_DATA_TYPE is array (0 to NUM_WRITERS-1) of std_logic_vector(WORD_WIDTH downto 0);
|
||||
type SEQUENCENUMBER_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of SEQUENCENUMBER_TYPE;
|
||||
type INSTANCE_HANDLE_RARRAY_TYPE is array (0 to NUM_READERS-1) of INSTANCE_HANDLE_TYPE;
|
||||
type INSTANCE_HANDLE_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of INSTANCE_HANDLE_TYPE;
|
||||
type CACHE_CHANGE_KIND_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of CACHE_CHANGE_KIND_TYPE;
|
||||
type TIME_RARRAY_TYPE is array (0 to NUM_READERS-1) of TIME_TYPE;
|
||||
type TIME_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of TIME_TYPE;
|
||||
type DDS_READER_OPCODE_RARRAY_TYPE is array (0 to NUM_READERS-1) of DDS_READER_OPCODE_TYPE;
|
||||
type DDS_WRITER_OPCODE_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of DDS_WRITER_OPCODE_TYPE;
|
||||
type INSTANCE_STATE_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(INSTANCE_STATE_KIND_WIDTH-1 downto 0);
|
||||
type VIEW_STATE_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(VIEW_STATE_KIND_WIDTH-1 downto 0);
|
||||
type SAMPLE_STATE_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0);
|
||||
type MAX_SAMPLES_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(MAX_SAMPLES_WIDTH-1 downto 0);
|
||||
type RETURN_CODE_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
|
||||
type RETURN_CODE_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
|
||||
type DISPOSED_GENERATION_COUNT_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(DISPOSED_GENERATION_COUNT_WIDTH-1 downto 0);
|
||||
type NO_WRITERS_GENERATION_COUNT_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(NO_WRITERS_GENERATION_COUNT_WIDTH-1 downto 0);
|
||||
type SAMPLE_RANK_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(SAMPLE_RANK_WIDTH-1 downto 0);
|
||||
type GENERATION_RANK_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(GENERATION_RANK_WIDTH-1 downto 0);
|
||||
type ABSOLUTE_GENERATION_RANK_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(ABSOLUTE_GENERATION_COUNT_WIDTH-1 downto 0);
|
||||
type STATUS_KIND_RARRAY_TYPE is array (0 to NUM_READERS-1) of std_logic_vector(STATUS_KIND_WIDTH-1 downto 0);
|
||||
type STATUS_KIND_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of std_logic_vector(STATUS_KIND_WIDTH-1 downto 0);
|
||||
type DURATION_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of DURATION_TYPE;
|
||||
|
||||
signal full_fire_rh, write_rh_fire : std_logic_vector(0 to NUM_ENDPOINTS-1);
|
||||
signal data_rh_fire, data_rh_fidm : std_logic_vector(WORD_WIDTH downto 0);
|
||||
signal full_fidm_rh, write_rh_fidm : std_logic;
|
||||
signal read_dm_fidm, empty_fidm_dm : std_logic;
|
||||
signal data_fidm_dm : std_logic_vector(WORD_WIDTH downto 0);
|
||||
signal read_re_fire, empty_fire_re : std_logic_vector(0 to NUM_ENDPOINTS);
|
||||
signal data_fire_re : EARRAY_DATA_TYPE;
|
||||
signal alive_re_dm, full_fdmre_re, write_dm_fdmre : std_logic_vector(0 to NUM_ENDPOINTS-1);
|
||||
signal data_dm_fdmre , data_dm_firo : std_logic_vector(WORD_WIDTH downto 0);
|
||||
signal full_firo_dm, write_dm_firo : std_logic;
|
||||
signal empty_fdmre_re, read_re_fdmre : std_logic_vector(0 to NUM_ENDPOINTS-1);
|
||||
signal data_fdmre_re : EARRAY_DATA_TYPE;
|
||||
signal full_firo_re, write_re_firo : std_logic_vector(0 to NUM_ENDPOINTS-1);
|
||||
signal data_re_firo : EARRAY_DATA_TYPE;
|
||||
signal start_rr_dr, ack_dr_rr, done_dr_rr, valid_rr_dr, ready_dr_rr : std_logic_vector(0 to NUM_READERS-1);
|
||||
signal opcode_rr_dr : HISTORY_CACHE_OPCODE_RARRAY_TYPE;
|
||||
signal ret_dr_rr : HISTORY_CACHE_RESPONSE_RARRAY_TYPE;
|
||||
signal data_rr_dr : RARRAY_DATA_TYPE;
|
||||
signal liveliness_assertion_dw_rw, data_available_dw_rw, start_rw_dw, ack_dw_rw, done_rw_dw, get_data_rw_dw, valid_dw_rw, ready_rw_dw : std_logic_vector(0 to NUM_WRITERS-1);
|
||||
signal opcode_rw_dw : HISTORY_CACHE_OPCODE_WARRAY_TYPE;
|
||||
signal seq_nr_rw_dw, cc_seq_nr_dw_rw : SEQUENCENUMBER_WARRAY_TYPE;
|
||||
signal ret_dw_rw : HISTORY_CACHE_RESPONSE_WARRAY_TYPE;
|
||||
signal data_dw_rw : WARRAY_DATA_TYPE;
|
||||
signal cc_instance_handle_dw_rw : INSTANCE_HANDLE_WARRAY_TYPE;
|
||||
signal cc_kind_dw_rw : CACHE_CHANGE_KIND_WARRAY_TYPE;
|
||||
signal cc_source_timestamp_dw_rw : TIME_WARRAY_TYPE;
|
||||
signal start_ri_dr, ack_dr_ri, get_data_ri_dr, done_dr_ri, ready_ri_dr, valid_dr_ri, si_valid_data_dr_ri, si_valid_dr_ri, si_ack_ri_dr, eoc_dr_ri : std_logic_vector(0 to NUM_READERS-1);
|
||||
signal opcode_ri_dr : DDS_READER_OPCODE_RARRAY_TYPE;
|
||||
signal instance_state_ri_dr, si_instance_state_dr_ri : INSTANCE_STATE_RARRAY_TYPE;
|
||||
signal view_state_ri_dr, si_view_state_dr_ri : VIEW_STATE_RARRAY_TYPE;
|
||||
signal sample_state_ri_dr, si_sample_state_dr_ri : SAMPLE_STATE_RARRAY_TYPE;
|
||||
signal instance_handle_ri_dr, si_instance_handle_dr_ri, si_publication_handle_dr_ri : INSTANCE_HANDLE_RARRAY_TYPE;
|
||||
signal max_samples_ri_dr : MAX_SAMPLES_RARRAY_TYPE;
|
||||
signal return_code_dr_ri : RETURN_CODE_RARRAY_TYPE;
|
||||
signal data_dr_ri : RARRAY_DATA_TYPE;
|
||||
signal si_source_timestamp_dr_ri : TIME_RARRAY_TYPE;
|
||||
signal si_disposed_generation_count_dr_ri : DISPOSED_GENERATION_COUNT_RARRAY_TYPE;
|
||||
signal si_no_writers_generation_count_dr_ri : NO_WRITERS_GENERATION_COUNT_RARRAY_TYPE;
|
||||
signal si_sample_rank_dr_ri : SAMPLE_RANK_RARRAY_TYPE;
|
||||
signal si_generation_rank_dr_ri : GENERATION_RANK_RARRAY_TYPE;
|
||||
signal si_absolute_generation_rank_dr_ri : ABSOLUTE_GENERATION_RANK_RARRAY_TYPE;
|
||||
signal status_dr_ri : STATUS_KIND_RARRAY_TYPE;
|
||||
signal start_wi_dw, ack_dw_wi, done_dw_wi, valid_wi_dw, valid_dw_wi, ready_wi_dw, ready_dw_wi : std_logic_vector(0 to NUM_WRITERS-1);
|
||||
signal opcode_wi_dw : DDS_WRITER_OPCODE_WARRAY_TYPE;
|
||||
signal instance_handle_wi_dw, instance_handle_dw_wi : INSTANCE_HANDLE_WARRAY_TYPE;
|
||||
signal source_ts_wi_dw : TIME_WARRAY_TYPE;
|
||||
signal max_wait_wi_dw : DURATION_WARRAY_TYPE;
|
||||
signal return_code_dw_wi : RETURN_CODE_WARRAY_TYPE;
|
||||
signal data_dw_wi, data_wi_dw : WARRAY_DATA_TYPE;
|
||||
signal status_dw_wi : STATUS_KIND_WARRAY_TYPE;
|
||||
signal empty_firo_ro, read_ro_firo, last_word_firo_ro : std_logic_vector(0 to NUM_ENDPOINTS);
|
||||
signal data_firo_ro : RTPS_OUT_DATA_TYPE;
|
||||
signal service_if : SERVICE_INTERFACE_ARRAY_TYPE(0 to NUM_SERVICES-1);
|
||||
-- ###GENERATED START###
|
||||
-- INTERFACE-USER SIGNALS
|
||||
-- ###GENERATED END###
|
||||
|
||||
begin
|
||||
|
||||
|
||||
rtps_handler_inst : entity work.rtps_handler(arch)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
-- INPUT
|
||||
empty => empty,
|
||||
rd => read,
|
||||
data_in => data_in,
|
||||
-- TO DISCOVERY MODULE
|
||||
full_dm => full_fidm_rh,
|
||||
wr_dm => write_rh_fidm,
|
||||
data_out_dm => data_rh_fidm(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_dm => data_rh_fidm(WORD_WIDTH),
|
||||
-- TO USER ENDPOINTS
|
||||
full_rtps => full_fire_rh,
|
||||
wr_rtps => write_rh_fire,
|
||||
data_out_rtps => data_rh_fire(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_rtps => data_rh_fire(WORD_WIDTH)
|
||||
);
|
||||
|
||||
|
||||
fifo_in_dm_inst : configuration work.FWFT_FIFO_cfg
|
||||
generic map (
|
||||
FIFO_DEPTH => 2,
|
||||
DATA_WIDTH => WORD_WIDTH+1
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
reset => reset,
|
||||
clk => clk,
|
||||
-- INPUT
|
||||
full => full_fidm_rh,
|
||||
write => write_rh_fidm,
|
||||
data_in => data_rh_fidm,
|
||||
-- OUTPUT
|
||||
empty => empty_fidm_dm,
|
||||
read => read_dm_fidm,
|
||||
data_out => data_fidm_dm,
|
||||
-- MISC
|
||||
free => open
|
||||
);
|
||||
|
||||
|
||||
fifo_in_re_gen : for i in 0 to NUM_ENDPOINTS-1 generate
|
||||
fifo_in_re_inst : configuration work.FWFT_FIFO_cfg
|
||||
generic map (
|
||||
FIFO_DEPTH => 2,
|
||||
DATA_WIDTH => WORD_WIDTH+1
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
reset => reset,
|
||||
clk => clk,
|
||||
-- INPUT
|
||||
full => full_fire_rh(i),
|
||||
write => write_rh_fire(i),
|
||||
data_in => data_rh_fire, -- Multicast
|
||||
-- OUTPUT
|
||||
empty => empty_fire_re(i),
|
||||
read => read_re_fire(i),
|
||||
data_out => data_fire_re(i),
|
||||
-- MISC
|
||||
free => open
|
||||
);
|
||||
end generate;
|
||||
|
||||
|
||||
rtps_discovery_module_inst : entity work.rtps_discovery_module(arch)
|
||||
generic map (
|
||||
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
|
||||
)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
-- FROM RTPS HANDLER
|
||||
empty => empty_fidm_dm,
|
||||
rd => read_dm_fidm,
|
||||
data_in => data_fidm_dm(WORD_WIDTH-1 downto 0),
|
||||
last_word_in => data_fidm_dm(WORD_WIDTH),
|
||||
-- FROM RTPS ENDPOINTS
|
||||
alive => alive_re_dm,
|
||||
-- TO RTPS ENDPOINTS
|
||||
full_rtps => full_fdmre_re,
|
||||
wr_rtps => write_dm_fdmre,
|
||||
data_out_rtps => data_dm_fdmre(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_rtps => data_dm_fdmre(WORD_WIDTH),
|
||||
-- TO RTPS OUT
|
||||
full_ro => full_firo_dm,
|
||||
wr_ro => write_dm_firo,
|
||||
data_out_ro => data_dm_firo(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_ro => data_dm_firo(WORD_WIDTH)
|
||||
);
|
||||
|
||||
|
||||
fifo_dm_re_gen : for i in 0 to NUM_ENDPOINTS-1 generate
|
||||
fifo_dm_re_inst : configuration work.FWFT_FIFO_cfg
|
||||
generic map (
|
||||
FIFO_DEPTH => 2,
|
||||
DATA_WIDTH => WORD_WIDTH+1
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
reset => reset,
|
||||
clk => clk,
|
||||
-- INPUT
|
||||
full => full_fdmre_re(i),
|
||||
write => write_dm_fdmre(i),
|
||||
data_in => data_dm_fdmre, -- Multicast
|
||||
-- OUTPUT
|
||||
empty => empty_fdmre_re(i),
|
||||
read => read_re_fdmre(i),
|
||||
data_out => data_fdmre_re(i),
|
||||
-- MISC
|
||||
free => open
|
||||
);
|
||||
end generate;
|
||||
|
||||
|
||||
rtps_endpoint_gen : for i in 0 to NUM_ENDPOINTS-1 generate
|
||||
rtps_endpoint_if : if (i < NUM_READERS) generate
|
||||
rtps_reader_inst : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => ENTITYID(i),
|
||||
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS,
|
||||
DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_RESPONSE_DELAY,
|
||||
HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_SUPPRESSION_DELAY,
|
||||
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
-- FROM RTPS_HANDLER (USER TRAFFIC)
|
||||
empty_user => empty_fire_re(i),
|
||||
rd_user => read_re_fire(i),
|
||||
data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_user => data_fire_re(i)(WORD_WIDTH),
|
||||
-- FROM DISCOVERY MODULE (META TRAFFIC)
|
||||
empty_meta => empty_fdmre_re(i),
|
||||
rd_meta => read_re_fdmre(i),
|
||||
data_in_meta => data_fdmre_re(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_meta => data_fdmre_re(i)(WORD_WIDTH),
|
||||
-- RTPS OUTPUT
|
||||
full_ro => full_firo_re(i),
|
||||
wr_ro => write_re_firo(i),
|
||||
data_out_ro => data_re_firo(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_ro => data_re_firo(i)(WORD_WIDTH),
|
||||
-- TO HISTORY CACHE
|
||||
start_hc => start_rr_dr(i),
|
||||
opcode_hc => opcode_rr_dr(i),
|
||||
ack_hc => ack_dr_rr(i),
|
||||
done_hc => done_dr_rr(i),
|
||||
ret_hc => ret_dr_rr(i),
|
||||
valid_out_hc => valid_rr_dr(i),
|
||||
ready_out_hc => ready_dr_rr(i),
|
||||
data_out_hc => data_rr_dr(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_hc => data_rr_dr(i)(WORD_WIDTH)
|
||||
);
|
||||
|
||||
-- Set Alive Signals of Readers to Zero
|
||||
alive_re_dm(i) <= ('0');
|
||||
else generate
|
||||
rtps_writer_inst : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS,
|
||||
DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS,
|
||||
ACKNACK_RESPONSE_DELAY => ENDPOINT_CONFIG(i).ACKNACK_RESPONSE_DELAY,
|
||||
ACKNACK_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).ACKNACK_SUPPRESSION_DELAY,
|
||||
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||
HEARTBEAT_PERIOD => ENDPOINT_CONFIG(i).HEARTBEAT_PERIOD,
|
||||
ENTITYID => ENTITYID(i),
|
||||
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||
PUSH_MODE => ENDPOINT_CONFIG(i).PUSH_MODE,
|
||||
INLINE_QOS => gen_inline_qos(i),
|
||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
-- FROM RTPS_HANDLER (USER TRAFFIC)
|
||||
empty_user => empty_fire_re(i),
|
||||
rd_user => read_re_fire(i),
|
||||
data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_user => data_fire_re(i)(WORD_WIDTH),
|
||||
-- FROM DISCOVERY MODULE (META TRAFFIC)
|
||||
empty_meta => empty_fdmre_re(i),
|
||||
rd_meta => read_re_fdmre(i),
|
||||
data_in_meta => data_fdmre_re(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_meta => data_fdmre_re(i)(WORD_WIDTH),
|
||||
-- TO DISCOVERY MODULE (META TRAFFIC)
|
||||
alive_sig => alive_re_dm(i),
|
||||
-- RTPS OUTPUT
|
||||
full_ro => full_firo_re(i),
|
||||
wr_ro => write_re_firo(i),
|
||||
data_out_ro => data_re_firo(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_ro => data_re_firo(i)(WORD_WIDTH),
|
||||
-- FROM HC
|
||||
liveliness_assertion => liveliness_assertion_dw_rw(i-NUM_READERS),
|
||||
data_available => data_available_dw_rw(i-NUM_READERS),
|
||||
start_hc => start_rw_dw(i-NUM_READERS),
|
||||
opcode_hc => opcode_rw_dw(i-NUM_READERS),
|
||||
ack_hc => ack_dw_rw(i-NUM_READERS),
|
||||
seq_nr_hc => seq_nr_rw_dw(i-NUM_READERS),
|
||||
done_hc => done_rw_dw(i-NUM_READERS),
|
||||
ret_hc => ret_dw_rw(i-NUM_READERS),
|
||||
get_data_hc => get_data_rw_dw(i-NUM_READERS),
|
||||
valid_in_hc => valid_dw_rw(i-NUM_READERS),
|
||||
ready_in_hc => ready_rw_dw(i-NUM_READERS),
|
||||
data_in_hc => data_dw_rw(i-NUM_READERS)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_hc => data_dw_rw(i-NUM_READERS)(WORD_WIDTH),
|
||||
cc_instance_handle => cc_instance_handle_dw_rw(i-NUM_READERS),
|
||||
cc_kind => cc_kind_dw_rw(i-NUM_READERS),
|
||||
cc_source_timestamp => cc_source_timestamp_dw_rw(i-NUM_READERS),
|
||||
cc_seq_nr => cc_seq_nr_dw_rw(i-NUM_READERS)
|
||||
);
|
||||
end generate;
|
||||
end generate;
|
||||
|
||||
|
||||
dds_endpoint_gen : for i in 0 to NUM_ENDPOINTS-2 generate
|
||||
dds_endpoint_if : if (i < NUM_READERS) generate
|
||||
dds_reader_inst : entity work.dds_reader(arch)
|
||||
generic map (
|
||||
TIME_BASED_FILTER_QOS => ENDPOINT_CONFIG(i).TIME_BASED_FILTER_QOS,
|
||||
DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS,
|
||||
MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES,
|
||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE,
|
||||
MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES,
|
||||
HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS,
|
||||
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||
PRESENTATION_QOS => ENDPOINT_CONFIG(i).PRESENTATION_QOS,
|
||||
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS,
|
||||
COHERENT_ACCESS => ENDPOINT_CONFIG(i).COHERENT_ACCESS,
|
||||
ORDERED_ACCESS => ENDPOINT_CONFIG(i).ORDERED_ACCESS,
|
||||
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||
PAYLOAD_FRAME_SIZE => ENDPOINT_CONFIG(i).MAX_PAYLOAD_SIZE,
|
||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
-- FROM RTPS ENDPOINT
|
||||
start_rtps => start_rr_dr(i),
|
||||
opcode_rtps => opcode_rr_dr(i),
|
||||
ack_rtps => ack_dr_rr(i),
|
||||
done_rtps => done_dr_rr(i),
|
||||
ret_rtps => ret_dr_rr(i),
|
||||
valid_in_rtps => valid_rr_dr(i),
|
||||
ready_in_rtps => ready_dr_rr(i),
|
||||
data_in_rtps => data_rr_dr(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_rtps => data_rr_dr(i)(WORD_WIDTH),
|
||||
-- TO USER ENTITY
|
||||
start_dds => start_ri_dr(i),
|
||||
ack_dds => ack_dr_ri(i),
|
||||
opcode_dds => opcode_ri_dr(i),
|
||||
instance_state_dds => instance_state_ri_dr(i),
|
||||
view_state_dds => view_state_ri_dr(i),
|
||||
sample_state_dds => sample_state_ri_dr(i),
|
||||
instance_handle_dds => instance_handle_ri_dr(i),
|
||||
max_samples_dds => max_samples_ri_dr(i),
|
||||
get_data_dds => get_data_ri_dr(i),
|
||||
done_dds => done_dr_ri(i),
|
||||
return_code_dds => return_code_dr_ri(i),
|
||||
valid_out_dds => valid_dr_ri(i),
|
||||
ready_out_dds => ready_ri_dr(i),
|
||||
data_out_dds => data_dr_ri(i)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_dds => data_dr_ri(i)(WORD_WIDTH),
|
||||
-- Sample Info
|
||||
si_sample_state => si_sample_state_dr_ri(i),
|
||||
si_view_state => si_view_state_dr_ri(i),
|
||||
si_instance_state => si_instance_state_dr_ri(i),
|
||||
si_source_timestamp => si_source_timestamp_dr_ri(i),
|
||||
si_instance_handle => si_instance_handle_dr_ri(i),
|
||||
si_publication_handle => si_publication_handle_dr_ri(i),
|
||||
si_disposed_generation_count => si_disposed_generation_count_dr_ri(i),
|
||||
si_no_writers_generation_count => si_no_writers_generation_count_dr_ri(i),
|
||||
si_sample_rank => si_sample_rank_dr_ri(i),
|
||||
si_generation_rank => si_generation_rank_dr_ri(i),
|
||||
si_absolute_generation_rank => si_absolute_generation_rank_dr_ri(i),
|
||||
si_valid_data => si_valid_data_dr_ri(i),
|
||||
si_valid => si_valid_dr_ri(i),
|
||||
si_ack => si_ack_ri_dr(i),
|
||||
eoc => eoc_dr_ri(i),
|
||||
-- Communication Status
|
||||
status => status_dr_ri(i)
|
||||
);
|
||||
else generate
|
||||
dds_writer_inst : entity work.dds_writer(arch)
|
||||
generic map (
|
||||
HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS,
|
||||
DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS,
|
||||
LIFESPAN_QOS => ENDPOINT_CONFIG(i).LIFESPAN_QOS,
|
||||
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||
MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES,
|
||||
MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES,
|
||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE,
|
||||
PAYLOAD_FRAME_SIZE => ENDPOINT_CONFIG(i).MAX_PAYLOAD_SIZE
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
-- TO/FROM RTPS ENDPOINT
|
||||
start_rtps => start_rw_dw(i-NUM_READERS),
|
||||
opcode_rtps => opcode_rw_dw(i-NUM_READERS),
|
||||
ack_rtps => ack_dw_rw(i-NUM_READERS),
|
||||
done_rtps => done_rw_dw(i-NUM_READERS),
|
||||
ret_rtps => ret_dw_rw(i-NUM_READERS),
|
||||
seq_nr_rtps => seq_nr_rw_dw(i-NUM_READERS),
|
||||
get_data_rtps => get_data_rw_dw(i-NUM_READERS),
|
||||
valid_out_rtps => valid_dw_rw(i-NUM_READERS),
|
||||
ready_out_rtps => ready_rw_dw(i-NUM_READERS),
|
||||
data_out_rtps => data_dw_rw(i-NUM_READERS)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_rtps => data_dw_rw(i-NUM_READERS)(WORD_WIDTH),
|
||||
liveliness_assertion => liveliness_assertion_dw_rw(i-NUM_READERS),
|
||||
data_available => data_available_dw_rw(i-NUM_READERS),
|
||||
-- Cache Change
|
||||
cc_instance_handle => cc_instance_handle_dw_rw(i-NUM_READERS),
|
||||
cc_kind => cc_kind_dw_rw(i-NUM_READERS),
|
||||
cc_source_timestamp => cc_source_timestamp_dw_rw(i-NUM_READERS),
|
||||
cc_seq_nr => cc_seq_nr_dw_rw(i-NUM_READERS),
|
||||
-- TO/FROM USER ENTITY
|
||||
start_dds => start_wi_dw(i-NUM_READERS),
|
||||
ack_dds => ack_dw_wi(i-NUM_READERS),
|
||||
opcode_dds => opcode_wi_dw(i-NUM_READERS),
|
||||
instance_handle_in_dds => instance_handle_wi_dw(i-NUM_READERS),
|
||||
source_ts_dds => source_ts_wi_dw(i-NUM_READERS),
|
||||
max_wait_dds => max_wait_wi_dw(i-NUM_READERS),
|
||||
done_dds => done_dw_wi(i-NUM_READERS),
|
||||
return_code_dds => return_code_dw_wi(i-NUM_READERS),
|
||||
instance_handle_out_dds => instance_handle_dw_wi(i-NUM_READERS),
|
||||
valid_in_dds => valid_wi_dw(i-NUM_READERS),
|
||||
ready_in_dds => ready_dw_wi(i-NUM_READERS),
|
||||
data_in_dds => data_wi_dw(i-NUM_READERS)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_dds => data_wi_dw(i-NUM_READERS)(WORD_WIDTH),
|
||||
valid_out_dds => valid_dw_wi(i-NUM_READERS),
|
||||
ready_out_dds => ready_wi_dw(i-NUM_READERS),
|
||||
data_out_dds => data_dw_wi(i-NUM_READERS)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_dds => data_dw_wi(i-NUM_READERS)(WORD_WIDTH),
|
||||
-- Communication Status
|
||||
status => status_dw_wi(i-NUM_READERS)
|
||||
);
|
||||
end generate;
|
||||
end generate;
|
||||
|
||||
ros_discovery_writer_inst : entity work.ros_static_discovery_writer(arch)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
-- TO/FROM RTPS ENDPOINT
|
||||
start => start_rw_dw(NUM_WRITERS-1),
|
||||
opcode => opcode_rw_dw(NUM_WRITERS-1),
|
||||
ack => ack_dw_rw(NUM_WRITERS-1),
|
||||
done => done_rw_dw(NUM_WRITERS-1),
|
||||
ret => ret_dw_rw(NUM_WRITERS-1),
|
||||
seq_nr => seq_nr_rw_dw(NUM_WRITERS-1),
|
||||
get_data => get_data_rw_dw(NUM_WRITERS-1),
|
||||
valid_out => valid_dw_rw(NUM_WRITERS-1),
|
||||
ready_out => ready_rw_dw(NUM_WRITERS-1),
|
||||
data_out => data_dw_rw(NUM_WRITERS-1)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out => data_dw_rw(NUM_WRITERS-1)(WORD_WIDTH),
|
||||
liveliness_assertion => liveliness_assertion_dw_rw(NUM_WRITERS-1),
|
||||
data_available => data_available_dw_rw(NUM_WRITERS-1),
|
||||
-- Cache Change
|
||||
cc_instance_handle => cc_instance_handle_dw_rw(NUM_WRITERS-1),
|
||||
cc_kind => cc_kind_dw_rw(NUM_WRITERS-1),
|
||||
cc_source_timestamp => cc_source_timestamp_dw_rw(NUM_WRITERS-1),
|
||||
cc_seq_nr => cc_seq_nr_dw_rw(NUM_WRITERS-1)
|
||||
);
|
||||
|
||||
fifo_in_ro_gen : for i in 0 to NUM_ENDPOINTS generate
|
||||
fifo_in_ro_if : if (i = NUM_ENDPOINTS) generate
|
||||
fifo_in_ro_inst : configuration work.FWFT_FIFO_cfg
|
||||
generic map (
|
||||
FIFO_DEPTH => 2,
|
||||
DATA_WIDTH => WORD_WIDTH+1
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
reset => reset,
|
||||
clk => clk,
|
||||
-- INPUT
|
||||
full => full_firo_dm,
|
||||
write => write_dm_firo,
|
||||
data_in => data_dm_firo,
|
||||
-- OUTPUT
|
||||
empty => empty_firo_ro(i),
|
||||
read => read_ro_firo(i),
|
||||
data_out(WORD_WIDTH) => last_word_firo_ro(i),
|
||||
data_out(WORD_WIDTH-1 downto 0) => data_firo_ro(i),
|
||||
-- MISC
|
||||
free => open
|
||||
);
|
||||
else generate
|
||||
fifo_in_ro_inst : configuration work.FWFT_FIFO_cfg
|
||||
generic map (
|
||||
FIFO_DEPTH => 2,
|
||||
DATA_WIDTH => WORD_WIDTH+1
|
||||
)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
reset => reset,
|
||||
clk => clk,
|
||||
-- INPUT
|
||||
full => full_firo_re(i),
|
||||
write => write_re_firo(i),
|
||||
data_in => data_re_firo(i),
|
||||
-- OUTPUT
|
||||
empty => empty_firo_ro(i),
|
||||
read => read_ro_firo(i),
|
||||
data_out(WORD_WIDTH) => last_word_firo_ro(i),
|
||||
data_out(WORD_WIDTH-1 downto 0) => data_firo_ro(i),
|
||||
-- MISC
|
||||
free => open
|
||||
);
|
||||
end generate;
|
||||
end generate;
|
||||
|
||||
|
||||
rtps_out_inst : entity work.rtps_out(arch)
|
||||
port map (
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
-- INPUT
|
||||
empty => empty_firo_ro,
|
||||
rd => read_ro_firo,
|
||||
data_in => data_firo_ro,
|
||||
last_word_in => last_word_firo_ro,
|
||||
-- OUTPUT
|
||||
full => full,
|
||||
wr => write,
|
||||
data_out => data_out
|
||||
);
|
||||
|
||||
service_if_gen : for i in 0 to NUM_SERVICES-1 generate
|
||||
start_ri_dr(i) <= service_if(i).start_r;
|
||||
service_if(i).ack_r <= ack_dr_ri(i);
|
||||
opcode_ri_dr(i) <= service_if(i).opcode_r;
|
||||
instance_state_ri_dr(i) <= service_if(i).instance_state_r;
|
||||
view_state_ri_dr(i) <= service_if(i).view_state_r;
|
||||
sample_state_ri_dr(i) <= service_if(i).sample_state_r;
|
||||
instance_handle_ri_dr(i) <= service_if(i).instance_handle_r;
|
||||
max_samples_ri_dr(i) <= service_if(i).max_samples_r;
|
||||
get_data_ri_dr(i) <= service_if(i).get_data_r;
|
||||
service_if(i).done_r <= done_dr_ri(i);
|
||||
service_if(i).return_code_r <= return_code_dr_ri(i);
|
||||
service_if(i).valid_in_r <= valid_dr_ri(i);
|
||||
ready_ri_dr(i) <= service_if(i).ready_in_r;
|
||||
service_if(i).data_in_r <= data_dr_ri(i)(WORD_WIDTH-1 downto 0);
|
||||
service_if(i).last_word_in_r <= data_dr_ri(i)(WORD_WIDTH);
|
||||
service_if(i).si_sample_state_r <= si_sample_state_dr_ri(i);
|
||||
service_if(i).si_view_state_r <= si_view_state_dr_ri(i);
|
||||
service_if(i).si_instance_state_r <= si_instance_state_dr_ri(i);
|
||||
service_if(i).si_source_timestamp_r <= si_source_timestamp_dr_ri(i);
|
||||
service_if(i).si_instance_handle_r <= si_instance_handle_dr_ri(i);
|
||||
service_if(i).si_publication_handle_r <= si_publication_handle_dr_ri(i);
|
||||
service_if(i).si_disposed_generation_count_r <= si_disposed_generation_count_dr_ri(i);
|
||||
service_if(i).si_no_writers_generation_count_r <= si_no_writers_generation_count_dr_ri(i);
|
||||
service_if(i).si_sample_rank_r <= si_sample_rank_dr_ri(i);
|
||||
service_if(i).si_generation_rank_r <= si_generation_rank_dr_ri(i);
|
||||
service_if(i).si_absolute_generation_rank_r <= si_absolute_generation_rank_dr_ri(i);
|
||||
service_if(i).si_valid_data_r <= si_valid_data_dr_ri(i);
|
||||
service_if(i).si_valid_r <= si_valid_dr_ri(i);
|
||||
si_ack_ri_dr(i) <= service_if(i).si_ack_r;
|
||||
service_if(i).eoc_r <= eoc_dr_ri(i);
|
||||
service_if(i).status_r <= status_dr_ri(i);
|
||||
start_wi_dw(i) <= service_if(i).start_w;
|
||||
service_if(i).ack_w <= ack_dw_wi(i);
|
||||
opcode_wi_dw(i) <= service_if(i).opcode_w;
|
||||
service_if(i).instance_handle_out_w <= instance_handle_dw_wi(i);
|
||||
source_ts_wi_dw(i) <= service_if(i).source_ts_w;
|
||||
max_wait_wi_dw(i) <= service_if(i).max_wait_w;
|
||||
service_if(i).done_w <= done_dw_wi(i);
|
||||
service_if(i).return_code_w <= return_code_dw_wi(i);
|
||||
instance_handle_wi_dw(i) <= service_if(i).instance_handle_in_w;
|
||||
valid_wi_dw(i) <= service_if(i).valid_out_w;
|
||||
service_if(i).ready_out_w <= ready_dw_wi(i);
|
||||
data_wi_dw(i)(WORD_WIDTH-1 downto 0) <= service_if(i).data_out_w;
|
||||
data_wi_dw(i)(WORD_WIDTH) <= service_if(i).last_word_out_w;
|
||||
service_if(i).valid_in_w <= valid_dw_wi(i);
|
||||
ready_wi_dw(i) <= service_if(i).ready_in_w;
|
||||
service_if(i).data_in_w <= data_dw_wi(i)(WORD_WIDTH-1 downto 0);
|
||||
service_if(i).last_word_in_w <= data_dw_wi(i)(WORD_WIDTH);
|
||||
service_if(i).status_w <= status_dw_wi(i);
|
||||
end generate;
|
||||
|
||||
-- ######GENERATED START######
|
||||
|
||||
AddTwoInts_srv_client_inst : entity work.AddTwoInts_srv_client(arch)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
start_r => service_if(0).start_r,
|
||||
ack_r => service_if(0).ack_r,
|
||||
opcode_r => service_if(0).opcode_r,
|
||||
instance_state_r => service_if(0).instance_state_r,
|
||||
view_state_r => service_if(0).view_state_r,
|
||||
sample_state_r => service_if(0).sample_state_r,
|
||||
instance_handle_r => service_if(0).instance_handle_r,
|
||||
max_samples_r => service_if(0).max_samples_r,
|
||||
get_data_r => service_if(0).get_data_r,
|
||||
done_r => service_if(0).done_r,
|
||||
return_code_r => service_if(0).return_code_r,
|
||||
valid_in_r => service_if(0).valid_in_r,
|
||||
ready_in_r => service_if(0).ready_in_r,
|
||||
data_in_r => service_if(0).data_in_r,
|
||||
last_word_in_r => service_if(0).last_word_in_r,
|
||||
si_sample_state_r => service_if(0).si_sample_state_r,
|
||||
si_view_state_r => service_if(0).si_view_state_r,
|
||||
si_instance_state_r => service_if(0).si_instance_state_r,
|
||||
si_source_timestamp_r => service_if(0).si_source_timestamp_r,
|
||||
si_instance_handle_r => service_if(0).si_instance_handle_r,
|
||||
si_publication_handle_r => service_if(0).si_publication_handle_r,
|
||||
si_disposed_generation_count_r => service_if(0).si_disposed_generation_count_r,
|
||||
si_no_writers_generation_count_r => service_if(0).si_no_writers_generation_count_r,
|
||||
si_sample_rank_r => service_if(0).si_sample_rank_r,
|
||||
si_generation_rank_r => service_if(0).si_generation_rank_r,
|
||||
si_absolute_generation_rank_r => service_if(0).si_absolute_generation_rank_r,
|
||||
si_valid_data_r => service_if(0).si_valid_data_r,
|
||||
si_valid_r => service_if(0).si_valid_r,
|
||||
si_ack_r => service_if(0).si_ack_r,
|
||||
eoc_r => service_if(0).eoc_r,
|
||||
status_r => service_if(0).status_r,
|
||||
start_w => service_if(0).start_w,
|
||||
ack_w => service_if(0).ack_w,
|
||||
opcode_w => service_if(0).opcode_w,
|
||||
instance_handle_out_w => service_if(0).instance_handle_out_w,
|
||||
source_ts_w => service_if(0).source_ts_w,
|
||||
max_wait_w => service_if(0).max_wait_w,
|
||||
done_w => service_if(0).done_w,
|
||||
return_code_w => service_if(0).return_code_w,
|
||||
instance_handle_in_w => service_if(0).instance_handle_in_w,
|
||||
valid_out_w => service_if(0).valid_out_w,
|
||||
ready_out_w => service_if(0).ready_out_w,
|
||||
data_out_w => service_if(0).data_out_w,
|
||||
last_word_out_w => service_if(0).last_word_out_w,
|
||||
valid_in_w => service_if(0).valid_in_w,
|
||||
ready_in_w => service_if(0).ready_in_w,
|
||||
data_in_w => service_if(0).data_in_w,
|
||||
last_word_in_w => service_if(0).last_word_in_w,
|
||||
status_w => service_if(0).status_w,
|
||||
|
||||
start_user => start_c,
|
||||
ack_user => ack_c,
|
||||
opcode_user => opcode_c,
|
||||
service_info_user => service_info_c,
|
||||
sequence_id_user => sequence_id_c,
|
||||
taken_user => taken_c,
|
||||
data_available_user => data_available_c,
|
||||
a => a_c,
|
||||
b => b_c,
|
||||
sum => sum_c,
|
||||
done_user => done_c,
|
||||
return_code_user => return_code_c
|
||||
);
|
||||
|
||||
-- ######GENERATED END######
|
||||
|
||||
end architecture;
|
||||
78
src/ros2/Tests/Level_2/L2_Testbench_ROS_Lib3_config.vhd
Normal file
78
src/ros2/Tests/Level_2/L2_Testbench_ROS_Lib3_config.vhd
Normal file
@ -0,0 +1,78 @@
|
||||
-- altera vhdl_input_version vhdl_2008
|
||||
-- XXX: QSYS Fix (https://www.intel.com/content/www/us/en/support/programmable/articles/000079458.html)
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
use work.rtps_package.all;
|
||||
use work.ros_package.all;
|
||||
use work.AddTwoInts_package.all;
|
||||
|
||||
package ros_config is
|
||||
|
||||
-- IPv4 Address of ROS System [Default 192.168.0.130]
|
||||
constant ROS_ADDRESS : std_logic_vector(IPv4_ADDRESS_WIDTH-1 downto 0) := x"C0A80082";
|
||||
-- Random Key used to generate GUIDs
|
||||
constant ROS_RAND_KEY : std_logic_vector(47 downto 0) := x"6E6592234DB4";
|
||||
|
||||
constant NUM_NODES : natural := 1;
|
||||
|
||||
constant ROS_NODES : ROS_NODE_ARRAY_TYPE(0 to NUM_NODES-1) := (
|
||||
0 => (
|
||||
name => gen_user_string("add_two_ints_client"),
|
||||
namespace => gen_user_string(""),
|
||||
domain_id => 0,
|
||||
NUM_PUBS => 0,
|
||||
NUM_SUBS => 0,
|
||||
NUM_SERVICES => 1,
|
||||
NUM_ACTIONS => 0
|
||||
)
|
||||
);
|
||||
|
||||
constant NUM_PUBS : natural := get_num_pubs(ROS_NODES);
|
||||
constant NUM_SUBS : natural := get_num_subs(ROS_NODES);
|
||||
constant NUM_SERVICES : natural := get_num_services(ROS_NODES);
|
||||
constant NUM_ACTIONS : natural := get_num_actions(ROS_NODES);
|
||||
|
||||
constant ROS_PUBLICATIONS : ROS_TOPIC_ARRAY_TYPE(0 to NUM_PUBS-1) := (
|
||||
others => (
|
||||
node_id => 0,
|
||||
TOPICNAME => gen_user_string(""),
|
||||
TYPENAME => gen_user_string(""),
|
||||
QOS => ROS_QOS_PROFILE_DEFAULT,
|
||||
MAX_SIZE => 0
|
||||
)
|
||||
);
|
||||
|
||||
constant ROS_SUBSCRIPTIONS : ROS_TOPIC_ARRAY_TYPE(0 to NUM_SUBS-1) := (
|
||||
others => (
|
||||
node_id => 0,
|
||||
TOPICNAME => gen_user_string(""),
|
||||
TYPENAME => gen_user_string(""),
|
||||
QOS => ROS_QOS_PROFILE_DEFAULT,
|
||||
MAX_SIZE => 0
|
||||
)
|
||||
);
|
||||
|
||||
constant ROS_SERVICES : ROS_SERVICE_ARRAY_TYPE(0 to NUM_SERVICES-1) := (
|
||||
0 => (
|
||||
node_id => 0,
|
||||
SERVICENAME => gen_user_string("add_two_ints"),
|
||||
TYPENAME => gen_user_string("example_interfaces::srv::dds_::AddTwoInts_Request_"),
|
||||
QOS => ROS_QOS_PROFILE_TRANSIENT,
|
||||
MAX_RQ_SIZE => MAX_ADDTWOINTS_RQ_SIZE,
|
||||
MAX_RR_SIZE => MAX_ADDTWOINTS_RR_SIZE,
|
||||
is_client => TRUE
|
||||
)
|
||||
);
|
||||
|
||||
constant ROS_ACTIONS : ROS_ACTION_ARRAY_TYPE(0 to NUM_ACTIONS-1) := (
|
||||
others => (
|
||||
node_id => 0
|
||||
)
|
||||
);
|
||||
|
||||
-- Defines sensible RTPS timings for simulation
|
||||
constant SIMULATION_TIMING : boolean := TRUE;
|
||||
end package;
|
||||
@ -1,7 +1,81 @@
|
||||
# Compile OSVVM Library
|
||||
include ../OSVVM/osvvm.pro
|
||||
include ../../OSVVM/osvvm.pro
|
||||
|
||||
library Testbench_ROS_Lib2
|
||||
analyze ../../math_pkg.vhd
|
||||
analyze ../../rtps_package.vhd
|
||||
analyze ../ros_package.vhd
|
||||
analyze ../example_interfaces/AddTwoInts_package.vhd
|
||||
analyze Level_2/L2_Testbench_ROS_Lib2_config.vhd
|
||||
analyze ../dds_user_config.vhd
|
||||
analyze ../../rtps_config_package.vhd
|
||||
analyze ../../rtps_test_package.vhd
|
||||
analyze ../ros_config_package.vhd
|
||||
analyze ../../single_port_ram.vhd
|
||||
analyze ../../single_port_ram_Altera.vhd
|
||||
analyze ../../single_port_ram_cfg.vhd
|
||||
analyze ../../dual_port_ram.vhd
|
||||
analyze ../../dual_port_ram_Altera.vhd
|
||||
analyze ../../dual_port_ram_cfg.vhd
|
||||
analyze ../../FWFT_FIFO.vhd
|
||||
analyze ../../FWFT_FIFO_Altera.vhd
|
||||
analyze ../../FWFT_FIFO_cfg.vhd
|
||||
analyze ../../mem_ctrl.vhd
|
||||
analyze ../../dp_mem_ctrl.vhd
|
||||
analyze ../../rtps_handler.vhd
|
||||
analyze ../../rtps_discovery_module.vhd
|
||||
analyze ../../rtps_out.vhd
|
||||
analyze ../../rtps_reader.vhd
|
||||
analyze ../../rtps_writer.vhd
|
||||
analyze ../../dds_writer.vhd
|
||||
analyze ../../dds_reader.vhd
|
||||
analyze ../../key_holder.vhd
|
||||
analyze ../../key_hash_generator.vhd
|
||||
analyze ../../Tests/test_key_holder.vhd
|
||||
analyze ../../Tests/test_key_hash_generator.vhd
|
||||
analyze ../ros_static_discovery_writer.vhd
|
||||
analyze ../example_interfaces/AddTwoInts_srv_client.vhd
|
||||
analyze ../example_interfaces/AddTwoInts_srv_server.vhd
|
||||
analyze AddTwoInts.vhd
|
||||
analyze Level_2/L2_Testbench_ROS_Lib2.vhd
|
||||
|
||||
library Testbench_ROS_Lib3
|
||||
analyze ../../math_pkg.vhd
|
||||
analyze ../../rtps_package.vhd
|
||||
analyze ../ros_package.vhd
|
||||
analyze ../example_interfaces/AddTwoInts_package.vhd
|
||||
analyze Level_2/L2_Testbench_ROS_Lib3_config.vhd
|
||||
analyze ../dds_user_config.vhd
|
||||
analyze ../../rtps_config_package.vhd
|
||||
analyze ../../rtps_test_package.vhd
|
||||
analyze ../ros_config_package.vhd
|
||||
analyze ../../single_port_ram.vhd
|
||||
analyze ../../single_port_ram_Altera.vhd
|
||||
analyze ../../single_port_ram_cfg.vhd
|
||||
analyze ../../dual_port_ram.vhd
|
||||
analyze ../../dual_port_ram_Altera.vhd
|
||||
analyze ../../dual_port_ram_cfg.vhd
|
||||
analyze ../../FWFT_FIFO.vhd
|
||||
analyze ../../FWFT_FIFO_Altera.vhd
|
||||
analyze ../../FWFT_FIFO_cfg.vhd
|
||||
analyze ../../mem_ctrl.vhd
|
||||
analyze ../../dp_mem_ctrl.vhd
|
||||
analyze ../../rtps_handler.vhd
|
||||
analyze ../../rtps_discovery_module.vhd
|
||||
analyze ../../rtps_out.vhd
|
||||
analyze ../../rtps_reader.vhd
|
||||
analyze ../../rtps_writer.vhd
|
||||
analyze ../../dds_writer.vhd
|
||||
analyze ../../dds_reader.vhd
|
||||
analyze ../../key_holder.vhd
|
||||
analyze ../../key_hash_generator.vhd
|
||||
analyze ../../Tests/test_key_holder.vhd
|
||||
analyze ../../Tests/test_key_hash_generator.vhd
|
||||
analyze ../ros_static_discovery_writer.vhd
|
||||
analyze ../example_interfaces/AddTwoInts_srv_client.vhd
|
||||
analyze ../example_interfaces/AddTwoInts_srv_server.vhd
|
||||
analyze Level_2/L2_Testbench_ROS_Lib3.vhd
|
||||
|
||||
# Compile
|
||||
library Testbench_ROS_Lib1
|
||||
analyze ../../math_pkg.vhd
|
||||
analyze ../../rtps_package.vhd
|
||||
@ -13,7 +87,8 @@ analyze ../example_interfaces/AddTwoInts_srv_client.vhd
|
||||
analyze ../example_interfaces/AddTwoInts_srv_server.vhd
|
||||
analyze Level_1/L1_AddTwoInts_srv_test1.vhd
|
||||
analyze Level_1/L1_AddTwoInts_srv_test2.vhd
|
||||
analyze Level_2/L2_AddTwoInts_test1.vhd
|
||||
|
||||
# Simulate
|
||||
simulate L1_AddTwoInts_srv_test1
|
||||
simulate L1_AddTwoInts_srv_test2
|
||||
#simulate L1_AddTwoInts_srv_test1
|
||||
#simulate L1_AddTwoInts_srv_test2
|
||||
simulate L2_AddTwoInts_test1
|
||||
|
||||
19
src/ros2/example_interfaces/AddTwoInts_package.vhd
Normal file
19
src/ros2/example_interfaces/AddTwoInts_package.vhd
Normal file
@ -0,0 +1,19 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
use work.math_pkg.all;
|
||||
use work.ros_package.all;
|
||||
|
||||
package AddTwoInts_package is
|
||||
|
||||
-- REQUEST
|
||||
constant MAX_RQ_A_SIZE : natural := 8;
|
||||
constant MAX_RQ_B_SIZE : natural := 8; -- 16
|
||||
constant MAX_ADDTWOINTS_RQ_SIZE : natural := 16 + SERVICE_OVERHEAD_BYTES;
|
||||
|
||||
-- RESPONSE
|
||||
constant MAX_RR_SUM_SIZE : natural := 8;
|
||||
constant MAX_ADDTWOINTS_RR_SIZE : natural := 8 + SERVICE_OVERHEAD_BYTES;
|
||||
|
||||
end package;
|
||||
Loading…
Reference in New Issue
Block a user