Part way through the updated bus fsm for direct AHB in lsu/ifu + multi-manager.

This commit is contained in:
Ross Thompson 2022-08-29 13:01:24 -05:00
parent 40cf4a9ea9
commit 4d7b905806
4 changed files with 35 additions and 4 deletions

View File

@ -46,6 +46,8 @@ module ahblite (
input logic [1:0] IFUHTRANS, input logic [1:0] IFUHTRANS,
input logic IFUBusRead, input logic IFUBusRead,
input logic IFUTransComplete, input logic IFUTransComplete,
logic IFUHWRITE,
logic IFUHREADY,
output logic IFUBusInit, output logic IFUBusInit,
output logic IFUBusAck, output logic IFUBusAck,
@ -58,6 +60,8 @@ module ahblite (
input logic LSUBusRead, input logic LSUBusRead,
input logic LSUBusWrite, input logic LSUBusWrite,
input logic LSUTransComplete, input logic LSUTransComplete,
logic LSUHWRITE,
logic LSUHREADY,
output logic LSUBusInit, output logic LSUBusInit,
output logic LSUBusAck, output logic LSUBusAck,

View File

@ -44,6 +44,8 @@ module ifu (
(* mark_debug = "true" *) output logic IFUStallF, (* mark_debug = "true" *) output logic IFUStallF,
(* mark_debug = "true" *) output logic [2:0] IFUHBURST, (* mark_debug = "true" *) output logic [2:0] IFUHBURST,
(* mark_debug = "true" *) output logic [1:0] IFUHTRANS, (* mark_debug = "true" *) output logic [1:0] IFUHTRANS,
(* mark_debug = "true" *) output logic IFUHWRITE,
(* mark_debug = "true" *) input logic IFUHREADY,
(* mark_debug = "true" *) output logic IFUTransComplete, (* mark_debug = "true" *) output logic IFUTransComplete,
(* mark_debug = "true" *) output logic [`XLEN-1:0] PCF, (* mark_debug = "true" *) output logic [`XLEN-1:0] PCF,
// Execute // Execute
@ -248,11 +250,16 @@ module ifu (
assign IFUHADDR = PCPF; assign IFUHADDR = PCPF;
flopen #(`XLEN) fb(.clk, .en(IFUBusRead), .d(HRDATA), .q(AllInstrRawF[31:0])); flopen #(`XLEN) fb(.clk, .en(IFUBusRead), .d(HRDATA), .q(AllInstrRawF[31:0]));
/* -----\/----- EXCLUDED -----\/-----
busfsm #(LOGBWPL) busfsm( busfsm #(LOGBWPL) busfsm(
.clk, .reset, .RW(NonIROMMemRWM & ~{ITLBMissF, ITLBMissF}), .clk, .reset, .RW(NonIROMMemRWM & ~{ITLBMissF, ITLBMissF}),
.BusAck(IFUBusAck), .BusInit(IFUBusInit), .CPUBusy, .BusAck(IFUBusAck), .BusInit(IFUBusInit), .CPUBusy,
.BusStall, .BusWrite(), .BusRead(IFUBusRead), .BusStall, .BusWrite(), .BusRead(IFUBusRead),
.HTRANS(IFUHTRANS), .BusCommitted()); .HTRANS(IFUHTRANS), .BusCommitted());
-----/\----- EXCLUDED -----/\----- */
AHBBusfsm busfsm(.HCLK(clk), .HRESETn(~reset), .RW(NonIROMMemRWM & ~{ITLBMissF, ITLBMissF}),
.BusCommitted(), .CPUBusy, .HREADY(IFUHREADY), .BusStall, .HTRANS(IFUHTRANS), .HWRITE(IFUHWRITE));
assign IFUHBURST = 3'b0; assign IFUHBURST = 3'b0;
assign IFUTransComplete = IFUBusAck; assign IFUTransComplete = IFUBusAck;

View File

@ -78,6 +78,8 @@ module lsu (
(* mark_debug = "true" *) input logic LSUBusInit, (* mark_debug = "true" *) input logic LSUBusInit,
(* mark_debug = "true" *) input logic [`XLEN-1:0] HRDATA, (* mark_debug = "true" *) input logic [`XLEN-1:0] HRDATA,
(* mark_debug = "true" *) output logic [`XLEN-1:0] LSUHWDATA, (* mark_debug = "true" *) output logic [`XLEN-1:0] LSUHWDATA,
(* mark_debug = "true" *) input logic LSUHREADY,
(* mark_debug = "true" *) output logic LSUHWRITE,
(* mark_debug = "true" *) output logic [2:0] LSUHSIZE, (* mark_debug = "true" *) output logic [2:0] LSUHSIZE,
(* mark_debug = "true" *) output logic [2:0] LSUHBURST, (* mark_debug = "true" *) output logic [2:0] LSUHBURST,
(* mark_debug = "true" *) output logic [1:0] LSUHTRANS, (* mark_debug = "true" *) output logic [1:0] LSUHTRANS,
@ -276,11 +278,17 @@ module lsu (
flopen #(`XLEN) fb(.clk, .en(LSUBusRead), .d(HRDATA), .q(ReadDataWordM)); flopen #(`XLEN) fb(.clk, .en(LSUBusRead), .d(HRDATA), .q(ReadDataWordM));
assign LSUHWDATA = LSUWriteDataM[`XLEN-1:0]; assign LSUHWDATA = LSUWriteDataM[`XLEN-1:0];
/* -----\/----- EXCLUDED -----\/-----
busfsm #(LOGBWPL) busfsm( busfsm #(LOGBWPL) busfsm(
.clk, .reset, .RW(LSURWM & ~{IgnoreRequest, IgnoreRequest}), .clk, .reset, .RW(LSURWM & ~{IgnoreRequest, IgnoreRequest}),
.BusAck(LSUBusAck), .BusInit(LSUBusInit), .CPUBusy, .BusAck(LSUBusAck), .BusInit(LSUBusInit), .CPUBusy,
.BusStall, .BusWrite(LSUBusWrite), .BusRead(LSUBusRead), .BusStall, .BusWrite(LSUBusWrite), .BusRead(LSUBusRead),
.HTRANS(LSUHTRANS), .BusCommitted(BusCommittedM)); .HTRANS(LSUHTRANS), .BusCommitted(BusCommittedM));
-----/\----- EXCLUDED -----/\----- */
AHBBusfsm busfsm(.HCLK(clk), .HRESETn(~reset), .RW(LSURWM & ~{IgnoreRequest, IgnoreRequest}),
.BusCommitted(BusCommittedM), .CPUBusy, .BusStall, .HREADY(LSUHREADY), .HTRANS(LSUHTRANS),
.HWRITE(LSUHWRITE));
assign ReadDataWordMuxM = LittleEndianReadDataWordM; // from byte swapping assign ReadDataWordMuxM = LittleEndianReadDataWordM; // from byte swapping
assign LSUHBURST = 3'b0; assign LSUHBURST = 3'b0;

View File

@ -138,6 +138,8 @@ module wallypipelinedcore (
logic [2:0] IFUHBURST; logic [2:0] IFUHBURST;
logic [1:0] IFUHTRANS; logic [1:0] IFUHTRANS;
logic IFUTransComplete; logic IFUTransComplete;
logic IFUHWRITE;
logic IFUHREADY;
// AHB LSU interface // AHB LSU interface
logic [`PA_BITS-1:0] LSUHADDR; logic [`PA_BITS-1:0] LSUHADDR;
@ -145,6 +147,8 @@ module wallypipelinedcore (
logic LSUBusWrite; logic LSUBusWrite;
logic LSUBusAck, LSUBusInit; logic LSUBusAck, LSUBusInit;
logic [`XLEN-1:0] LSUHWDATA; logic [`XLEN-1:0] LSUHWDATA;
logic LSUHWRITE;
logic LSUHREADY;
logic BPPredWrongE; logic BPPredWrongE;
logic BPPredDirWrongM; logic BPPredDirWrongM;
@ -167,6 +171,7 @@ module wallypipelinedcore (
logic BigEndianM; logic BigEndianM;
logic FCvtIntE; logic FCvtIntE;
ifu ifu( ifu ifu(
.clk, .reset, .clk, .reset,
.StallF, .StallD, .StallE, .StallM, .StallF, .StallD, .StallE, .StallM,
@ -174,6 +179,7 @@ module wallypipelinedcore (
// Fetch // Fetch
.HRDATA, .IFUBusAck, .IFUBusInit, .PCF, .IFUHADDR, .HRDATA, .IFUBusAck, .IFUBusInit, .PCF, .IFUHADDR,
.IFUBusRead, .IFUStallF, .IFUHBURST, .IFUHTRANS, .IFUTransComplete, .IFUBusRead, .IFUStallF, .IFUHBURST, .IFUHTRANS, .IFUTransComplete,
.IFUHREADY, .IFUHWRITE,
.ICacheAccess, .ICacheMiss, .ICacheAccess, .ICacheMiss,
// Execute // Execute
@ -259,6 +265,7 @@ module wallypipelinedcore (
// connected to ahb (all stay the same) // connected to ahb (all stay the same)
.LSUHADDR, .LSUBusRead, .LSUBusWrite, .LSUBusAck, .LSUBusInit, .LSUHADDR, .LSUBusRead, .LSUBusWrite, .LSUBusAck, .LSUBusInit,
.HRDATA, .LSUHWDATA, .LSUHSIZE, .LSUHBURST, .LSUHTRANS, .LSUTransComplete, .HRDATA, .LSUHWDATA, .LSUHSIZE, .LSUHBURST, .LSUHTRANS, .LSUTransComplete,
.LSUHWRITE, .LSUHREADY,
// connect to csr or privilege and stay the same. // connect to csr or privilege and stay the same.
.PrivilegeModeW, .BigEndianM, // connects to csr .PrivilegeModeW, .BigEndianM, // connects to csr
@ -296,6 +303,9 @@ module wallypipelinedcore (
.IFUTransComplete, .IFUTransComplete,
.IFUBusAck, .IFUBusAck,
.IFUBusInit, .IFUBusInit,
.IFUHWRITE,
.IFUHREADY,
// Signals from Data Cache // Signals from Data Cache
.LSUHADDR, .LSUBusRead, .LSUBusWrite, .LSUHWDATA, .LSUHADDR, .LSUBusRead, .LSUBusWrite, .LSUHWDATA,
.LSUHSIZE, .LSUHSIZE,
@ -304,6 +314,8 @@ module wallypipelinedcore (
.LSUTransComplete, .LSUTransComplete,
.LSUBusAck, .LSUBusAck,
.LSUBusInit, .LSUBusInit,
.LSUHWRITE,
.LSUHREADY,
.HREADY, .HRESP, .HCLK, .HRESETn, .HREADY, .HRESP, .HCLK, .HRESETn,
.HADDR, .HWDATA, .HWSTRB, .HWRITE, .HSIZE, .HBURST, .HADDR, .HWDATA, .HWSTRB, .HWRITE, .HSIZE, .HBURST,