|
@@ -278,7 +278,6 @@ module max80
|
|
|
wire [31:0] cpu_mem_addr;
|
|
|
wire [31:0] cpu_mem_wdata;
|
|
|
reg [31:0] cpu_mem_rdata;
|
|
|
- reg cpu_mem_ready;
|
|
|
|
|
|
wire cpu_la_read;
|
|
|
wire cpu_la_write;
|
|
@@ -286,19 +285,19 @@ module max80
|
|
|
wire [31:0] cpu_la_wdata;
|
|
|
wire [ 3:0] cpu_la_wstrb;
|
|
|
|
|
|
- // cpu_mem_valid by address quadrant
|
|
|
- wire [3:0] cpu_la_quad;
|
|
|
- reg [3:0] cpu_mem_quad;
|
|
|
-
|
|
|
- assign cpu_la_quad = 1'b1 << cpu_la_addr[31:30];
|
|
|
+ // cpu_mem_valid by address quadrant, using a bit of lookahead
|
|
|
+ // decoding for speed.
|
|
|
+ reg [3:0] mem_quad;
|
|
|
|
|
|
always @(negedge rst_n or posedge sys_clk)
|
|
|
if (~rst_n)
|
|
|
- cpu_mem_quad <= 4'b0;
|
|
|
- else if (cpu_la_read|cpu_la_write)
|
|
|
- cpu_mem_quad <= cpu_la_quad;
|
|
|
- else if (~cpu_mem_valid)
|
|
|
- cpu_mem_quad <= 4'b0;
|
|
|
+ mem_quad <= 4'b0;
|
|
|
+ else if (cpu_mem_valid)
|
|
|
+ mem_quad <= 1'b1 << cpu_mem_addr[31:30];
|
|
|
+ else
|
|
|
+ mem_quad <= 1'b1 << cpu_la_addr[31:30];
|
|
|
+
|
|
|
+ wire [3:0] cpu_mem_quad = cpu_mem_valid ? mem_quad : 4'b0;
|
|
|
|
|
|
// I/O device map from iodevs.conf
|
|
|
wire iodev_mem_valid = cpu_mem_quad[3];
|
|
@@ -540,11 +539,11 @@ module max80
|
|
|
// accesses...)
|
|
|
reg iodev_mem_ready;
|
|
|
|
|
|
- assign cpu_mem_ready = cpu_mem_quad[0] |
|
|
|
- (cpu_mem_quad[1] & sdram_mem_ready) |
|
|
|
- cpu_mem_quad[2] |
|
|
|
- (cpu_mem_quad[3] & iodev_mem_ready);
|
|
|
-
|
|
|
+ assign cpu_mem_ready =
|
|
|
+ (cpu_mem_quad[0] & 1'b1) |
|
|
|
+ (cpu_mem_quad[1] & sdram_mem_ready) |
|
|
|
+ (cpu_mem_quad[2] & 1'b1) |
|
|
|
+ (cpu_mem_quad[3] & iodev_mem_ready);
|
|
|
//
|
|
|
// Fast memory. This runs on the SDRAM clock, i.e. 2x the speed
|
|
|
// of the CPU. The .bits parameter gives the number of dwords
|
|
@@ -556,8 +555,8 @@ module max80
|
|
|
fast_mem(
|
|
|
.rst_n ( rst_n ),
|
|
|
.clk ( sys_clk ),
|
|
|
- .read ( cpu_la_read & cpu_la_quad[0] ),
|
|
|
- .write ( cpu_la_write & cpu_la_quad[0] ),
|
|
|
+ .read ( cpu_la_read & cpu_la_addr[31:30] == 2'b00 ),
|
|
|
+ .write ( cpu_la_write & cpu_la_addr[31:30] == 2'b00 ),
|
|
|
.wstrb ( cpu_la_wstrb ),
|
|
|
.addr ( cpu_la_addr[14:2] ),
|
|
|
.wdata ( cpu_la_wdata ),
|