mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Reordered the adrdecs.
This commit is contained in:
		
							parent
							
								
									dd7736cb93
								
							
						
					
					
						commit
						5e63af5887
					
				@ -40,16 +40,16 @@ module adrdecs (
 | 
			
		||||
 | 
			
		||||
  localparam logic [3:0]          SUPPORTED_SIZE = (`LLEN == 32 ? 4'b0111 : 4'b1111);
 | 
			
		||||
 // Determine which region of physical memory (if any) is being accessed
 | 
			
		||||
  adrdec ddr4dec(PhysicalAddress, `EXT_MEM_BASE, `EXT_MEM_RANGE, `EXT_MEM_SUPPORTED, AccessRWX, Size, SUPPORTED_SIZE, SelRegions[7]);  
 | 
			
		||||
  adrdec bootromdec(PhysicalAddress, `BOOTROM_BASE, `BOOTROM_RANGE, `BOOTROM_SUPPORTED, AccessRX, Size, SUPPORTED_SIZE, SelRegions[6]);
 | 
			
		||||
  adrdec uncoreramdec(PhysicalAddress, `UNCORE_RAM_BASE, `UNCORE_RAM_RANGE, `UNCORE_RAM_SUPPORTED, AccessRWX, Size, SUPPORTED_SIZE, SelRegions[5]);
 | 
			
		||||
  adrdec clintdec(PhysicalAddress, `CLINT_BASE, `CLINT_RANGE, `CLINT_SUPPORTED, AccessRW, Size, SUPPORTED_SIZE, SelRegions[4]);
 | 
			
		||||
  adrdec gpiodec(PhysicalAddress, `GPIO_BASE, `GPIO_RANGE, `GPIO_SUPPORTED, AccessRW, Size, 4'b0100, SelRegions[3]);
 | 
			
		||||
  adrdec uartdec(PhysicalAddress, `UART_BASE, `UART_RANGE, `UART_SUPPORTED, AccessRW, Size, 4'b0001, SelRegions[2]);
 | 
			
		||||
  adrdec plicdec(PhysicalAddress, `PLIC_BASE, `PLIC_RANGE, `PLIC_SUPPORTED, AccessRW, Size, 4'b0100, SelRegions[1]);
 | 
			
		||||
  adrdec sdcdec(PhysicalAddress, `SDC_BASE, `SDC_RANGE, `SDC_SUPPORTED, AccessRW, Size, SUPPORTED_SIZE & 4'b1100, SelRegions[0]); 
 | 
			
		||||
  adrdec ddr4dec(PhysicalAddress, `EXT_MEM_BASE, `EXT_MEM_RANGE, `EXT_MEM_SUPPORTED, AccessRWX, Size, SUPPORTED_SIZE, SelRegions[8]);  
 | 
			
		||||
  adrdec bootromdec(PhysicalAddress, `BOOTROM_BASE, `BOOTROM_RANGE, `BOOTROM_SUPPORTED, AccessRX, Size, SUPPORTED_SIZE, SelRegions[7]);
 | 
			
		||||
  adrdec uncoreramdec(PhysicalAddress, `UNCORE_RAM_BASE, `UNCORE_RAM_RANGE, `UNCORE_RAM_SUPPORTED, AccessRWX, Size, SUPPORTED_SIZE, SelRegions[6]);
 | 
			
		||||
  adrdec clintdec(PhysicalAddress, `CLINT_BASE, `CLINT_RANGE, `CLINT_SUPPORTED, AccessRW, Size, SUPPORTED_SIZE, SelRegions[5]);
 | 
			
		||||
  adrdec gpiodec(PhysicalAddress, `GPIO_BASE, `GPIO_RANGE, `GPIO_SUPPORTED, AccessRW, Size, 4'b0100, SelRegions[4]);
 | 
			
		||||
  adrdec uartdec(PhysicalAddress, `UART_BASE, `UART_RANGE, `UART_SUPPORTED, AccessRW, Size, 4'b0001, SelRegions[3]);
 | 
			
		||||
  adrdec plicdec(PhysicalAddress, `PLIC_BASE, `PLIC_RANGE, `PLIC_SUPPORTED, AccessRW, Size, 4'b0100, SelRegions[2]);
 | 
			
		||||
  adrdec sdcdec(PhysicalAddress, `SDC_BASE, `SDC_RANGE, `SDC_SUPPORTED, AccessRW, Size, SUPPORTED_SIZE & 4'b1100, SelRegions[1]); 
 | 
			
		||||
 | 
			
		||||
  assign SelRegions[8] = ~|(SelRegions[7:0]); // none of the regions are selected
 | 
			
		||||
  assign SelRegions[0] = ~|(SelRegions[8:1]); // none of the regions are selected
 | 
			
		||||
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -58,12 +58,12 @@ module pmachecker (
 | 
			
		||||
  adrdecs adrdecs(PhysicalAddress, AccessRW, AccessRX, AccessRWX, Size, SelRegions);
 | 
			
		||||
 | 
			
		||||
  // Only non-core RAM/ROM memory regions are cacheable
 | 
			
		||||
  assign Cacheable = SelRegions[7] | SelRegions[6] | SelRegions[5];
 | 
			
		||||
  assign Idempotent = SelRegions[7] | SelRegions[5];
 | 
			
		||||
  assign AtomicAllowed = SelRegions[7] | SelRegions[5];
 | 
			
		||||
  assign Cacheable = SelRegions[8] | SelRegions[7] | SelRegions[6];
 | 
			
		||||
  assign Idempotent = SelRegions[8] | SelRegions[6];
 | 
			
		||||
  assign AtomicAllowed = SelRegions[8] | SelRegions[6];
 | 
			
		||||
 | 
			
		||||
  // Detect access faults
 | 
			
		||||
  assign PMAAccessFault = (SelRegions[8] & ~SelTIM) & AccessRWX;  
 | 
			
		||||
  assign PMAAccessFault = (SelRegions[0] & ~SelTIM) & AccessRWX;  
 | 
			
		||||
  assign PMAInstrAccessFaultF = ExecuteAccessF & PMAAccessFault;
 | 
			
		||||
  assign PMALoadAccessFaultM  = ReadAccessM    & PMAAccessFault;
 | 
			
		||||
  assign PMAStoreAmoAccessFaultM = WriteAccessM   & PMAAccessFault;
 | 
			
		||||
 | 
			
		||||
@ -93,7 +93,7 @@ module uncore (
 | 
			
		||||
  adrdecs adrdecs(HADDR, 1'b1, 1'b1, 1'b1, HSIZE[1:0], HSELRegions);
 | 
			
		||||
 | 
			
		||||
  // unswizzle HSEL signals
 | 
			
		||||
  assign {HSELEXT, HSELBootRom, HSELRam, HSELCLINT, HSELGPIO, HSELUART, HSELPLIC, HSELSDC} = HSELRegions[7:0];
 | 
			
		||||
  assign {HSELEXT, HSELBootRom, HSELRam, HSELCLINT, HSELGPIO, HSELUART, HSELPLIC, HSELSDC} = HSELRegions[8:1];
 | 
			
		||||
 | 
			
		||||
  // AHB -> APB bridge
 | 
			
		||||
  ahbapbbridge #(4) ahbapbbridge
 | 
			
		||||
@ -197,7 +197,7 @@ module uncore (
 | 
			
		||||
                  HSELNoneD; // don't lock up the bus if no region is being accessed
 | 
			
		||||
 | 
			
		||||
  // Address Decoder Delay (figure 4-2 in spec)
 | 
			
		||||
  flopr #(9) hseldelayreg(HCLK, ~HRESETn, HSELRegions, {HSELNoneD, HSELEXTD, HSELBootRomD, HSELRamD, HSELCLINTD, HSELGPIOD, HSELUARTD, HSELPLICD, HSELSDCD});
 | 
			
		||||
  flopr #(9) hseldelayreg(HCLK, ~HRESETn, HSELRegions, {HSELEXTD, HSELBootRomD, HSELRamD, HSELCLINTD, HSELGPIOD, HSELUARTD, HSELPLICD, HSELSDCD, HSELNoneD});
 | 
			
		||||
  flopr #(1) hselbridgedelayreg(HCLK, ~HRESETn, HSELBRIDGE, HSELBRIDGED);
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user