forked from Github_Repos/cvw
		
	busybear: add 2nd dtim for bootram
This commit is contained in:
		
							parent
							
								
									edd5e9106d
								
							
						
					
					
						commit
						6e70ae8b3d
					
				@ -61,16 +61,16 @@
 | 
				
			|||||||
// Peripheral memory space extends from BASE to BASE+RANGE
 | 
					// Peripheral memory space extends from BASE to BASE+RANGE
 | 
				
			||||||
// Range should be a thermometer code with 0's in the upper bits and 1s in the lower bits
 | 
					// Range should be a thermometer code with 0's in the upper bits and 1s in the lower bits
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`define TIMBASE    64'h0000000080000000
 | 
					`define TIMBASE       32'h80000000
 | 
				
			||||||
`define TIMRANGE   64'h0000000007FFFFFF
 | 
					`define TIMRANGE      32'h07FFFFFF
 | 
				
			||||||
`define BOOTTIMBASE    64'h0000000000000000 //only needs to go from 0x1000 to 0x2FFF, extending to a power of 2
 | 
					`define BOOTTIMBASE   32'h00000000 //only needs to go from 0x1000 to 0x2FFF, extending to a power of 2
 | 
				
			||||||
`define BOOTTIMRANGE   64'h0000000000004000
 | 
					`define BOOTTIMRANGE  32'h00004000
 | 
				
			||||||
`define CLINTBASE  64'h0000000002000000
 | 
					`define CLINTBASE     32'h02000000
 | 
				
			||||||
`define CLINTRANGE 64'h000000000000BFFF
 | 
					`define CLINTRANGE    32'h0000BFFF
 | 
				
			||||||
//`define GPIOBASE   64'h0000000010012000 // no GPIO in linux for now
 | 
					//`define GPIOBASE    32'h10012000 // no GPIO in linux for now
 | 
				
			||||||
//`define GPIORANGE  64'h00000000000000FF
 | 
					//`define GPIORANGE   32'h000000FF
 | 
				
			||||||
`define UARTBASE   64'h0000000010000000
 | 
					`define UARTBASE      32'h10000000
 | 
				
			||||||
`define UARTRANGE  64'h0000000000000007
 | 
					`define UARTRANGE     32'h00000007
 | 
				
			||||||
// Bus Interface width
 | 
					// Bus Interface width
 | 
				
			||||||
`define AHBW 64
 | 
					`define AHBW 64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -25,7 +25,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
`include "wally-config.vh"
 | 
					`include "wally-config.vh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module dtim (
 | 
					module dtim #(parameter BASE=0, RANGE = 65535) (
 | 
				
			||||||
  input  logic             HCLK, HRESETn, 
 | 
					  input  logic             HCLK, HRESETn, 
 | 
				
			||||||
  input  logic [1:0]       MemRWtim,
 | 
					  input  logic [1:0]       MemRWtim,
 | 
				
			||||||
  input  logic [18:0]      HADDR, 
 | 
					  input  logic [18:0]      HADDR, 
 | 
				
			||||||
