From 3eeb01fe6f90351fa03f0f2917f0cf8b42c2c5b8 Mon Sep 17 00:00:00 2001 From: Paul Pan Date: Fri, 30 Jul 2021 11:34:57 +0800 Subject: [PATCH] fix4 --- resources/2021/soc_axi_func/testbench/tb2.sv | 4 +-- src/Core/Gadgets.sv | 36 +++++++++++++------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/resources/2021/soc_axi_func/testbench/tb2.sv b/resources/2021/soc_axi_func/testbench/tb2.sv index 7a9011a..b637cbe 100644 --- a/resources/2021/soc_axi_func/testbench/tb2.sv +++ b/resources/2021/soc_axi_func/testbench/tb2.sv @@ -28,8 +28,8 @@ module tb2_top (); assign btn_step = 2'd3; initial begin - $dumpfile("dump.vcd"); - $dumpvars(); + // $dumpfile("dump.vcd"); + // $dumpvars(); resetn = 1'b0; #2000; diff --git a/src/Core/Gadgets.sv b/src/Core/Gadgets.sv index b81dfbc..cc3fec7 100644 --- a/src/Core/Gadgets.sv +++ b/src/Core/Gadgets.sv @@ -82,32 +82,44 @@ module instr_valid ( endmodule module woutput ( - input logic [1:0] addr, - input word_t data, - input logic [1:0] size, - output word_t wdata, - output logic [3:0] wstrb, - output logic error + input logic [1:0] addr, + input word_t data, + input logic [1:0] size, + output word_t wdata, + output logic [3:0] wstrb, + output logic error ); always_comb casez (size) 2'b1?: begin wdata = data; - wstrb = 4'b1111; + wstrb = 4'b1111; error = (addr != 2'b00); end 2'b01: begin - wdata = addr[1] ? data[31:16] : data[15:0]; + wdata = addr[1] ? {data[15:0], 16'b0} : {16'b0, data[15:0]}; wstrb = addr[1] ? 4'b1100 : 4'b0011; error = (addr[0] != 1'b0); end 2'b00: begin case (addr) - 2'b11: begin wdata = data[31:24]; wstrb = 4'b1000; end - 2'b10: begin wdata = data[23:16]; wstrb = 4'b0100; end - 2'b01: begin wdata = data[15: 8]; wstrb = 4'b0010; end - 2'b00: begin wdata = data[ 7: 0]; wstrb = 4'b0001; end + 2'b11: begin + wdata = {data[7:0], 24'b0}; + wstrb = 4'b1000; + end + 2'b10: begin + wdata = {8'b0, data[7:0], 16'b0}; + wstrb = 4'b0100; + end + 2'b01: begin + wdata = {16'b0, data[7:0], 8'b0}; + wstrb = 4'b0010; + end + 2'b00: begin + wdata = {24'b0, data[7:0]}; + wstrb = 4'b0001; + end endcase error = 1'b0; end