diff --git a/hdl/ip_cores/vme64x-core b/hdl/ip_cores/vme64x-core index d8ae98675b15a5dc6bf5cc9e7e3fcbdd266187f7..2865297786a48cd4792a56f7ba23c93339abd2e1 160000 --- a/hdl/ip_cores/vme64x-core +++ b/hdl/ip_cores/vme64x-core @@ -1 +1 @@ -Subproject commit d8ae98675b15a5dc6bf5cc9e7e3fcbdd266187f7 +Subproject commit 2865297786a48cd4792a56f7ba23c93339abd2e1 diff --git a/hdl/top/svec/wr_svec_tdc.ucf b/hdl/top/svec/wr_svec_tdc.ucf index 3e175861831fac91265e9ae33a9c119619155f3e..f2531767928106adbcd99ca54be297dea189cb64 100644 --- a/hdl/top/svec/wr_svec_tdc.ucf +++ b/hdl/top/svec/wr_svec_tdc.ucf @@ -123,13 +123,13 @@ NET "vme_berr_o" LOC = R3; NET "vme_as_n_i" LOC = P6; NET "vme_addr_oe_n_o" LOC = N4; NET "vme_addr_dir_o" LOC = N5; -NET "vme_irq_n_o[6]" LOC = R7; -NET "vme_irq_n_o[5]" LOC = AH2; -NET "vme_irq_n_o[4]" LOC = AF2; -NET "vme_irq_n_o[3]" LOC = N9; -NET "vme_irq_n_o[2]" LOC = N10; -NET "vme_irq_n_o[1]" LOC = AH4; -NET "vme_irq_n_o[0]" LOC = AG4; +NET "vme_irq_o[6]" LOC = R7; +NET "vme_irq_o[5]" LOC = AH2; +NET "vme_irq_o[4]" LOC = AF2; +NET "vme_irq_o[3]" LOC = N9; +NET "vme_irq_o[2]" LOC = N10; +NET "vme_irq_o[1]" LOC = AH4; +NET "vme_irq_o[0]" LOC = AG4; NET "vme_ga_i[4]" LOC = V9; NET "vme_ga_i[3]" LOC = V10; NET "vme_ga_i[2]" LOC = AJ1; @@ -225,13 +225,13 @@ NET "vme_berr_o" IOSTANDARD = LVCMOS33; NET "vme_as_n_i" IOSTANDARD = LVCMOS33; NET "vme_addr_oe_n_o" IOSTANDARD = LVCMOS33; NET "vme_addr_dir_o" IOSTANDARD = LVCMOS33; -NET "vme_irq_n_o[6]" IOSTANDARD = LVCMOS33; -NET "vme_irq_n_o[5]" IOSTANDARD = LVCMOS33; -NET "vme_irq_n_o[4]" IOSTANDARD = LVCMOS33; -NET "vme_irq_n_o[3]" IOSTANDARD = LVCMOS33; -NET "vme_irq_n_o[2]" IOSTANDARD = LVCMOS33; -NET "vme_irq_n_o[1]" IOSTANDARD = LVCMOS33; -NET "vme_irq_n_o[0]" IOSTANDARD = LVCMOS33; +NET "vme_irq_o[6]" IOSTANDARD = LVCMOS33; +NET "vme_irq_o[5]" IOSTANDARD = LVCMOS33; +NET "vme_irq_o[4]" IOSTANDARD = LVCMOS33; +NET "vme_irq_o[3]" IOSTANDARD = LVCMOS33; +NET "vme_irq_o[2]" IOSTANDARD = LVCMOS33; +NET "vme_irq_o[1]" IOSTANDARD = LVCMOS33; +NET "vme_irq_o[0]" IOSTANDARD = LVCMOS33; NET "vme_ga_i[4]" IOSTANDARD = LVCMOS33; NET "vme_ga_i[3]" IOSTANDARD = LVCMOS33; NET "vme_ga_i[2]" IOSTANDARD = LVCMOS33; diff --git a/hdl/top/svec/wr_svec_tdc.vhd b/hdl/top/svec/wr_svec_tdc.vhd index 7ac4cf6f3fe3338e2840f69a4e6b026ace41509c..a2f4ea318268bdbb91cfceb6bdfb4bcb69cadf23 100644 --- a/hdl/top/svec/wr_svec_tdc.vhd +++ b/hdl/top/svec/wr_svec_tdc.vhd @@ -205,7 +205,7 @@ entity wr_svec_tdc is vme_addr_b : inout std_logic_vector(31 downto 1); vme_data_b : inout std_logic_vector(31 downto 0); vme_bbsy_n_i : in std_logic; - vme_irq_n_o : out std_logic_vector(6 downto 0); + vme_irq_o : out std_logic_vector(6 downto 0); vme_iack_n_i : in std_logic; vme_iackin_n_i : in std_logic; vme_iackout_n_o : out std_logic; @@ -451,11 +451,13 @@ architecture rtl of wr_svec_tdc is --------------------------------------------------------------------------------------------------- -- VME interface - signal VME_DATA_b_out : std_logic_vector(31 downto 0); - signal VME_ADDR_b_out : std_logic_vector(31 downto 1); - signal VME_LWORD_n_b_out : std_logic; - signal VME_DATA_DIR_int : std_logic; - signal VME_ADDR_DIR_int : std_logic; + signal vme_data_b_out : std_logic_vector(31 downto 0); + signal vme_addr_b_out : std_logic_vector(31 downto 1); + signal vme_lword_n_b_out : std_logic; + signal vme_data_dir_int : std_logic; + signal vme_addr_dir_int : std_logic; + signal vme_berr_n : std_logic; + signal vme_irq_n : std_logic_vector(6 downto 0); --------------------------------------------------------------------------------------------------- -- White Rabbit signals to TDC mezzanine @@ -492,6 +494,7 @@ architecture rtl of wr_svec_tdc is -- WISHBONE to crossbar slave port signal cnx_slave_out : t_wishbone_slave_out_array (c_NUM_WB_SLAVES-1 downto 0); signal cnx_slave_in : t_wishbone_slave_in_array (c_NUM_WB_SLAVES-1 downto 0); + signal vme_wb_in : t_wishbone_master_in; --------------------------------------------------------------------------------------------------- -- Interrupts @@ -894,45 +897,57 @@ begin --------------------------------------------------------------------------------------------------- U_VME_Core : xvme64x_core generic map ( - g_clock_freq => 62500000, - g_adem_a24 => x"fff80000") + g_CLOCK_PERIOD => 16, + g_DECODE_AM => True, + g_USER_CSR_EXT => False, + g_MANUFACTURER_ID => c_CERN_ID, + g_BOARD_ID => c_SVEC_ID, + g_REVISION_ID => c_SVEC_REVISION_ID, + g_PROGRAM_ID => c_SVEC_PROGRAM_ID) port map (clk_i => clk_62m5_sys, rst_n_i => rst_n_sys, - VME_AS_n_i => vme_as_n_i, - VME_RST_n_i => vme_rst_n_i, - VME_WRITE_n_i => vme_write_n_i, - VME_AM_i => vme_am_i, - VME_DS_n_i => vme_ds_n_i, - VME_GA_i => vme_ga_i, - VME_BERR_o => vme_lword_n_b, - VME_DTACK_n_o => vme_addr_b, - VME_RETRY_n_o => vme_data_b, - VME_RETRY_OE_o => vme_iack_n_i, - VME_LWORD_n_b_i => vme_iackin_n_i, - VME_LWORD_n_b_o => vme_berr_n_o, - VME_ADDR_b_i => vme_dtack_n_o, - VME_DATA_b_o => vme_retry_n_o, - VME_ADDR_b_o => vme_retry_oe_o, - VME_DATA_b_i => vme_lword_n_b_out, - VME_IRQ_n_o => vme_data_b_out, - VME_IACK_n_i => vme_addr_b_out, - VME_IACKIN_n_i => vme_irq_n_o, - VME_IACKOUT_n_o => vme_iackout_n_o, - VME_DTACK_OE_o => vme_dtack_oe_o, - VME_DATA_DIR_o => vme_data_dir_int, - VME_DATA_OE_N_o => vme_data_oe_n_o, - VME_ADDR_DIR_o => vme_addr_dir_int, - VME_ADDR_OE_N_o => vme_addr_oe_n_o, - master_o => cnx_slave_in (c_MASTER_VME), - master_i => cnx_slave_out(c_MASTER_VME), - irq_i => irq_to_vmecore); + vme_i.as_n => vme_as_n_i, + vme_i.rst_n => vme_rst_n_i, + vme_i.write_n => vme_write_n_i, + vme_i.am => vme_am_i, + vme_i.ds_n => vme_ds_n_i, + vme_i.ga => vme_ga_i, + vme_i.lword_n => vme_lword_n_b, + vme_i.addr => vme_addr_b, + vme_i.data => vme_data_b, + vme_i.iack_n => vme_iack_n_i, + vme_i.iackin_n => vme_iackin_n_i, + vme_o.berr_n => vme_berr_n, + vme_o.dtack_n => vme_dtack_n_o, + vme_o.retry_n => vme_retry_n_o, + vme_o.retry_oe => vme_retry_oe_o, + vme_o.lword_n => vme_lword_n_b_out, + vme_o.data => vme_data_b_out, + vme_o.addr => vme_addr_b_out, + vme_o.irq_n => vme_irq_n, + vme_o.iackout_n => vme_iackout_n_o, + vme_o.dtack_oe => vme_dtack_oe_o, + vme_o.data_dir => vme_data_dir_int, + vme_o.data_oe_n => vme_data_oe_n_o, + vme_o.addr_dir => vme_addr_dir_int, + vme_o.addr_oe_n => vme_addr_oe_n_o, + wb_o => cnx_slave_in (c_MASTER_VME), + wb_i => cnx_slave_out(c_MASTER_VME)); --vme_wb_in); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - VME_DATA_b <= VME_DATA_b_out when VME_DATA_DIR_int = '1' else (others => 'Z'); - VME_ADDR_b <= VME_ADDR_b_out when VME_ADDR_DIR_int = '1' else (others => 'Z'); - VME_LWORD_n_b <= VME_LWORD_n_b_out when VME_ADDR_DIR_int = '1' else 'Z'; - VME_ADDR_DIR_o <= VME_ADDR_DIR_int; - VME_DATA_DIR_o <= VME_DATA_DIR_int; + vme_wb_in.ack <= cnx_slave_out(c_MASTER_VME).ack; + vme_wb_in.err <= cnx_slave_out(c_MASTER_VME).err; + vme_wb_in.rty <= cnx_slave_out(c_MASTER_VME).rty; + vme_wb_in.stall <= cnx_slave_out(c_MASTER_VME).stall; + vme_wb_in.dat <= cnx_slave_out(c_MASTER_VME).dat; + vme_wb_in.int <= irq_to_vmecore; + vme_data_b <= vme_data_b_out when vme_data_dir_int = '1' else (others => 'Z'); + vme_addr_b <= vme_addr_b_out when vme_addr_dir_int = '1' else (others => 'Z'); + vme_lword_n_b <= vme_lword_n_b_out when vme_addr_dir_int = '1' else 'Z'; + vme_addr_dir_o <= vme_addr_dir_int; + vme_data_dir_o <= vme_data_dir_int; + vme_berr_o <= not vme_berr_n; + vme_irq_o <= not vme_irq_n; ---------------------------------------------------------------------------------------------------