forked from Github_Repos/cvw
		
	Renamed DCACHE to DCACHE_SUPPORTED and ICACHE to ICACHE_SUPPORTED
This commit is contained in:
		
							parent
							
								
									e4e7e827d6
								
							
						
					
					
						commit
						94daedeed6
					
				@ -45,8 +45,8 @@
 | 
			
		||||
 | 
			
		||||
// LSU microarchitectural Features
 | 
			
		||||
`define BUS_SUPPORTED 1
 | 
			
		||||
`define DCACHE 1
 | 
			
		||||
`define ICACHE 1
 | 
			
		||||
`define DCACHE_SUPPORTED 1
 | 
			
		||||
`define ICACHE_SUPPORTED 1
 | 
			
		||||
`define VIRTMEM_SUPPORTED 1
 | 
			
		||||
`define VECTORED_INTERRUPTS_SUPPORTED 1 
 | 
			
		||||
`define BIGENDIAN_SUPPORTED 1
 | 
			
		||||
 | 
			
		||||
@ -46,8 +46,8 @@
 | 
			
		||||
 | 
			
		||||
// LSU microarchitectural Features
 | 
			
		||||
`define BUS_SUPPORTED 1
 | 
			
		||||
`define DCACHE 1
 | 
			
		||||
`define ICACHE 1
 | 
			
		||||
`define DCACHE_SUPPORTED 1
 | 
			
		||||
`define ICACHE_SUPPORTED 1
 | 
			
		||||
`define VIRTMEM_SUPPORTED 1
 | 
			
		||||
`define VECTORED_INTERRUPTS_SUPPORTED 1 
 | 
			
		||||
`define BIGENDIAN_SUPPORTED 1
 | 
			
		||||
 | 
			
		||||
@ -47,8 +47,8 @@
 | 
			
		||||
 | 
			
		||||
// LSU microarchitectural Features
 | 
			
		||||
`define BUS_SUPPORTED 1
 | 
			
		||||
`define DCACHE 0
 | 
			
		||||
`define ICACHE 0
 | 
			
		||||
`define DCACHE_SUPPORTED 0
 | 
			
		||||
`define ICACHE_SUPPORTED 0
 | 
			
		||||
`define VIRTMEM_SUPPORTED 0
 | 
			
		||||
`define VECTORED_INTERRUPTS_SUPPORTED 0 
 | 
			
		||||
`define BIGENDIAN_SUPPORTED 0
 | 
			
		||||
 | 
			
		||||
@ -46,8 +46,8 @@
 | 
			
		||||
 | 
			
		||||
// LSU microarchitectural Features
 | 
			
		||||
`define BUS_SUPPORTED 1
 | 
			
		||||
`define DCACHE 1
 | 
			
		||||
`define ICACHE 1
 | 
			
		||||
`define DCACHE_SUPPORTED 1
 | 
			
		||||
`define ICACHE_SUPPORTED 1
 | 
			
		||||
`define VIRTMEM_SUPPORTED 1
 | 
			
		||||
`define VECTORED_INTERRUPTS_SUPPORTED 1 
 | 
			
		||||
`define BIGENDIAN_SUPPORTED 1
 | 
			
		||||
 | 
			
		||||
@ -47,8 +47,8 @@
 | 
			
		||||
 | 
			
		||||
// LSU microarchitectural Features
 | 
			
		||||
`define BUS_SUPPORTED 0
 | 
			
		||||
`define DCACHE 0
 | 
			
		||||
`define ICACHE 0
 | 
			
		||||
`define DCACHE_SUPPORTED 0
 | 
			
		||||
`define ICACHE_SUPPORTED 0
 | 
			
		||||
`define VIRTMEM_SUPPORTED 0
 | 
			
		||||
`define VECTORED_INTERRUPTS_SUPPORTED 1
 | 
			
		||||
`define BIGENDIAN_SUPPORTED 0
 | 
			
		||||
 | 
			
		||||
@ -46,8 +46,8 @@
 | 
			
		||||
 | 
			
		||||
// LSU microarchitectural Features
 | 
			
		||||
`define BUS_SUPPORTED 1
 | 
			
		||||
`define DCACHE 0
 | 
			
		||||
`define ICACHE 0
 | 
			
		||||
`define DCACHE_SUPPORTED 0
 | 
			
		||||
`define ICACHE_SUPPORTED 0
 | 
			
		||||
`define VIRTMEM_SUPPORTED 0
 | 
			
		||||
