final working full DMA module
This commit is contained in:
parent
eceea6c381
commit
13ab5916b4
6 changed files with 149 additions and 204 deletions
|
@ -4,9 +4,6 @@ use ieee.numeric_std.all;
|
||||||
|
|
||||||
----------------------DMA Controller Entity---------------------------
|
----------------------DMA Controller Entity---------------------------
|
||||||
entity dma_controller is
|
entity dma_controller is
|
||||||
-- constant DATA_SIZE : integer := 7; -- Define constant for vector size for data of 8 bits
|
|
||||||
-- constant ADDRESS_SIZE : integer := 6; -- Define constant for vector size for address 7 bits
|
|
||||||
-- constant ID_SIZE : integer := 4; -- Define constant for vector size for size of Id's 5 bits
|
|
||||||
generic (
|
generic (
|
||||||
RAM_WRITE_CMD : natural := 15; -- Writing to ram command from rocc
|
RAM_WRITE_CMD : natural := 15; -- Writing to ram command from rocc
|
||||||
RAM_READ_CMD : natural := 127; -- Reading from ram command from rocc
|
RAM_READ_CMD : natural := 127; -- Reading from ram command from rocc
|
||||||
|
@ -35,11 +32,8 @@ end entity;
|
||||||
----------------------DMA Controller Behaviour------------------------
|
----------------------DMA Controller Behaviour------------------------
|
||||||
|
|
||||||
architecture dma_controller_arch of dma_controller is
|
architecture dma_controller_arch of dma_controller is
|
||||||
--Signal count_from_noc : std_logic_vector(ID_SIZE downto 0);
|
|
||||||
Signal count_to_noc : std_logic_vector(ID_SIZE downto 0);
|
Signal count_to_noc : std_logic_vector(ID_SIZE downto 0);
|
||||||
Signal address_to_ram : std_logic_vector(ADDRESS_SIZE downto 0);
|
Signal address_to_ram : std_logic_vector(ADDRESS_SIZE downto 0);
|
||||||
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
process(clk, rst)
|
process(clk, rst)
|
||||||
begin
|
begin
|
||||||
|
@ -50,78 +44,72 @@ begin
|
||||||
address_bus_from_dma <= (others => '0');
|
address_bus_from_dma <= (others => '0');
|
||||||
tx_packet_length_noc_from_dma <= (others => '0');
|
tx_packet_length_noc_from_dma <= (others => '0');
|
||||||
data_trans_from_dma_to_core <= (others => '0');
|
data_trans_from_dma_to_core <= (others => '0');
|
||||||
-- count_from_noc <= (others => '0');
|
|
||||||
count_to_noc <= (others => '0');
|
count_to_noc <= (others => '0');
|
||||||
address_to_ram <= (others => '0');
|
address_to_ram <= (others => '0');
|
||||||
|
|
||||||
|
|
||||||
elsif rising_edge(clk) then
|
elsif rising_edge(clk) then
|
||||||
----------------------Writing to RAM from NOC------------------------
|
----------------------Writing to RAM from NOC------------------------
|
||||||
|
|
||||||
if funct_core_to_dma = std_logic_vector(to_unsigned(RAM_WRITE_CMD, DATA_SIZE)) then --- x"0f" 15 Its arbitarly choosen from RoCC_Interface
|
if funct_core_to_dma = std_logic_vector(to_unsigned(RAM_WRITE_CMD, DATA_SIZE)) then --- x"0f" 15 Its arbitarly choosen from RoCC_Interface
|
||||||
if unsigned(count_to_noc) < (unsigned(size_core_to_dma)) then --+10 will reproduce same valid signal comparing rx_packet_length_noc_to_dma = size_core_to_dma
|
if unsigned(count_to_noc) < (unsigned(size_core_to_dma)) then
|
||||||
if count_to_noc = "00000" then ---count_from_noc but not working in the wave simulation
|
if count_to_noc = "00000" then ---count_from_noc but not working in the wave simulation
|
||||||
address_to_ram <= address_core_to_dma;
|
address_to_ram <= address_core_to_dma;
|
||||||
count_to_noc <= std_logic_vector(unsigned(count_to_noc) + 1);
|
count_to_noc <= std_logic_vector(unsigned(count_to_noc) + 1);
|
||||||
--write_enable_from_dma <= '1'; --Write Enable
|
|
||||||
--end if;
|
|
||||||
elsif receive_valid_to_dma_from_noc = '1' then
|
elsif receive_valid_to_dma_from_noc = '1' then
|
||||||
address_bus_from_dma <= address_to_ram;
|
address_bus_from_dma <= address_to_ram;
|
||||||
--report "write_enable_from_dma is 1 from Line 68";
|
--report "write_enable_from_dma is 1 from Line 68";
|
||||||
write_enable_from_dma <= '1'; --Write Enable ----<<<<Why the value is not updateded>>>>
|
write_enable_from_dma <= '1'; --Write Enable
|
||||||
read_enable_from_dma <= '0'; --'0'
|
read_enable_from_dma <= '0'; --'0'
|
||||||
data_trans_from_dma_to_core <= count_to_noc ;-- std_logic_vector(unsigned(count_to_noc) - 1)
|
data_trans_from_dma_to_core <= count_to_noc ;-- std_logic_vector(unsigned(count_to_noc) - 1)
|
||||||
address_to_ram <= std_logic_vector(unsigned(address_to_ram) + 1);
|
address_to_ram <= std_logic_vector(unsigned(address_to_ram) + 1);
|
||||||
count_to_noc <= std_logic_vector(unsigned(count_to_noc) + 1);
|
count_to_noc <= std_logic_vector(unsigned(count_to_noc) + 1);
|
||||||
else
|
else
|
||||||
----report "write_enable_from_dma is 0 from Line 75";
|
----report "write_enable_from_dma is 0 from Line 75";
|
||||||
write_enable_from_dma <= '0'; --Write Enable ----<<<<Why the value is not updateded>>>>
|
write_enable_from_dma <= '0'; --Write Enable
|
||||||
read_enable_from_dma <= '0'; --'0'
|
read_enable_from_dma <= '0'; --'0'
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
else
|
else
|
||||||
----report "write_enable_from_dma is 0 from Line 75";
|
----report "write_enable_from_dma is 0 from Line 75";
|
||||||
write_enable_from_dma <= '0'; --Write Enable ----<<<<Why the value is not updateded>>>>
|
write_enable_from_dma <= '0'; --Write Enable
|
||||||
read_enable_from_dma <= '0'; --'0'
|
read_enable_from_dma <= '0'; --'0'
|
||||||
|
count_to_noc <= (others => '0');
|
||||||
|
data_trans_from_dma_to_core <= (others => '0');
|
||||||
|
|
||||||
end if;
|
end if;
|
||||||
-- else
|
|
||||||
-- count_from_noc <= (others => '0');
|
|
||||||
-- read_enable_from_dma <= '0';
|
|
||||||
-- write_enable_from_dma <= 'Z';--'0';
|
|
||||||
-- sent_valid_from_dma_to_noc <= '0';
|
|
||||||
-- end if;
|
|
||||||
|
|
||||||
----------------------Reading from RAM to NOC------------------------
|
----------------------Reading from RAM to NOC------------------------
|
||||||
elsif funct_core_to_dma = std_logic_vector(to_unsigned(RAM_READ_CMD, DATA_SIZE)) then --- x"7f" 127 Its arbitarly choosen from RoCC_Interface
|
elsif funct_core_to_dma = std_logic_vector(to_unsigned(RAM_READ_CMD, DATA_SIZE)) then --- x"7f" 127 Its arbitarly choosen from RoCC_Interface
|
||||||
if unsigned(count_to_noc) < unsigned(size_core_to_dma) then --sent_ack_to_dma_from_noc could be used instead of the count to Noc
|
if unsigned(count_to_noc) < unsigned(size_core_to_dma) then
|
||||||
if count_to_noc = "00000" then
|
if count_to_noc = "00000" then
|
||||||
address_to_ram <= address_core_to_dma;
|
address_to_ram <= address_core_to_dma;
|
||||||
tx_packet_length_noc_from_dma <= size_core_to_dma; --giving the size to the header of the NoC flit
|
tx_packet_length_noc_from_dma <= size_core_to_dma; --giving the size to the header of the NoC flit
|
||||||
count_to_noc <= std_logic_vector(unsigned(count_to_noc) + 1);
|
count_to_noc <= std_logic_vector(unsigned(count_to_noc) + 1);
|
||||||
---sent_valid_from_dma_to_noc <= '1';
|
|
||||||
else
|
else
|
||||||
address_bus_from_dma <= address_to_ram;
|
address_bus_from_dma <= address_to_ram;
|
||||||
write_enable_from_dma <= '0';
|
write_enable_from_dma <= '0';
|
||||||
read_enable_from_dma <= '1'; --Read Enable
|
read_enable_from_dma <= '1'; --Read Enable
|
||||||
data_trans_from_dma_to_core <= sent_ack_to_dma_from_noc;
|
data_trans_from_dma_to_core <= count_to_noc;--sent_ack_to_dma_from_noc;
|
||||||
address_to_ram <= std_logic_vector(unsigned(address_to_ram) + 1);
|
address_to_ram <= std_logic_vector(unsigned(address_to_ram) + 1);
|
||||||
count_to_noc <= std_logic_vector(unsigned(count_to_noc) + 1);
|
count_to_noc <= std_logic_vector(unsigned(count_to_noc) + 1);
|
||||||
sent_valid_from_dma_to_noc <= '1';
|
sent_valid_from_dma_to_noc <= '1';
|
||||||
end if;
|
end if;
|
||||||
elsif unsigned(count_to_noc) < (unsigned(size_core_to_dma)+2) then
|
elsif unsigned(count_to_noc) < (unsigned(size_core_to_dma)+2) then
|
||||||
count_to_noc <= std_logic_vector(unsigned(count_to_noc) + 1);
|
count_to_noc <= std_logic_vector(unsigned(count_to_noc) + 1);
|
||||||
sent_valid_from_dma_to_noc <= '1';
|
sent_valid_from_dma_to_noc <= '1';
|
||||||
else
|
else
|
||||||
read_enable_from_dma <= '0';
|
read_enable_from_dma <= '0';
|
||||||
write_enable_from_dma <= '0';
|
write_enable_from_dma <= '0';
|
||||||
sent_valid_from_dma_to_noc <= '0';
|
sent_valid_from_dma_to_noc <= '0';
|
||||||
|
count_to_noc <= (others => '0');
|
||||||
end if;
|
end if;
|
||||||
else
|
else
|
||||||
count_to_noc <= (others => '0');
|
count_to_noc <= (others => '0');
|
||||||
read_enable_from_dma <= '0';
|
read_enable_from_dma <= '0';
|
||||||
--report "write_enable_from_dma is 0 from Line 111";
|
--report "write_enable_from_dma is 0 from Line 111";
|
||||||
write_enable_from_dma <= '0';
|
write_enable_from_dma <= '0';
|
||||||
sent_valid_from_dma_to_noc <= '0';
|
sent_valid_from_dma_to_noc <= '0';
|
||||||
|
data_trans_from_dma_to_core <= (others => '0');
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
end process;
|
end process;
|
||||||
|
|
88
FULL_DMA.vhd
88
FULL_DMA.vhd
|
@ -2,13 +2,9 @@ library ieee;
|
||||||
use ieee.std_logic_1164.all;
|
use ieee.std_logic_1164.all;
|
||||||
use ieee.numeric_std.all;
|
use ieee.numeric_std.all;
|
||||||
|
|
||||||
----------------------Full DMA Entity---------------------------
|
----------------------------------------Full DMA Entity-------------------------------------------
|
||||||
entity full_dma is
|
entity full_dma is
|
||||||
-- constant DATA_SIZE : integer := 7; -- Define constant for vector size for data of 8 bits
|
|
||||||
-- constant INST_SIZE : integer := 6; -- Define constant for vector size for inst of 6 bits
|
|
||||||
-- constant LENGTH : integer := 4; -- Define constant for vector size for size of Id's 5 bits
|
|
||||||
-- constant PACKET : integer := 31; -- Define constant for vector size for size of packet 32 bits
|
|
||||||
-- constant REG_SIZE : integer := 63; -- Define constant for vector size for size of Reg 64 bits
|
|
||||||
generic (
|
generic (
|
||||||
DATA_SIZE : natural := 7; -- Define constant for vector size for data of 8 bits
|
DATA_SIZE : natural := 7; -- Define constant for vector size for data of 8 bits
|
||||||
INST_SIZE : natural := 6; -- Define constant for vector size for inst of 6 bits
|
INST_SIZE : natural := 6; -- Define constant for vector size for inst of 6 bits
|
||||||
|
@ -22,7 +18,7 @@ entity full_dma is
|
||||||
clk : in std_logic;
|
clk : in std_logic;
|
||||||
rst : in std_logic;
|
rst : in std_logic;
|
||||||
local_noc_rx : in std_logic_vector(PACKET downto 0);--- --From Noc
|
local_noc_rx : in std_logic_vector(PACKET downto 0);--- --From Noc
|
||||||
local_vc_write_rx_noc : in std_logic; ---_vector(192-1 downto 0);--From NoC
|
local_vc_write_rx_noc : in std_logic; --From NoC
|
||||||
local_incr_rx_vec_noc : in std_logic;
|
local_incr_rx_vec_noc : in std_logic;
|
||||||
cmd_valid : in std_logic; --From Core
|
cmd_valid : in std_logic; --From Core
|
||||||
cmd_inst_funct : in std_logic_vector(INST_SIZE downto 0); --From Core
|
cmd_inst_funct : in std_logic_vector(INST_SIZE downto 0); --From Core
|
||||||
|
@ -38,12 +34,12 @@ entity full_dma is
|
||||||
cmd_busy : out std_logic; --To Core
|
cmd_busy : out std_logic; --To Core
|
||||||
cmd_ready : out std_logic; --To Core --always one
|
cmd_ready : out std_logic; --To Core --always one
|
||||||
local_noc_tx : out std_logic_vector(PACKET downto 0);--- --To NoC
|
local_noc_tx : out std_logic_vector(PACKET downto 0);--- --To NoC
|
||||||
local_vc_write_tx_noc : out std_logic; ---_vector(192-1 downto 0);--To NoC
|
local_vc_write_tx_noc : out std_logic; --To NoC
|
||||||
local_incr_tx_vec_noc : out std_logic --To NoC
|
local_incr_tx_vec_noc : out std_logic --To NoC
|
||||||
);
|
);
|
||||||
end entity;
|
end entity;
|
||||||
|
|
||||||
----------------------Full DMA Behaviour------------------------
|
----------------------------------------Full DMA Behaviour-------------------------------------------
|
||||||
|
|
||||||
architecture full_dma_arch of full_dma is
|
architecture full_dma_arch of full_dma is
|
||||||
component single_port_ram is
|
component single_port_ram is
|
||||||
|
@ -69,15 +65,15 @@ architecture full_dma_arch of full_dma is
|
||||||
data_bus_noc_in : in std_logic_vector(DATA_SIZE downto 0); --From RAM
|
data_bus_noc_in : in std_logic_vector(DATA_SIZE downto 0); --From RAM
|
||||||
tx_packet_length_noc : in std_logic_vector(LENGTH downto 0); --From DMA
|
tx_packet_length_noc : in std_logic_vector(LENGTH downto 0); --From DMA
|
||||||
local_noc_rx : in std_logic_vector(REG_SIZE downto 0);--- --From Noc
|
local_noc_rx : in std_logic_vector(REG_SIZE downto 0);--- --From Noc
|
||||||
local_vc_write_rx_noc: in std_logic; ---_vector(192-1 downto 0); --From NoC
|
local_vc_write_rx_noc: in std_logic; --From NoC
|
||||||
local_incr_rx_vec_noc: in std_logic; --From NoC
|
local_incr_rx_vec_noc: in std_logic; --From NoC
|
||||||
rx_packet_length_noc : out std_logic_vector(LENGTH downto 0); --To DMA
|
rx_packet_length_noc : out std_logic_vector(LENGTH downto 0); --To DMA
|
||||||
local_noc_tx : out std_logic_vector(REG_SIZE downto 0);--- --To NoC
|
local_noc_tx : out std_logic_vector(REG_SIZE downto 0);--- --To NoC
|
||||||
local_vc_write_tx_noc: out std_logic; ---_vector(192-1 downto 0); --To NoC
|
local_vc_write_tx_noc: out std_logic; --To NoC
|
||||||
local_incr_tx_vec_noc: out std_logic; --To NoC
|
local_incr_tx_vec_noc: out std_logic; --To NoC
|
||||||
receive_valid_to_dma : out std_logic; --To DMA
|
receive_valid_to_dma : out std_logic; --To DMA
|
||||||
sent_ack_to_dma : out std_logic_vector(LENGTH downto 0);--------- --To DMA
|
sent_ack_to_dma : out std_logic_vector(LENGTH downto 0);--------- --To DMA
|
||||||
data_bus_noc_out : out std_logic_vector(DATA_SIZE downto 0) --To RAM
|
data_bus_noc_out : out std_logic_vector(DATA_SIZE downto 0) --To RAM
|
||||||
);
|
);
|
||||||
end component;
|
end component;
|
||||||
component rocc_interface is
|
component rocc_interface is
|
||||||
|
@ -126,46 +122,18 @@ architecture full_dma_arch of full_dma is
|
||||||
signal address_bus_sig : std_logic_vector(INST_SIZE downto 0);
|
signal address_bus_sig : std_logic_vector(INST_SIZE downto 0);
|
||||||
signal read_enable_sig : std_logic;
|
signal read_enable_sig : std_logic;
|
||||||
signal write_enable_sig : std_logic;
|
signal write_enable_sig : std_logic;
|
||||||
-- signal Read_write_enable_sig : std_logic_vector(1 downto 0);
|
|
||||||
signal data_bus_in_sig : std_logic_vector(DATA_SIZE downto 0);
|
signal data_bus_in_sig : std_logic_vector(DATA_SIZE downto 0);
|
||||||
signal data_bus_out_sig : std_logic_vector(DATA_SIZE downto 0);
|
signal data_bus_out_sig : std_logic_vector(DATA_SIZE downto 0);
|
||||||
|
|
||||||
|
|
||||||
signal sent_valid_from_dma_sig : std_logic;
|
signal sent_valid_from_dma_sig : std_logic;
|
||||||
--signal data_bus_noc_in_sig : std_logic_vector(DATA_SIZE downto 0);
|
|
||||||
signal tx_packet_length_noc_sig : std_logic_vector(LENGTH downto 0);
|
signal tx_packet_length_noc_sig : std_logic_vector(LENGTH downto 0);
|
||||||
signal rx_packet_length_noc_sig : std_logic_vector(LENGTH downto 0);
|
signal rx_packet_length_noc_sig : std_logic_vector(LENGTH downto 0);
|
||||||
--signal local_noc_tx_sig : std_logic_vector(PACKET downto 0);
|
|
||||||
--signal local_vc_write_rx_noc_sig : std_logic;
|
|
||||||
signal receive_valid_to_dma_sig : std_logic;
|
signal receive_valid_to_dma_sig : std_logic;
|
||||||
signal sent_ack_to_dma_sig : std_logic_vector(LENGTH downto 0);
|
signal sent_ack_to_dma_sig : std_logic_vector(LENGTH downto 0);
|
||||||
--signal data_bus_noc_out _sig : std_logic_vector(DATA_SIZE downto 0);
|
|
||||||
|
|
||||||
signal data_trans_from_dma_sig : std_logic_vector(LENGTH downto 0);
|
signal data_trans_from_dma_sig : std_logic_vector(LENGTH downto 0);
|
||||||
signal funct_to_dma_sig : std_logic_vector(INST_SIZE downto 0);
|
signal funct_to_dma_sig : std_logic_vector(INST_SIZE downto 0);
|
||||||
signal address_to_dma_sig : std_logic_vector(INST_SIZE downto 0);
|
signal address_to_dma_sig : std_logic_vector(INST_SIZE downto 0);
|
||||||
signal size_to_dma_sig : std_logic_vector(LENGTH downto 0);
|
signal size_to_dma_sig : std_logic_vector(LENGTH downto 0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--signal rx_packet_length_noc_to_dma_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
-- signal receive_valid_to_dma_from_noc_sig : std_logic;
|
|
||||||
--signal sent_ack_to_dma_from_noc_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
--signal funct_core_to_dma_sig : std_logic_vector(INST_SIZE downto 0);
|
|
||||||
--signal address_core_to_dma_sig : std_logic_vector(INST_SIZE downto 0);
|
|
||||||
--Signal size_core_to_dma_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
--signal address_bus_from_dma_sig : std_logic_vector(DATA_SIZE downto 0);
|
|
||||||
-- signal Read_write_enable_from_dma_sig : std_logic_vector(1 downto 0);
|
|
||||||
--signal sent_valid_from_dma_to_noc_sig : std_logic;
|
|
||||||
--signal tx_packet_length_noc_from_dma_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
--signal data_trans_from_dma_to_core_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
-- Single_Port_RAM mapping
|
-- Single_Port_RAM mapping
|
||||||
single_port_ram_inst : single_port_ram
|
single_port_ram_inst : single_port_ram
|
||||||
|
@ -179,7 +147,6 @@ architecture full_dma_arch of full_dma is
|
||||||
data_bus_out => data_bus_out_sig
|
data_bus_out => data_bus_out_sig
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
-- Noc_Interface mapping
|
-- Noc_Interface mapping
|
||||||
noc_interface_inst : noc_interface
|
noc_interface_inst : noc_interface
|
||||||
generic map (
|
generic map (
|
||||||
|
@ -246,43 +213,6 @@ architecture full_dma_arch of full_dma is
|
||||||
tx_packet_length_noc_from_dma => tx_packet_length_noc_sig,
|
tx_packet_length_noc_from_dma => tx_packet_length_noc_sig,
|
||||||
data_trans_from_dma_to_core => data_trans_from_dma_sig
|
data_trans_from_dma_to_core => data_trans_from_dma_sig
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
end architecture;
|
end architecture;
|
||||||
|
|
||||||
----mapping need to be done yet-------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- signal address_bus_sig : std_logic_vector(DATA_SIZE downto 0);
|
|
||||||
-- -- signal Read_write_enable_sig : std_logic_vector(1 downto 0);
|
|
||||||
-- signal data_bus_in_sig : std_logic_vector(DATA_SIZE downto 0);
|
|
||||||
-- signal data_bus_out_sig : std_logic_vector(DATA_SIZE downto 0);
|
|
||||||
|
|
||||||
-- signal sent_valid_from_dma_sig : std_logic;
|
|
||||||
-- signal data_bus_noc_in_sig : std_logic_vector(DATA_SIZE downto 0);
|
|
||||||
-- signal tx_packet_length_noc_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
-- signal rx_packet_length_noc_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
-- signal local_noc_tx_sig : std_logic_vector(PACKET downto 0);
|
|
||||||
-- signal local_vc_write_rx_noc_sig : std_logic;
|
|
||||||
-- signal receive_valid_to_dma_sig : std_logic;
|
|
||||||
-- signal sent_ack_to_dma_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
-- signal data_bus_noc_out _sig : std_logic_vector(DATA_SIZE downto 0);
|
|
||||||
|
|
||||||
-- signal data_trans_from_dma_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
-- signal funct_to_dma_sig : std_logic_vector(INST_SIZE downto 0);
|
|
||||||
-- signal address_to_dma_sig : std_logic_vector(INST_SIZE downto 0);
|
|
||||||
-- signal size_to_dma_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
|
|
||||||
-- signal rx_packet_length_noc_to_dma_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
-- signal receive_valid_to_dma_from_noc_sig : std_logic;
|
|
||||||
-- signal sent_ack_to_dma_from_noc_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
-- signal funct_core_to_dma_sig : std_logic_vector(INST_SIZE downto 0);
|
|
||||||
-- signal address_core_to_dma_sig : std_logic_vector(INST_SIZE downto 0);
|
|
||||||
-- Signal size_core_to_dma_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
-- signal address_bus_from_dma_sig : std_logic_vector(DATA_SIZE downto 0);
|
|
||||||
-- -- signal Read_write_enable_from_dma_sig : std_logic_vector(1 downto 0);
|
|
||||||
-- signal sent_valid_from_dma_to_noc_sig : std_logic;
|
|
||||||
-- signal tx_packet_length_noc_from_dma_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
-- signal data_trans_from_dma_to_core_sig : std_logic_vector(LENGTH downto 0);
|
|
||||||
|
|
107
FULL_DMA_tb.vhd
107
FULL_DMA_tb.vhd
|
@ -2,6 +2,7 @@ library ieee;
|
||||||
use ieee.std_logic_1164.all;
|
use ieee.std_logic_1164.all;
|
||||||
use ieee.numeric_std.all;
|
use ieee.numeric_std.all;
|
||||||
use work.NOC_3D_PACKAGE.all;
|
use work.NOC_3D_PACKAGE.all;
|
||||||
|
use std.env.stop;
|
||||||
|
|
||||||
-- vcom -work work -2008 -explicit -stats=none D:/project_item_ids/DMA_VHDL/DMA_ARCH_MODULAR_DESGIN/FULL_DMA_tb.vhd
|
-- vcom -work work -2008 -explicit -stats=none D:/project_item_ids/DMA_VHDL/DMA_ARCH_MODULAR_DESGIN/FULL_DMA_tb.vhd
|
||||||
|
|
||||||
|
@ -15,10 +16,9 @@ architecture fulldmatb_arch of fulldmatb is
|
||||||
constant LENGTH : natural := 4; -- Define constant for vector size for size of Id's 5 bits
|
constant LENGTH : natural := 4; -- Define constant for vector size for size of Id's 5 bits
|
||||||
constant PACKET : natural := 31; -- Define constant for vector size for size of packet 32 bits
|
constant PACKET : natural := 31; -- Define constant for vector size for size of packet 32 bits
|
||||||
constant REG_SIZE : natural := 63; -- Define constant for vector size for size of Reg 64 bits
|
constant REG_SIZE : natural := 63; -- Define constant for vector size for size of Reg 64 bits
|
||||||
|
constant DMA_WRITE_TO_RAM : std_logic_vector(6 downto 0) := std_logic_vector(to_unsigned(15, 7)); --"0001111";
|
||||||
|
constant DMA_READ_TO_RAM : std_logic_vector(6 downto 0) := std_logic_vector(to_unsigned(127, 7)); --"1111111";
|
||||||
|
|
||||||
|
|
||||||
---- type flit_vector is array (natural range <>) of std_logic_vector(31 downto 0);
|
|
||||||
component full_dma is
|
component full_dma is
|
||||||
generic (
|
generic (
|
||||||
DATA_SIZE : natural := 7; -- Define constant for vector size for data of 8 bits
|
DATA_SIZE : natural := 7; -- Define constant for vector size for data of 8 bits
|
||||||
|
@ -33,7 +33,7 @@ architecture fulldmatb_arch of fulldmatb is
|
||||||
clk : in std_logic;
|
clk : in std_logic;
|
||||||
rst : in std_logic;
|
rst : in std_logic;
|
||||||
local_noc_rx : in std_logic_vector(PACKET downto 0);--- --From Noc
|
local_noc_rx : in std_logic_vector(PACKET downto 0);--- --From Noc
|
||||||
local_vc_write_rx_noc : in std_logic; ---_vector(192-1 downto 0);--From NoC
|
local_vc_write_rx_noc : in std_logic; --From NoC
|
||||||
local_incr_rx_vec_noc : in std_logic;
|
local_incr_rx_vec_noc : in std_logic;
|
||||||
cmd_valid : in std_logic; --From Core
|
cmd_valid : in std_logic; --From Core
|
||||||
cmd_inst_funct : in std_logic_vector(INST_SIZE downto 0); --From Core
|
cmd_inst_funct : in std_logic_vector(INST_SIZE downto 0); --From Core
|
||||||
|
@ -49,7 +49,7 @@ architecture fulldmatb_arch of fulldmatb is
|
||||||
cmd_busy : out std_logic; --To Core
|
cmd_busy : out std_logic; --To Core
|
||||||
cmd_ready : out std_logic; --To Core --always one
|
cmd_ready : out std_logic; --To Core --always one
|
||||||
local_noc_tx : out std_logic_vector(PACKET downto 0);--- --To NoC
|
local_noc_tx : out std_logic_vector(PACKET downto 0);--- --To NoC
|
||||||
local_vc_write_tx_noc : out std_logic; ---_vector(192-1 downto 0);--To NoC
|
local_vc_write_tx_noc : out std_logic; --To NoC
|
||||||
local_incr_tx_vec_noc : out std_logic --To NoC
|
local_incr_tx_vec_noc : out std_logic --To NoC
|
||||||
);
|
);
|
||||||
end component;
|
end component;
|
||||||
|
@ -74,8 +74,6 @@ architecture fulldmatb_arch of fulldmatb is
|
||||||
signal local_incr_rx_vec_sig : std_logic_vector(192-1 downto 0) := (others => '0');
|
signal local_incr_rx_vec_sig : std_logic_vector(192-1 downto 0) := (others => '0');
|
||||||
signal local_vc_write_tx_sig : std_logic_vector(192-1 downto 0) := (others => '0');
|
signal local_vc_write_tx_sig : std_logic_vector(192-1 downto 0) := (others => '0');
|
||||||
signal local_incr_tx_vec_sig : std_logic_vector(192-1 downto 0) := (others => '0');
|
signal local_incr_tx_vec_sig : std_logic_vector(192-1 downto 0) := (others => '0');
|
||||||
|
|
||||||
|
|
||||||
signal local_vc_write_tx_noc1 : std_logic;
|
signal local_vc_write_tx_noc1 : std_logic;
|
||||||
signal cmd_valid,local_vc_write_tx_noc2 : std_logic;
|
signal cmd_valid,local_vc_write_tx_noc2 : std_logic;
|
||||||
signal cmd_inst_funct1,cmd_inst_funct2 : std_logic_vector(INST_SIZE downto 0);
|
signal cmd_inst_funct1,cmd_inst_funct2 : std_logic_vector(INST_SIZE downto 0);
|
||||||
|
@ -90,22 +88,17 @@ architecture fulldmatb_arch of fulldmatb is
|
||||||
signal cmd_rs2_1, cmd_rs2_2 : std_logic_vector(REG_SIZE downto 0);
|
signal cmd_rs2_1, cmd_rs2_2 : std_logic_vector(REG_SIZE downto 0);
|
||||||
signal cmd_busy : std_logic;
|
signal cmd_busy : std_logic;
|
||||||
signal cmd_ready : std_logic;
|
signal cmd_ready : std_logic;
|
||||||
|
|
||||||
signal local_tx_sig1, local_tx_sig2 : std_logic_vector(PACKET downto 0);--- --To NoC
|
signal local_tx_sig1, local_tx_sig2 : std_logic_vector(PACKET downto 0);--- --To NoC
|
||||||
signal local_rx_sig1, local_rx_sig2 : std_logic_vector(PACKET downto 0);--- --To NoC
|
signal local_rx_sig1, local_rx_sig2 : std_logic_vector(PACKET downto 0);--- --To NoC
|
||||||
signal local_vc_write_rx_sig1, local_vc_write_rx_sig2 : std_logic;
|
signal local_vc_write_rx_sig1, local_vc_write_rx_sig2 : std_logic;
|
||||||
signal local_vc_write_tx_sig1, local_vc_write_tx_sig2 : std_logic;
|
signal local_vc_write_tx_sig1, local_vc_write_tx_sig2 : std_logic;
|
||||||
signal local_incr_tx_vec_sig1, local_incr_tx_vec_sig2 : std_logic;
|
signal local_incr_tx_vec_sig1, local_incr_tx_vec_sig2 : std_logic;
|
||||||
signal local_incr_rx_vec_sig1, local_incr_rx_vec_sig2 : std_logic;
|
signal local_incr_rx_vec_sig1, local_incr_rx_vec_sig2 : std_logic;
|
||||||
|
|
||||||
signal failed_status_test1 : std_logic := '0';
|
signal failed_status_test1 : std_logic := '0';
|
||||||
type ram_array is array (0 to 127 ) of std_logic_vector (DATA_SIZE downto 0);
|
type ram_array is array (0 to 127 ) of std_logic_vector (DATA_SIZE downto 0);
|
||||||
alias ram_sig1 is <<signal.fulldma_inst1.single_port_ram_inst.ram: ram_array>>;
|
alias ram_sig1 is <<signal.fulldma_inst1.single_port_ram_inst.ram: ram_array>>;
|
||||||
alias ram_sig2 is <<signal.fulldma_inst2.single_port_ram_inst.ram: ram_array>>;
|
alias ram_sig2 is <<signal.fulldma_inst2.single_port_ram_inst.ram: ram_array>>;
|
||||||
|
|
||||||
-- alias ram_sig1 is fulldma_inst1.single_port_ram_inst.ram : ram_array;
|
|
||||||
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
-- Component instantiation with a label
|
-- Component instantiation with a label
|
||||||
fulldma_inst1 : full_dma
|
fulldma_inst1 : full_dma
|
||||||
|
@ -116,9 +109,6 @@ begin
|
||||||
port map (
|
port map (
|
||||||
clk => clk_tb,
|
clk => clk_tb,
|
||||||
rst => rst_tb,
|
rst => rst_tb,
|
||||||
-- local_incr_tx_vec_noc => local_incr_tx_vec_sig(1 sll (DEST_ID_inst1 + 1)),
|
|
||||||
-- local_noc_rx => local_rx_sig(DEST_ID_inst1),
|
|
||||||
-- local_vc_write_tx_noc => local_vc_write_tx_sig(1 sll (DEST_ID_inst1 + 1)),
|
|
||||||
local_noc_rx => local_rx_sig1,
|
local_noc_rx => local_rx_sig1,
|
||||||
local_vc_write_rx_noc => local_vc_write_rx_sig1,
|
local_vc_write_rx_noc => local_vc_write_rx_sig1,
|
||||||
local_incr_rx_vec_noc => local_incr_rx_vec_sig1,
|
local_incr_rx_vec_noc => local_incr_rx_vec_sig1,
|
||||||
|
@ -138,9 +128,6 @@ begin
|
||||||
local_noc_tx => local_tx_sig1,
|
local_noc_tx => local_tx_sig1,
|
||||||
local_vc_write_tx_noc => local_vc_write_tx_sig1,
|
local_vc_write_tx_noc => local_vc_write_tx_sig1,
|
||||||
local_incr_tx_vec_noc => local_incr_tx_vec_sig1
|
local_incr_tx_vec_noc => local_incr_tx_vec_sig1
|
||||||
-- local_incr_rx_vec_noc => local_incr_tx_vec_sig(1 sll (SOURCE_ID_inst1 + 1)),
|
|
||||||
-- local_noc_tx => local_tx_sig(SOURCE_ID_inst1),
|
|
||||||
-- local_vc_write_rx_noc => local_vc_write_tx_sig(1 sll (SOURCE_ID_inst1 + 1))
|
|
||||||
);
|
);
|
||||||
-- Component instantiation with a label
|
-- Component instantiation with a label
|
||||||
fulldma_inst2 : full_dma
|
fulldma_inst2 : full_dma
|
||||||
|
@ -151,9 +138,6 @@ begin
|
||||||
port map (
|
port map (
|
||||||
clk => clk_tb,
|
clk => clk_tb,
|
||||||
rst => rst_tb,
|
rst => rst_tb,
|
||||||
-- local_incr_tx_vec_noc => local_incr_tx_vec_sig(1 sll (DEST_ID_inst2 + 1)),
|
|
||||||
-- local_noc_rx => local_rx_sig(DEST_ID_inst2),
|
|
||||||
-- local_vc_write_tx_noc => local_vc_write_tx_sig(1 sll (DEST_ID_inst2 + 1)),
|
|
||||||
local_noc_rx => local_rx_sig2,
|
local_noc_rx => local_rx_sig2,
|
||||||
local_vc_write_rx_noc => local_vc_write_rx_sig2,
|
local_vc_write_rx_noc => local_vc_write_rx_sig2,
|
||||||
local_incr_rx_vec_noc => local_incr_rx_vec_sig2,
|
local_incr_rx_vec_noc => local_incr_rx_vec_sig2,
|
||||||
|
@ -173,7 +157,6 @@ begin
|
||||||
local_noc_tx => local_tx_sig2,
|
local_noc_tx => local_tx_sig2,
|
||||||
local_vc_write_tx_noc => local_vc_write_tx_sig2,
|
local_vc_write_tx_noc => local_vc_write_tx_sig2,
|
||||||
local_incr_tx_vec_noc => local_incr_tx_vec_sig2
|
local_incr_tx_vec_noc => local_incr_tx_vec_sig2
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
full_noc_inst1 : full_noc
|
full_noc_inst1 : full_noc
|
||||||
|
@ -203,56 +186,113 @@ begin
|
||||||
--rx
|
--rx
|
||||||
local_rx_sig(1) <= local_tx_sig1;
|
local_rx_sig(1) <= local_tx_sig1;
|
||||||
local_vc_write_rx_sig(4) <= local_vc_write_tx_sig1;
|
local_vc_write_rx_sig(4) <= local_vc_write_tx_sig1;
|
||||||
|
local_incr_rx_vec_sig(0) <= local_incr_tx_vec_sig2;--- sig1
|
||||||
--tx
|
--tx
|
||||||
local_rx_sig1 <= local_tx_sig(1);
|
local_rx_sig1 <= local_tx_sig(1);
|
||||||
local_vc_write_rx_sig1 <= local_vc_write_tx_sig(4);
|
local_vc_write_rx_sig1 <= local_vc_write_tx_sig(4);
|
||||||
|
local_incr_rx_vec_sig1 <= local_incr_tx_vec_sig(4);
|
||||||
|
|
||||||
--inst2 [rx_dma <= tx_noc] & [rx_noc <= tx_dma] source zero[0]
|
--inst2 [rx_dma <= tx_noc] & [rx_noc <= tx_dma] source zero[0]
|
||||||
-- rx
|
-- rx
|
||||||
local_rx_sig(0) <= local_tx_sig2;
|
local_rx_sig(0) <= local_tx_sig2;
|
||||||
local_vc_write_rx_sig(0) <= local_vc_write_tx_sig2;
|
local_vc_write_rx_sig(0) <= local_vc_write_tx_sig2;
|
||||||
|
local_incr_rx_vec_sig(4) <= local_incr_tx_vec_sig1;--- sig2
|
||||||
--tx destination one[1]
|
--tx destination one[1]
|
||||||
local_rx_sig2 <= local_tx_sig(0);
|
local_rx_sig2 <= local_tx_sig(0);
|
||||||
local_vc_write_rx_sig2 <= local_vc_write_tx_sig(0);
|
local_vc_write_rx_sig2 <= local_vc_write_tx_sig(0);
|
||||||
|
local_incr_rx_vec_sig2 <= local_incr_tx_vec_sig(0);
|
||||||
|
|
||||||
|
|
||||||
-- Simulation process to assign values to CtrlCommand
|
-- Simulation process to assign values to CtrlCommand
|
||||||
simproc: process
|
simproc: process
|
||||||
begin
|
begin
|
||||||
|
-- local_vc_write_tx_noc2 <= '0';
|
||||||
cmd_valid <= '0';
|
cmd_valid <= '0';
|
||||||
rst_tb <= '0';
|
rst_tb <= '0';
|
||||||
wait for 10 ns;
|
wait for 10 ns;
|
||||||
rst_tb <= '1';
|
rst_tb <= '1';
|
||||||
wait for 40 ns;
|
wait for 40 ns;
|
||||||
-----------------------------------------------Test1---------------------------------------------------
|
-----------------------------------------------Test1---------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cmd_inst_funct2 <= "0011110"; --#define DMA_WRITE_TO_RAM 30 /// 0X1E
|
cmd_inst_funct2 <= "0011110"; --#define DMA_WRITE_TO_RAM 30 /// 0X1E
|
||||||
cmd_inst_funct1 <= "0011111"; --#define DMA_READ_FROM_RAM 31 /// 0X1F
|
cmd_inst_funct1 <= "0011111"; --#define DMA_READ_FROM_RAM 31 /// 0X1F
|
||||||
|
|
||||||
cmd_rs1_1 <= std_logic_vector(to_unsigned(0, 57)) & "0000010"; --7 bit address & 57 bit zeros
|
cmd_rs1_1 <= std_logic_vector(to_unsigned(0, 57)) & "0000010"; --7 bit address & 57 bit zeros
|
||||||
cmd_rs1_2 <= std_logic_vector(to_unsigned(0, 57)) & "0001000"; --7 bit address & 57 bit zeros
|
cmd_rs1_2 <= std_logic_vector(to_unsigned(0, 57)) & "0001000"; --7 bit address & 57 bit zeros
|
||||||
|
|
||||||
cmd_rs2_1 <= std_logic_vector(to_unsigned(0, 59)) & "00100"; --5 bit size & 59 bit zeros
|
cmd_rs2_1 <= std_logic_vector(to_unsigned(0, 59)) & "11100"; --5 bit size & 59 bit zeros
|
||||||
cmd_rs2_2 <= std_logic_vector(to_unsigned(0, 59)) & "00100"; --5 bit size & 59 bit zeros
|
cmd_rs2_2 <= std_logic_vector(to_unsigned(0, 59)) & "11100"; --5 bit size & 59 bit zeros
|
||||||
|
|
||||||
wait for 20 ns;
|
wait for 20 ns;
|
||||||
cmd_valid <= '1';
|
cmd_valid <= '1';
|
||||||
wait for 40 ns;
|
wait for 40 ns;
|
||||||
cmd_valid <= '0';
|
cmd_valid <= '0';
|
||||||
-- local_vc_write_tx_noc2 <= '1';
|
|
||||||
wait for 180 ns;
|
wait for 180 ns;
|
||||||
-- local_vc_write_tx_noc2 <= '0';
|
|
||||||
|
|
||||||
for i in 0 to to_integer(unsigned(cmd_rs2_1)) loop
|
for i in 0 to to_integer(unsigned(cmd_rs2_1)) loop
|
||||||
if(ram_sig1(to_integer(unsigned(cmd_rs1_1)) + i ) /= ram_sig2(to_integer(unsigned(cmd_rs1_2)) + i)) then
|
if(ram_sig1(to_integer(unsigned(cmd_rs1_1)) + i ) /= ram_sig2(to_integer(unsigned(cmd_rs1_2)) + i)) then
|
||||||
report "Test is failed: memory elements are not equal at location " &
|
report "Test1 is failed: memory elements are not equal at location " &
|
||||||
"cmd_rs1_1 = " & integer'image(to_integer(unsigned(cmd_rs1_1)+i)) &
|
"cmd_rs1_1 = " & integer'image(to_integer(unsigned(cmd_rs1_1)+i)) &
|
||||||
", cmd_rs1_2 = " & integer'image(to_integer(unsigned(cmd_rs1_2)+i))
|
", cmd_rs1_2 = " & integer'image(to_integer(unsigned(cmd_rs1_2)+i))
|
||||||
severity note;
|
severity note;
|
||||||
failed_status_test1 <= '1';
|
failed_status_test1 <= '1';
|
||||||
exit; -- Exit the loop
|
stop;--exit; -- Exit the loop
|
||||||
|
end if;
|
||||||
|
end loop;
|
||||||
|
|
||||||
|
wait for 200 ns;--200
|
||||||
|
----------------------------------------------Test2------------------------------------------------------
|
||||||
|
cmd_inst_funct1 <= "0011110"; --#define DMA_WRITE_TO_RAM 30 /// 0X1E
|
||||||
|
cmd_inst_funct2 <= "0011111"; --#define DMA_READ_FROM_RAM 31 /// 0X1F
|
||||||
|
|
||||||
|
cmd_rs1_2 <= std_logic_vector(to_unsigned(0, 57)) & "0000101"; --7 bit address & 57 bit zeros
|
||||||
|
cmd_rs1_1 <= std_logic_vector(to_unsigned(0, 57)) & "0001101"; --7 bit address & 57 bit zeros
|
||||||
|
|
||||||
|
cmd_rs2_2 <= std_logic_vector(to_unsigned(0, 59)) & "00100"; --5 bit size & 59 bit zeros
|
||||||
|
cmd_rs2_1 <= std_logic_vector(to_unsigned(0, 59)) & "00100"; --5 bit size & 59 bit zeros
|
||||||
|
|
||||||
|
wait for 20 ns;
|
||||||
|
cmd_valid <= '1';
|
||||||
|
wait for 40 ns;
|
||||||
|
cmd_valid <= '0';
|
||||||
|
wait for 180 ns;
|
||||||
|
|
||||||
|
for i in 0 to to_integer(unsigned(cmd_rs2_1)) loop
|
||||||
|
if(ram_sig1(to_integer(unsigned(cmd_rs1_1)) + i ) /= ram_sig2(to_integer(unsigned(cmd_rs1_2)) + i)) then
|
||||||
|
report "Test2 is failed: memory elements are not equal at location " &
|
||||||
|
"cmd_rs1_1 = " & integer'image(to_integer(unsigned(cmd_rs1_1)+i)) &
|
||||||
|
", cmd_rs1_2 = " & integer'image(to_integer(unsigned(cmd_rs1_2)+i))
|
||||||
|
severity note;
|
||||||
|
failed_status_test1 <= '1';
|
||||||
|
stop;--exit; -- Exit the loop
|
||||||
|
end if;
|
||||||
|
end loop;
|
||||||
|
|
||||||
|
wait for 100 ns;
|
||||||
|
|
||||||
|
----------------------------------------------Test3------------------------------------------------------
|
||||||
|
cmd_inst_funct1 <= "0011110"; --#define DMA_WRITE_TO_RAM 30 /// 0X1E
|
||||||
|
cmd_inst_funct2 <= "0011111"; --#define DMA_READ_FROM_RAM 31 /// 0X1F
|
||||||
|
|
||||||
|
cmd_rs1_2 <= std_logic_vector(to_unsigned(0, 57)) & "0001101"; --7 bit address & 57 bit zeros
|
||||||
|
cmd_rs1_1 <= std_logic_vector(to_unsigned(0, 57)) & "0010101"; --7 bit address & 57 bit zeros
|
||||||
|
|
||||||
|
cmd_rs2_2 <= std_logic_vector(to_unsigned(0, 59)) & "01100"; --5 bit size & 59 bit zeros
|
||||||
|
cmd_rs2_1 <= std_logic_vector(to_unsigned(0, 59)) & "01100"; --5 bit size & 59 bit zeros
|
||||||
|
|
||||||
|
wait for 20 ns;
|
||||||
|
cmd_valid <= '1';
|
||||||
|
wait for 40 ns;
|
||||||
|
cmd_valid <= '0';
|
||||||
|
wait for 180 ns;
|
||||||
|
|
||||||
|
for i in 0 to to_integer(unsigned(cmd_rs2_1)) loop
|
||||||
|
if(ram_sig1(to_integer(unsigned(cmd_rs1_1)) + i ) /= ram_sig2(to_integer(unsigned(cmd_rs1_2)) + i)) then
|
||||||
|
report "Test3 is failed: memory elements are not equal at location " &
|
||||||
|
"cmd_rs1_1 = " & integer'image(to_integer(unsigned(cmd_rs1_1)+i)) &
|
||||||
|
", cmd_rs1_2 = " & integer'image(to_integer(unsigned(cmd_rs1_2)+i))
|
||||||
|
severity note;
|
||||||
|
failed_status_test1 <= '1';
|
||||||
|
stop;--exit; -- Exit the loop
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
|
|
||||||
|
@ -260,14 +300,11 @@ begin
|
||||||
|
|
||||||
--------------------------------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------------------------------
|
||||||
if failed_status_test1 = '0' then
|
if failed_status_test1 = '0' then
|
||||||
report "Test is passed: memory elements are equal starting locations " &
|
report "All Test's are passed: memory elements are equal starting locations " &
|
||||||
"cmd_rs1_1 = " & integer'image(to_integer(unsigned(cmd_rs1_1))) &
|
"cmd_rs1_1 = " & integer'image(to_integer(unsigned(cmd_rs1_1))) &
|
||||||
", cmd_rs1_2 = " & integer'image(to_integer(unsigned(cmd_rs1_2)))
|
", cmd_rs1_2 = " & integer'image(to_integer(unsigned(cmd_rs1_2)))
|
||||||
severity note;
|
severity note;
|
||||||
end if;
|
end if;
|
||||||
wait for 1000 ns;
|
wait for 1000 ns;
|
||||||
|
|
||||||
|
|
||||||
-- -- wait for 1000 ns ;
|
|
||||||
end process;
|
end process;
|
||||||
end architecture;
|
end architecture;
|
||||||
|
|
|
@ -11,10 +11,6 @@ use ieee.numeric_std.all;
|
||||||
|
|
||||||
----------------------NoC Interface Entity---------------------------
|
----------------------NoC Interface Entity---------------------------
|
||||||
entity noc_interface is
|
entity noc_interface is
|
||||||
-- constant DATA_SIZE : integer := 7; -- Define constant for vector size for data of 8 bits
|
|
||||||
-- constant LENGTH : integer := 4; -- Define constant for vector size for size of Id's 5 bits
|
|
||||||
-- constant PACKET : integer := 11; -- Define constant for vector size for size of Id's 12 bits
|
|
||||||
-- constant REG_SIZE : integer := 31; -- Define constant for vector size for size of Reg 31 bits
|
|
||||||
generic (
|
generic (
|
||||||
DATA_SIZE : natural := 7; -- Define constant for vector size for data of 8 bits
|
DATA_SIZE : natural := 7; -- Define constant for vector size for data of 8 bits
|
||||||
LENGTH : natural := 4; -- Define constant for vector size for size of Id's 5 bits
|
LENGTH : natural := 4; -- Define constant for vector size for size of Id's 5 bits
|
||||||
|
@ -49,10 +45,6 @@ architecture noc_interface_arch of noc_interface is
|
||||||
signal count : std_logic_vector(LENGTH downto 0);
|
signal count : std_logic_vector(LENGTH downto 0);
|
||||||
signal sent_packet : std_logic_vector(LENGTH downto 0);
|
signal sent_packet : std_logic_vector(LENGTH downto 0);
|
||||||
signal packet_len : std_logic_vector(LENGTH downto 0);
|
signal packet_len : std_logic_vector(LENGTH downto 0);
|
||||||
|
|
||||||
|
|
||||||
--signal packet_length : std_logic_vector(4 downto 0);
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
rxprocess : process(clk, rst)
|
rxprocess : process(clk, rst)
|
||||||
begin
|
begin
|
||||||
|
@ -60,7 +52,7 @@ begin
|
||||||
rx_packet_length_noc <= (others => '0');
|
rx_packet_length_noc <= (others => '0');
|
||||||
local_noc_tx <= (others => '0');
|
local_noc_tx <= (others => '0');
|
||||||
local_vc_write_tx_noc <= '0';
|
local_vc_write_tx_noc <= '0';
|
||||||
--local_incr_tx_vec_noc <= '0';
|
local_incr_tx_vec_noc <= '0';-----
|
||||||
receive_valid_to_dma <= '0';
|
receive_valid_to_dma <= '0';
|
||||||
sent_ack_to_dma <= (others => '0');
|
sent_ack_to_dma <= (others => '0');
|
||||||
data_bus_noc_out <= (others => '0');
|
data_bus_noc_out <= (others => '0');
|
||||||
|
@ -80,25 +72,28 @@ begin
|
||||||
count <= (others => '0'); --counter reset
|
count <= (others => '0'); --counter reset
|
||||||
packet_id <= local_noc_rx(28 downto 17); --current packetid
|
packet_id <= local_noc_rx(28 downto 17); --current packetid
|
||||||
receive_valid_to_dma <= '1';
|
receive_valid_to_dma <= '1';
|
||||||
|
local_incr_tx_vec_noc <= '1';-------
|
||||||
elsif(unsigned(count) <= unsigned(packet_len) and unsigned(packet_len) > 0) then
|
elsif(unsigned(count) <= unsigned(packet_len) and unsigned(packet_len) > 0) then
|
||||||
report "receive_valid_to_dma is 1 from Line 80";
|
report "receive_valid_to_dma is 1 from Line 80";
|
||||||
|
|
||||||
receive_valid_to_dma <= '1'; --valid to DMA
|
receive_valid_to_dma <= '1'; --valid to DMA
|
||||||
count <= std_logic_vector(unsigned(count) + 1); --counter update
|
count <= std_logic_vector(unsigned(count) + 1); --counter update
|
||||||
data_bus_noc_out <= local_noc_rx(DATA_SIZE downto 0 ); --NoC is given to RAM
|
data_bus_noc_out <= local_noc_rx(DATA_SIZE downto 0 ); --NoC is given to RAM
|
||||||
|
local_incr_tx_vec_noc <= '1';-------
|
||||||
else
|
else
|
||||||
report "receive_valid_to_dma is 0 from Line 86";
|
report "receive_valid_to_dma is 0 from Line 86";
|
||||||
packet_len <= (others=>'0');
|
packet_len <= (others=>'0');
|
||||||
receive_valid_to_dma <= '0';
|
receive_valid_to_dma <= '0';
|
||||||
data_bus_noc_out <= (others=>'0');
|
data_bus_noc_out <= (others=>'0');
|
||||||
count <= (others=>'0');
|
count <= (others=>'0');
|
||||||
|
local_incr_tx_vec_noc <= '0';-------
|
||||||
|
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
--------------------Writing to NoC----------------------------------
|
--------------------Writing to NoC----------------------------------
|
||||||
|
|
||||||
elsif ((sent_valid_from_dma = '1') and (to_integer(unsigned(tx_packet_length_noc)) >= 0)) then -- the valid from dma is one cycle behind
|
elsif ((sent_valid_from_dma = '1') and (to_integer(unsigned(tx_packet_length_noc)) >= 0)) then -- the valid from dma is one cycle behind
|
||||||
if(sent_packet = "00000") then
|
if(sent_packet = "00000") then
|
||||||
--sent_ack_to_dma <= std_logic_vector(unsigned(sent_packet) + 1); --to DMA updated value
|
|
||||||
sent_packet <= std_logic_vector(unsigned(sent_packet) + 1);
|
sent_packet <= std_logic_vector(unsigned(sent_packet) + 1);
|
||||||
--updating packet id
|
--updating packet id
|
||||||
local_noc_tx <= "100" & packet_id & SOURCE_ID & DEST_ID & tx_packet_length_noc;
|
local_noc_tx <= "100" & packet_id & SOURCE_ID & DEST_ID & tx_packet_length_noc;
|
||||||
|
@ -113,7 +108,7 @@ begin
|
||||||
rx_packet_length_noc <= (others => '0');
|
rx_packet_length_noc <= (others => '0');
|
||||||
local_noc_tx <= (others => '0');
|
local_noc_tx <= (others => '0');
|
||||||
local_vc_write_tx_noc <= '0';
|
local_vc_write_tx_noc <= '0';
|
||||||
---local_incr_tx_vec_noc <= '0';
|
local_incr_tx_vec_noc <= '0';---
|
||||||
receive_valid_to_dma <= '0';
|
receive_valid_to_dma <= '0';
|
||||||
sent_ack_to_dma <= (others => '0');
|
sent_ack_to_dma <= (others => '0');
|
||||||
data_bus_noc_out <= (others => '0');
|
data_bus_noc_out <= (others => '0');
|
||||||
|
|
|
@ -11,40 +11,36 @@ use ieee.numeric_std.all;
|
||||||
|
|
||||||
----------------------RoCC Interface Entity---------------------------
|
----------------------RoCC Interface Entity---------------------------
|
||||||
entity rocc_interface is
|
entity rocc_interface is
|
||||||
-- constant INST_SIZE : integer := 6; -- Define constant for vector size for inst of 6 bits
|
|
||||||
-- constant LENGTH : integer := 4; -- Define constant for vector size for size of Id's 5 bits
|
|
||||||
-- constant PACKET : integer := 11; -- Define constant for vector size for size of Id's 12 bits
|
|
||||||
-- constant REG_SIZE : integer := 63; -- Define constant for vector size for size of Reg 63 bits
|
|
||||||
generic (
|
generic (
|
||||||
DMA_WRITE_TO_RAM : std_logic_vector(6 downto 0) := "0001111";
|
DMA_WRITE_TO_RAM : std_logic_vector(6 downto 0) := "0001111";
|
||||||
DMA_READ_TO_RAM : std_logic_vector(6 downto 0) := "1111111";
|
DMA_READ_TO_RAM : std_logic_vector(6 downto 0) := "1111111";
|
||||||
CORE_WRITE_FUNC : natural := 30; -- Write function from the core
|
CORE_WRITE_FUNC : natural := 30; -- Write function from the core
|
||||||
CORE_READ_FUNC : natural := 31; -- Read function from the core
|
CORE_READ_FUNC : natural := 31; -- Read function from the core
|
||||||
INST_SIZE : natural := 6; -- Define constant for vector size for inst of 6 bits
|
INST_SIZE : natural := 6; -- Define constant for vector size for inst of 6 bits
|
||||||
LENGTH : natural := 4; -- Define constant for vector size for size of Id's 5 bits
|
LENGTH : natural := 4; -- Define constant for vector size for size of Id's 5 bits
|
||||||
PACKET : natural := 11; -- Define constant for vector size for size of Id's 12 bits
|
PACKET : natural := 11; -- Define constant for vector size for size of Id's 12 bits
|
||||||
REG_SIZE : natural := 63 -- Define constant for vector size for size of Reg 63 bits
|
REG_SIZE : natural := 63 -- Define constant for vector size for size of Reg 63 bits
|
||||||
);
|
);
|
||||||
port(
|
port(
|
||||||
clk : in std_logic;
|
clk : in std_logic;
|
||||||
rst : in std_logic;
|
rst : in std_logic;
|
||||||
cmd_valid : in std_logic; --From Core
|
cmd_valid : in std_logic; --From Core
|
||||||
cmd_inst_funct : in std_logic_vector(INST_SIZE downto 0); --From Core
|
cmd_inst_funct : in std_logic_vector(INST_SIZE downto 0); --From Core
|
||||||
cmd_inst_opcode : in std_logic_vector(INST_SIZE downto 0); --From Core
|
cmd_inst_opcode : in std_logic_vector(INST_SIZE downto 0); --From Core
|
||||||
cmd_inst_rd : in std_logic_vector(LENGTH downto 0); --From Core
|
cmd_inst_rd : in std_logic_vector(LENGTH downto 0); --From Core
|
||||||
cmd_inst_rs1 : in std_logic_vector(LENGTH downto 0); --From Core
|
cmd_inst_rs1 : in std_logic_vector(LENGTH downto 0); --From Core
|
||||||
cmd_inst_rs2 : in std_logic_vector(LENGTH downto 0); --From Core
|
cmd_inst_rs2 : in std_logic_vector(LENGTH downto 0); --From Core
|
||||||
cmd_inst_xd : in std_logic; --From Core
|
cmd_inst_xd : in std_logic; --From Core
|
||||||
cmd_inst_xs1 : in std_logic; --From Core
|
cmd_inst_xs1 : in std_logic; --From Core
|
||||||
cmd_inst_xs2 : in std_logic; --From Core
|
cmd_inst_xs2 : in std_logic; --From Core
|
||||||
cmd_rs1 : in std_logic_vector(REG_SIZE downto 0); --From Core
|
cmd_rs1 : in std_logic_vector(REG_SIZE downto 0); --From Core
|
||||||
cmd_rs2 : in std_logic_vector(REG_SIZE downto 0); --From Core
|
cmd_rs2 : in std_logic_vector(REG_SIZE downto 0); --From Core
|
||||||
data_trans_from_dma : in std_logic_vector(LENGTH downto 0); --From DMA
|
data_trans_from_dma : in std_logic_vector(LENGTH downto 0); --From DMA
|
||||||
cmd_busy : out std_logic; --To Core
|
cmd_busy : out std_logic; --To Core
|
||||||
cmd_ready : out std_logic; --To Core --always one
|
cmd_ready : out std_logic; --To Core --always one
|
||||||
funct_to_dma : out std_logic_vector(INST_SIZE downto 0); --To DMA
|
funct_to_dma : out std_logic_vector(INST_SIZE downto 0); --To DMA
|
||||||
address_to_dma : out std_logic_vector(INST_SIZE downto 0); --To DMA
|
address_to_dma : out std_logic_vector(INST_SIZE downto 0); --To DMA
|
||||||
size_to_dma : out std_logic_vector(LENGTH downto 0) --To DMA
|
size_to_dma : out std_logic_vector(LENGTH downto 0) --To DMA
|
||||||
);
|
);
|
||||||
end entity;
|
end entity;
|
||||||
|
|
||||||
|
@ -55,8 +51,6 @@ architecture rocc_interface_arch of rocc_interface is
|
||||||
signal cmd_rs2_sig : std_logic_vector(REG_SIZE downto 0);
|
signal cmd_rs2_sig : std_logic_vector(REG_SIZE downto 0);
|
||||||
Signal cmd_inst_funct_sig : std_logic_vector(INST_SIZE downto 0);
|
Signal cmd_inst_funct_sig : std_logic_vector(INST_SIZE downto 0);
|
||||||
Signal cmd_valid_sig : std_logic;
|
Signal cmd_valid_sig : std_logic;
|
||||||
--signal Sent_packet : std_logic_vector(4 downto 0);
|
|
||||||
--signal packet_length : std_logic_vector(4 downto 0);
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
process(clk, rst)
|
process(clk, rst)
|
||||||
|
@ -70,33 +64,38 @@ begin
|
||||||
size_to_dma <= (others => '0');
|
size_to_dma <= (others => '0');
|
||||||
cmd_rs1_sig <= (others => '0');
|
cmd_rs1_sig <= (others => '0');
|
||||||
cmd_rs2_sig <= (others => '0');
|
cmd_rs2_sig <= (others => '0');
|
||||||
cmd_inst_funct_sig <= (others => '0');
|
cmd_inst_funct_sig <= (others => '0');---
|
||||||
|
|
||||||
elsif rising_edge(clk) then
|
elsif rising_edge(clk) then
|
||||||
|
|
||||||
--------------------Send to the DMA--------------------------------
|
--------------------Send to the DMA--------------------------------
|
||||||
|
|
||||||
if((cmd_valid_sig = '1') and (cmd_rs2_sig(LENGTH downto 0) > data_trans_from_dma)) then
|
if((cmd_valid_sig = '1') and (to_integer(unsigned(cmd_rs2_sig(LENGTH downto 0))) > (to_integer(unsigned(data_trans_from_dma))+1))) then
|
||||||
if cmd_inst_funct = std_logic_vector(to_unsigned(CORE_WRITE_FUNC, 7)) then --#define DMA_WRITE_TO_RAM 30 /// 0X1E
|
if cmd_inst_funct_sig = std_logic_vector(to_unsigned(CORE_WRITE_FUNC, 7)) then --#define DMA_WRITE_TO_RAM 30 /// 0X1E
|
||||||
funct_to_dma <= DMA_WRITE_TO_RAM;
|
funct_to_dma <= DMA_WRITE_TO_RAM;
|
||||||
elsif cmd_inst_funct = std_logic_vector(to_unsigned(CORE_READ_FUNC, 7))then--"001111" then --#define DMA_READ_FROM_RAM 31 /// 0X1F
|
elsif cmd_inst_funct_sig = std_logic_vector(to_unsigned(CORE_READ_FUNC, 7))then--"001111" then --#define DMA_READ_FROM_RAM 31 /// 0X1F
|
||||||
funct_to_dma <= DMA_READ_TO_RAM;
|
funct_to_dma <= DMA_READ_TO_RAM;
|
||||||
else
|
else
|
||||||
funct_to_dma <= (others => '0');
|
funct_to_dma <= (others => '0');
|
||||||
end if;
|
end if;
|
||||||
address_to_dma <= cmd_rs1_sig(INST_SIZE downto 0);
|
address_to_dma <= cmd_rs1_sig(INST_SIZE downto 0);
|
||||||
size_to_dma <= cmd_rs2_sig(LENGTH downto 0);
|
size_to_dma <= cmd_rs2_sig(LENGTH downto 0);
|
||||||
|
cmd_busy <= '1';
|
||||||
--------------------Reading from RoCC--------------------------------
|
--------------------Reading from RoCC--------------------------------
|
||||||
|
|
||||||
elsif (cmd_valid = '1') then
|
elsif (cmd_valid = '1' and (to_integer(unsigned(data_trans_from_dma)) = 0)) then
|
||||||
cmd_rs1_sig <= cmd_rs1;
|
cmd_rs1_sig <= cmd_rs1;
|
||||||
cmd_rs2_sig <= cmd_rs2; --size 4 downto 0 [5bits]
|
cmd_rs2_sig <= cmd_rs2; --size 4 downto 0 [5bits]
|
||||||
cmd_inst_funct_sig <= cmd_inst_funct;
|
cmd_inst_funct_sig <= cmd_inst_funct;----
|
||||||
cmd_valid_sig <= '1';
|
cmd_valid_sig <= '1';
|
||||||
|
cmd_busy <= '1';
|
||||||
|
|
||||||
else
|
else
|
||||||
cmd_valid_sig <= '0';
|
cmd_valid_sig <= '0';
|
||||||
|
cmd_busy <= '0';
|
||||||
cmd_rs1_sig <= (others => '0');
|
cmd_rs1_sig <= (others => '0');
|
||||||
cmd_rs1_sig <= (others => '0');
|
cmd_rs1_sig <= (others => '0');
|
||||||
|
funct_to_dma <= (others => '0');
|
||||||
cmd_inst_funct_sig <= (others => '0');
|
cmd_inst_funct_sig <= (others => '0');
|
||||||
|
|
||||||
end if;
|
end if;
|
||||||
|
|
|
@ -2,14 +2,12 @@ library ieee;
|
||||||
use ieee.std_logic_1164.all;
|
use ieee.std_logic_1164.all;
|
||||||
use ieee.numeric_std.all;
|
use ieee.numeric_std.all;
|
||||||
|
|
||||||
----------------------ram Entity---------------------------
|
----------------------------------------ram Entity---------------------------------------------------
|
||||||
entity single_port_ram is
|
entity single_port_ram is
|
||||||
generic (
|
generic (
|
||||||
DATA_SIZE : natural := 7; -- Default source ID should be changed
|
DATA_SIZE : natural := 7; -- Default source ID should be changed
|
||||||
ADDRESS_SIZE : natural := 6 -- Default destination ID should be changed
|
ADDRESS_SIZE : natural := 6 -- Default destination ID should be changed
|
||||||
);
|
);
|
||||||
--constant DATA_SIZE : integer := 7; -- Define constant for vector size for data of 8 bits
|
|
||||||
--constant ADDRESS_SIZE : integer := 6; -- Define constant for vector size for address 7 bits
|
|
||||||
port(
|
port(
|
||||||
clk : in std_logic;
|
clk : in std_logic;
|
||||||
rst : in std_logic;
|
rst : in std_logic;
|
||||||
|
@ -21,15 +19,13 @@ entity single_port_ram is
|
||||||
);
|
);
|
||||||
end entity;
|
end entity;
|
||||||
|
|
||||||
----------------------ram Behaviour------------------------
|
----------------------------------------ram Behaviour--------------------------------------------------
|
||||||
architecture single_port_ram_behav of single_port_ram is
|
architecture single_port_ram_behav of single_port_ram is
|
||||||
|
|
||||||
------- define the new type for the 128x8 ram
|
------- define the new type for the 128x8 ram
|
||||||
type ram_array is array (0 to 127 ) of std_logic_vector (DATA_SIZE downto 0);
|
type ram_array is array (0 to 127 ) of std_logic_vector (DATA_SIZE downto 0);
|
||||||
-------- initial values in the ram to X00
|
-------- initial values in the ram to X00
|
||||||
signal ram: ram_array := (others=>x"00");
|
signal ram: ram_array := (others=>x"00");
|
||||||
signal initialized : std_logic; -- Initialization flag
|
signal initialized : std_logic; -- Initialization flag
|
||||||
|
|
||||||
begin
|
begin
|
||||||
process(clk, rst)
|
process(clk, rst)
|
||||||
begin
|
begin
|
||||||
|
@ -46,7 +42,7 @@ begin
|
||||||
initialized <= '0';
|
initialized <= '0';
|
||||||
end if;
|
end if;
|
||||||
-- synthesis translate_on
|
-- synthesis translate_on
|
||||||
--Read Write functionality of ram
|
|
||||||
if (read_enable = '1' and write_enable = '0' )then --read enable; [MSB] READ Enable [LSB] WRITE Enable
|
if (read_enable = '1' and write_enable = '0' )then --read enable; [MSB] READ Enable [LSB] WRITE Enable
|
||||||
data_bus_out <= ram(to_integer(unsigned(address_bus(ADDRESS_SIZE downto 0 )))); -- read data from ram
|
data_bus_out <= ram(to_integer(unsigned(address_bus(ADDRESS_SIZE downto 0 )))); -- read data from ram
|
||||||
elsif (read_enable = '0' and write_enable = '1') then --write enable; [MSB] READ Enable [LSB] WRITE Enable
|
elsif (read_enable = '0' and write_enable = '1') then --write enable; [MSB] READ Enable [LSB] WRITE Enable
|
||||||
|
|
Loading…
Reference in a new issue