mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Modified uncore to use AHB bridge to GPIO
This commit is contained in:
		
							parent
							
								
									c8ac05ba7b
								
							
						
					
					
						commit
						5f5ad77d4a
					
				@ -81,6 +81,24 @@ module uncore (
 | 
			
		||||
  logic            UARTIntr,GPIOIntr;
 | 
			
		||||
  logic 	   SDCIntM;
 | 
			
		||||
  
 | 
			
		||||
  logic PCLK, PRESETn, PWRITE, PENABLE;
 | 
			
		||||
//  logic PSEL, PREADY;
 | 
			
		||||
  logic [1:0] PSEL, PREADY;
 | 
			
		||||
  logic [31:0] PADDR;
 | 
			
		||||
  logic [`XLEN-1:0] PWDATA;
 | 
			
		||||
  logic [`XLEN/8-1:0] PSTRB;
 | 
			
		||||
  logic [1:0][`XLEN-1:0] PRDATA;
 | 
			
		||||
//  logic [`XLEN-1:0][8:0] PRDATA;
 | 
			
		||||
  logic [`XLEN-1:0] HREADBRIDGE;
 | 
			
		||||
  logic HRESPBRIDGE, HREADYBRIDGE, HSELBRIDGE, HSELBRIDGED;
 | 
			
		||||
 | 
			
		||||
  // *** to do:
 | 
			
		||||
  // combinational loop related to HREADY, HREADYOUT through PENABLE
 | 
			
		||||
  // hook up and test GPIO on AHB
 | 
			
		||||
  // hook up HWSTRB and remove subword write decoders
 | 
			
		||||
  // add other peripherals on AHB
 | 
			
		||||
  // HTRANS encoding
 | 
			
		||||
 | 
			
		||||
  // Determine which region of physical memory (if any) is being accessed
 | 
			
		||||
  // Use a trimmed down portion of the PMA checker - only the address decoders
 | 
			
		||||
  // Set access types to all 1 as don't cares because the MMU has already done access checking
 | 
			
		||||
@ -89,7 +107,16 @@ module uncore (
 | 
			
		||||
  // unswizzle HSEL signals
 | 
			
		||||
  assign {HSELEXT, HSELBootRom, HSELRam, HSELCLINT, HSELGPIO, HSELUART, HSELPLIC, HSELSDC} = HSELRegions[7:0];
 | 
			
		||||
 | 
			
		||||
//  generate
 | 
			
		||||
  // AHB -> APB bridge
 | 
			
		||||
  ahbapbbridge #(2) ahbapbbridge
 | 
			
		||||
    (.HCLK, .HRESETn, .HSEL({1'b0, HSELGPIO}), .HADDR, .HWDATA, .HWRITE, .HTRANS, .HREADY, .HWSTRB('1), 
 | 
			
		||||
     .HRDATA(HREADBRIDGE), .HRESP(HRESPBRIDGE), .HREADYOUT(HREADYBRIDGE),
 | 
			
		||||
     .PCLK, .PRESETn, .PSEL, .PWRITE, .PENABLE, .PADDR, .PWDATA, .PSTRB, .PREADY, .PRDATA);
 | 
			
		||||
  assign PREADY[1] = 0; // *** replace these with connections to other peripherals
 | 
			
		||||
  assign PRDATA[1] = 0; 
 | 
			
		||||
  assign HSELBRIDGE = HSELGPIO; // if any of the bridge signals are selected
 | 
			
		||||
  // This system is showing a combinatonal loop related to HREADY and HREADYBRIDGE and HREADYGPIO
 | 
			
		||||
                
 | 
			
		||||
  // on-chip RAM
 | 
			
		||||
  if (`RAM_SUPPORTED) begin : ram
 | 
			
		||||
    ram #(
 | 
			
		||||
@ -139,7 +166,7 @@ module uncore (
 | 
			
		||||
    assign SExtInt = 0;
 | 
			
		||||
  end
 | 
			
		||||
  if (`GPIO_SUPPORTED == 1) begin : gpio
 | 
			
		||||
      gpio gpio(
 | 
			
		||||
/*    gpio gpio(
 | 
			
		||||
      .HCLK, .HRESETn, .HSELGPIO,
 | 
			
		||||
      .HADDR(HADDR[7:0]), 
 | 
			
		||||
      .HWDATA,
 | 
			
		||||
@ -149,8 +176,11 @@ module uncore (
 | 
			
		||||
      .HRESPGPIO, .HREADYGPIO,
 | 
			
		||||
      .GPIOPinsIn,
 | 
			
		||||
      .GPIOPinsOut, .GPIOPinsEn,
 | 
			
		||||
        .GPIOIntr);
 | 
			
		||||
 | 
			
		||||
      .GPIOIntr); */
 | 
			
		||||
    gpio_apb gpio(
 | 
			
		||||
      .PCLK, .PRESETn, .PSEL(PSEL[0]), .PADDR(PADDR[7:0]), .PWDATA, .PSTRB, .PWRITE, .PENABLE, 
 | 
			
		||||
      .PRDATA(PRDATA[0]), .PREADY(PREADY[0]), 
 | 
			
		||||
      .iof0(), .iof1(), .GPIOPinsIn, .GPIOPinsOut, .GPIOPinsEn, .GPIOIntr);
 | 
			
		||||
  end else begin : gpio
 | 
			
		||||
    assign GPIOPinsOut = 0; assign GPIOPinsEn = 0; assign GPIOIntr = 0;
 | 
			
		||||
  end
 | 
			
		||||
@ -180,7 +210,6 @@ module uncore (
 | 
			
		||||
    assign SDCCmdOut = 0;
 | 
			
		||||
    assign SDCCmdOE = 0;
 | 
			
		||||
  end
 | 
			
		||||
//  endgenerate
 | 
			
		||||
 | 
			
		||||
  // mux could also include external memory  
 | 
			
		||||
  // AHB Read Multiplexer
 | 
			
		||||
@ -188,7 +217,8 @@ module uncore (
 | 
			
		||||
		          ({`XLEN{HSELEXTD}} & HRDATAEXT) |   
 | 
			
		||||
                  ({`XLEN{HSELCLINTD}} & HREADCLINT) |
 | 
			
		||||
                  ({`XLEN{HSELPLICD}} & HREADPLIC) | 
 | 
			
		||||
                  ({`XLEN{HSELGPIOD}} & HREADGPIO) |
 | 
			
		||||
//                  ({`XLEN{HSELGPIOD}} & HREADGPIO) |
 | 
			
		||||
                  ({`XLEN{HSELBRIDGED}} & HREADBRIDGE) |
 | 
			
		||||
                  ({`XLEN{HSELBootRomD}} & HREADBootRom) |
 | 
			
		||||
                  ({`XLEN{HSELUARTD}} & HREADUART) |
 | 
			
		||||
                  ({`XLEN{HSELSDCD}} & HREADSDC);
 | 
			
		||||
@ -197,7 +227,8 @@ module uncore (
 | 
			
		||||
		             HSELEXTD & HRESPEXT |
 | 
			
		||||
                 HSELCLINTD & HRESPCLINT |
 | 
			
		||||
                 HSELPLICD & HRESPPLIC |
 | 
			
		||||
                 HSELGPIOD & HRESPGPIO | 
 | 
			
		||||
//                 HSELGPIOD & HRESPGPIO | 
 | 
			
		||||
                 HSELBRIDGE & HRESPBRIDGE |
 | 
			
		||||
                 HSELBootRomD & HRESPBootRom |
 | 
			
		||||
                 HSELUARTD & HRESPUART |
 | 
			
		||||
                 HSELSDC & HRESPSDC;		 
 | 
			
		||||
@ -206,7 +237,8 @@ module uncore (
 | 
			
		||||
		              HSELEXTD & HREADYEXT |		  
 | 
			
		||||
                  HSELCLINTD & HREADYCLINT |
 | 
			
		||||
                  HSELPLICD & HREADYPLIC |
 | 
			
		||||
                  HSELGPIOD & HREADYGPIO | 
 | 
			
		||||
//                  HSELGPIOD & HREADYGPIO | 
 | 
			
		||||
                  HSELBRIDGED & HREADYBRIDGE |
 | 
			
		||||
                  HSELBootRomD & HREADYBootRom |
 | 
			
		||||
                  HSELUARTD & HREADYUART |
 | 
			
		||||
                  HSELSDCD & HREADYSDC |		  
 | 
			
		||||
@ -214,5 +246,6 @@ module uncore (
 | 
			
		||||
 | 
			
		||||
  // Address Decoder Delay (figure 4-2 in spec)
 | 
			
		||||
  flopr #(9) hseldelayreg(HCLK, ~HRESETn, HSELRegions, {HSELNoneD, HSELEXTD, HSELBootRomD, HSELRamD, HSELCLINTD, HSELGPIOD, HSELUARTD, HSELPLICD, HSELSDCD});
 | 
			
		||||
  flopr #(1) hselbridgedelayreg(HCLK, ~HRESETn, HSELBRIDGE, HSELBRIDGED);
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user