conbus: ignore the MSB
authorMichael Walle <michael@walle.cc>
Wed, 7 Jul 2010 22:30:37 +0000 (00:30 +0200)
committerMichael Walle <michael@walle.cc>
Wed, 7 Jul 2010 22:33:03 +0000 (00:33 +0200)
This shadows 0000_0000-7fff_ffff to 8000_0000-ffff_ffff, which gives the
possibility to access every device in cached and non-cached mode.

The change also creates a new memory map:
 - NOR          0x00000000 (shadow @0x80000000)
 - USB          0x20000000 (shadow @0xa0000000)
 - FML bridge   0x40000000 (shadow @0xc0000000)
 - CSR bridge   0x60000000 (shadow @0xe0000000)

boards/milkymist-one/rtl/system.v
cores/conbus/rtl/conbus.v

index b976e58..f21a8ed 100644 (file)
@@ -330,12 +330,12 @@ wire              brg_ack,
 // Wishbone switch
 //---------------------------------------------------------------------------
 conbus #(
-       .s_addr_w(3),
-       .s0_addr(3'b000),       // norflash     0x00000000
-       .s1_addr(3'b001),       // USB?         0x20000000
-       .s2_addr(3'b010),       // FML bridge   0x40000000
-       .s3_addr(3'b100),       // CSR bridge   0x80000000
-       .s4_addr(3'b101)        // free         0xa0000000
+       /* MSB (Bit 31) is ignored by conbus */
+       .s_addr_w(2),
+       .s0_addr(2'b00),        // norflash     0x00000000 (shadow @0x80000000)
+       .s1_addr(2'b01),        // USB?         0x20000000 (shadow @0xa0000000)
+       .s2_addr(2'b10),        // FML bridge   0x40000000 (shadow @0xc0000000)
+       .s3_addr(2'b11),        // CSR bridge   0x60000000 (shadow @0xe0000000)
 ) conbus (
        .sys_clk(sys_clk),
        .sys_rst(sys_rst),
index f655180..3285bcf 100644 (file)
@@ -256,10 +256,10 @@ conbus_arb conbus_arb(
        .gnt(gnt)
 );
 
-assign slave_sel[0] = (i_bus_m[`mbusw_ls-1 : `mbusw_ls-s_addr_w] == s0_addr);
-assign slave_sel[1] = (i_bus_m[`mbusw_ls-1 : `mbusw_ls-s_addr_w] == s1_addr);
-assign slave_sel[2] = (i_bus_m[`mbusw_ls-1 : `mbusw_ls-s_addr_w] == s2_addr);
-assign slave_sel[3] = (i_bus_m[`mbusw_ls-1 : `mbusw_ls-s_addr_w] == s3_addr);
-assign slave_sel[4] = (i_bus_m[`mbusw_ls-1 : `mbusw_ls-s_addr_w] == s4_addr);
+assign slave_sel[0] = (i_bus_m[`mbusw_ls-2 : `mbusw_ls-s_addr_w-1] == s0_addr);
+assign slave_sel[1] = (i_bus_m[`mbusw_ls-2 : `mbusw_ls-s_addr_w-1] == s1_addr);
+assign slave_sel[2] = (i_bus_m[`mbusw_ls-2 : `mbusw_ls-s_addr_w-1] == s2_addr);
+assign slave_sel[3] = (i_bus_m[`mbusw_ls-2 : `mbusw_ls-s_addr_w-1] == s3_addr);
+assign slave_sel[4] = (i_bus_m[`mbusw_ls-2 : `mbusw_ls-s_addr_w-1] == s4_addr);
 
 endmodule