Line 67... |
Line 67... |
o_receive_fifo_full : out std_logic;
|
o_receive_fifo_full : out std_logic;
|
o_receive_fifo_data : out std_logic_vector(BUSWIDTH-1 downto 0);
|
o_receive_fifo_data : out std_logic_vector(BUSWIDTH-1 downto 0);
|
i_receive_fifo_reset : in std_logic;
|
i_receive_fifo_reset : in std_logic;
|
o_receive_transfersize : out std_logic_vector(31 downto 0);
|
o_receive_transfersize : out std_logic_vector(31 downto 0);
|
i_receive_transfersize_en : in std_logic_vector((32/SIZE_DBUS_GPIF)-1 downto 0);
|
i_receive_transfersize_en : in std_logic_vector((32/SIZE_DBUS_GPIF)-1 downto 0);
|
|
o_receive_transfersize_lsb : out std_logic;
|
i_receive_counter_load : in std_logic;
|
i_receive_counter_load : in std_logic;
|
i_receive_counter_en : in std_logic;
|
i_receive_counter_en : in std_logic;
|
o_receive_counter_zero : out std_logic;
|
o_receive_counter_zero : out std_logic;
|
o_dev_dep_msg_out : out std_logic;
|
o_dev_dep_msg_out : out std_logic;
|
o_request_dev_dep_msg_in : out std_logic;
|
o_request_dev_dep_msg_in : out std_logic;
|
Line 142... |
Line 143... |
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
|
|
signal s_receive_transfersize : std_logic_vector(31 downto 0);
|
signal s_receive_transfersize : std_logic_vector(31 downto 0);
|
signal s_send_transfersize_reg: std_logic_vector(31 downto 0);
|
signal s_send_transfersize_reg: std_logic_vector(31 downto 0);
|
|
|
signal s_receive_transfersize_count: std_logic_vector(31 downto 0);
|
signal s_receive_transfersize_count : std_logic_vector(30 downto 0);
|
signal s_send_transfersize_count: std_logic_vector(31 downto 0);
|
signal s_send_transfersize_count : std_logic_vector(30 downto 0);
|
|
|
signal s_receive_fifo_empty : std_logic;
|
signal s_receive_fifo_empty : std_logic;
|
|
|
signal s_send_fifo_data : std_logic_vector(SIZE_DBUS_GPIF-1 downto 0);
|
signal s_send_fifo_data : std_logic_vector(SIZE_DBUS_GPIF-1 downto 0);
|
signal s_btag, s_nbtag, s_msg_id: std_logic_vector(7 downto 0);
|
signal s_btag, s_nbtag, s_msg_id: std_logic_vector(7 downto 0);
|
Line 200... |
Line 201... |
end if;
|
end if;
|
end if;
|
end if;
|
end process receive_transfersize;
|
end process receive_transfersize;
|
|
|
o_receive_transfersize <= s_receive_transfersize;
|
o_receive_transfersize <= s_receive_transfersize;
|
|
o_receive_transfersize_lsb <= s_receive_transfersize(0);
|
|
|
|
|
-- purpose: 32 bit send_transfersize register
|
-- purpose: 32 bit send_transfersize register
|
-- type : sequential
|
-- type : sequential
|
-- inputs : i_sysclk, i_nReset, i_send_transfersize, i_receive_transfersize_en
|
-- inputs : i_sysclk, i_nReset, i_send_transfersize, i_receive_transfersize_en
|
Line 228... |
Line 230... |
begin -- process receive_counter
|
begin -- process receive_counter
|
if i_nReset = '0' then -- asynchronous reset (active low)
|
if i_nReset = '0' then -- asynchronous reset (active low)
|
s_receive_transfersize_count <= (others => '0');
|
s_receive_transfersize_count <= (others => '0');
|
elsif i_sysclk'event and i_sysclk = '1' then -- rising clock edge
|
elsif i_sysclk'event and i_sysclk = '1' then -- rising clock edge
|
if i_receive_counter_load = '1' then
|
if i_receive_counter_load = '1' then
|
s_receive_transfersize_count <= s_receive_transfersize;
|
s_receive_transfersize_count <= s_receive_transfersize(31 downto 1);
|
end if;
|
elsif i_receive_counter_en = '1' then
|
if i_receive_counter_en = '1' then
|
|
s_receive_transfersize_count <= s_receive_transfersize_count - 1;
|
s_receive_transfersize_count <= s_receive_transfersize_count - 1;
|
|
else
|
|
s_receive_transfersize_count <= s_receive_transfersize_count;
|
end if;
|
end if;
|
end if;
|
end if;
|
end process receive_counter;
|
end process receive_counter;
|
|
|
o_receive_counter_zero <=
|
o_receive_counter_zero <=
|
'1' when s_receive_transfersize_count = x"0000" else
|
'1' when s_receive_transfersize_count = "000000000000000000000000000000"
|
'0';
|
else '0';
|
|
|
|
|
-- purpose: down counter for the send transfer size
|
-- purpose: down counter for the send transfer size
|
-- type : sequential
|
-- type : sequential
|
-- inputs : i_sysclk, i_nReset, s_send_transfersize_reg,
|
-- inputs : i_sysclk, i_nReset, s_send_transfersize_reg,
|
Line 252... |
Line 255... |
begin -- process send_counter
|
begin -- process send_counter
|
if i_nReset = '0' then -- asynchronous reset (active low)
|
if i_nReset = '0' then -- asynchronous reset (active low)
|
s_send_transfersize_count <= (others => '0');
|
s_send_transfersize_count <= (others => '0');
|
elsif i_sysclk'event and i_sysclk = '1' then -- rising clock edge
|
elsif i_sysclk'event and i_sysclk = '1' then -- rising clock edge
|
if i_send_counter_load = '1' then
|
if i_send_counter_load = '1' then
|
s_send_transfersize_count <= s_send_transfersize_reg;
|
s_send_transfersize_count <= s_send_transfersize_reg(31 downto 1);
|
end if;
|
elsif i_send_counter_en = '1' then
|
if i_send_counter_en = '1' then
|
|
s_send_transfersize_count <= s_send_transfersize_count - 1;
|
s_send_transfersize_count <= s_send_transfersize_count - 1;
|
|
else
|
|
s_send_transfersize_count <= s_send_transfersize_count;
|
end if;
|
end if;
|
end if;
|
end if;
|
end process send_counter;
|
end process send_counter;
|
|
|
o_send_counter_zero <=
|
o_send_counter_zero <=
|
'1' when s_send_transfersize_count = x"0000" else
|
'1' when s_send_transfersize_count = "000000000000000000000000000000"
|
'0';
|
else '0';
|
|
|
|
|
-- purpose: registers to store the btag and inverse btag
|
-- purpose: registers to store the btag and inverse btag
|
-- type : sequential
|
-- type : sequential
|
-- inputs : i_sysclk, i_nReset, i_btag_reg_en, i_nbtag_reg_en
|
-- inputs : i_sysclk, i_nReset, i_btag_reg_en, i_nbtag_reg_en
|
Line 301... |
Line 305... |
o_request_dev_dep_msg_in <=
|
o_request_dev_dep_msg_in <=
|
'1' when s_msg_id(7 downto 0) = x"02" else
|
'1' when s_msg_id(7 downto 0) = x"02" else
|
'0';
|
'0';
|
|
|
o_eom_bit_detected <=
|
o_eom_bit_detected <=
|
'1' when i_rx_data(15 downto 8) = b"00000001" else
|
'1' when i_rx_data(7 downto 0) = b"00000001" else
|
'0';
|
'0';
|
|
|
|
|
-- purpose: mulitiplexer to construct the tmc header structure
|
-- purpose: mulitiplexer to construct the tmc header structure
|
-- type : combinational
|
-- type : combinational
|
Line 314... |
Line 318... |
-- outputs: o_tx_data
|
-- outputs: o_tx_data
|
tx_data_mux: process (i_send_mux_sel, i_send_have_more_data, s_btag,
|
tx_data_mux: process (i_send_mux_sel, i_send_have_more_data, s_btag,
|
s_nbtag, s_send_fifo_data, s_send_transfersize_reg)
|
s_nbtag, s_send_fifo_data, s_send_transfersize_reg)
|
begin -- process tx_data_mux
|
begin -- process tx_data_mux
|
case i_send_mux_sel is
|
case i_send_mux_sel is
|
when "000" => o_tx_data <= x"02" & s_btag; -- MsgID and stored bTag
|
when "000" => o_tx_data <= s_btag & s_msg_id; -- MsgID and stored bTag
|
when "001" => o_tx_data <= s_nbtag & x"00"; -- inverted bTag and Reserved
|
when "001" => o_tx_data <= x"00" & s_nbtag; -- inverted bTag and Reserved
|
when "010" => o_tx_data <= s_send_transfersize_reg(15 downto 0);
|
when "010" => o_tx_data <= s_send_transfersize_reg(15 downto 0);
|
when "011" => o_tx_data <= s_send_transfersize_reg(31 downto 16);
|
when "011" => o_tx_data <= s_send_transfersize_reg(31 downto 16);
|
--TransferAttributes EOM bit:
|
--TransferAttributes EOM bit:
|
when "100" => o_tx_data <= b"000000000000000" & i_send_have_more_data;
|
when "100" => o_tx_data <= b"000000000000000" & not i_send_have_more_data;
|
when "101" => o_tx_data <= x"0000"; -- Header byte 10 and 11, Reserved
|
when "101" => o_tx_data <= x"0000"; -- Header byte 10 and 11, Reserved
|
when "110" => o_tx_data <= s_send_fifo_data; -- message data
|
when "110" => o_tx_data <= s_send_fifo_data; -- message data
|
when others => o_tx_data <= s_send_fifo_data;
|
when others => o_tx_data <= s_btag & s_msg_id; -- MsgID and stored bTag
|
end case;
|
end case;
|
end process tx_data_mux;
|
end process tx_data_mux;
|
|
|
|
|
-- purpose: set and reset behavour for the status flags
|
-- purpose: set and reset behavour for the status flags
|