SLV_NO_MORE_DATA_OUT : out std_logic;\r
SLV_UNKNOWN_ADDR_OUT : out std_logic;\r
\r
- DEBUG_OUT : out std_logic_vector(7 downto 0)\r
+ DEBUG_OUT : out std_logic_vector(15 downto 0)\r
);\r
end entity;\r
\r
architecture Behavioral of nx_timestamp_fifo_read is\r
\r
-\r
-- FIFO Input Handler\r
- signal nx_timestamp_n : std_logic_vector(7 downto 0);\r
- signal fifo_skip_write_x : std_logic;\r
- signal fifo_skip_write_l : std_logic;\r
- signal fifo_skip_write : std_logic;\r
- signal fifo_full_i : std_logic;\r
- signal fifo_write_enable_o : std_logic;\r
- signal fifo_write_skip_ctr : unsigned(7 downto 0);\r
- signal nx_frame_clock_o : std_logic;\r
- signal frame_clock_ctr : unsigned(1 downto 0);\r
+ signal fifo_full : std_logic;\r
+ signal fifo_write_enable : std_logic;\r
+ signal frame_tag_o : std_logic;\r
+\r
+ -- FRAME_CLOCK_GENERATOR \r
+ signal frame_clock_ctr : unsigned(1 downto 0);\r
+ signal nx_frame_clock_o : std_logic;\r
+\r
+ signal frame_clock_ctr_inc_x : std_logic;\r
+ signal frame_clock_ctr_inc_l : std_logic;\r
+ signal frame_clock_ctr_inc : std_logic;\r
\r
-- FIFO Output Handler\r
- signal fifo_empty_i : std_logic; \r
- signal fifo_empty_x : std_logic; \r
- signal fifo_empty : std_logic; \r
- signal fifo_full_x : std_logic;\r
- signal fifo_full : std_logic;\r
- signal fifo_out : std_logic_vector(31 downto 0);\r
- signal fifo_read_enable_o : std_logic;\r
- signal fifo_skip_write_o : std_logic;\r
- signal fifo_skip_write_r : std_logic;\r
- signal fifo_skip_write_s : std_logic;\r
-\r
- -- SYNC NX Frame Process\r
+ signal fifo_out : std_logic_vector(35 downto 0);\r
+ signal fifo_empty : std_logic;\r
+ signal fifo_read_enable_x : std_logic;\r
+ signal fifo_read_enable : std_logic;\r
+ signal register_fifo_data_x : std_logic_vector(31 downto 0);\r
+ signal register_fifo_data : std_logic_vector(31 downto 0);\r
+ signal fifo_new_data_x : std_logic;\r
+ signal fifo_new_data : std_logic;\r
+\r
+ signal frame_clock_ctr_inc_r : std_logic;\r
+ signal frame_clock_ctr_inc_s : std_logic;\r
+ signal frame_clock_ctr_inc_o : std_logic;\r
\r
+ -- Sync NX Frame Process\r
+\r
-- RS Sync FlipFlop\r
signal nx_frame_synced_o : std_logic;\r
signal rs_sync_set : std_logic;\r
signal frame_sync_wait_ctr : unsigned (7 downto 0);\r
\r
-- Slave Bus\r
- signal register_fifo_data : std_logic_vector(31 downto 0);\r
- signal register_fifo_status : std_logic_vector(31 downto 0);\r
signal slv_data_out_o : std_logic_vector(31 downto 0);\r
signal slv_no_more_data_o : std_logic;\r
signal slv_unknown_addr_o : std_logic;\r
signal slv_ack_o : std_logic;\r
- signal fifo_write_enable_x : std_logic;\r
- signal fifo_write_enable : std_logic;\r
- signal fifo_read_enable_x : std_logic;\r
- signal fifo_read_enable : std_logic;\r
- signal fifo_write_skip_ctr_x : std_logic_vector(7 downto 0);\r
- signal fifo_write_skip_ctr_o : std_logic_vector(7 downto 0);\r
- \r
- type STATES is (IDLE,\r
- READ_FIFO\r
+ signal register_fifo_status : std_logic_vector(31 downto 0);\r
+\r
+ type STATES is (S_IDLE,\r
+ S_READ_FIFO\r
);\r
- signal STATE : STATES;\r
+ signal STATE, NEXT_STATE : STATES;\r
\r
- type STATES_SYNC is (SYNC_CHECK,\r
- SYNC_RESYNC,\r
- SYNC_WAIT\r
+ type STATES_SYNC is (S_SYNC_CHECK,\r
+ S_SYNC_RESYNC,\r
+ S_SYNC_WAIT\r
);\r
signal STATE_SYNC : STATES_SYNC;\r
- \r
-begin\r
\r
- DEBUG_OUT(0) <= fifo_write_enable_o;\r
- DEBUG_OUT(1) <= fifo_full;\r
- DEBUG_OUT(2) <= fifo_read_enable_o;\r
- DEBUG_OUT(3) <= fifo_empty;\r
\r
- DEBUG_OUT(4) <= nx_frame_synced_o;\r
- DEBUG_OUT(5) <= fifo_skip_write_o;\r
- DEBUG_OUT(6) <= nx_frame_clock_o;\r
- DEBUG_OUT(7) <= CLK_IN;\r
+begin\r
+ \r
+ DEBUG_OUT(0) <= CLK_IN;\r
+ \r
+ DEBUG_OUT(1) <= NX_TIMESTAMP_CLK_IN; -- fifo_write_enable;\r
+-- DEBUG_OUT(2) <= fifo_full;\r
+-- DEBUG_OUT(3) <= fifo_write_enable;\r
+-- DEBUG_OUT(4) <= fifo_empty;\r
+-- DEBUG_OUT(5) <= fifo_read_enable;\r
+ \r
+ -- DEBUG_OUT(2) <= NX_FRAME_CLOCK_OUT;\r
+ -- DEBUG_OUT(3) <= ;\r
+ -- DEBUG_OUT(5) <= ;\r
+ -- DEBUG_OUT(6) <= ;\r
+ -- DEBUG_OUT(7) <= '0';\r
+ DEBUG_OUT(6) <= NX_FRAME_CLOCK_OUT;\r
+ DEBUG_OUT(7) <= frame_clock_ctr_inc;\r
+-- DEBUG_OUT(15 downto 8) <= NX_TIMESTAMP_OUT(7 downto 0);\r
+ --DEBUG_OUT(15 downto 8) <= NX_TIMESTAMP_IN(7 downto 0);\r
+ DEBUG_OUT(9 downto 8) <= frame_clock_ctr;\r
\r
-----------------------------------------------------------------------------\r
-- Dual Clock FIFO 8bit to 32bit\r
-----------------------------------------------------------------------------\r
\r
- -- First Decode\r
- -- Gray_Decoder_1: Gray_Decoder\r
- -- generic map (\r
- -- WIDTH => 8)\r
- -- port map (\r
- -- CLK_IN => NX_TIMESTAMP_CLK_IN,\r
- -- RESET_IN => RESET_IN,\r
- -- GRAY_IN => NX_TIMESTAMP_IN,\r
- -- BINARY_OUT => nx_timestamp_n\r
- -- );\r
- nx_timestamp_n <= NX_TIMESTAMP_IN;\r
- \r
- \r
- -- Second send data to FIFO\r
- fifo_dc_8to32_1: fifo_dc_8to32\r
+ -- Send data to FIFO\r
+ fifo_dc_9to36_1: fifo_dc_9to36\r
port map (\r
- Data => nx_timestamp_n,\r
- WrClock => NX_TIMESTAMP_CLK_IN,\r
- RdClock => CLK_IN,\r
- WrEn => fifo_write_enable_o,\r
- RdEn => fifo_read_enable_o,\r
- Reset => RESET_IN,\r
- RPReset => RESET_IN,\r
- Q => fifo_out,\r
- Empty => fifo_empty_i,\r
- Full => fifo_full_i\r
+ Data(7 downto 0) => NX_TIMESTAMP_IN,\r
+ Data(8) => frame_tag_o,\r
+ WrClock => NX_TIMESTAMP_CLK_IN,\r
+ RdClock => CLK_IN,\r
+ WrEn => fifo_write_enable,\r
+ RdEn => fifo_read_enable,\r
+ Reset => RESET_IN,\r
+ RPReset => RESET_IN,\r
+ Q => fifo_out,\r
+ Empty => fifo_empty,\r
+ Full => fifo_full\r
);\r
\r
+ -- Write only in case FIFO is not full\r
+ fifo_write_enable <= '0' when fifo_full = '1' else '1';\r
\r
-----------------------------------------------------------------------------\r
-- FIFO Input Handler\r
begin\r
if( rising_edge(NX_TIMESTAMP_CLK_IN) ) then\r
if( RESET_IN = '1' ) then\r
- fifo_skip_write_x <= '0';\r
- fifo_skip_write_l <= '0';\r
+ frame_clock_ctr_inc_x <= '0';\r
+ frame_clock_ctr_inc_l <= '0';\r
else\r
- fifo_skip_write_x <= fifo_skip_write_o;\r
- fifo_skip_write_l <= fifo_skip_write_x;\r
+ frame_clock_ctr_inc_x <= frame_clock_ctr_inc_o;\r
+ frame_clock_ctr_inc_l <= frame_clock_ctr_inc_x; \r
end if;\r
end if;\r
end process PROC_FIFO_IN_HANDLER_SYNC;\r
\r
- -- Signal fifo_skip_write might 2 clocks long --> I need 1\r
+ -- Signal frame_tag_ctr_inc_l might be 2 clocks long --> I need 1\r
level_to_pulse_1: level_to_pulse\r
port map (\r
CLK_IN => NX_TIMESTAMP_CLK_IN,\r
RESET_IN => RESET_IN,\r
- LEVEL_IN => fifo_skip_write_l,\r
- PULSE_OUT => fifo_skip_write\r
+ LEVEL_IN => frame_clock_ctr_inc_l,\r
+ PULSE_OUT => frame_clock_ctr_inc\r
);\r
- \r
- -- Write only in case FIFO is not full, skip one write cycle in case\r
- -- fifo_skip_write is true (needed by the synchronization process\r
- -- to genrate the NX Frame Clock which I don't have, grrrr) \r
- PROC_FIFO_IN_HANDLER: process(NX_TIMESTAMP_CLK_IN)\r
+\r
+ PROC_FRAME_CLOCK_GENERATOR: process(NX_TIMESTAMP_CLK_IN)\r
begin\r
if( rising_edge(NX_TIMESTAMP_CLK_IN) ) then\r
if( RESET_IN = '1' ) then\r
- fifo_write_enable_o <= '0';\r
- frame_clock_ctr <= (others => '0');\r
- fifo_write_skip_ctr <= (others => '0'); \r
+ frame_clock_ctr <= (others => '0');\r
+ nx_frame_clock_o <= '0';\r
+ frame_tag_o <= '1';\r
else\r
- fifo_write_enable_o <= '1';\r
-\r
- if (fifo_full_i = '1') then\r
- fifo_write_enable_o <= '0';\r
- elsif (fifo_skip_write = '1') then\r
- fifo_write_skip_ctr <= fifo_write_skip_ctr + 1;\r
- fifo_write_enable_o <= '0';\r
- end if;\r
+ case frame_clock_ctr is\r
+\r
+ when "00" =>\r
+ nx_frame_clock_o <= '1';\r
+ frame_tag_o <= '1';\r
+ when "01" =>\r
+ nx_frame_clock_o <= '1';\r
+ frame_tag_o <= '0';\r
+ when "10" =>\r
+ nx_frame_clock_o <= '0';\r
+ frame_tag_o <= '0';\r
+ when "11" =>\r
+ nx_frame_clock_o <= '0';\r
+ frame_tag_o <= '0';\r
+ when others => null;\r
\r
- if (frame_clock_ctr < 2) then\r
- nx_frame_clock_o <= '1';\r
- else\r
- nx_frame_clock_o <= '0';\r
- end if;\r
+ end case;\r
\r
- if (fifo_skip_write = '1') then\r
- frame_clock_ctr <= (others => '0');\r
+ if (frame_clock_ctr_inc = '1') then\r
+ frame_clock_ctr <= frame_clock_ctr + 2;\r
else\r
frame_clock_ctr <= frame_clock_ctr + 1;\r
end if;\r
- \r
+\r
end if;\r
end if;\r
- end process PROC_FIFO_IN_HANDLER; \r
-\r
- NX_FRAME_CLOCK_OUT <= nx_frame_clock_o;\r
+ end process PROC_FRAME_CLOCK_GENERATOR;\r
\r
-----------------------------------------------------------------------------\r
-- FIFO Output Handler and Sync FIFO\r
-----------------------------------------------------------------------------\r
\r
- -- Read only in case FIFO is not empty\r
- PROC_FIFO_READ: process(CLK_IN)\r
- begin\r
+ PROC_FIFO_READ_TRANSFER: process (CLK_IN)\r
+ begin \r
if( rising_edge(CLK_IN) ) then\r
- if( RESET_IN = '1' ) then\r
- fifo_read_enable_o <= '0';\r
- STATE <= IDLE;\r
+ if (RESET_IN = '1') then\r
+ fifo_read_enable <= '0';\r
+ fifo_new_data <= '0';\r
+ register_fifo_data <= (others => '0');\r
+ STATE <= S_IDLE;\r
+ register_fifo_data <= (others => '0');\r
else\r
- fifo_read_enable_o <= '0';\r
- case STATE is\r
-\r
- when IDLE =>\r
- if (fifo_empty_i = '1') then\r
- STATE <= IDLE;\r
- else\r
- fifo_read_enable_o <= '1';\r
- STATE <= READ_FIFO;\r
- end if;\r
- \r
- when READ_FIFO =>\r
- register_fifo_data <= fifo_out;\r
- STATE <= IDLE;\r
- \r
- when others => null;\r
- end case;\r
+ fifo_read_enable <= fifo_read_enable_x;\r
+ fifo_new_data <= fifo_new_data_x;\r
+ register_fifo_data <= register_fifo_data_x;\r
+ STATE <= NEXT_STATE;\r
end if;\r
end if;\r
+ end process PROC_FIFO_READ_TRANSFER;\r
+\r
+ -- Read only in case FIFO is not empty\r
+ PROC_FIFO_READ: process(STATE)\r
+\r
+ variable frame_tag : std_logic_vector(3 downto 0);\r
+\r
+ begin\r
+ fifo_read_enable_x <= '0';\r
+ fifo_new_data_x <= '0';\r
+ register_fifo_data_x <= register_fifo_data;\r
+\r
+ frame_tag := fifo_out(35) & fifo_out(26) &\r
+ fifo_out(17) & fifo_out(8);\r
+ \r
+ case STATE is\r
+\r
+ when S_IDLE =>\r
+ if (fifo_empty = '1') then\r
+ NEXT_STATE <= S_IDLE;\r
+ else\r
+ fifo_read_enable_x <= '1';\r
+ NEXT_STATE <= S_READ_FIFO;\r
+ end if;\r
+ \r
+ when S_READ_FIFO =>\r
+ fifo_new_data_x <= '1';\r
+ case frame_tag is\r
+ when "1000" =>\r
+ register_fifo_data_x(31 downto 24) <= fifo_out(34 downto 27);\r
+ register_fifo_data_x(23 downto 16) <= fifo_out(25 downto 18);\r
+ register_fifo_data_x(15 downto 8) <= fifo_out(16 downto 9);\r
+ register_fifo_data_x(7 downto 0) <= fifo_out(7 downto 0);\r
+ when "0100" => \r
+ register_fifo_data_x(31 downto 24) <= fifo_out( 7 downto 0);\r
+ register_fifo_data_x(23 downto 16) <= fifo_out(34 downto 27);\r
+ register_fifo_data_x(15 downto 8) <= fifo_out(25 downto 18);\r
+ register_fifo_data_x(7 downto 0) <= fifo_out(16 downto 9);\r
+ when "0010" => \r
+ register_fifo_data_x(31 downto 24) <= fifo_out(16 downto 9);\r
+ register_fifo_data_x(23 downto 16) <= fifo_out(7 downto 0);\r
+ register_fifo_data_x(15 downto 8) <= fifo_out(34 downto 27);\r
+ register_fifo_data_x(7 downto 0) <= fifo_out(25 downto 18);\r
+ when "0001" => \r
+ register_fifo_data_x(31 downto 24) <= fifo_out(25 downto 18);\r
+ register_fifo_data_x(23 downto 16) <= fifo_out(16 downto 9);\r
+ register_fifo_data_x(15 downto 8) <= fifo_out(7 downto 0);\r
+ register_fifo_data_x(7 downto 0) <= fifo_out(34 downto 27);\r
+\r
+ when others =>\r
+ register_fifo_data_x <= (others => '1');\r
+ fifo_new_data_x <= '0';\r
+ end case;\r
+ NEXT_STATE <= S_IDLE;\r
+ \r
+ when others => null;\r
+ end case;\r
end process PROC_FIFO_READ;\r
\r
\r
end if;\r
end process PROC_RS_FRAME_SYNCED;\r
\r
- -- Sync to NX NO_DATA FRAME \r
+ -- Sync to NX_DATA FRAME \r
PROC_SYNC_TO_NO_DATA: process(CLK_IN)\r
+\r
+ variable fifo_tag_given : std_logic_vector(3 downto 0);\r
+ \r
begin\r
+ fifo_tag_given := fifo_out(35) & fifo_out(26) &\r
+ fifo_out(17) & fifo_out(8);\r
+\r
if( rising_edge(CLK_IN) ) then\r
if( RESET_IN = '1' ) then\r
- rs_sync_set <= '0';\r
- rs_sync_reset <= '1';\r
- nx_frame_resync_ctr <= (others => '0');\r
- frame_sync_wait_ctr <= (others => '0');\r
- fifo_skip_write_s <= '0';\r
- STATE_SYNC <= SYNC_CHECK;\r
+ rs_sync_set <= '0';\r
+ rs_sync_reset <= '1';\r
+ nx_frame_resync_ctr <= (others => '0');\r
+ frame_sync_wait_ctr <= (others => '0');\r
+ frame_clock_ctr_inc_s <= '0';\r
+ STATE_SYNC <= S_SYNC_CHECK;\r
else\r
- rs_sync_set <= '0';\r
- rs_sync_reset <= '0';\r
- fifo_skip_write_s <= '0';\r
+ rs_sync_set <= '0';\r
+ rs_sync_reset <= '0';\r
+ frame_clock_ctr_inc_s <= '0';\r
+\r
+ DEBUG_OUT(5 downto 2) <= fifo_tag_given;\r
\r
case STATE_SYNC is\r
\r
- when SYNC_CHECK =>\r
- case fifo_out is\r
+ when S_SYNC_CHECK =>\r
+ case register_fifo_data is\r
when x"7f7f7f06" =>\r
rs_sync_set <= '1';\r
- STATE_SYNC <= SYNC_CHECK;\r
+ STATE_SYNC <= S_SYNC_CHECK;\r
\r
when x"067f7f7f" =>\r
- STATE_SYNC <= SYNC_RESYNC;\r
+ STATE_SYNC <= S_SYNC_RESYNC;\r
\r
when x"7f067f7f" =>\r
- STATE_SYNC <= SYNC_RESYNC;\r
+ STATE_SYNC <= S_SYNC_RESYNC;\r
\r
when x"7f7f067f" =>\r
- STATE_SYNC <= SYNC_RESYNC;\r
+ STATE_SYNC <= S_SYNC_RESYNC;\r
\r
when others =>\r
- STATE_SYNC <= SYNC_CHECK;\r
+ STATE_SYNC <= S_SYNC_CHECK;\r
\r
end case;\r
\r
- when SYNC_RESYNC =>\r
- rs_sync_reset <= '1';\r
- fifo_skip_write_s <= '1';\r
- nx_frame_resync_ctr <= nx_frame_resync_ctr + 1;\r
- frame_sync_wait_ctr <= x"ff";\r
- STATE_SYNC <= SYNC_WAIT;\r
+ when S_SYNC_RESYNC =>\r
+ rs_sync_reset <= '1';\r
+ frame_clock_ctr_inc_s <= '1';\r
+ nx_frame_resync_ctr <= nx_frame_resync_ctr + 1;\r
+ frame_sync_wait_ctr <= x"ff";\r
+ STATE_SYNC <= S_SYNC_WAIT;\r
\r
- when SYNC_WAIT =>\r
+ when S_SYNC_WAIT =>\r
if (frame_sync_wait_ctr > 0) then\r
frame_sync_wait_ctr <= frame_sync_wait_ctr -1;\r
- STATE_SYNC <= SYNC_WAIT;\r
+ STATE_SYNC <= S_SYNC_WAIT;\r
else\r
- STATE_SYNC <= SYNC_CHECK;\r
+ STATE_SYNC <= S_SYNC_CHECK;\r
end if;\r
\r
end case;\r
end process PROC_SYNC_TO_NO_DATA;\r
\r
NX_FRAME_SYNC_OUT <= nx_frame_synced_o;\r
- NX_TIMESTAMP_OUT <= register_fifo_data;\r
-\r
--------------------------------------------------------------------------------\r
--- TRBNet Slave Bus\r
--------------------------------------------------------------------------------\r
-\r
- -- Cross ClockDomain NX_TIMESTAMP_CLK_IN --> CLK_IN, for simplicity just\r
- -- cross all signals, even the CLK_IN ones\r
- PROC_SYNC_FIFO_SIGNALS: process(CLK_IN)\r
- begin\r
- if( rising_edge(CLK_IN) ) then\r
- if( RESET_IN = '1' ) then\r
- fifo_empty_x <= '0';\r
- fifo_empty <= '0';\r
-\r
- fifo_full_x <= '0';\r
- fifo_full <= '0';\r
-\r
- fifo_write_enable_x <= '0';\r
- fifo_write_enable <= '0';\r
- \r
- fifo_read_enable_x <= '0';\r
- fifo_read_enable <= '0';\r
\r
- fifo_write_skip_ctr_x <= (others => '0');\r
- fifo_write_skip_ctr_o <= (others => '0');\r
- else\r
- fifo_empty_x <= fifo_empty_i;\r
- fifo_empty <= fifo_empty_x;\r
-\r
- fifo_full_x <= fifo_full_i;\r
- fifo_full <= fifo_full_x;\r
-\r
- fifo_write_enable_x <= fifo_write_enable_o;\r
- fifo_write_enable <= fifo_write_enable_x;\r
-\r
- fifo_read_enable_x <= fifo_read_enable_o;\r
- fifo_read_enable <= fifo_read_enable_x;\r
-\r
- fifo_write_skip_ctr_x <= fifo_write_skip_ctr;\r
- fifo_write_skip_ctr_o <= fifo_write_skip_ctr_x;\r
- end if;\r
- end if;\r
- end process PROC_SYNC_FIFO_SIGNALS;\r
+-- \r
+-- -------------------------------------------------------------------------------\r
+-- -- TRBNet Slave Bus\r
+-- -------------------------------------------------------------------------------\r
+-- \r
+-- -- Cross ClockDomain NX_TIMESTAMP_CLK_IN --> CLK_IN, for simplicity just\r
+-- -- cross all signals, even the CLK_IN ones\r
+-- -- PROC_SYNC_FIFO_SIGNALS: process(CLK_IN)\r
+-- -- begin\r
+-- -- if( rising_edge(CLK_IN) ) then\r
+-- -- if( RESET_IN = '1' ) then\r
+-- -- fifo_empty_x <= '0';\r
+-- -- fifo_empty <= '0';\r
+-- -- \r
+-- -- fifo_full_x <= '0';\r
+-- -- fifo_full <= '0';\r
+-- -- \r
+-- -- fifo_write_enable_x <= '0';\r
+-- -- fifo_write_enable <= '0';\r
+-- -- \r
+-- -- fifo_read_enable_x <= '0';\r
+-- -- fifo_read_enable <= '0';\r
+-- -- \r
+-- -- fifo_write_skip_ctr_x <= (others => '0');\r
+-- -- fifo_write_skip_ctr_o <= (others => '0');\r
+-- -- else\r
+-- -- fifo_empty_x <= fifo_empty_i;\r
+-- -- fifo_empty <= fifo_empty_x;\r
+-- -- \r
+-- -- fifo_full_x <= fifo_full_i;\r
+-- -- fifo_full <= fifo_full_x;\r
+-- -- \r
+-- -- fifo_write_enable_x <= fifo_write_enable;\r
+-- -- fifo_write_enable <= fifo_write_enable_x;\r
+-- -- \r
+-- -- fifo_read_enable_x <= fifo_read_enable_o;\r
+-- -- fifo_read_enable <= fifo_read_enable_x;\r
+-- -- \r
+-- -- fifo_write_skip_ctr_x <= fifo_write_skip_ctr;\r
+-- -- fifo_write_skip_ctr_o <= fifo_write_skip_ctr_x;\r
+-- -- end if;\r
+-- -- end if;\r
+-- -- end process PROC_SYNC_FIFO_SIGNALS;\r
+-- \r
\r
register_fifo_status(0) <= fifo_write_enable;\r
register_fifo_status(1) <= fifo_full;\r
register_fifo_status(4) <= fifo_read_enable;\r
register_fifo_status(5) <= fifo_empty;\r
register_fifo_status(7 downto 6) <= (others => '0');\r
- register_fifo_status(15 downto 8) <= fifo_write_skip_ctr_o;\r
+ register_fifo_status(15 downto 8) <= (others => '0');-- fifo_write_skip_ctr;\r
register_fifo_status(23 downto 16) <= nx_frame_resync_ctr;\r
register_fifo_status(30 downto 24) <= (others => '0');\r
register_fifo_status(31) <= nx_frame_synced_o;\r
begin\r
if( rising_edge(CLK_IN) ) then\r
if( RESET_IN = '1' ) then\r
- slv_data_out_o <= (others => '0');\r
- slv_ack_o <= '0';\r
- slv_unknown_addr_o <= '0';\r
- slv_no_more_data_o <= '0';\r
- fifo_skip_write_r <= '0';\r
+ slv_data_out_o <= (others => '0');\r
+ slv_ack_o <= '0';\r
+ slv_unknown_addr_o <= '0';\r
+ slv_no_more_data_o <= '0';\r
+ frame_clock_ctr_inc_r <= '0';\r
else\r
- slv_data_out_o <= (others => '0');\r
- slv_ack_o <= '1';\r
- slv_unknown_addr_o <= '0';\r
- slv_no_more_data_o <= '0';\r
- fifo_skip_write_r <= '0';\r
+ slv_data_out_o <= (others => '0');\r
+ slv_ack_o <= '1';\r
+ slv_unknown_addr_o <= '0';\r
+ slv_no_more_data_o <= '0';\r
+ frame_clock_ctr_inc_r <= '0';\r
\r
if (SLV_READ_IN = '1') then\r
case SLV_ADDR_IN is\r
- when x"0000" => slv_data_out_o <= register_fifo_data;\r
- when x"0001" => slv_data_out_o <= register_fifo_status;\r
+ when x"0000" => slv_data_out_o <= register_fifo_data;\r
+ when x"0001" => slv_data_out_o <= register_fifo_status;\r
when others => slv_unknown_addr_o <= '1';\r
- slv_ack_o <= '0'; \r
+ slv_ack_o <= '0'; \r
end case;\r
\r
elsif (SLV_WRITE_IN = '1') then\r
case SLV_ADDR_IN is\r
- when x"0001" => fifo_skip_write_r <= '1';\r
- when others => slv_unknown_addr_o <= '1'; \r
- slv_ack_o <= '0';\r
+ when x"0001" => frame_clock_ctr_inc_r <= '1';\r
+ when others => slv_unknown_addr_o <= '1'; \r
+ slv_ack_o <= '0';\r
end case; \r
else\r
slv_ack_o <= '0';\r
end if;\r
end process PROC_FIFO_REGISTERS;\r
\r
- fifo_skip_write_o <= fifo_skip_write_r or fifo_skip_write_s;\r
+ frame_clock_ctr_inc_o <= frame_clock_ctr_inc_r or frame_clock_ctr_inc_s;\r
\r
--- Output Signals\r
+ -- Output Signals\r
SLV_DATA_OUT <= slv_data_out_o; \r
SLV_NO_MORE_DATA_OUT <= slv_no_more_data_o; \r
SLV_UNKNOWN_ADDR_OUT <= slv_unknown_addr_o;\r
SLV_ACK_OUT <= slv_ack_o;\r
\r
+ NX_FRAME_CLOCK_OUT <= nx_frame_clock_o;\r
+ NX_TIMESTAMP_OUT <= register_fifo_data;\r
\r
end Behavioral;\r
signal spi_sdo : std_logic;
-- FIFO Read
+ signal nx_ts_reset_o : std_logic;
signal nx_frame_clock_o : std_logic;
signal nx_frame_sync_o : std_logic;
-------------------------------------------------------------------------------
-- DEBUG
-------------------------------------------------------------------------------
--- DEBUG_LINE_OUT(0) <= CLK_IN;
--- DEBUG_LINE_OUT(1) <= clk_256_o;
--- DEBUG_LINE_OUT(2) <= NX_CLK128_IN;
+-- DEBUG_LINE_OUT(2) <= CLK_IN;
+-- DEBUG_LINE_OUT(1) <= NX_CLK256A_OUT;
+-- DEBUG_LINE_OUT(0) <= NX_CLK128_IN;
-- DEBUG_LINE_OUT(3) <= nx_frame_clock_o;
-- DEBUG_LINE_OUT(4) <= nx_frame_sync_o;
--- DEBUG_LINE_OUT(7 downto 5) <= (others => '0');
+-- DEBUG_LINE_OUT(5) <= NX_RESET_OUT;
+-- DEBUG_LINE_OUT(7 downto 6) <= (others => '0');
+--
+-- DEBUG_LINE_OUT(15 downto 8) <= NX_TIMESTAMP_IN;
-- DEBUG_LINE_OUT(15 downto 8) <= NX_TIMESTAMP_IN;
-- DEBUG_LINE_OUT(8) <= i2c_sda_o;
-- DEBUG_LINE_OUT(9) <= i2c_sda_i;
LOCK => open
);
+ NX_CLK256A_OUT <= clk_256_o;
+ NX_TESTPULSE_OUT <= '0';
+
-- pll_25_1: pll_25
-- port map (
-- CLK => CLK_IN,
-- );
-- clk_256_o <= CLK_128_IN;
- NX_RESET_OUT <= '0';
- NX_CLK256A_OUT <= clk_256_o;
- NX_TESTPULSE_OUT <= '0';
-
-- TRBNet Bus Handler
THE_BUS_HANDLER: trb_net16_regio_bus_handler
generic map(
-------------------------------------------------------------------------------
nxyter_registers_1: nxyter_registers
port map (
- CLK_IN => CLK_IN,
- RESET_IN => RESET_IN,
-
- SLV_READ_IN => slv_read(0),
- SLV_WRITE_IN => slv_write(0),
- SLV_DATA_OUT => slv_data_rd(0*32+31 downto 0*32),
- SLV_DATA_IN => slv_data_wr(0*32+31 downto 0*32),
- SLV_ADDR_IN => slv_addr(0*16+15 downto 0*16),
- SLV_ACK_OUT => slv_ack(0),
- SLV_NO_MORE_DATA_OUT => slv_no_more_data(0),
- SLV_UNKNOWN_ADDR_OUT => slv_unknown_addr(0),
- I2C_SM_RESET_OUT => i2c_sm_reset_o,
- I2C_REG_RESET_OUT => i2c_reg_reset_o,
- DEBUG_OUT => open
+ CLK_IN => CLK_IN,
+ RESET_IN => RESET_IN,
+
+ SLV_READ_IN => slv_read(0),
+ SLV_WRITE_IN => slv_write(0),
+ SLV_DATA_OUT => slv_data_rd(0*32+31 downto 0*32),
+ SLV_DATA_IN => slv_data_wr(0*32+31 downto 0*32),
+ SLV_ADDR_IN => slv_addr(0*16+15 downto 0*16),
+ SLV_ACK_OUT => slv_ack(0),
+ SLV_NO_MORE_DATA_OUT => slv_no_more_data(0),
+ SLV_UNKNOWN_ADDR_OUT => slv_unknown_addr(0),
+ I2C_SM_RESET_OUT => i2c_sm_reset_o,
+ I2C_REG_RESET_OUT => i2c_reg_reset_o,
+ NX_TS_RESET_OUT => nx_ts_reset_o,
+ -- DEBUG_OUT(7 downto 0) => DEBUG_LINE_OUT(15 downto 8)
+ DEBUG_OUT => open
);
-------------------------------------------------------------------------------
SLV_ACK_OUT => slv_ack(1),
SLV_NO_MORE_DATA_OUT => slv_no_more_data(1),
SLV_UNKNOWN_ADDR_OUT => slv_unknown_addr(1),
- DEBUG_OUT(13 downto 0) => DEBUG_LINE_OUT(13 downto 0)
- --DEBUG_OUT => open
+ DEBUG_OUT => open
);
- DEBUG_LINE_OUT(14) <= I2C_SDA_INOUT;
- DEBUG_LINE_OUT(15) <= I2C_SCL_INOUT;
-------------------------------------------------------------------------------
-- nXyter TimeStamp Read
SLV_NO_MORE_DATA_OUT => slv_no_more_data(2),
SLV_UNKNOWN_ADDR_OUT => slv_unknown_addr(2),
--- DEBUG_OUT => DEBUG_LINE_OUT(7 downto 0)
- DEBUG_OUT => open
+ DEBUG_OUT => DEBUG_LINE_OUT
+ -- DEBUG_OUT => open
);
-
+
-------------------------------------------------------------------------------
-- Data Buffer FIFO
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- nXyter Signals
-------------------------------------------------------------------------------
+ NX_RESET_OUT <= not nx_ts_reset_o;
-------------------------------------------------------------------------------
-- I2C Signals
I2C_SM_RESET_OUT <= not i2c_sm_reset_o;
I2C_REG_RESET_OUT <= not i2c_reg_reset_o;
-
+
-------------------------------------------------------------------------------
-- END
-------------------------------------------------------------------------------