`define VECTORED_INTERRUPTS_SUPPORTED 1 
 | 
			
		||||
`define BIGENDIAN_SUPPORTED 0
 | 
			
		||||
 | 
			
		||||
@ -47,8 +47,8 @@
 | 
			
		||||
 | 
			
		||||
// LSU microarchitectural Features
 | 
			
		||||
`define BUS_SUPPORTED 1
 | 
			
		||||
`define DCACHE 1
 | 
			
		||||
`define ICACHE 1
 | 
			
		||||
`define DCACHE_SUPPORTED 1
 | 
			
		||||
`define ICACHE_SUPPORTED 1
 | 
			
		||||
`define VIRTMEM_SUPPORTED 1
 | 
			
		||||
`define VECTORED_INTERRUPTS_SUPPORTED 1 
 | 
			
		||||
`define BIGENDIAN_SUPPORTED 1
 | 
			
		||||
 | 
			
		||||
@ -47,8 +47,8 @@
 | 
			
		||||
 | 
			
		||||
// LSU microarchitectural Features
 | 
			
		||||
`define BUS_SUPPORTED 1
 | 
			
		||||
`define DCACHE 1
 | 
			
		||||
`define ICACHE 1
 | 
			
		||||
`define DCACHE_SUPPORTED 1
 | 
			
		||||
`define ICACHE_SUPPORTED 1
 | 
			
		||||
`define VIRTMEM_SUPPORTED 1
 | 
			
		||||
`define VECTORED_INTERRUPTS_SUPPORTED 1 
 | 
			
		||||
`define BIGENDIAN_SUPPORTED 1
 | 
			
		||||
 | 
			
		||||
@ -47,8 +47,8 @@
 | 
			
		||||
 | 
			
		||||
// LSU microarchitectural Features
 | 
			
		||||
`define BUS_SUPPORTED 0
 | 
			
		||||
`define DCACHE 0
 | 
			
		||||
`define ICACHE 0
 | 
			
		||||
`define DCACHE_SUPPORTED 0
 | 
			
		||||
`define ICACHE_SUPPORTED 0
 | 
			
		||||
`define VIRTMEM_SUPPORTED 0
 | 
			
		||||
`define VECTORED_INTERRUPTS_SUPPORTED 1 
 | 
			
		||||
`define BIGENDIAN_SUPPORTED 0
 | 
			
		||||
 | 
			
		||||
