mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
More changes
This commit is contained in:
parent
0b6ce1b031
commit
53847269da
@ -38,27 +38,27 @@ module ahbcacheinterface #(
|
|||||||
)(
|
)(
|
||||||
input logic HCLK, HRESETn,
|
input logic HCLK, HRESETn,
|
||||||
// bus interface controls
|
// bus interface controls
|
||||||
input logic HREADY, // AHB peripheral ready
|
input logic HREADY, // AHB peripheral ready
|
||||||
output logic [1:0] HTRANS, // AHB transaction type, 00: IDLE, 10 NON_SEQ, 11 SEQ
|
output logic [1:0] HTRANS, // AHB transaction type, 00: IDLE, 10 NON_SEQ, 11 SEQ
|
||||||
output logic HWRITE, // AHB 0: Read operation 1: Write operation
|
output logic HWRITE, // AHB 0: Read operation 1: Write operation
|
||||||
output logic [2:0] HSIZE, // AHB transaction width
|
output logic [2:0] HSIZE, // AHB transaction width
|
||||||
output logic [2:0] HBURST, // AHB burst length
|
output logic [2:0] HBURST, // AHB burst length
|
||||||
// bus interface buses
|
// bus interface buses
|
||||||
input logic [`AHBW-1:0] HRDATA, // AHB read data
|
input logic [`AHBW-1:0] HRDATA, // AHB read data
|
||||||
output logic [`PA_BITS-1:0] HADDR, // AHB address
|
output logic [`PA_BITS-1:0] HADDR, // AHB address
|
||||||
output logic [`AHBW-1:0] HWDATA, // AHB write data
|
output logic [`AHBW-1:0] HWDATA, // AHB write data
|
||||||
output logic [`AHBW/8-1:0] HWSTRB, // AHB byte mask
|
output logic [`AHBW/8-1:0] HWSTRB, // AHB byte mask
|
||||||
|
|
||||||
// cache interface
|
// cache interface
|
||||||
input logic [`PA_BITS-1:0] CacheBusAdr, // Address of cache line
|
input logic [`PA_BITS-1:0] CacheBusAdr, // Address of cache line
|
||||||
input logic [`LLEN-1:0] CacheReadDataWordM, // one word of cache line during a writeback
|
input logic [`LLEN-1:0] CacheReadDataWordM, // One word of cache line during a writeback
|
||||||
input logic CacheableOrFlushCacheM, // Memory operation is cacheable or flushing D$
|
input logic CacheableOrFlushCacheM, // Memory operation is cacheable or flushing D$
|
||||||
input logic Cacheable, // Memory operation is cachable
|
input logic Cacheable, // Memory operation is cachable
|
||||||
input logic [1:0] CacheBusRW, // Cache bus operation, 01: writeback, 10: fetch
|
input logic [1:0] CacheBusRW, // Cache bus operation, 01: writeback, 10: fetch
|
||||||
output logic CacheBusAck, // Handshack to $ indicating bus transaction completed
|
output logic CacheBusAck, // Handshake to $ indicating bus transaction completed
|
||||||
output logic [LINELEN-1:0] FetchBuffer, // Register to hold beats of cache line as the arrive from bus
|
output logic [LINELEN-1:0] FetchBuffer, // Register to hold beats of cache line as the arrive from bus
|
||||||
output logic [AHBWLOGBWPL-1:0] BeatCount, // Beat position within the cache line in the Address Phase
|
output logic [AHBWLOGBWPL-1:0] BeatCount, // Beat position within the cache line in the Address Phase
|
||||||
output logic SelBusBeat, // Tells the cache to select the word from ReadData or WriteData from BeatCount rather than PAdr
|
output logic SelBusBeat, // Tells the cache to select the word from ReadData or WriteData from BeatCount rather than PAdr
|
||||||
|
|
||||||
// uncached interface
|
// uncached interface
|
||||||
input logic [`PA_BITS-1:0] PAdr, // Physical address of uncached memory operation
|
input logic [`PA_BITS-1:0] PAdr, // Physical address of uncached memory operation
|
||||||
@ -77,7 +77,7 @@ module ahbcacheinterface #(
|
|||||||
logic [`PA_BITS-1:0] LocalHADDR; // Address after selecting between cached and uncached operation
|
logic [`PA_BITS-1:0] LocalHADDR; // Address after selecting between cached and uncached operation
|
||||||
logic [AHBWLOGBWPL-1:0] BeatCountDelayed; // Beat within the cache line in the second (Data) cache stage
|
logic [AHBWLOGBWPL-1:0] BeatCountDelayed; // Beat within the cache line in the second (Data) cache stage
|
||||||
logic CaptureEn; // Enable updating the Fetch buffer with valid data from HRDATA
|
logic CaptureEn; // Enable updating the Fetch buffer with valid data from HRDATA
|
||||||
logic [`AHBW/8-1:0] BusByteMaskM; // Byte enables within a word. For cache request all 1s
|
logic [`AHBW/8-1:0] BusByteMaskM; // Byte enables within a word. For cache request all 1s
|
||||||
logic [`AHBW-1:0] PreHWDATA; // AHB Address phase write data
|
logic [`AHBW-1:0] PreHWDATA; // AHB Address phase write data
|
||||||
|
|
||||||
genvar index;
|
genvar index;
|
||||||
@ -107,7 +107,7 @@ module ahbcacheinterface #(
|
|||||||
end else assign CacheReadDataWordAHB = CacheReadDataWordM[`AHBW-1:0];
|
end else assign CacheReadDataWordAHB = CacheReadDataWordM[`AHBW-1:0];
|
||||||
|
|
||||||
mux2 #(`AHBW) HWDATAMux(.d0(CacheReadDataWordAHB), .d1(WriteDataM[`AHBW-1:0]),
|
mux2 #(`AHBW) HWDATAMux(.d0(CacheReadDataWordAHB), .d1(WriteDataM[`AHBW-1:0]),
|
||||||
.s(~(CacheableOrFlushCacheM)), .y(PreHWDATA));
|
.s(~(CacheableOrFlushCacheM)), .y(PreHWDATA));
|
||||||
flopen #(`AHBW) wdreg(HCLK, HREADY, PreHWDATA, HWDATA); // delay HWDATA by 1 cycle per spec
|
flopen #(`AHBW) wdreg(HCLK, HREADY, PreHWDATA, HWDATA); // delay HWDATA by 1 cycle per spec
|
||||||
|
|
||||||
// *** bummer need a second byte mask for bus as it is AHBW rather than LLEN.
|
// *** bummer need a second byte mask for bus as it is AHBW rather than LLEN.
|
||||||
@ -119,5 +119,5 @@ module ahbcacheinterface #(
|
|||||||
buscachefsm #(BeatCountThreshold, AHBWLOGBWPL, READ_ONLY_CACHE) AHBBuscachefsm(
|
buscachefsm #(BeatCountThreshold, AHBWLOGBWPL, READ_ONLY_CACHE) AHBBuscachefsm(
|
||||||
.HCLK, .HRESETn, .Flush, .BusRW, .Stall, .BusCommitted, .BusStall, .CaptureEn, .SelBusBeat,
|
.HCLK, .HRESETn, .Flush, .BusRW, .Stall, .BusCommitted, .BusStall, .CaptureEn, .SelBusBeat,
|
||||||
.CacheBusRW, .CacheBusAck, .BeatCount, .BeatCountDelayed,
|
.CacheBusRW, .CacheBusAck, .BeatCount, .BeatCountDelayed,
|
||||||
.HREADY, .HTRANS, .HWRITE, .HBURST);
|
.HREADY, .HTRANS, .HWRITE, .HBURST);
|
||||||
endmodule
|
endmodule
|
||||||
|
@ -32,21 +32,21 @@
|
|||||||
module ahbinterface #(
|
module ahbinterface #(
|
||||||
parameter LSU = 0 // 1: LSU bus width is `XLEN, 0: IFU bus width is 32 bits
|
parameter LSU = 0 // 1: LSU bus width is `XLEN, 0: IFU bus width is 32 bits
|
||||||
)(
|
)(
|
||||||
input logic HCLK, HRESETn,
|
input logic HCLK, HRESETn,
|
||||||
// bus interface
|
// bus interface
|
||||||
input logic HREADY, // AHB peripheral ready
|
input logic HREADY, // AHB peripheral ready
|
||||||
output logic [1:0] HTRANS, // AHB transaction type, 00: IDLE, 10 NON_SEQ, 11 SEQ
|
output logic [1:0] HTRANS, // AHB transaction type, 00: IDLE, 10 NON_SEQ, 11 SEQ
|
||||||
output logic HWRITE, // AHB 0: Read operation 1: Write operation
|
output logic HWRITE, // AHB 0: Read operation 1: Write operation
|
||||||
input logic [`XLEN-1:0] HRDATA, // AHB read data
|
input logic [`XLEN-1:0] HRDATA, // AHB read data
|
||||||
output logic [`XLEN-1:0] HWDATA, // AHB write data
|
output logic [`XLEN-1:0] HWDATA, // AHB write data
|
||||||
output logic [`XLEN/8-1:0] HWSTRB, // AHB byte mask
|
output logic [`XLEN/8-1:0] HWSTRB, // AHB byte mask
|
||||||
|
|
||||||
// lsu/ifu interface
|
// lsu/ifu interface
|
||||||
input logic Stall, // Core pipeline is stalled
|
input logic Stall, // Core pipeline is stalled
|
||||||
input logic Flush, // Pipeline stage flush. Prevents bus transaction from starting
|
input logic Flush, // Pipeline stage flush. Prevents bus transaction from starting
|
||||||
input logic [1:0] BusRW, // Memory operation read/write control: 10: read, 01: write
|
input logic [1:0] BusRW, // Memory operation read/write control: 10: read, 01: write
|
||||||
input logic [`XLEN/8-1:0] ByteMask, // Bytes enables within a word
|
input logic [`XLEN/8-1:0] ByteMask, // Bytes enables within a word
|
||||||
input logic [`XLEN-1:0] WriteData, // IEU write data for a store
|
input logic [`XLEN-1:0] WriteData, // IEU write data for a store
|
||||||
output logic BusStall, // Bus is busy with an in flight memory operation
|
output logic BusStall, // Bus is busy with an in flight memory operation
|
||||||
output logic BusCommitted, // Bus is busy with an in flight memory operation and it is not safe to take an interrupt
|
output logic BusCommitted, // Bus is busy with an in flight memory operation and it is not safe to take an interrupt
|
||||||
output logic [(LSU ? `XLEN : 32)-1:0] FetchBuffer // Register to hold HRDATA after arriving from the bus
|
output logic [(LSU ? `XLEN : 32)-1:0] FetchBuffer // Register to hold HRDATA after arriving from the bus
|
||||||
|
@ -40,29 +40,29 @@ module buscachefsm #(
|
|||||||
input logic HRESETn,
|
input logic HRESETn,
|
||||||
|
|
||||||
// IEU interface
|
// IEU interface
|
||||||
input logic Stall, // Core pipeline is stalled
|
input logic Stall, // Core pipeline is stalled
|
||||||
input logic Flush, // Pipeline stage flush. Prevents bus transaction from starting
|
input logic Flush, // Pipeline stage flush. Prevents bus transaction from starting
|
||||||
input logic [1:0] BusRW, // Uncached memory operation read/write control: 10: read, 01: write
|
input logic [1:0] BusRW, // Uncached memory operation read/write control: 10: read, 01: write
|
||||||
output logic BusStall, // Bus is busy with an in flight memory operation
|
output logic BusStall, // Bus is busy with an in flight memory operation
|
||||||
output logic BusCommitted, // Bus is busy with an in flight memory operation and it is not safe to take an interrupt
|
output logic BusCommitted, // Bus is busy with an in flight memory operation and it is not safe to take an interrupt
|
||||||
|
|
||||||
// ahb cache interface locals.
|
// ahb cache interface locals.
|
||||||
output logic CaptureEn, // Enable updating the Fetch buffer with valid data from HRDATA
|
output logic CaptureEn, // Enable updating the Fetch buffer with valid data from HRDATA
|
||||||
|
|
||||||
// cache interface
|
// cache interface
|
||||||
input logic [1:0] CacheBusRW, // Cache bus operation, 01: writeback, 10: fetch
|
input logic [1:0] CacheBusRW, // Cache bus operation, 01: writeback, 10: fetch
|
||||||
output logic CacheBusAck, // Handshack to $ indicating bus transaction completed
|
output logic CacheBusAck, // Handshack to $ indicating bus transaction completed
|
||||||
|
|
||||||
// lsu interface
|
// lsu interface
|
||||||
output logic [AHBWLOGBWPL-1:0] BeatCount, // Beat position within the cache line in the Address Phase
|
output logic [AHBWLOGBWPL-1:0] BeatCount, // Beat position within the cache line in the Address Phase
|
||||||
output logic [AHBWLOGBWPL-1:0] BeatCountDelayed, // Beat within the cache line in the second (Data) cache stage
|
output logic [AHBWLOGBWPL-1:0] BeatCountDelayed, // Beat within the cache line in the second (Data) cache stage
|
||||||
output logic SelBusBeat, // Tells the cache to select the word from ReadData or WriteData from BeatCount rather than PAdr
|
output logic SelBusBeat, // Tells the cache to select the word from ReadData or WriteData from BeatCount rather than PAdr
|
||||||
|
|
||||||
// BUS interface
|
// BUS interface
|
||||||
input logic HREADY, // AHB peripheral ready
|
input logic HREADY, // AHB peripheral ready
|
||||||
output logic [1:0] HTRANS, // AHB transaction type, 00: IDLE, 10 NON_SEQ, 11 SEQ
|
output logic [1:0] HTRANS, // AHB transaction type, 00: IDLE, 10 NON_SEQ, 11 SEQ
|
||||||
output logic HWRITE, // AHB 0: Read operation 1: Write operation
|
output logic HWRITE, // AHB 0: Read operation 1: Write operation
|
||||||
output logic [2:0] HBURST // AHB burst length
|
output logic [2:0] HBURST // AHB burst length
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef enum logic [2:0] {ADR_PHASE, DATA_PHASE, MEM3, CACHE_FETCH, CACHE_WRITEBACK} busstatetype;
|
typedef enum logic [2:0] {ADR_PHASE, DATA_PHASE, MEM3, CACHE_FETCH, CACHE_WRITEBACK} busstatetype;
|
||||||
@ -78,8 +78,8 @@ module buscachefsm #(
|
|||||||
logic CacheAccess;
|
logic CacheAccess;
|
||||||
|
|
||||||
always_ff @(posedge HCLK)
|
always_ff @(posedge HCLK)
|
||||||
if (~HRESETn | Flush) CurrState <= #1 ADR_PHASE;
|
if (~HRESETn | Flush) CurrState <= #1 ADR_PHASE;
|
||||||
else CurrState <= #1 NextState;
|
else CurrState <= #1 NextState;
|
||||||
|
|
||||||
always_comb begin
|
always_comb begin
|
||||||
case(CurrState)
|
case(CurrState)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
// controller input stage
|
// controllerinput.sv
|
||||||
//
|
//
|
||||||
// Written: Ross Thompson ross1728@gmail.com
|
// Written: Ross Thompson ross1728@gmail.com
|
||||||
// Created: August 31, 2022
|
// Created: August 31, 2022
|
||||||
@ -36,26 +36,26 @@
|
|||||||
module controllerinput #(
|
module controllerinput #(
|
||||||
parameter SAVE_ENABLED = 1 // 1: Save manager inputs if Save = 1, 0: Don't save inputs
|
parameter SAVE_ENABLED = 1 // 1: Save manager inputs if Save = 1, 0: Don't save inputs
|
||||||
)(
|
)(
|
||||||
input logic HCLK,
|
input logic HCLK,
|
||||||
input logic HRESETn,
|
input logic HRESETn,
|
||||||
input logic Save, // Two or more managers requesting (HTRANS != 00) at the same time. Save the non-granted manager inputs
|
input logic Save, // Two or more managers requesting (HTRANS != 00) at the same time. Save the non-granted manager inputs
|
||||||
input logic Restore, // Restore a saved manager inputs when it is finally granted
|
input logic Restore, // Restore a saved manager inputs when it is finally granted
|
||||||
input logic Disable, // Supress HREADY to the non-granted manager
|
input logic Disable, // Suppress HREADY to the non-granted manager
|
||||||
output logic Request, // This manager is making a request
|
output logic Request, // This manager is making a request
|
||||||
// controller input
|
// controller input
|
||||||
input logic [1:0] HTRANSIn, // Manager input. AHB transaction type, 00: IDLE, 10 NON_SEQ, 11 SEQ
|
input logic [1:0] HTRANSIn, // Manager input. AHB transaction type, 00: IDLE, 10 NON_SEQ, 11 SEQ
|
||||||
input logic HWRITEIn, // Manager input. AHB 0: Read operation 1: Write operation
|
input logic HWRITEIn, // Manager input. AHB 0: Read operation 1: Write operation
|
||||||
input logic [2:0] HSIZEIn, // Manager input. AHB transaction width
|
input logic [2:0] HSIZEIn, // Manager input. AHB transaction width
|
||||||
input logic [2:0] HBURSTIn, // Manager input. AHB burst length
|
input logic [2:0] HBURSTIn, // Manager input. AHB burst length
|
||||||
input logic [`PA_BITS-1:0] HADDRIn, // Manager input. AHB address
|
input logic [`PA_BITS-1:0] HADDRIn, // Manager input. AHB address
|
||||||
output logic HREADYOut, // Indicate to manager the peripherial is not busy and another manager does not have priority
|
output logic HREADYOut, // Indicate to manager the peripheral is not busy and another manager does not have priority
|
||||||
// controller output
|
// controller output
|
||||||
output logic [1:0] HTRANSOut, // Aribrated manager transaction. AHB transaction type, 00: IDLE, 10 NON_SEQ, 11 SEQ
|
output logic [1:0] HTRANSOut, // Arbitrated manager transaction. AHB transaction type, 00: IDLE, 10 NON_SEQ, 11 SEQ
|
||||||
output logic HWRITEOut, // Aribrated manager transaction. AHB 0: Read operation 1: Write operation
|
output logic HWRITEOut, // Arbitrated manager transaction. AHB 0: Read operation 1: Write operation
|
||||||
output logic [2:0] HSIZEOut, // Aribrated manager transaction. AHB transaction width
|
output logic [2:0] HSIZEOut, // Arbitrated manager transaction. AHB transaction width
|
||||||
output logic [2:0] HBURSTOut, // Aribrated manager transaction. AHB burst length
|
output logic [2:0] HBURSTOut, // Arbitrated manager transaction. AHB burst length
|
||||||
output logic [`PA_BITS-1:0] HADDROut, // Aribrated manager transaction. AHB address
|
output logic [`PA_BITS-1:0] HADDROut, // Arbitrated manager transaction. AHB address
|
||||||
input logic HREADYIn // Peripherial ready
|
input logic HREADYIn // Peripheral ready
|
||||||
);
|
);
|
||||||
|
|
||||||
logic HWRITESave;
|
logic HWRITESave;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
// ebufsmarb
|
// ebufsmarb.sv
|
||||||
//
|
//
|
||||||
// Written: Ross Thompson ross1728@gmail.com
|
// Written: Ross Thompson ross1728@gmail.com
|
||||||
// Created: 23 January 2023
|
// Created: 23 January 2023
|
||||||
@ -55,7 +55,7 @@ module ebufsmarb (
|
|||||||
logic IFUReqD; // 1 cycle delayed IFU request. Part of arbitration
|
logic IFUReqD; // 1 cycle delayed IFU request. Part of arbitration
|
||||||
logic FinalBeat, FinalBeatD; // Indicates the last beat of a burst
|
logic FinalBeat, FinalBeatD; // Indicates the last beat of a burst
|
||||||
logic BeatCntEn;
|
logic BeatCntEn;
|
||||||
logic [3:0] BeatCount; // Position within a burst transfer
|
logic [3:0] BeatCount; // Position within a burst transfer
|
||||||
logic BeatCntReset;
|
logic BeatCntReset;
|
||||||
logic [3:0] Threshold; // Number of beats derived from HBURST
|
logic [3:0] Threshold; // Number of beats derived from HBURST
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ module ebufsmarb (
|
|||||||
// Controller 1 (LSU)
|
// Controller 1 (LSU)
|
||||||
// When both the IFU and LSU request at the same time, the FSM will go into the arbitrate state.
|
// When both the IFU and LSU request at the same time, the FSM will go into the arbitrate state.
|
||||||
// Once the LSU request is done the fsm returns to IDLE. To prevent the LSU from regaining
|
// Once the LSU request is done the fsm returns to IDLE. To prevent the LSU from regaining
|
||||||
// priority and re issuing the same memroy operation, the delayed IFUReqD squashes the LSU request.
|
// priority and re-issuing the same memory operation, the delayed IFUReqD squashes the LSU request.
|
||||||
// This is necessary because the pipeline is stalled for the entire duration of both transactions,
|
// This is necessary because the pipeline is stalled for the entire duration of both transactions,
|
||||||
// and the LSU memory request will stil be active.
|
// and the LSU memory request will stil be active.
|
||||||
flopr #(1) ifureqreg(HCLK, ~HRESETn, IFUReq, IFUReqD);
|
flopr #(1) ifureqreg(HCLK, ~HRESETn, IFUReq, IFUReqD);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
// fdivsqrtpreproc.sv
|
// fdivsqrtexpcalc.sv
|
||||||
//
|
//
|
||||||
// Written: David_Harris@hmc.edu, me@KatherineParry.com, cturek@hmc.edu
|
// Written: David_Harris@hmc.edu, me@KatherineParry.com, cturek@hmc.edu
|
||||||
// Modified:13 January 2022
|
// Modified:13 January 2022
|
||||||
@ -30,11 +30,11 @@
|
|||||||
|
|
||||||
module fdivsqrtexpcalc(
|
module fdivsqrtexpcalc(
|
||||||
input logic [`FMTBITS-1:0] Fmt,
|
input logic [`FMTBITS-1:0] Fmt,
|
||||||
input logic [`NE-1:0] Xe, Ye,
|
input logic [`NE-1:0] Xe, Ye,
|
||||||
input logic Sqrt,
|
input logic Sqrt,
|
||||||
input logic XZero,
|
input logic XZero,
|
||||||
input logic [`DIVBLEN:0] ell, m,
|
input logic [`DIVBLEN:0] ell, m,
|
||||||
output logic [`NE+1:0] Qe
|
output logic [`NE+1:0] Qe
|
||||||
);
|
);
|
||||||
logic [`NE-2:0] Bias;
|
logic [`NE-2:0] Bias;
|
||||||
logic [`NE+1:0] SXExp;
|
logic [`NE+1:0] SXExp;
|
||||||
@ -42,28 +42,28 @@ module fdivsqrtexpcalc(
|
|||||||
logic [`NE+1:0] DExp;
|
logic [`NE+1:0] DExp;
|
||||||
|
|
||||||
if (`FPSIZES == 1) begin
|
if (`FPSIZES == 1) begin
|
||||||
assign Bias = (`NE-1)'(`BIAS);
|
assign Bias = (`NE-1)'(`BIAS);
|
||||||
|
|
||||||
end else if (`FPSIZES == 2) begin
|
end else if (`FPSIZES == 2) begin
|
||||||
assign Bias = Fmt ? (`NE-1)'(`BIAS) : (`NE-1)'(`BIAS1);
|
assign Bias = Fmt ? (`NE-1)'(`BIAS) : (`NE-1)'(`BIAS1);
|
||||||
|
|
||||||
end else if (`FPSIZES == 3) begin
|
end else if (`FPSIZES == 3) begin
|
||||||
always_comb
|
always_comb
|
||||||
case (Fmt)
|
case (Fmt)
|
||||||
`FMT: Bias = (`NE-1)'(`BIAS);
|
`FMT: Bias = (`NE-1)'(`BIAS);
|
||||||
`FMT1: Bias = (`NE-1)'(`BIAS1);
|
`FMT1: Bias = (`NE-1)'(`BIAS1);
|
||||||
`FMT2: Bias = (`NE-1)'(`BIAS2);
|
`FMT2: Bias = (`NE-1)'(`BIAS2);
|
||||||
default: Bias = 'x;
|
default: Bias = 'x;
|
||||||
endcase
|
endcase
|
||||||
|
|
||||||
end else if (`FPSIZES == 4) begin
|
end else if (`FPSIZES == 4) begin
|
||||||
always_comb
|
always_comb
|
||||||
case (Fmt)
|
case (Fmt)
|
||||||
2'h3: Bias = (`NE-1)'(`Q_BIAS);
|
2'h3: Bias = (`NE-1)'(`Q_BIAS);
|
||||||
2'h1: Bias = (`NE-1)'(`D_BIAS);
|
2'h1: Bias = (`NE-1)'(`D_BIAS);
|
||||||
2'h0: Bias = (`NE-1)'(`S_BIAS);
|
2'h0: Bias = (`NE-1)'(`S_BIAS);
|
||||||
2'h2: Bias = (`NE-1)'(`H_BIAS);
|
2'h2: Bias = (`NE-1)'(`H_BIAS);
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
assign SXExp = {2'b0, Xe} - {{(`NE+1-`DIVBLEN){1'b0}}, ell} - (`NE+2)'(`BIAS);
|
assign SXExp = {2'b0, Xe} - {{(`NE+1-`DIVBLEN){1'b0}}, ell} - (`NE+2)'(`BIAS);
|
||||||
assign SExp = {SXExp[`NE+1], SXExp[`NE+1:1]} + {2'b0, Bias};
|
assign SExp = {SXExp[`NE+1], SXExp[`NE+1:1]} + {2'b0, Bias};
|
||||||
|
Loading…
Reference in New Issue
Block a user