diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/qsys_lofar2_unb2b_sdp_station.qsys b/applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/qsys_lofar2_unb2b_sdp_station.qsys index dc294ad5df439e9258503f0955bda54f6310c130..d6f321e7ef38e0d597aceea0693177e2c39b7e8e 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/qsys_lofar2_unb2b_sdp_station.qsys +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/qsys_lofar2_unb2b_sdp_station.qsys @@ -99,7 +99,7 @@ { datum baseAddress { - value = "737752"; + value = "737760"; type = "String"; } } @@ -144,7 +144,7 @@ { datum baseAddress { - value = "737672"; + value = "737688"; type = "String"; } } @@ -157,7 +157,7 @@ } datum sopceditor_expanded { - value = "0"; + value = "1"; type = "boolean"; } } @@ -165,7 +165,7 @@ { datum baseAddress { - value = "737744"; + value = "737648"; type = "String"; } } @@ -426,7 +426,7 @@ { datum baseAddress { - value = "737696"; + value = "737712"; type = "String"; } } @@ -442,7 +442,7 @@ { datum baseAddress { - value = "737648"; + value = "737664"; type = "String"; } } @@ -506,7 +506,7 @@ { datum baseAddress { - value = "737688"; + value = "737704"; type = "String"; } } @@ -538,7 +538,7 @@ { datum baseAddress { - value = "737656"; + value = "737672"; type = "String"; } } @@ -575,7 +575,7 @@ { datum baseAddress { - value = "737736"; + value = "737752"; type = "String"; } } @@ -596,7 +596,7 @@ { datum baseAddress { - value = "737728"; + value = "737744"; type = "String"; } } @@ -691,7 +691,7 @@ { datum baseAddress { - value = "737720"; + value = "737736"; type = "String"; } } @@ -712,7 +712,7 @@ { datum baseAddress { - value = "737712"; + value = "737728"; type = "String"; } } @@ -728,7 +728,7 @@ { datum baseAddress { - value = "737680"; + value = "737696"; type = "String"; } } @@ -797,7 +797,7 @@ { datum baseAddress { - value = "737704"; + value = "737720"; type = "String"; } } @@ -829,7 +829,7 @@ { datum baseAddress { - value = "737664"; + value = "737680"; type = "String"; } } @@ -1291,11 +1291,6 @@ internal="pio_wdi.external_connection" type="conduit" dir="end" /> - <interface - name="reg_stat_hdr_dat_xst_readdata" - internal="reg_stat_hdr_dat_xst.readdata" - type="conduit" - dir="end" /> <interface name="ram_bf_weights_address" internal="ram_bf_weights.address" @@ -2671,6 +2666,11 @@ internal="reg_stat_hdr_dat_xst.read" type="conduit" dir="end" /> + <interface + name="reg_stat_hdr_dat_xst_readdata" + internal="reg_stat_hdr_dat_xst.readdata" + type="conduit" + dir="end" /> <interface name="reg_stat_hdr_dat_xst_reset" internal="reg_stat_hdr_dat_xst.reset" @@ -5805,7 +5805,7 @@ <consumedSystemInfos> <entry> <key>ADDRESS_MAP</key> - <value><address-map><slave name='pio_system_info.mem' start='0x0' end='0x80' datawidth='32' /><slave name='reg_diag_data_buffer_bsn.mem' start='0x80' end='0x100' datawidth='32' /><slave name='reg_stat_hdr_dat_xst.mem' start='0x100' end='0x200' datawidth='32' /><slave name='reg_stat_hdr_dat_bst.mem' start='0x200' end='0x400' datawidth='32' /><slave name='reg_bsn_monitor_input.mem' start='0x400' end='0x800' datawidth='32' /><slave name='ram_scrap.mem' start='0x800' end='0x1000' datawidth='32' /><slave name='avs_eth_0.mms_tse' start='0x1000' end='0x2000' datawidth='32' /><slave name='avs_eth_0.mms_ram' start='0x2000' end='0x3000' datawidth='32' /><slave name='reg_wdi.mem' start='0x3000' end='0x3008' datawidth='32' /><slave name='reg_stat_enable_xst.mem' start='0x3008' end='0x3010' datawidth='32' /><slave name='pio_wdi.s1' start='0x3010' end='0x3020' datawidth='32' /><slave name='timer_0.s1' start='0x3020' end='0x3040' datawidth='16' /><slave name='avs_eth_0.mms_reg' start='0x3040' end='0x3080' datawidth='32' /><slave name='reg_dp_shiftram.mem' start='0x3080' end='0x3100' datawidth='32' /><slave name='reg_stat_hdr_dat_sst.mem' start='0x3100' end='0x3200' datawidth='32' /><slave name='reg_hdr_dat.mem' start='0x3200' end='0x3400' datawidth='32' /><slave name='reg_wg.mem' start='0x3400' end='0x3500' datawidth='32' /><slave name='reg_aduh_monitor.mem' start='0x3500' end='0x3600' datawidth='32' /><slave name='reg_unb_pmbus.mem' start='0x3600' end='0x3700' datawidth='32' /><slave name='reg_unb_sens.mem' start='0x3700' end='0x3800' datawidth='32' /><slave name='cpu_0.debug_mem_slave' start='0x3800' end='0x4000' datawidth='32' /><slave name='ram_st_bst.mem' start='0x4000' end='0x8000' datawidth='32' /><slave name='reg_nw_10gbe_mac.mem' start='0x8000' end='0x10000' datawidth='32' /><slave name='rom_system_info.mem' start='0x10000' end='0x18000' datawidth='32' /><slave name='ram_equalizer_gains.mem' start='0x18000' end='0x20000' datawidth='32' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' datawidth='32' /><slave name='ram_bf_weights.mem' start='0x40000' end='0x60000' datawidth='32' /><slave name='ram_st_xsq.mem' start='0x60000' end='0x70000' datawidth='32' /><slave name='ram_ss_ss_wide.mem' start='0x70000' end='0x80000' datawidth='32' /><slave name='ram_wg.mem' start='0x80000' end='0x90000' datawidth='32' /><slave name='ram_fil_coefs.mem' start='0x90000' end='0xA0000' datawidth='32' /><slave name='ram_st_sst.mem' start='0xA0000' end='0xB0000' datawidth='32' /><slave name='jesd204b.mem' start='0xB0000' end='0xB4000' datawidth='32' /><slave name='reg_crosslets_info.mem' start='0xB4000' end='0xB4040' datawidth='32' /><slave name='reg_sdp_info.mem' start='0xB4040' end='0xB4080' datawidth='32' /><slave name='reg_fpga_voltage_sens.mem' start='0xB4080' end='0xB40C0' datawidth='32' /><slave name='reg_bsn_source_v2.mem' start='0xB40C0' end='0xB40E0' datawidth='32' /><slave name='reg_fpga_temp_sens.mem' start='0xB40E0' end='0xB4100' datawidth='32' /><slave name='reg_epcs.mem' start='0xB4100' end='0xB4120' datawidth='32' /><slave name='reg_remu.mem' start='0xB4120' end='0xB4140' datawidth='32' /><slave name='reg_stat_enable_bst.mem' start='0xB4140' end='0xB4150' datawidth='32' /><slave name='reg_dp_xonoff.mem' start='0xB4150' end='0xB4160' datawidth='32' /><slave name='reg_bf_scale.mem' start='0xB4160' end='0xB4170' datawidth='32' /><slave name='reg_bsn_scheduler_xsub.mem' start='0xB4170' end='0xB4178' datawidth='32' /><slave name='reg_dp_sync_insert_v2.mem' start='0xB4178' end='0xB4180' datawidth='32' /><slave name='reg_stat_enable_sst.mem' start='0xB4180' end='0xB4188' datawidth='32' /><slave name='pio_jesd_ctrl.mem' start='0xB4188' end='0xB4190' datawidth='32' /><slave name='reg_nw_10gbe_eth10g.mem' start='0xB4190' end='0xB4198' datawidth='32' /><slave name='reg_dp_selector.mem' start='0xB4198' end='0xB41A0' datawidth='32' /><slave name='reg_bsn_scheduler.mem' start='0xB41A0' end='0xB41A8' datawidth='32' /><slave name='reg_si.mem' start='0xB41A8' end='0xB41B0' datawidth='32' /><slave name='reg_mmdp_data.mem' start='0xB41B0' end='0xB41B8' datawidth='32' /><slave name='reg_mmdp_ctrl.mem' start='0xB41B8' end='0xB41C0' datawidth='32' /><slave name='reg_dpmm_data.mem' start='0xB41C0' end='0xB41C8' datawidth='32' /><slave name='reg_dpmm_ctrl.mem' start='0xB41C8' end='0xB41D0' datawidth='32' /><slave name='pio_pps.mem' start='0xB41D0' end='0xB41D8' datawidth='32' /><slave name='jtag_uart_0.avalon_jtag_slave' start='0xB41D8' end='0xB41E0' datawidth='32' /><slave name='ram_diag_data_buffer_bsn.mem' start='0x800000' end='0x1000000' datawidth='32' /></address-map></value> + <value><address-map><slave name='pio_system_info.mem' start='0x0' end='0x80' datawidth='32' /><slave name='reg_diag_data_buffer_bsn.mem' start='0x80' end='0x100' datawidth='32' /><slave name='reg_stat_hdr_dat_xst.mem' start='0x100' end='0x200' datawidth='32' /><slave name='reg_stat_hdr_dat_bst.mem' start='0x200' end='0x400' datawidth='32' /><slave name='reg_bsn_monitor_input.mem' start='0x400' end='0x800' datawidth='32' /><slave name='ram_scrap.mem' start='0x800' end='0x1000' datawidth='32' /><slave name='avs_eth_0.mms_tse' start='0x1000' end='0x2000' datawidth='32' /><slave name='avs_eth_0.mms_ram' start='0x2000' end='0x3000' datawidth='32' /><slave name='reg_wdi.mem' start='0x3000' end='0x3008' datawidth='32' /><slave name='reg_stat_enable_xst.mem' start='0x3008' end='0x3010' datawidth='32' /><slave name='pio_wdi.s1' start='0x3010' end='0x3020' datawidth='32' /><slave name='timer_0.s1' start='0x3020' end='0x3040' datawidth='16' /><slave name='avs_eth_0.mms_reg' start='0x3040' end='0x3080' datawidth='32' /><slave name='reg_dp_shiftram.mem' start='0x3080' end='0x3100' datawidth='32' /><slave name='reg_stat_hdr_dat_sst.mem' start='0x3100' end='0x3200' datawidth='32' /><slave name='reg_hdr_dat.mem' start='0x3200' end='0x3400' datawidth='32' /><slave name='reg_wg.mem' start='0x3400' end='0x3500' datawidth='32' /><slave name='reg_aduh_monitor.mem' start='0x3500' end='0x3600' datawidth='32' /><slave name='reg_unb_pmbus.mem' start='0x3600' end='0x3700' datawidth='32' /><slave name='reg_unb_sens.mem' start='0x3700' end='0x3800' datawidth='32' /><slave name='cpu_0.debug_mem_slave' start='0x3800' end='0x4000' datawidth='32' /><slave name='ram_st_bst.mem' start='0x4000' end='0x8000' datawidth='32' /><slave name='reg_nw_10gbe_mac.mem' start='0x8000' end='0x10000' datawidth='32' /><slave name='rom_system_info.mem' start='0x10000' end='0x18000' datawidth='32' /><slave name='ram_equalizer_gains.mem' start='0x18000' end='0x20000' datawidth='32' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' datawidth='32' /><slave name='ram_bf_weights.mem' start='0x40000' end='0x60000' datawidth='32' /><slave name='ram_st_xsq.mem' start='0x60000' end='0x70000' datawidth='32' /><slave name='ram_ss_ss_wide.mem' start='0x70000' end='0x80000' datawidth='32' /><slave name='ram_wg.mem' start='0x80000' end='0x90000' datawidth='32' /><slave name='ram_fil_coefs.mem' start='0x90000' end='0xA0000' datawidth='32' /><slave name='ram_st_sst.mem' start='0xA0000' end='0xB0000' datawidth='32' /><slave name='jesd204b.mem' start='0xB0000' end='0xB4000' datawidth='32' /><slave name='reg_crosslets_info.mem' start='0xB4000' end='0xB4040' datawidth='32' /><slave name='reg_sdp_info.mem' start='0xB4040' end='0xB4080' datawidth='32' /><slave name='reg_fpga_voltage_sens.mem' start='0xB4080' end='0xB40C0' datawidth='32' /><slave name='reg_bsn_source_v2.mem' start='0xB40C0' end='0xB40E0' datawidth='32' /><slave name='reg_fpga_temp_sens.mem' start='0xB40E0' end='0xB4100' datawidth='32' /><slave name='reg_epcs.mem' start='0xB4100' end='0xB4120' datawidth='32' /><slave name='reg_remu.mem' start='0xB4120' end='0xB4140' datawidth='32' /><slave name='reg_stat_enable_bst.mem' start='0xB4140' end='0xB4150' datawidth='32' /><slave name='reg_dp_xonoff.mem' start='0xB4150' end='0xB4160' datawidth='32' /><slave name='reg_bf_scale.mem' start='0xB4160' end='0xB4170' datawidth='32' /><slave name='pio_pps.mem' start='0xB4170' end='0xB4180' datawidth='32' /><slave name='reg_bsn_scheduler_xsub.mem' start='0xB4180' end='0xB4188' datawidth='32' /><slave name='reg_dp_sync_insert_v2.mem' start='0xB4188' end='0xB4190' datawidth='32' /><slave name='reg_stat_enable_sst.mem' start='0xB4190' end='0xB4198' datawidth='32' /><slave name='pio_jesd_ctrl.mem' start='0xB4198' end='0xB41A0' datawidth='32' /><slave name='reg_nw_10gbe_eth10g.mem' start='0xB41A0' end='0xB41A8' datawidth='32' /><slave name='reg_dp_selector.mem' start='0xB41A8' end='0xB41B0' datawidth='32' /><slave name='reg_bsn_scheduler.mem' start='0xB41B0' end='0xB41B8' datawidth='32' /><slave name='reg_si.mem' start='0xB41B8' end='0xB41C0' datawidth='32' /><slave name='reg_mmdp_data.mem' start='0xB41C0' end='0xB41C8' datawidth='32' /><slave name='reg_mmdp_ctrl.mem' start='0xB41C8' end='0xB41D0' datawidth='32' /><slave name='reg_dpmm_data.mem' start='0xB41D0' end='0xB41D8' datawidth='32' /><slave name='reg_dpmm_ctrl.mem' start='0xB41D8' end='0xB41E0' datawidth='32' /><slave name='jtag_uart_0.avalon_jtag_slave' start='0xB41E0' end='0xB41E8' datawidth='32' /><slave name='ram_diag_data_buffer_bsn.mem' start='0x800000' end='0x1000000' datawidth='32' /></address-map></value> </entry> <entry> <key>ADDRESS_WIDTH</key> @@ -8448,7 +8448,7 @@ <name>coe_address_export</name> <role>export</role> <direction>Output</direction> - <width>1</width> + <width>2</width> <lowerBound>0</lowerBound> <vhdlType>STD_LOGIC_VECTOR</vhdlType> </port> @@ -8512,7 +8512,7 @@ <name>avs_mem_address</name> <role>address</role> <direction>Input</direction> - <width>1</width> + <width>2</width> <lowerBound>0</lowerBound> <vhdlType>STD_LOGIC_VECTOR</vhdlType> </port> @@ -8581,7 +8581,7 @@ </entry> <entry> <key>addressSpan</key> - <value>8</value> + <value>16</value> </entry> <entry> <key>addressUnits</key> @@ -8987,11 +8987,11 @@ <suppliedSystemInfos> <entry> <key>ADDRESS_MAP</key> - <value><address-map><slave name='mem' start='0x0' end='0x8' datawidth='32' /></address-map></value> + <value><address-map><slave name='mem' start='0x0' end='0x10' datawidth='32' /></address-map></value> </entry> <entry> <key>ADDRESS_WIDTH</key> - <value>3</value> + <value>4</value> </entry> <entry> <key>MAX_SLAVE_DATA_WIDTH</key> @@ -39356,7 +39356,7 @@ version="18.0" start="cpu_0.data_master" end="jtag_uart_0.avalon_jtag_slave"> - <parameter name="baseAddress" value="0x000b41d8" /> + <parameter name="baseAddress" value="0x000b41e0" /> </connection> <connection kind="avalon" @@ -39391,7 +39391,7 @@ version="18.0" start="cpu_0.data_master" end="pio_pps.mem"> - <parameter name="baseAddress" value="0x000b41d0" /> + <parameter name="baseAddress" value="0x000b4170" /> </connection> <connection kind="avalon" @@ -39419,28 +39419,28 @@ version="18.0" start="cpu_0.data_master" end="reg_dpmm_ctrl.mem"> - <parameter name="baseAddress" value="0x000b41c8" /> + <parameter name="baseAddress" value="0x000b41d8" /> </connection> <connection kind="avalon" version="18.0" start="cpu_0.data_master" end="reg_dpmm_data.mem"> - <parameter name="baseAddress" value="0x000b41c0" /> + <parameter name="baseAddress" value="0x000b41d0" /> </connection> <connection kind="avalon" version="18.0" start="cpu_0.data_master" end="reg_mmdp_ctrl.mem"> - <parameter name="baseAddress" value="0x000b41b8" /> + <parameter name="baseAddress" value="0x000b41c8" /> </connection> <connection kind="avalon" version="18.0" start="cpu_0.data_master" end="reg_mmdp_data.mem"> - <parameter name="baseAddress" value="0x000b41b0" /> + <parameter name="baseAddress" value="0x000b41c0" /> </connection> <connection kind="avalon" @@ -39475,7 +39475,7 @@ version="18.0" start="cpu_0.data_master" end="reg_si.mem"> - <parameter name="baseAddress" value="0x000b41a8" /> + <parameter name="baseAddress" value="0x000b41b8" /> </connection> <connection kind="avalon" @@ -39517,7 +39517,7 @@ version="18.0" start="cpu_0.data_master" end="reg_bsn_scheduler.mem"> - <parameter name="baseAddress" value="0x000b41a0" /> + <parameter name="baseAddress" value="0x000b41b0" /> </connection> <connection kind="avalon" @@ -39552,7 +39552,7 @@ version="18.0" start="cpu_0.data_master" end="reg_dp_selector.mem"> - <parameter name="baseAddress" value="0x000b4198" /> + <parameter name="baseAddress" value="0x000b41a8" /> </connection> <connection kind="avalon" @@ -39615,7 +39615,7 @@ version="18.0" start="cpu_0.data_master" end="reg_nw_10gbe_eth10g.mem"> - <parameter name="baseAddress" value="0x000b4190" /> + <parameter name="baseAddress" value="0x000b41a0" /> </connection> <connection kind="avalon" @@ -39643,14 +39643,14 @@ version="18.0" start="cpu_0.data_master" end="pio_jesd_ctrl.mem"> - <parameter name="baseAddress" value="0x000b4188" /> + <parameter name="baseAddress" value="0x000b4198" /> </connection> <connection kind="avalon" version="18.0" start="cpu_0.data_master" end="reg_stat_enable_sst.mem"> - <parameter name="baseAddress" value="0x000b4180" /> + <parameter name="baseAddress" value="0x000b4190" /> </connection> <connection kind="avalon" @@ -39678,7 +39678,7 @@ version="18.0" start="cpu_0.data_master" end="reg_dp_sync_insert_v2.mem"> - <parameter name="baseAddress" value="0x000b4178" /> + <parameter name="baseAddress" value="0x000b4188" /> </connection> <connection kind="avalon" @@ -39692,7 +39692,7 @@ version="18.0" start="cpu_0.data_master" end="reg_bsn_scheduler_xsub.mem"> - <parameter name="baseAddress" value="0x000b4170" /> + <parameter name="baseAddress" value="0x000b4180" /> </connection> <connection kind="avalon" diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd index 01eded088e51e68dc9d9440f268f0ca389260c00..e0ec6e62de04ecc0ccf238b673762acbd6f07454 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd @@ -479,9 +479,7 @@ BEGIN pio_pps_reset_export => OPEN, pio_pps_clk_export => OPEN, --- ToDo: This has changed in the peripherals package - pio_pps_address_export => reg_ppsh_mosi.address(0 DOWNTO 0), --- pio_pps_address_export => reg_ppsh_mosi.address(c_unb2b_board_peripherals_mm_reg_default.reg_ppsh_adr_w-1 DOWNTO 0), + pio_pps_address_export => reg_ppsh_mosi.address(c_unb2b_board_peripherals_mm_reg_default.reg_ppsh_adr_w-1 DOWNTO 0), pio_pps_write_export => reg_ppsh_mosi.wr, pio_pps_writedata_export => reg_ppsh_mosi.wrdata(c_word_w-1 DOWNTO 0), pio_pps_read_export => reg_ppsh_mosi.rd, diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd index 461075358e25bed8e93cef89b6783e17d3a64ca5..181b0649ce2ec4ba52ea38891fdbb873192a6a20 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd @@ -62,7 +62,7 @@ PACKAGE qsys_lofar2_unb2b_sdp_station_pkg IS pio_jesd_ctrl_reset_export : out std_logic; -- export pio_jesd_ctrl_write_export : out std_logic; -- export pio_jesd_ctrl_writedata_export : out std_logic_vector(31 downto 0); -- export - pio_pps_address_export : out std_logic_vector(0 downto 0); -- export + pio_pps_address_export : out std_logic_vector(1 downto 0); -- export pio_pps_clk_export : out std_logic; -- export pio_pps_read_export : out std_logic; -- export pio_pps_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export diff --git a/boards/uniboard2b/libraries/unb2b_board/src/vhdl/unb2b_board_peripherals_pkg.vhd b/boards/uniboard2b/libraries/unb2b_board/src/vhdl/unb2b_board_peripherals_pkg.vhd index 47d0e1390b2e2ce81898ee294cf60bf51078c686..ad0a102909558615f140a4146699c84693ef9bff 100644 --- a/boards/uniboard2b/libraries/unb2b_board/src/vhdl/unb2b_board_peripherals_pkg.vhd +++ b/boards/uniboard2b/libraries/unb2b_board/src/vhdl/unb2b_board_peripherals_pkg.vhd @@ -61,7 +61,7 @@ PACKAGE unb2b_board_peripherals_pkg IS reg_common_adr_w : NATURAL; -- = 1 -- fixed, from c_mem_reg in mms_common_reg -- pi_ppsh - reg_ppsh_adr_w : NATURAL; -- = 1 -- fixed, from c_mm_reg in ppsh_reg + reg_ppsh_adr_w : NATURAL; -- = 2 -- fixed, from c_mm_reg in ppsh_reg -- pi_unb_sens reg_unb_sens_adr_w : NATURAL; -- = 6 -- fixed, from c_mm_reg in unb_sens_reg diff --git a/boards/uniboard2c/libraries/unb2c_board/src/vhdl/unb2c_board_peripherals_pkg.vhd b/boards/uniboard2c/libraries/unb2c_board/src/vhdl/unb2c_board_peripherals_pkg.vhd index e64925db8956a2f0296f91f6b30f4787eb9938e8..f24eba33ead6e1d13f4a6fc6541fb52296e80094 100644 --- a/boards/uniboard2c/libraries/unb2c_board/src/vhdl/unb2c_board_peripherals_pkg.vhd +++ b/boards/uniboard2c/libraries/unb2c_board/src/vhdl/unb2c_board_peripherals_pkg.vhd @@ -61,7 +61,7 @@ PACKAGE unb2c_board_peripherals_pkg IS reg_common_adr_w : NATURAL; -- = 1 -- fixed, from c_mem_reg in mms_common_reg -- pi_ppsh - reg_ppsh_adr_w : NATURAL; -- = 1 -- fixed, from c_mm_reg in ppsh_reg + reg_ppsh_adr_w : NATURAL; -- = 2 -- fixed, from c_mm_reg in ppsh_reg -- pi_unb_sens reg_unb_sens_adr_w : NATURAL; -- = 6 -- fixed, from c_mm_reg in unb_sens_reg diff --git a/libraries/io/ppsh/tb/vhdl/tb_mms_ppsh.vhd b/libraries/io/ppsh/tb/vhdl/tb_mms_ppsh.vhd index 39e21de98a90bb33568d11fbeed94e304dc52444..d308e06249db71b1111e2183d43cbd900c416d37 100644 --- a/libraries/io/ppsh/tb/vhdl/tb_mms_ppsh.vhd +++ b/libraries/io/ppsh/tb/vhdl/tb_mms_ppsh.vhd @@ -32,13 +32,18 @@ END tb_mms_ppsh; ARCHITECTURE tb OF tb_mms_ppsh IS - CONSTANT c_clk_freq : NATURAL := 1000; -- clock frequency in Hz - CONSTANT c_clk_period : TIME := 1000000 us / c_clk_freq; - CONSTANT c_pps_period : NATURAL := c_clk_freq; -- 1 s takes c_clk_freq clk cycles + CONSTANT c_st_clk_freq : NATURAL := 1000; -- clock frequency in Hz + CONSTANT c_st_clk_period : TIME := 1000000 us / c_st_clk_freq; + CONSTANT c_mm_clk_period : TIME := c_st_clk_period * 3; -- somewhat slower mm_clk + CONSTANT c_pps_period : NATURAL := c_st_clk_freq; -- 1 s takes c_clk_freq clk cycles + + CONSTANT c_cnt_w : NATURAL := ceil_log2(c_st_clk_freq); SIGNAL tb_end : STD_LOGIC := '0'; - SIGNAL rst : STD_LOGIC := '1'; - SIGNAL clk : STD_LOGIC := '1'; + SIGNAL mm_rst : STD_LOGIC := '1'; + SIGNAL mm_clk : STD_LOGIC := '1'; + SIGNAL st_rst : STD_LOGIC := '1'; + SIGNAL st_clk : STD_LOGIC := '1'; -- DUT SIGNAL pps_ext : STD_LOGIC; @@ -48,7 +53,7 @@ ARCHITECTURE tb OF tb_mms_ppsh IS SIGNAL reg_miso : t_mem_miso; -- Verify - SIGNAL bsn : NATURAL; + SIGNAL bsn : NATURAL; -- block sequence number counts seconds SIGNAL pps_toggle : STD_LOGIC; SIGNAL pps_stable : STD_LOGIC; SIGNAL capture_cnt : NATURAL; @@ -65,8 +70,10 @@ BEGIN ----------------------------------------------------------------------------- -- Stimuli ----------------------------------------------------------------------------- - rst <= '1', '0' AFTER 7*c_clk_period; - clk <= NOT clk OR tb_end AFTER c_clk_period/2; + st_rst <= '1', '0' AFTER 7*c_st_clk_period; + st_clk <= NOT st_clk OR tb_end AFTER c_st_clk_period/2; + mm_rst <= '1', '0' AFTER 7*c_mm_clk_period; + mm_clk <= NOT mm_clk OR tb_end AFTER c_mm_clk_period/2; p_pps_ext : PROCESS VARIABLE v_pps_period : NATURAL := c_pps_period; @@ -81,10 +88,10 @@ BEGIN ELSIF bsn = 69 THEN v_pps_period := c_pps_period+1; END IF; - proc_common_wait_some_cycles(clk, v_pps_period-1); + proc_common_wait_some_cycles(st_clk, v_pps_period-1); pps_ext <= '1'; bsn <= bsn + 1; - proc_common_wait_some_cycles(clk, 1); + proc_common_wait_some_cycles(st_clk, 1); pps_ext <= '0'; END LOOP; @@ -94,88 +101,89 @@ BEGIN p_mm_stimuli : PROCESS VARIABLE v_word : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); BEGIN - proc_common_wait_until_low(clk, rst); -- Wait until reset has finished - proc_common_wait_some_cycles(clk, 10); -- Wait an additional amount of cycles + proc_common_wait_until_low(st_clk, st_rst); -- Wait until reset has finished + proc_common_wait_until_low(mm_clk, mm_rst); -- Wait until reset has finished + proc_common_wait_some_cycles(mm_clk, 10); -- Wait an additional amount of cycles v_word := '0' & TO_UVEC(c_pps_period, 31); -- capture_edge = '0' = at rising edge -- expected_cnt = c_pps_period = 1000 - proc_mem_mm_bus_wr(1, v_word, clk, reg_mosi); + proc_mem_mm_bus_wr(1, v_word, mm_clk, reg_mosi); -- Simulate reading PPS status every 10 PPS periods - proc_common_wait_some_cycles(clk, 10); + proc_common_wait_some_cycles(st_clk, 10); FOR I IN 0 TO 9 LOOP - proc_common_wait_some_cycles(clk, c_pps_period*10); + proc_common_wait_some_cycles(st_clk, c_pps_period*10); - proc_mem_mm_bus_rd(0, clk, reg_mosi); - proc_common_wait_some_cycles(clk, 1); + proc_mem_mm_bus_rd(0, mm_clk, reg_mosi); + proc_common_wait_some_cycles(mm_clk, 1); pps_toggle <= reg_miso.rddata(31); pps_stable <= reg_miso.rddata(30); - capture_cnt <= TO_UINT(reg_miso.rddata(ceil_log2(c_clk_freq)-1 DOWNTO 0)); + capture_cnt <= TO_UINT(reg_miso.rddata(c_cnt_w-1 DOWNTO 0)); END LOOP; - -- Simulate reading PPS offset counter every 0.1 PPS periods - proc_common_wait_some_cycles(clk, 10); - FOR I IN 0 TO 4 LOOP - proc_common_wait_some_cycles(clk, c_pps_period/10); + -- Simulate reading PPS offset counter every 0.25 PPS periods + proc_common_wait_some_cycles(st_clk, 10); + FOR I IN 0 TO 40 LOOP + proc_common_wait_some_cycles(st_clk, c_pps_period/4); last_offset_cnt <= offset_cnt; - proc_mem_mm_bus_rd(2, clk, reg_mosi); - proc_common_wait_some_cycles(clk, 1); - offset_cnt <= TO_UINT(reg_miso.rddata(ceil_log2(c_clk_freq)-1 DOWNTO 0)); + proc_mem_mm_bus_rd(2, mm_clk, reg_mosi); + proc_common_wait_some_cycles(mm_clk, 1); + offset_cnt <= TO_UINT(reg_miso.rddata(c_cnt_w-1 DOWNTO 0)); END LOOP; - proc_common_wait_some_cycles(clk, 100); + proc_common_wait_some_cycles(st_clk, 100); tb_end <= '1'; WAIT; END PROCESS; p_verify : PROCESS BEGIN - proc_common_wait_until_low(clk, rst); -- Wait until reset has finished - proc_common_wait_some_cycles(clk, 10); -- Wait an additional amount of cycles + proc_common_wait_until_low(st_clk, st_rst); -- Wait until reset has finished + proc_common_wait_some_cycles(st_clk, 10); -- Wait an additional amount of cycles - proc_common_wait_some_cycles(clk, c_pps_period/2); -- Verification offset + proc_common_wait_some_cycles(st_clk, c_pps_period/2); -- Verification offset -- 1 - proc_common_wait_some_cycles(clk, c_pps_period*10); + proc_common_wait_some_cycles(st_clk, c_pps_period*10); ASSERT pps_stable='0' REPORT "1) Wrong pps_stable" SEVERITY ERROR; ASSERT capture_cnt=1000 REPORT "1) Wrong capture_cnt" SEVERITY ERROR; -- 2 - proc_common_wait_some_cycles(clk, c_pps_period*10); + proc_common_wait_some_cycles(st_clk, c_pps_period*10); ASSERT pps_stable='1' REPORT "2) Wrong pps_stable" SEVERITY ERROR; ASSERT capture_cnt=1000 REPORT "2) Wrong capture_cnt" SEVERITY ERROR; -- 3 - proc_common_wait_some_cycles(clk, c_pps_period*10); + proc_common_wait_some_cycles(st_clk, c_pps_period*10); ASSERT pps_stable='0' REPORT "3) Wrong pps_stable" SEVERITY ERROR; ASSERT capture_cnt=999 REPORT "3) Wrong capture_cnt" SEVERITY ERROR; -- 4 - proc_common_wait_some_cycles(clk, c_pps_period*10); + proc_common_wait_some_cycles(st_clk, c_pps_period*10); ASSERT pps_stable='0' REPORT "4) Wrong pps_stable" SEVERITY ERROR; ASSERT capture_cnt=1000 REPORT "4) Wrong capture_cnt" SEVERITY ERROR; -- 5 - proc_common_wait_some_cycles(clk, c_pps_period*10); + proc_common_wait_some_cycles(st_clk, c_pps_period*10); ASSERT pps_stable='1' REPORT "5) Wrong pps_stable" SEVERITY ERROR; ASSERT capture_cnt=1000 REPORT "5) Wrong capture_cnt" SEVERITY ERROR; -- 6 - proc_common_wait_some_cycles(clk, c_pps_period*10); + proc_common_wait_some_cycles(st_clk, c_pps_period*10); ASSERT pps_stable='1' REPORT "6) Wrong pps_stable" SEVERITY ERROR; ASSERT capture_cnt=1000 REPORT "6) Wrong capture_cnt" SEVERITY ERROR; -- 7 - proc_common_wait_some_cycles(clk, c_pps_period*10); + proc_common_wait_some_cycles(st_clk, c_pps_period*10); ASSERT pps_stable='0' REPORT "7) Wrong pps_stable" SEVERITY ERROR; ASSERT capture_cnt=1001 REPORT "7) Wrong capture_cnt" SEVERITY ERROR; -- 8 - proc_common_wait_some_cycles(clk, c_pps_period*10); + proc_common_wait_some_cycles(st_clk, c_pps_period*10); ASSERT pps_stable='0' REPORT "8) Wrong pps_stable" SEVERITY ERROR; ASSERT capture_cnt=1000 REPORT "8) Wrong capture_cnt" SEVERITY ERROR; -- 9 - proc_common_wait_some_cycles(clk, c_pps_period*10); + proc_common_wait_some_cycles(st_clk, c_pps_period*10); ASSERT pps_stable='1' REPORT "9) Wrong pps_stable" SEVERITY ERROR; ASSERT capture_cnt=1000 REPORT "9) Wrong capture_cnt" SEVERITY ERROR; -- 10 - proc_common_wait_some_cycles(clk, c_pps_period/10); + proc_common_wait_some_cycles(st_clk, c_pps_period/10); ASSERT offset_cnt=last_offset_cnt REPORT "10) Wrong offset_cnt" SEVERITY ERROR; -- 11 - proc_common_wait_some_cycles(clk, c_pps_period/10); + proc_common_wait_some_cycles(st_clk, c_pps_period/10); ASSERT offset_cnt=last_offset_cnt REPORT "11) Wrong offset_cnt" SEVERITY ERROR; WAIT; END PROCESS; @@ -187,14 +195,14 @@ BEGIN dut : ENTITY work.mms_ppsh GENERIC MAP ( - g_st_clk_freq => c_clk_freq + g_st_clk_freq => c_st_clk_freq ) PORT MAP ( -- Clocks and reset - mm_rst => rst, - mm_clk => clk, - st_rst => rst, - st_clk => clk, + mm_rst => mm_rst, + mm_clk => mm_clk, + st_rst => st_rst, + st_clk => st_clk, pps_ext => pps_ext, -- Memory-mapped clock domain diff --git a/libraries/io/ppsh/tb/vhdl/tb_ppsh.vhd b/libraries/io/ppsh/tb/vhdl/tb_ppsh.vhd index 4887a8489d1df8bb0245cf12ddb2f6c75c31dbca..2c1e4a9e49f9dc1b8120f4fa3cf1eaa0fddb9cba 100644 --- a/libraries/io/ppsh/tb/vhdl/tb_ppsh.vhd +++ b/libraries/io/ppsh/tb/vhdl/tb_ppsh.vhd @@ -33,6 +33,7 @@ ARCHITECTURE tb OF tb_ppsh IS CONSTANT c_clk_period : TIME := 1000000 us / c_clk_freq; CONSTANT c_pps_default_period : NATURAL := c_clk_freq; -- 1 s takes c_clk_freq clk cycles CONSTANT c_pps_skew : TIME := 7*c_clk_period/10; + CONSTANT c_cnt_w : NATURAL := ceil_log2(c_clk_freq); -- The state name tells what kind of test is being done TYPE t_state_enum IS ( @@ -54,11 +55,15 @@ ARCHITECTURE tb OF tb_ppsh IS SIGNAL pps_ext : STD_LOGIC; SIGNAL pps_sys : STD_LOGIC; SIGNAL pps_toggle : STD_LOGIC; + SIGNAL pps_stable : STD_LOGIC; + SIGNAL pps_stable_ack : STD_LOGIC := '0'; SIGNAL capture_edge : STD_LOGIC; - SIGNAL capture_cnt : STD_LOGIC_VECTOR(ceil_log2(c_clk_freq)-1 DOWNTO 0); - SIGNAL offset_cnt : STD_LOGIC_VECTOR(ceil_log2(c_clk_freq)-1 DOWNTO 0); + SIGNAL capture_cnt : STD_LOGIC_VECTOR(c_cnt_w-1 DOWNTO 0); + SIGNAL offset_cnt : STD_LOGIC_VECTOR(c_cnt_w-1 DOWNTO 0); + SIGNAL expected_cnt : STD_LOGIC_VECTOR(c_cnt_w-1 DOWNTO 0); -- Verify + SIGNAL verify_s : REAL := 0.0; -- provides time line marker for p_verify in Wave Window BEGIN @@ -73,13 +78,44 @@ BEGIN -- Verify that using the falling capture edge indeed does change timing by -- using a c_pps_skew that is > 0.5 c_clk_period and < c_clk_period - capture_edge <= '0', '1' AFTER 5000 ms, '0' AFTER 7000 ms; + p_capture_edge : PROCESS + BEGIN + capture_edge <= '0'; + WAIT FOR 5000 ms; + capture_edge <= '1'; -- will be verified by p_verify + WAIT FOR 2000 ms; + capture_edge <= '0'; + WAIT; + END PROCESS; + + p_verify_pps_stable : PROCESS + BEGIN + pps_stable_ack <= '0'; + WAIT FOR 9000 ms; -- wait until p_capture_edge is done + IF pps_stable /= '0' THEN + REPORT "PPSH : Unexpected pps_stable, should be 0." SEVERITY ERROR; + END IF; + -- ack PPS stable monitor + pps_stable_ack <= '1'; + WAIT FOR 1*c_clk_period; + pps_stable_ack <= '0'; + WAIT FOR 10 ms; + IF pps_stable /= '1' THEN + REPORT "PPSH : Unexpected pps_stable, should be 1." SEVERITY ERROR; + END IF; + WAIT FOR 13000 ms; -- wait until first loop in p_pps_default_period is done + IF pps_stable /= '0' THEN + REPORT "PPSH : Unexpected pps_stable, should have become 0." SEVERITY ERROR; + END IF; + WAIT; + END PROCESS; -- Verify the capture_cnt p_pps_default_period : PROCESS BEGIN tb_state <= s_idle; pps <= '0'; + expected_cnt <= TO_UVEC(c_pps_default_period, c_cnt_w); WAIT UNTIL rst='0'; WAIT FOR 10*c_clk_period; WAIT UNTIL rising_edge(clk); -- get synchronous to clk @@ -130,8 +166,6 @@ BEGIN pps <= '0'; WAIT FOR (c_pps_default_period-I)*c_clk_period; END LOOP; - -- Missing PPS pulses - tb_state <= s_missing_pps; -- End tb_state <= s_end; @@ -158,11 +192,14 @@ BEGIN -- PPS pps_ext => pps_ext, pps_sys => pps_sys, - pps_toggle => pps_toggle, -- MM control - capture_edge => capture_edge, - capture_cnt => capture_cnt, - offset_cnt => offset_cnt + pps_toggle => pps_toggle, + pps_stable => pps_stable, + pps_stable_ack => pps_stable_ack, + capture_edge => capture_edge, + capture_cnt => capture_cnt, + offset_cnt => offset_cnt, + expected_cnt => expected_cnt ); ----------------------------------------------------------------------------- @@ -187,18 +224,21 @@ BEGIN IF UNSIGNED(capture_cnt)/=c_clk_freq+1 THEN REPORT "PPSH : Unexpected capture count value at 6 s." SEVERITY ERROR; END IF; + verify_s <= 6.0; END IF; IF (NOW > 7000 ms) AND (NOW <= 7000 ms + c_clk_period) THEN IF UNSIGNED(capture_cnt)/=c_clk_freq THEN REPORT "PPSH : Unexpected capture count value at 7 s." SEVERITY ERROR; END IF; + verify_s <= 7.0; END IF; IF (NOW > 8000 ms) AND (NOW <= 8000 ms + c_clk_period) THEN IF UNSIGNED(capture_cnt)/=c_clk_freq-1 THEN REPORT "PPSH : Unexpected capture count value at 8 s." SEVERITY ERROR; END IF; + verify_s <= 8.0; END IF; -- Verify external PPS period fluctuations at specific stimuli moments @@ -206,57 +246,65 @@ BEGIN IF UNSIGNED(capture_cnt)/=c_clk_freq THEN REPORT "PPSH : Unexpected capture count value at 10 s." SEVERITY ERROR; END IF; + verify_s <= 10.0; END IF; IF (NOW > 22000 ms) AND (NOW <= 22000 ms + c_clk_period) THEN IF UNSIGNED(capture_cnt)/=c_clk_freq-1 THEN REPORT "PPSH : Unexpected capture count value at 22 s." SEVERITY ERROR; END IF; + verify_s <= 22.0; END IF; IF (NOW > 25000 ms) AND (NOW <= 25000 ms + c_clk_period) THEN IF UNSIGNED(capture_cnt)/=c_clk_freq THEN REPORT "PPSH : Unexpected capture count value at 25 s." SEVERITY ERROR; END IF; + verify_s <= 25.0; END IF; IF (NOW > 28000 ms) AND (NOW <= 28000 ms + c_clk_period) THEN IF UNSIGNED(capture_cnt)/=c_clk_freq+1 THEN REPORT "PPSH : Unexpected capture count value at 28 s." SEVERITY ERROR; END IF; + verify_s <= 28.0; END IF; IF (NOW > 30000 ms) AND (NOW <= 30000 ms + c_clk_period) THEN IF UNSIGNED(capture_cnt)/=c_clk_freq THEN REPORT "PPSH : Unexpected capture count value at 30 s." SEVERITY ERROR; END IF; + verify_s <= 30.0; END IF; IF (NOW > 35000 ms) AND (NOW <= 35000 ms + c_clk_period) THEN IF UNSIGNED(capture_cnt)/=2**capture_cnt'LENGTH-1 THEN REPORT "PPSH : Unexpected capture count value at 35 s." SEVERITY ERROR; END IF; + verify_s <= 35.0; END IF; IF (NOW > 49000 ms) AND (NOW <= 49000 ms + c_clk_period) THEN IF UNSIGNED(capture_cnt)/=2**capture_cnt'LENGTH-1 THEN REPORT "PPSH : Unexpected capture count value at 49 s." SEVERITY ERROR; END IF; + verify_s <= 49.0; END IF; -- check if offset_cnt is counting IF (NOW > 7500 ms) AND (NOW <= 7500 ms + c_clk_period) THEN IF UNSIGNED(offset_cnt)/=475 THEN - REPORT "PPSH : Unexpected offset count value at 5.5 s." SEVERITY ERROR; + REPORT "PPSH : Unexpected offset count value at 7.5 s." SEVERITY ERROR; END IF; + verify_s <= 7.5; END IF; IF (NOW > 7700 ms) AND (NOW <= 7700 ms + c_clk_period) THEN IF UNSIGNED(offset_cnt)/=675 THEN - REPORT "PPSH : Unexpected offset count value at 5.5 s." SEVERITY ERROR; + REPORT "PPSH : Unexpected offset count value at 7.7 s." SEVERITY ERROR; END IF; + verify_s <= 7.7; END IF; - END IF; END PROCESS;