@ -200,7 +200,7 @@ module controller(
 | 
			
		||||
  // Fences
 | 
			
		||||
  // Ordinary fence is presently a nop
 | 
			
		||||
  // fence.i flushes the D$ and invalidates the I$ if Zifencei is supported and I$ is implemented
 | 
			
		||||
  if (`ZIFENCEI_SUPPORTED & `ICACHE) begin:fencei
 | 
			
		||||
  if (`ZIFENCEI_SUPPORTED & `ICACHE_SUPPORTED) begin:fencei
 | 
			
		||||
    logic FenceID;
 | 
			
		||||
    assign FenceID = FenceXD & (Funct3D == 3'b001); // is it a FENCE.I instruction?
 | 
			
		||||
    assign InvalidateICacheD = FenceID;
 | 
			
		||||
@ -249,5 +249,5 @@ module controller(
 | 
			
		||||
 | 
			
		||||
  // the synchronous DTIM cannot read immediately after write
 | 
			
		||||
  // a cache cannot read or write immediately after a write
 | 
			
		||||
  assign StoreStallD = MemRWE[0] & ((MemRWD[1] | (MemRWD[0] & `DCACHE)) | (|AtomicD));
 | 
			
		||||
  assign StoreStallD = MemRWE[0] & ((MemRWD[1] | (MemRWD[0] & `DCACHE_SUPPORTED)) | (|AtomicD));
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
@ -134,7 +134,7 @@ module ifu (
 | 
			
		||||
  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
  if(`C_SUPPORTED) begin : Spill
 | 
			
		||||
    spill #(`ICACHE) spill(.clk, .reset, .StallD, .FlushD, .PCF, .PCPlus4F, .PCNextF, .InstrRawF,
 | 
			
		||||
    spill #(`ICACHE_SUPPORTED) spill(.clk, .reset, .StallD, .FlushD, .PCF, .PCPlus4F, .PCNextF, .InstrRawF,
 | 
			
		||||
      .InstrDAPageFaultF, .IFUCacheBusStallD, .ITLBMissF, .PCNextFSpill, .PCFSpill, .SelNextSpillF, .PostSpillInstrRawF, .CompressedF);
 | 
			
		||||
  end else begin : NoSpill
 | 
			
		||||
    assign PCNextFSpill = PCNextF;
 | 
			
		||||
@ -210,10 +210,10 @@ module ifu (
 | 
			
		||||
  end
 | 
			
		||||
  if (`BUS_SUPPORTED) begin : bus
 | 
			
		||||
    // **** must fix words per line vs beats per line as in lsu.
 | 
			
		||||
    localparam   WORDSPERLINE = `ICACHE ? `ICACHE_LINELENINBITS/`XLEN : 1;
 | 
			
		||||
    localparam   LOGBWPL = `ICACHE ? $clog2(WORDSPERLINE) : 1;
 | 
			
		||||
    if(`ICACHE) begin : icache
 | 
			
		||||
      localparam           LINELEN = `ICACHE ? `ICACHE_LINELENINBITS : `XLEN;
 | 
			
		||||
    localparam   WORDSPERLINE = `ICACHE_SUPPORTED ? `ICACHE_LINELENINBITS/`XLEN : 1;
 | 
			
		||||
    localparam   LOGBWPL = `ICACHE_SUPPORTED ? $clog2(WORDSPERLINE) : 1;
 | 
			
		||||
    if(`ICACHE_SUPPORTED) begin : icache
 | 
			
		||||
      localparam           LINELEN = `ICACHE_SUPPORTED ? `ICACHE_LINELENINBITS : `XLEN;
 | 
			
		||||
      localparam           LLENPOVERAHBW = `LLEN / `AHBW; // Number of AHB beats in a LLEN word. AHBW cannot be larger than LLEN. (implementation limitation)
 | 
			
		||||
      logic [LINELEN-1:0]  FetchBuffer;
 | 
			
		||||
      logic [`PA_BITS-1:0] ICacheBusAdr;
 | 
			
		||||
 | 
			
		||||
@ -237,7 +237,7 @@ module lsu (
 | 
			
		||||
  end else begin
 | 
			
		||||
  end
 | 
			
		||||
  if (`BUS_SUPPORTED) begin : bus              
 | 
			
		||||
    if(`DCACHE) begin : dcache
 | 
			
		||||
    if(`DCACHE_SUPPORTED) begin : dcache
 | 
			
		||||
      localparam   LLENWORDSPERLINE = `DCACHE_LINELENINBITS/`LLEN;             // Number of LLEN words in cacheline
 | 
			
		||||
      localparam   LLENLOGBWPL = $clog2(LLENWORDSPERLINE);                     // Log2 of ^
 | 
			
		||||
      localparam   BEATSPERLINE = `DCACHE_LINELENINBITS/`AHBW;                 // Number of AHBW words (beats) in cacheline
 | 
			
		||||
 | 
			
		||||
@ -44,8 +44,8 @@ package cvw;
 | 
			
		||||
  parameter ZICOUNTERS_SUPPORTED = `ZICOUNTERS_SUPPORTED;
 | 
			
		||||
  parameter ZFH_SUPPORTED = `ZFH_SUPPORTED;
 | 
			
		||||
  parameter BUS_SUPPORTED = `BUS_SUPPORTED;
 | 
			
		||||
  parameter DCACHE = `DCACHE;
 | 
			
		||||
  parameter ICACHE = `ICACHE;
 | 
			
		||||
  parameter DCACHE_SUPPORTED = `DCACHE_SUPPORTED;
 | 
			
		||||
  parameter ICACHE_SUPPORTED = `ICACHE_SUPPORTED;
 | 
			
		||||
  parameter VIRTMEM_SUPPORTED = `VIRTMEM_SUPPORTED;
 | 
			
		||||
  parameter VECTORED_INTERRUPTS_SUPPORTED = `VECTORED_INTERRUPTS_SUPPORTED;
 | 
			
		||||
  parameter BIGENDIAN_SUPPORTED = `BIGENDIAN_SUPPORTED;
 | 
			
		||||
 | 
			
		||||
@ -523,19 +523,19 @@ module riscvassertions;
 | 
			
		||||
    assert (`F_SUPPORTED | ~`D_SUPPORTED) else $error("Can't support double fp (D) without supporting float (F)");
 | 
			
		||||
    assert (`D_SUPPORTED | ~`Q_SUPPORTED) else $error("Can't support quad fp (Q) without supporting double (D)");
 | 
			
		||||
    assert (`F_SUPPORTED | ~`ZFH_SUPPORTED) else $error("Can't support half-precision fp (ZFH) without supporting float (F)");
 | 
			
		||||
    assert (`DCACHE | ~`F_SUPPORTED | `FLEN <= `XLEN) else $error("Data cache required to support FLEN > XLEN because AHB bus width is XLEN");
 | 
			
		||||
    assert (`DCACHE_SUPPORTED | ~`F_SUPPORTED | `FLEN <= `XLEN) else $error("Data cache required to support FLEN > XLEN because AHB bus width is XLEN");
 | 
			
		||||
    assert (`I_SUPPORTED ^ `E_SUPPORTED) else $error("Exactly one of I and E must be supported");
 | 
			
		||||
    assert (`FLEN<=`XLEN | `DCACHE | `DTIM_SUPPORTED) else $error("Wally does not support FLEN > XLEN unleses data cache or DTIM is supported");
 | 
			
		||||
    assert (`DCACHE_WAYSIZEINBYTES <= 4096 | (!`DCACHE) | `VIRTMEM_SUPPORTED == 0) else $error("DCACHE_WAYSIZEINBYTES cannot exceed 4 KiB when caches and vitual memory is enabled (to prevent aliasing)");
 | 
			
		||||
    assert (`DCACHE_LINELENINBITS >= 128 | (!`DCACHE)) else $error("DCACHE_LINELENINBITS must be at least 128 when caches are enabled");
 | 
			
		||||
    assert (`FLEN<=`XLEN | `DCACHE_SUPPORTED | `DTIM_SUPPORTED) else $error("Wally does not support FLEN > XLEN unleses data cache or DTIM is supported");
 | 
			
		||||
    assert (`DCACHE_WAYSIZEINBYTES <= 4096 | (!`DCACHE_SUPPORTED) | `VIRTMEM_SUPPORTED == 0) else $error("DCACHE_WAYSIZEINBYTES cannot exceed 4 KiB when caches and vitual memory is enabled (to prevent aliasing)");
 | 
			
		||||
    assert (`DCACHE_LINELENINBITS >= 128 | (!`DCACHE_SUPPORTED)) else $error("DCACHE_LINELENINBITS must be at least 128 when caches are enabled");
 | 
			
		||||
    assert (`DCACHE_LINELENINBITS < `DCACHE_WAYSIZEINBYTES*8) else $error("DCACHE_LINELENINBITS must be smaller than way size");
 | 
			
		||||
    assert (`ICACHE_WAYSIZEINBYTES <= 4096 | (!`ICACHE) | `VIRTMEM_SUPPORTED == 0) else $error("ICACHE_WAYSIZEINBYTES cannot exceed 4 KiB when caches and vitual memory is enabled (to prevent aliasing)");
 | 
			
		||||
    assert (`ICACHE_LINELENINBITS >= 32 | (!`ICACHE)) else $error("ICACHE_LINELENINBITS must be at least 32 when caches are enabled");
 | 
			
		||||
    assert (`ICACHE_WAYSIZEINBYTES <= 4096 | (!`ICACHE_SUPPORTED) | `VIRTMEM_SUPPORTED == 0) else $error("ICACHE_WAYSIZEINBYTES cannot exceed 4 KiB when caches and vitual memory is enabled (to prevent aliasing)");
 | 
			
		||||
    assert (`ICACHE_LINELENINBITS >= 32 | (!`ICACHE_SUPPORTED)) else $error("ICACHE_LINELENINBITS must be at least 32 when caches are enabled");
 | 
			
		||||
    assert (`ICACHE_LINELENINBITS < `ICACHE_WAYSIZEINBYTES*8) else $error("ICACHE_LINELENINBITS must be smaller than way size");
 | 
			
		||||
    assert (2**$clog2(`DCACHE_LINELENINBITS) == `DCACHE_LINELENINBITS | (!`DCACHE)) else $error("DCACHE_LINELENINBITS must be a power of 2");
 | 
			
		||||
    assert (2**$clog2(`DCACHE_WAYSIZEINBYTES) == `DCACHE_WAYSIZEINBYTES | (!`DCACHE)) else $error("DCACHE_WAYSIZEINBYTES must be a power of 2");
 | 
			
		||||
    assert (2**$clog2(`ICACHE_LINELENINBITS) == `ICACHE_LINELENINBITS | (!`ICACHE)) else $error("ICACHE_LINELENINBITS must be a power of 2");
 | 
			
		||||
    assert (2**$clog2(`ICACHE_WAYSIZEINBYTES) == `ICACHE_WAYSIZEINBYTES | (!`ICACHE)) else $error("ICACHE_WAYSIZEINBYTES must be a power of 2");
 | 
			
		||||
    assert (2**$clog2(`DCACHE_LINELENINBITS) == `DCACHE_LINELENINBITS | (!`DCACHE_SUPPORTED)) else $error("DCACHE_LINELENINBITS must be a power of 2");
 | 
			
		||||
    assert (2**$clog2(`DCACHE_WAYSIZEINBYTES) == `DCACHE_WAYSIZEINBYTES | (!`DCACHE_SUPPORTED)) else $error("DCACHE_WAYSIZEINBYTES must be a power of 2");
 | 
			
		||||
    assert (2**$clog2(`ICACHE_LINELENINBITS) == `ICACHE_LINELENINBITS | (!`ICACHE_SUPPORTED)) else $error("ICACHE_LINELENINBITS must be a power of 2");
 | 
			
		||||
    assert (2**$clog2(`ICACHE_WAYSIZEINBYTES) == `ICACHE_WAYSIZEINBYTES | (!`ICACHE_SUPPORTED)) else $error("ICACHE_WAYSIZEINBYTES must be a power of 2");
 | 
			
		||||
    assert (2**$clog2(`ITLB_ENTRIES) == `ITLB_ENTRIES | `VIRTMEM_SUPPORTED==0) else $error("ITLB_ENTRIES must be a power of 2");
 | 
			
		||||
    assert (2**$clog2(`DTLB_ENTRIES) == `DTLB_ENTRIES | `VIRTMEM_SUPPORTED==0) else $error("DTLB_ENTRIES must be a power of 2");
 | 
			
		||||
    assert (`UNCORE_RAM_RANGE >= 56'h07FFFFFF) else $warning("Some regression tests will fail if UNCORE_RAM_RANGE is less than 56'h07FFFFFF");
 | 
			
		||||
@ -543,12 +543,12 @@ module riscvassertions;
 | 
			
		||||
    assert (`ZICSR_SUPPORTED == 1 | (`S_SUPPORTED == 0 & `U_SUPPORTED == 0)) else $error("S and U modes not supported if ZISR not supported");
 | 
			
		||||
    assert (`U_SUPPORTED | (`S_SUPPORTED == 0)) else $error ("S mode only supported if U also is supported");
 | 
			
		||||
    assert (`VIRTMEM_SUPPORTED == 0 | (`DTIM_SUPPORTED == 0 & `IROM_SUPPORTED == 0)) else $error("Can't simultaneously have virtual memory and DTIM_SUPPORTED/IROM_SUPPORTED because local memories don't translate addresses");
 | 
			
		||||
    assert (`DCACHE | `VIRTMEM_SUPPORTED ==0) else $error("Virtual memory needs dcache");
 | 
			
		||||
    assert (`ICACHE | `VIRTMEM_SUPPORTED ==0) else $error("Virtual memory needs icache");
 | 
			
		||||
    assert ((`DCACHE == 0 & `ICACHE == 0) | `BUS_SUPPORTED) else $error("Dcache and Icache requires DBUS_SUPPORTED.");
 | 
			
		||||
    assert (`DCACHE_LINELENINBITS <= `XLEN*16 | (!`DCACHE)) else $error("DCACHE_LINELENINBITS must not exceed 16 words because max AHB burst size is 1");
 | 
			
		||||
    assert (`DCACHE_SUPPORTED | `VIRTMEM_SUPPORTED ==0) else $error("Virtual memory needs dcache");
 | 
			
		||||
    assert (`ICACHE_SUPPORTED | `VIRTMEM_SUPPORTED ==0) else $error("Virtual memory needs icache");
 | 
			
		||||
    assert ((`DCACHE_SUPPORTED == 0 & `ICACHE_SUPPORTED == 0) | `BUS_SUPPORTED) else $error("Dcache and Icache requires DBUS_SUPPORTED.");
 | 
			
		||||
    assert (`DCACHE_LINELENINBITS <= `XLEN*16 | (!`DCACHE_SUPPORTED)) else $error("DCACHE_LINELENINBITS must not exceed 16 words because max AHB burst size is 1");
 | 
			
		||||
    assert (`DCACHE_LINELENINBITS % 4 == 0) else $error("DCACHE_LINELENINBITS must hold 4, 8, or 16 words");
 | 
			
		||||
    assert (`DCACHE | `A_SUPPORTED == 0) else $error("Atomic extension (A) requires cache on Wally.");
 | 
			
		||||
    assert (`DCACHE_SUPPORTED | `A_SUPPORTED == 0) else $error("Atomic extension (A) requires cache on Wally.");
 | 
			
		||||
    assert (`IDIV_ON_FPU == 0 | `F_SUPPORTED) else $error("IDIV on FPU needs F_SUPPORTED");
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@ -569,7 +569,7 @@ module DCacheFlushFSM
 | 
			
		||||
 | 
			
		||||
  logic [`XLEN-1:0] ShadowRAM[`UNCORE_RAM_BASE>>(1+`XLEN/32):(`UNCORE_RAM_RANGE+`UNCORE_RAM_BASE)>>1+(`XLEN/32)];
 | 
			
		||||
  
 | 
			
		||||
	if(`DCACHE) begin
 | 
			
		||||
	if(`DCACHE_SUPPORTED) begin
 | 
			
		||||
	  localparam numlines = testbench.dut.core.lsu.bus.dcache.dcache.NUMLINES;
 | 
			
		||||
	  localparam numways = testbench.dut.core.lsu.bus.dcache.dcache.NUMWAYS;
 | 
			
		||||
	  localparam linebytelen = testbench.dut.core.lsu.bus.dcache.dcache.LINEBYTELEN;
 | 
			
		||||
 | 
			
		||||
@ -265,14 +265,14 @@ module riscvassertions;
 | 
			
		||||
    assert (`F_SUPPORTED | ~`D_SUPPORTED) else $error("Can't support double fp (D) without supporting float (F)");
 | 
			
		||||
    assert (`D_SUPPORTED | ~`Q_SUPPORTED) else $error("Can't support quad fp (Q) without supporting double (D)");
 | 
			
		||||
    assert (`F_SUPPORTED | ~`ZFH_SUPPORTED) else $error("Can't support half-precision fp (ZFH) without supporting float (F)");
 | 
			
		||||
    assert (`DCACHE | ~`F_SUPPORTED | `FLEN <= `XLEN) else $error("Data cache required to support FLEN > XLEN because AHB bus width is XLEN");
 | 
			
		||||
    assert (`DCACHE_SUPPORTED | ~`F_SUPPORTED | `FLEN <= `XLEN) else $error("Data cache required to support FLEN > XLEN because AHB bus width is XLEN");
 | 
			
		||||
    assert (`I_SUPPORTED ^ `E_SUPPORTED) else $error("Exactly one of I and E must be supported");
 | 
			
		||||
    assert (`FLEN<=`XLEN | `DCACHE | `DTIM_SUPPORTED) else $error("Wally does not support FLEN > XLEN unleses data cache or DTIM is supported");
 | 
			
		||||
    assert (`DCACHE_WAYSIZEINBYTES <= 4096 | (!`DCACHE) | `VIRTMEM_SUPPORTED == 0) else $error("DCACHE_WAYSIZEINBYTES cannot exceed 4 KiB when caches and vitual memory is enabled (to prevent aliasing)");
 | 
			
		||||
    assert (`DCACHE_LINELENINBITS >= 128 | (!`DCACHE)) else $error("DCACHE_LINELENINBITS must be at least 128 when caches are enabled");
 | 
			
		||||
    assert (`DCACHE_WAYSIZEINBYTES <= 4096 | (!`DCACHE_SUPPORTED) | `VIRTMEM_SUPPORTED == 0) else $error("DCACHE_WAYSIZEINBYTES cannot exceed 4 KiB when caches and vitual memory is enabled (to prevent aliasing)");
 | 
			
		||||
    assert (`DCACHE_LINELENINBITS >= 128 | (!`DCACH_SUPPORTED)) else $error("DCACHE_LINELENINBITS must be at least 128 when caches are enabled");
 | 
			
		||||
    assert (`DCACHE_LINELENINBITS < `DCACHE_WAYSIZEINBYTES*8) else $error("DCACHE_LINELENINBITS must be smaller than way size");
 | 
			
		||||
    assert (`ICACHE_WAYSIZEINBYTES <= 4096 | (!`ICACHE) | `VIRTMEM_SUPPORTED == 0) else $error("ICACHE_WAYSIZEINBYTES cannot exceed 4 KiB when caches and vitual memory is enabled (to prevent aliasing)");
 | 
			
		||||
    assert (`ICACHE_LINELENINBITS >= 32 | (!`ICACHE)) else $error("ICACHE_LINELENINBITS must be at least 32 when caches are enabled");
 | 
			
		||||
    assert (`ICACHE_WAYSIZEINBYTES <= 4096 | (!`ICACHE_SUPPORTED) | `VIRTMEM_SUPPORTED == 0) else $error("ICACHE_WAYSIZEINBYTES cannot exceed 4 KiB when caches and vitual memory is enabled (to prevent aliasing)");
 | 
			
		||||
    assert (`ICACHE_LINELENINBITS >= 32 | (!`ICACHE_SUPPORTED)) else $error("ICACHE_LINELENINBITS must be at least 32 when caches are enabled");
 | 
			
		||||
    assert (`ICACHE_LINELENINBITS < `ICACHE_WAYSIZEINBYTES*8) else $error("ICACHE_LINELENINBITS must be smaller than way size");
 | 
			
		||||
    assert (2**$clog2(`DCACHE_LINELENINBITS) == `DCACHE_LINELENINBITS | (!`DCACHE)) else $error("DCACHE_LINELENINBITS must be a power of 2");
 | 
			
		||||
    assert (2**$clog2(`DCACHE_WAYSIZEINBYTES) == `DCACHE_WAYSIZEINBYTES | (!`DCACHE)) else $error("DCACHE_WAYSIZEINBYTES must be a power of 2");
 | 
			
		||||
@ -285,12 +285,12 @@ module riscvassertions;
 | 
			
		||||
    assert (`ZICSR_SUPPORTED == 1 | (`S_SUPPORTED == 0 & `U_SUPPORTED == 0)) else $error("S and U modes not supported if ZISR not supported");
 | 
			
		||||
    assert (`U_SUPPORTED | (`S_SUPPORTED == 0)) else $error ("S mode only supported if U also is supported");
 | 
			
		||||
    assert (`VIRTMEM_SUPPORTED == 0 | (`DTIM_SUPPORTED == 0 & `IROM_SUPPORTED == 0)) else $error("Can't simultaneously have virtual memory and DTIM_SUPPORTED/IROM_SUPPORTED because local memories don't translate addresses");
 | 
			
		||||
    assert (`DCACHE | `VIRTMEM_SUPPORTED ==0) else $error("Virtual memory needs dcache");
 | 
			
		||||
    assert (`ICACHE | `VIRTMEM_SUPPORTED ==0) else $error("Virtual memory needs icache");
 | 
			
		||||
    assert ((`DCACHE == 0 & `ICACHE == 0) | `BUS_SUPPORTED) else $error("Dcache and Icache requires DBUS.");
 | 
			
		||||
    assert (`DCACHE_SUPPORTED | `VIRTMEM_SUPPORTED ==0) else $error("Virtual memory needs dcache");
 | 
			
		||||
    assert (`ICACHE_SUPPORTED | `VIRTMEM_SUPPORTED ==0) else $error("Virtual memory needs icache");
 | 
			
		||||
    assert ((`DCACHE_SUPPORTED == 0 & `ICACHE_SUPPORTED == 0) | `BUS_SUPPORTED) else $error("Dcache and Icache requires DBUS.");
 | 
			
		||||
    assert (`DCACHE_LINELENINBITS <= `XLEN*16 | (!`DCACHE)) else $error("DCACHE_LINELENINBITS must not exceed 16 words because max AHB burst size is 1");
 | 
			
		||||
    assert (`DCACHE_LINELENINBITS % 4 == 0) else $error("DCACHE_LINELENINBITS must hold 4, 8, or 16 words");
 | 
			
		||||
    assert (`DCACHE | `A_SUPPORTED == 0) else $error("Atomic extension (A) requires cache on Wally.");
 | 
			
		||||
    assert (`DCACHE_SUPPORTED | `A_SUPPORTED == 0) else $error("Atomic extension (A) requires cache on Wally.");
 | 
			
		||||
    assert (`IDIV_ON_FPU == 0 | `F_SUPPORTED) else $error("IDIV on FPU needs F_SUPPORTED");
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user