@ -35,7 +35,8 @@ module dtim (
 | 
				
			|||||||
  output logic             HRESPTim, HREADYTim
 | 
					  output logic             HRESPTim, HREADYTim
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic [`XLEN-1:0] RAM[0:65535];
 | 
					  //logic [`XLEN-1:0] RAM[0:65535];
 | 
				
			||||||
 | 
					  logic [`XLEN-1:0] RAM[BASE>>(1+`XLEN/32):(RANGE-BASE)>>1+(`XLEN/32)];
 | 
				
			||||||
  logic [18:0] HWADDR;
 | 
					  logic [18:0] HWADDR;
 | 
				
			||||||
  logic [`XLEN-1:0] HREADTim0;
 | 
					  logic [`XLEN-1:0] HREADTim0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -58,12 +58,12 @@ module uncore (
 | 
				
			|||||||
  );
 | 
					  );
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  logic [`XLEN-1:0] HWDATA;
 | 
					  logic [`XLEN-1:0] HWDATA;
 | 
				
			||||||
  logic [`XLEN-1:0] HREADTim, HREADCLINT, HREADGPIO, HREADUART;
 | 
					  logic [`XLEN-1:0] HREADBootTim, HREADTim, HREADCLINT, HREADGPIO, HREADUART;
 | 
				
			||||||
  logic            HSELBootTim, HSELTim, HSELCLINT, HSELGPIO, PreHSELUART, HSELUART;
 | 
					  logic            HSELBootTim, HSELTim, HSELCLINT, HSELGPIO, PreHSELUART, HSELUART;
 | 
				
			||||||
  logic            HRESPTim, HRESPCLINT, HRESPGPIO, HRESPUART;
 | 
					  logic            HRESPBootTim, HRESPTim, HRESPCLINT, HRESPGPIO, HRESPUART;
 | 
				
			||||||
  logic            HREADYTim, HREADYCLINT, HREADYGPIO, HREADYUART;  
 | 
					  logic            HREADYBootTim, HREADYTim, HREADYCLINT, HREADYGPIO, HREADYUART;  
 | 
				
			||||||
  logic [1:0]      MemRW;
 | 
					  logic [1:0]      MemRW;
 | 
				
			||||||
  logic [1:0]      MemRWtim, MemRWclint, MemRWgpio, MemRWuart;
 | 
					  logic [1:0]      MemRWboottim, MemRWtim, MemRWclint, MemRWgpio, MemRWuart;
 | 
				
			||||||
  logic            UARTIntr;// *** will need to tie INTR to an interrupt handler
 | 
					  logic            UARTIntr;// *** will need to tie INTR to an interrupt handler
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -71,16 +71,17 @@ module uncore (
 | 
				
			|||||||
  adrdec timdec(HADDR, `TIMBASE, `TIMRANGE, HSELTim);
 | 
					  adrdec timdec(HADDR, `TIMBASE, `TIMRANGE, HSELTim);
 | 
				
			||||||
  adrdec boottimdec(HADDR, `BOOTTIMBASE, `BOOTTIMRANGE, HSELBootTim);
 | 
					  adrdec boottimdec(HADDR, `BOOTTIMBASE, `BOOTTIMRANGE, HSELBootTim);
 | 
				
			||||||
  adrdec clintdec(HADDR, `CLINTBASE, `CLINTRANGE, HSELCLINT);
 | 
					  adrdec clintdec(HADDR, `CLINTBASE, `CLINTRANGE, HSELCLINT);
 | 
				
			||||||
  //Busybear: for now, leaving out gpio since OVPsim doesn't seem to have it
 | 
					  // Busybear: for now, leaving out gpio since OVPsim doesn't seem to have it
 | 
				
			||||||
  //adrdec gpiodec(HADDR, `GPIOBASE, `GPIORANGE, HSELGPIO); 
 | 
					  //adrdec gpiodec(HADDR, `GPIOBASE, `GPIORANGE, HSELGPIO); 
 | 
				
			||||||
  adrdec uartdec(HADDR, `UARTBASE, `UARTRANGE, PreHSELUART);
 | 
					  adrdec uartdec(HADDR, `UARTBASE, `UARTRANGE, PreHSELUART);
 | 
				
			||||||
  assign HSELUART = PreHSELUART && (HSIZE == 3'b000); // only byte writes to UART are supported
 | 
					  assign HSELUART = PreHSELUART && (HSIZE == 3'b000); // only byte writes to UART are supported
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  // Enable read or write based on decoded address
 | 
					  // Enable read or write based on decoded address
 | 
				
			||||||
  assign MemRW = {~HWRITE, HWRITED};
 | 
					  assign MemRW = {~HWRITE, HWRITED};
 | 
				
			||||||
 | 
					  assign MemRWboottim = MemRW & {2{HSELBootTim}};
 | 
				
			||||||
  assign MemRWtim = MemRW & {2{HSELTim}};
 | 
					  assign MemRWtim = MemRW & {2{HSELTim}};
 | 
				
			||||||
  assign MemRWclint = MemRW & {2{HSELCLINT}};
 | 
					  assign MemRWclint = MemRW & {2{HSELCLINT}};
 | 
				
			||||||
  assign MemRWgpio = MemRW & {2{HSELGPIO}};
 | 
					  //assign MemRWgpio = MemRW & {2{HSELGPIO}};
 | 
				
			||||||
  assign MemRWuart = MemRW & {2{HSELUART}};
 | 
					  assign MemRWuart = MemRW & {2{HSELUART}};
 | 
				
			||||||
/*  always_ff @(posedge HCLK) begin
 | 
					/*  always_ff @(posedge HCLK) begin
 | 
				
			||||||
    HADDRD <= HADDR;
 | 
					    HADDRD <= HADDR;
 | 
				
			||||||
@ -94,11 +95,13 @@ module uncore (
 | 
				
			|||||||
  subwordwrite sww(.*);
 | 
					  subwordwrite sww(.*);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // tightly integrated memory
 | 
					  // tightly integrated memory
 | 
				
			||||||
  dtim dtim(.HADDR(HADDR[18:0]), .*);
 | 
					  dtim #(.BASE(`TIMBASE), .RANGE(`TIMRANGE)) maindtim (.HADDR(HADDR[18:0]), .*);
 | 
				
			||||||
 | 
					  dtim #(.BASE(`BOOTTIMBASE), .RANGE(`BOOTTIMRANGE)) bootdtim (.HADDR(HADDR[18:0]), .MemRWtim(MemRWboottim), 
 | 
				
			||||||
 | 
					              .HSELTim(HSELBootTim), .HREADTim(HREADBootTim), .HRESPTim(HRESPBootTim), .HREADYTim(HREADYBootTim), .*);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // memory-mapped I/O peripherals
 | 
					  // memory-mapped I/O peripherals
 | 
				
			||||||
  clint clint(.HADDR(HADDR[15:0]), .*);
 | 
					  clint clint(.HADDR(HADDR[15:0]), .*);
 | 
				
			||||||
  gpio gpio(.HADDR(HADDR[7:0]), .*); // *** may want to add GPIO interrupts
 | 
					  //gpio gpio(.HADDR(HADDR[7:0]), .*); // *** may want to add GPIO interrupts
 | 
				
			||||||
  uart uart(.HADDR(HADDR[2:0]), .TXRDYb(), .RXRDYb(), .INTR(UARTIntr), .SIN(UARTSin), .SOUT(UARTSout),
 | 
					  uart uart(.HADDR(HADDR[2:0]), .TXRDYb(), .RXRDYb(), .INTR(UARTIntr), .SIN(UARTSin), .SOUT(UARTSout),
 | 
				
			||||||
            .DSRb(1'b1), .DCDb(1'b1), .CTSb(1'b0), .RIb(1'b1), 
 | 
					            .DSRb(1'b1), .DCDb(1'b1), .CTSb(1'b0), .RIb(1'b1), 
 | 
				
			||||||
            .RTSb(), .DTRb(), .OUT1b(), .OUT2b(), .*); 
 | 
					            .RTSb(), .DTRb(), .OUT1b(), .OUT2b(), .*); 
 | 
				
			||||||
@ -106,9 +109,9 @@ module uncore (
 | 
				
			|||||||
  // mux could also include external memory  
 | 
					  // mux could also include external memory  
 | 
				
			||||||
  // AHB Read Multiplexer
 | 
					  // AHB Read Multiplexer
 | 
				
			||||||
  assign HRDATA = ({`XLEN{HSELTim}} & HREADTim) | ({`XLEN{HSELCLINT}} & HREADCLINT) | 
 | 
					  assign HRDATA = ({`XLEN{HSELTim}} & HREADTim) | ({`XLEN{HSELCLINT}} & HREADCLINT) | 
 | 
				
			||||||
                     ({`XLEN{HSELGPIO}} & HREADGPIO) | ({`XLEN{HSELUART}} & HREADUART);
 | 
					                     ({`XLEN{HSELBootTim}} & HREADBootTim) | ({`XLEN{HSELUART}} & HREADUART);
 | 
				
			||||||
  assign HRESP = HSELTim & HRESPTim | HSELCLINT & HRESPCLINT | HSELGPIO & HRESPGPIO | HSELUART & HRESPUART;
 | 
					  assign HRESP = HSELBootTim & HRESPBootTim | HSELTim & HRESPTim | HSELCLINT & HRESPCLINT | HSELGPIO & HRESPGPIO | HSELUART & HRESPUART;
 | 
				
			||||||
  assign HREADY = HSELTim & HREADYTim | HSELCLINT & HREADYCLINT | HSELGPIO & HREADYGPIO | HSELUART & HREADYUART;
 | 
					  assign HREADY = HSELBootTim & HREADYBootTim | HSELTim & HREADYTim | HSELCLINT & HREADYCLINT | HSELGPIO & HREADYGPIO | HSELUART & HREADYUART;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Faults
 | 
					  // Faults
 | 
				
			||||||
  assign DataAccessFaultM = ~(HSELTim | HSELCLINT | HSELGPIO | HSELUART);
 | 
					  assign DataAccessFaultM = ~(HSELTim | HSELCLINT | HSELGPIO | HSELUART);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user