// Memory controller to access TVM VPI simulated RAM. // // You only see the wires and registers but no logics here. // The real computation is implemented via TVM VPI // // Usage: create and pass instance to additional arguments of $tvm_session. // Then it will be automatically hook up the RAM logic. // module tvm_vpi_mem_interface #( parameter READ_WIDTH = 8, parameter WRITE_WIDTH = 8, parameter ADDR_WIDTH = 32, parameter SIZE_WIDTH = 32 ) ( input clk, input rst, // Read Ports input read_en, // Read buffer enable output [READ_WIDTH-1:0] read_data_out, // The data port for read output read_data_valid, // Read is valid. // Write ports input write_en, // Write buffer enable input [WRITE_WIDTH-1:0] write_data_in, // Input data to write. output write_data_ready, // There are still pending write // Status port // Control signal ports to issue tasks input host_read_req, // Read request input [ADDR_WIDTH-1:0] host_read_addr, // The address to issue a read task input [SIZE_WIDTH-1:0] host_read_size, // The size of a read input host_write_req, // Write request. input [ADDR_WIDTH-1:0] host_write_addr, // The write address input [SIZE_WIDTH-1:0] host_write_size // The write size ); reg [READ_WIDTH-1:0] reg_read_data; reg reg_read_valid; reg reg_write_ready; // The wires up. assign read_data_out = reg_read_data; assign read_data_valid = reg_read_valid; assign write_data_ready = reg_write_ready; endmodule