mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Part way through the updated bus fsm for direct AHB in lsu/ifu + multi-manager.
This commit is contained in:
parent
40cf4a9ea9
commit
4d7b905806
@ -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,
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user