summaryrefslogtreecommitdiff
path: root/tb/gfx_shader_bind/dut.sv
diff options
context:
space:
mode:
Diffstat (limited to 'tb/gfx_shader_bind/dut.sv')
-rw-r--r--tb/gfx_shader_bind/dut.sv139
1 files changed, 139 insertions, 0 deletions
diff --git a/tb/gfx_shader_bind/dut.sv b/tb/gfx_shader_bind/dut.sv
new file mode 100644
index 0000000..e1d1228
--- /dev/null
+++ b/tb/gfx_shader_bind/dut.sv
@@ -0,0 +1,139 @@
+module dut
+import gfx::*;
+(
+ input logic clk,
+ rst_n,
+
+ output logic mem_AWVALID,
+ input logic mem_AWREADY,
+ output logic[7:0] mem_AWID,
+ output logic[7:0] mem_AWLEN,
+ output logic[2:0] mem_AWSIZE,
+ output logic[2:0] mem_AWPROT,
+ output logic[1:0] mem_AWBURST,
+ output word mem_AWADDR,
+
+ output logic mem_WVALID,
+ input logic mem_WREADY,
+ output word mem_WDATA,
+ output logic mem_WLAST,
+ output logic[3:0] mem_WSTRB,
+
+ input logic mem_BVALID,
+ output logic mem_BREADY,
+ input logic[7:0] mem_BID,
+ input logic[1:0] mem_BRESP,
+
+ output logic mem_ARVALID,
+ input logic mem_ARREADY,
+ output logic[7:0] mem_ARID,
+ output logic[7:0] mem_ARLEN,
+ output logic[2:0] mem_ARSIZE,
+ output logic[2:0] mem_ARPROT,
+ output logic[1:0] mem_ARBURST,
+ output word mem_ARADDR,
+
+ input logic mem_RVALID,
+ output logic mem_RREADY,
+ input logic[7:0] mem_RID,
+ input word mem_RDATA,
+ input logic[1:0] mem_RRESP,
+ input logic mem_RLAST,
+
+ input logic icache_flush,
+
+ input logic loop_valid,
+ input group_id loop_group,
+
+ input word_ptr pc_front_pc,
+ output group_id pc_front_group,
+
+ output logic wave_valid,
+ wave_retry,
+ output group_id wave_group,
+ output word wave_insn,
+
+ output logic runnable_in_ready,
+ runnable_out_valid,
+ output group_id runnable_out_data
+);
+
+ if_axib mem();
+ gfx_front_back front_back();
+ gfx_regfile_io regfile();
+
+ assign mem_AWID = mem.s.awid;
+ assign mem_AWLEN = mem.s.awlen;
+ assign mem_AWADDR = mem.s.awaddr;
+ assign mem_AWSIZE = mem.s.awsize;
+ assign mem_AWBURST = mem.s.awburst;
+ assign mem_AWVALID = mem.s.awvalid;
+ assign mem.s.awready = mem_AWREADY;
+
+ assign mem_WDATA = mem.s.wdata;
+ assign mem_WLAST = mem.s.wlast;
+ assign mem_WSTRB = mem.s.wstrb;
+ assign mem_WVALID = mem.s.wvalid;
+ assign mem.s.wready = mem_WREADY;
+
+ assign mem_BREADY = mem.s.bready;
+ assign mem.s.bid = mem_BID;
+ assign mem.s.bresp = mem_BRESP;
+ assign mem.s.bvalid = mem_BVALID;
+
+ assign mem_ARID = mem.s.arid;
+ assign mem_ARLEN = mem.s.arlen;
+ assign mem_ARADDR = mem.s.araddr;
+ assign mem_ARSIZE = mem.s.arsize;
+ assign mem_ARBURST = mem.s.arburst;
+ assign mem_ARVALID = mem.s.arvalid;
+ assign mem.s.arready = mem_ARREADY;
+
+ assign mem_RREADY = mem.s.rready;
+ assign mem.s.rid = mem_RID;
+ assign mem.s.rdata = mem_RDATA;
+ assign mem.s.rresp = mem_RRESP;
+ assign mem.s.rlast = mem_RLAST;
+ assign mem.s.rvalid = mem_RVALID;
+
+ assign mem_AWID = mem.s.awid;
+ assign mem_AWLEN = mem.s.awlen;
+ assign mem_AWADDR = mem.s.awaddr;
+ assign mem_AWSIZE = mem.s.awsize;
+ assign mem_AWBURST = mem.s.awburst;
+ assign mem_AWVALID = mem.s.awvalid;
+ assign mem.s.awready = mem_AWREADY;
+
+ assign mem_WDATA = mem.s.wdata;
+ assign mem_WLAST = mem.s.wlast;
+ assign mem_WSTRB = mem.s.wstrb;
+ assign mem_WVALID = mem.s.wvalid;
+ assign mem.s.wready = mem_WREADY;
+
+ assign pc_front_group = regfile.regs.pc_front_group;
+ assign regfile.regs.pc_front = pc_front_pc;
+
+ assign front_back.back.loop.group = loop_group;
+ assign front_back.back.loop.valid = loop_valid;
+
+ assign wave_insn = front.bind_.wave.insn;
+ assign wave_group = front.bind_.wave.group;
+ assign wave_retry = front.bind_.wave.retry;
+ assign wave_valid = front.bind_.wave.valid;
+
+ assign runnable_in_ready = front.bind_.runnable_in.tx.ready;
+ assign runnable_out_data = front.bind_.runnable_out.rx.data;
+ assign runnable_out_valid = front.bind_.runnable_out.rx.valid;
+
+ gfx_shader_front front
+ (
+ .clk,
+ .rst_n,
+ .front(front_back.front),
+ .reg_read(regfile.read), // Únicamente para que verilator esté feliz
+ .reg_bind(regfile.bind_),
+ .fetch_mem(mem.m),
+ .icache_flush
+ );
+
+endmodule