Migrate LPC slave away from ECP5 block RAMs to Pinyon interface
authorRaptor Engineering Development Team <support@raptorengineering.com>
Sun, 6 Mar 2022 20:37:23 +0000 (14:37 -0600)
committerRaptor Engineering Development Team <support@raptorengineering.com>
Sun, 6 Mar 2022 20:37:23 +0000 (14:37 -0600)
Makefile
aquila/lpc_slave.v

index 5cc2a05b9e7c32e5d092025289d0cc34ab8583d7..d8db01ffe6547324b0c0c0b817bcb28b97a4a70c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -186,6 +186,7 @@ soc_files   += litedram/extras/litedram-wrapper-l2.vhdl \
        litedram/generated/rcs-arctic-tern-bmc-card/litedram-initmem.vhdl
 soc_extra_v += litedram/generated/rcs-arctic-tern-bmc-card/litedram_core.v
 soc_extra_v += liteeth/generated/rcs-arctic-tern-bmc-card/liteeth_core.v
+soc_extra_v += pinyon/wishbone_interface.v
 soc_extra_v += tercel/phy.v
 soc_extra_v += tercel/wishbone_spi_master.v
 soc_extra_v += aquila/io_blocks.v
index 828bacb0eddd3838870eda1bf4e1d008bc53bdad..c0f2f80cb5a7a6f59439623aaafbab75ec310319 100644 (file)
@@ -1749,531 +1749,67 @@ module lpc_slave_interface(
                end
        end
 
-       PDPW16KD #(
-               .INITVAL_00(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_01(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_02(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_03(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_04(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_05(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_06(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_07(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_08(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_09(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_10(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_11(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_12(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_13(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_14(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_15(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_16(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_17(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_18(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_19(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_20(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_21(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_22(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_23(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_24(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_25(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_26(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_27(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_28(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_29(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_30(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_31(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_32(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_33(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_34(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_35(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_36(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_37(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_38(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_39(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               // Ordinarily this would be 2048 elements deep, 9 bits wide, but Yosys doesn't have support
-               // for bit widths other than 36 (https://github.com/YosysHQ/yosys/issues/2143)
-               // Since we don't need 2048 (or even 512) elements here, run it in 36 bit data mode with 512 elements
-               .DATA_WIDTH_W(36),
-               .DATA_WIDTH_R(36)
+       pinyon_ram_wishbone #(
+               .BLOCK_RAM_ADDR_BUS_WIDTH(9),
+               .BLOCK_RAM_DATA_BUS_WIDTH(8)
        ) lpc_fw_cycle_input_xfer_bram(
-               .BE3(1'b1),
-               .BE2(1'b1),
-               .BE1(1'b1),
-               .BE0(1'b1),
-               .DI7(lpc_fw_input_xfer_write_data[7]),
-               .DI6(lpc_fw_input_xfer_write_data[6]),
-               .DI5(lpc_fw_input_xfer_write_data[5]),
-               .DI4(lpc_fw_input_xfer_write_data[4]),
-               .DI3(lpc_fw_input_xfer_write_data[3]),
-               .DI2(lpc_fw_input_xfer_write_data[2]),
-               .DI1(lpc_fw_input_xfer_write_data[1]),
-               .DI0(lpc_fw_input_xfer_write_data[0]),
-               .CSW2(1'b0),
-               .CSW1(1'b0),
-               .CSW0(1'b0),
-               .ADW8(lpc_fw_input_xfer_write_addr[8]),
-               .ADW7(lpc_fw_input_xfer_write_addr[7]),
-               .ADW6(lpc_fw_input_xfer_write_addr[6]),
-               .ADW5(lpc_fw_input_xfer_write_addr[5]),
-               .ADW4(lpc_fw_input_xfer_write_addr[4]),
-               .ADW3(lpc_fw_input_xfer_write_addr[3]),
-               .ADW2(lpc_fw_input_xfer_write_addr[2]),
-               .ADW1(lpc_fw_input_xfer_write_addr[1]),
-               .ADW0(lpc_fw_input_xfer_write_addr[0]),
-               // NOTE
-               // The ECP5 block RAMs operate in a non-intuitive manner.
-               // To connect both ports to the same set of memory cells, one port has to be attached
-               // 1:1 in address and data lines, while the other is offset (data + 18, address + 5).
-               .DO25(lpc_fw_input_xfer_read_data[7]),
-               .DO24(lpc_fw_input_xfer_read_data[6]),
-               .DO23(lpc_fw_input_xfer_read_data[5]),
-               .DO22(lpc_fw_input_xfer_read_data[4]),
-               .DO21(lpc_fw_input_xfer_read_data[3]),
-               .DO20(lpc_fw_input_xfer_read_data[2]),
-               .DO19(lpc_fw_input_xfer_read_data[1]),
-               .DO18(lpc_fw_input_xfer_read_data[0]),
-               .CSR2(1'b0),
-               .CSR1(1'b0),
-               .CSR0(1'b0),
-               .ADR13(lpc_fw_input_xfer_read_addr[8]),
-               .ADR12(lpc_fw_input_xfer_read_addr[7]),
-               .ADR11(lpc_fw_input_xfer_read_addr[6]),
-               .ADR10(lpc_fw_input_xfer_read_addr[5]),
-               .ADR9(lpc_fw_input_xfer_read_addr[4]),
-               .ADR8(lpc_fw_input_xfer_read_addr[3]),
-               .ADR7(lpc_fw_input_xfer_read_addr[2]),
-               .ADR6(lpc_fw_input_xfer_read_addr[1]),
-               .ADR5(lpc_fw_input_xfer_read_addr[0]),
-               .ADR4(1'b0),
-               .ADR3(1'b0),
-               .ADR2(1'b0),
-               .ADR1(1'b0),
-               .ADR0(1'b0),
-               .CEW(lpc_fw_input_xfer_write_wren),
-               .CLKW(lpc_fw_input_xfer_write_clk),
-               .CER(1'b1),
-               .CLKR(lpc_clock),
-               .OCER(1'b1),
-               .RST(1'b0)
+               .wb_read_port_clk(lpc_clock),
+               .wb_read_port_adr(lpc_fw_input_xfer_read_addr),
+               .wb_read_port_dat_r(lpc_fw_input_xfer_read_data),
+
+               .wb_write_port_clk(lpc_fw_input_xfer_write_clk),
+               .wb_write_port_cyc(lpc_fw_input_xfer_write_wren),
+               .wb_write_port_stb(lpc_fw_input_xfer_write_wren),
+               .wb_write_port_we(lpc_fw_input_xfer_write_wren),
+               .wb_write_port_adr(lpc_fw_input_xfer_write_addr),
+               .wb_write_port_dat_w(lpc_fw_input_xfer_write_data)
        );
 
-       PDPW16KD #(
-               .INITVAL_00(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_01(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_02(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_03(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_04(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_05(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_06(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_07(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_08(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_09(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_10(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_11(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_12(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_13(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_14(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_15(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_16(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_17(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_18(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_19(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_20(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_21(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_22(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_23(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_24(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_25(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_26(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_27(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_28(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_29(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_30(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_31(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_32(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_33(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_34(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_35(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_36(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_37(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_38(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_39(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               // Ordinarily this would be 2048 elements deep, 9 bits wide, but Yosys doesn't have support
-               // for bit widths other than 36 (https://github.com/YosysHQ/yosys/issues/2143)
-               // Since we don't need 2048 (or even 512) elements here, run it in 36 bit data mode with 512 elements
-               .DATA_WIDTH_W(36),
-               .DATA_WIDTH_R(36)
+       pinyon_ram_wishbone #(
+               .BLOCK_RAM_ADDR_BUS_WIDTH(9),
+               .BLOCK_RAM_DATA_BUS_WIDTH(8)
        ) lpc_fw_cycle_output_xfer_bram(
-               .BE3(1'b1),
-               .BE2(1'b1),
-               .BE1(1'b1),
-               .BE0(1'b1),
-               .DI7(lpc_fw_output_xfer_write_data[7]),
-               .DI6(lpc_fw_output_xfer_write_data[6]),
-               .DI5(lpc_fw_output_xfer_write_data[5]),
-               .DI4(lpc_fw_output_xfer_write_data[4]),
-               .DI3(lpc_fw_output_xfer_write_data[3]),
-               .DI2(lpc_fw_output_xfer_write_data[2]),
-               .DI1(lpc_fw_output_xfer_write_data[1]),
-               .DI0(lpc_fw_output_xfer_write_data[0]),
-               .CSW2(1'b0),
-               .CSW1(1'b0),
-               .CSW0(1'b0),
-               .ADW8(lpc_fw_output_xfer_write_addr[8]),
-               .ADW7(lpc_fw_output_xfer_write_addr[7]),
-               .ADW6(lpc_fw_output_xfer_write_addr[6]),
-               .ADW5(lpc_fw_output_xfer_write_addr[5]),
-               .ADW4(lpc_fw_output_xfer_write_addr[4]),
-               .ADW3(lpc_fw_output_xfer_write_addr[3]),
-               .ADW2(lpc_fw_output_xfer_write_addr[2]),
-               .ADW1(lpc_fw_output_xfer_write_addr[1]),
-               .ADW0(lpc_fw_output_xfer_write_addr[0]),
-               // NOTE
-               // The ECP5 block RAMs operate in a non-intuitive manner.
-               // To connect both ports to the same set of memory cells, one port has to be attached
-               // 1:1 in address and data lines, while the other is offset (data + 18, address + 5).
-               .DO25(lpc_fw_output_xfer_read_data[7]),
-               .DO24(lpc_fw_output_xfer_read_data[6]),
-               .DO23(lpc_fw_output_xfer_read_data[5]),
-               .DO22(lpc_fw_output_xfer_read_data[4]),
-               .DO21(lpc_fw_output_xfer_read_data[3]),
-               .DO20(lpc_fw_output_xfer_read_data[2]),
-               .DO19(lpc_fw_output_xfer_read_data[1]),
-               .DO18(lpc_fw_output_xfer_read_data[0]),
-               .CSR2(1'b0),
-               .CSR1(1'b0),
-               .CSR0(1'b0),
-               .ADR13(lpc_fw_output_xfer_read_addr[8]),
-               .ADR12(lpc_fw_output_xfer_read_addr[7]),
-               .ADR11(lpc_fw_output_xfer_read_addr[6]),
-               .ADR10(lpc_fw_output_xfer_read_addr[5]),
-               .ADR9(lpc_fw_output_xfer_read_addr[4]),
-               .ADR8(lpc_fw_output_xfer_read_addr[3]),
-               .ADR7(lpc_fw_output_xfer_read_addr[2]),
-               .ADR6(lpc_fw_output_xfer_read_addr[1]),
-               .ADR5(lpc_fw_output_xfer_read_addr[0]),
-               .ADR4(1'b0),
-               .ADR3(1'b0),
-               .ADR2(1'b0),
-               .ADR1(1'b0),
-               .ADR0(1'b0),
-               .CEW(lpc_fw_output_xfer_write_wren),
-               .CLKW(lpc_clock),
-               .CER(1'b1),
-               .CLKR(lpc_fw_output_xfer_read_clk),
-               .OCER(1'b1),
-               .RST(1'b0)
+               .wb_read_port_clk(lpc_fw_output_xfer_read_clk),
+               .wb_read_port_adr(lpc_fw_output_xfer_read_addr),
+               .wb_read_port_dat_r(lpc_fw_output_xfer_read_data),
+
+               .wb_write_port_clk(lpc_clock),
+               .wb_write_port_cyc(lpc_fw_output_xfer_write_wren),
+               .wb_write_port_stb(lpc_fw_output_xfer_write_wren),
+               .wb_write_port_we(lpc_fw_output_xfer_write_wren),
+               .wb_write_port_adr(lpc_fw_output_xfer_write_addr),
+               .wb_write_port_dat_w(lpc_fw_output_xfer_write_data)
        );
 
-       PDPW16KD #(
-               .INITVAL_00(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_01(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_02(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_03(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_04(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_05(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_06(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_07(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_08(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_09(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_10(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_11(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_12(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_13(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_14(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_15(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_16(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_17(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_18(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_19(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_20(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_21(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_22(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_23(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_24(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_25(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_26(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_27(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_28(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_29(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_30(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_31(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_32(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_33(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_34(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_35(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_36(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_37(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_38(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_39(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               // Ordinarily this would be 2048 elements deep, 9 bits wide, but Yosys doesn't have support
-               // for bit widths other than 36 (https://github.com/YosysHQ/yosys/issues/2143)
-               // Since we don't need 2048 (or even 512) elements here, run it in 36 bit data mode with 512 elements
-               .DATA_WIDTH_W(36),
-               .DATA_WIDTH_R(36)
+       pinyon_ram_wishbone #(
+               .BLOCK_RAM_ADDR_BUS_WIDTH(9),
+               .BLOCK_RAM_DATA_BUS_WIDTH(8)
        ) ipmi_bt_cycle_input_xfer_bram(
-               .BE3(1'b1),
-               .BE2(1'b1),
-               .BE1(1'b1),
-               .BE0(1'b1),
-               .DI7(ipmi_bt_input_xfer_write_data[7]),
-               .DI6(ipmi_bt_input_xfer_write_data[6]),
-               .DI5(ipmi_bt_input_xfer_write_data[5]),
-               .DI4(ipmi_bt_input_xfer_write_data[4]),
-               .DI3(ipmi_bt_input_xfer_write_data[3]),
-               .DI2(ipmi_bt_input_xfer_write_data[2]),
-               .DI1(ipmi_bt_input_xfer_write_data[1]),
-               .DI0(ipmi_bt_input_xfer_write_data[0]),
-               .CSW2(1'b0),
-               .CSW1(1'b0),
-               .CSW0(1'b0),
-               .ADW8(ipmi_bt_input_xfer_write_addr[8]),
-               .ADW7(ipmi_bt_input_xfer_write_addr[7]),
-               .ADW6(ipmi_bt_input_xfer_write_addr[6]),
-               .ADW5(ipmi_bt_input_xfer_write_addr[5]),
-               .ADW4(ipmi_bt_input_xfer_write_addr[4]),
-               .ADW3(ipmi_bt_input_xfer_write_addr[3]),
-               .ADW2(ipmi_bt_input_xfer_write_addr[2]),
-               .ADW1(ipmi_bt_input_xfer_write_addr[1]),
-               .ADW0(ipmi_bt_input_xfer_write_addr[0]),
-               // NOTE
-               // The ECP5 block RAMs operate in a non-intuitive manner.
-               // To connect both ports to the same set of memory cells, one port has to be attached
-               // 1:1 in address and data lines, while the other is offset (data + 18, address + 5).
-               .DO25(ipmi_bt_input_xfer_read_data[7]),
-               .DO24(ipmi_bt_input_xfer_read_data[6]),
-               .DO23(ipmi_bt_input_xfer_read_data[5]),
-               .DO22(ipmi_bt_input_xfer_read_data[4]),
-               .DO21(ipmi_bt_input_xfer_read_data[3]),
-               .DO20(ipmi_bt_input_xfer_read_data[2]),
-               .DO19(ipmi_bt_input_xfer_read_data[1]),
-               .DO18(ipmi_bt_input_xfer_read_data[0]),
-               .CSR2(1'b0),
-               .CSR1(1'b0),
-               .CSR0(1'b0),
-               .ADR13(ipmi_bt_input_xfer_read_addr[8]),
-               .ADR12(ipmi_bt_input_xfer_read_addr[7]),
-               .ADR11(ipmi_bt_input_xfer_read_addr[6]),
-               .ADR10(ipmi_bt_input_xfer_read_addr[5]),
-               .ADR9(ipmi_bt_input_xfer_read_addr[4]),
-               .ADR8(ipmi_bt_input_xfer_read_addr[3]),
-               .ADR7(ipmi_bt_input_xfer_read_addr[2]),
-               .ADR6(ipmi_bt_input_xfer_read_addr[1]),
-               .ADR5(ipmi_bt_input_xfer_read_addr[0]),
-               .ADR4(1'b0),
-               .ADR3(1'b0),
-               .ADR2(1'b0),
-               .ADR1(1'b0),
-               .ADR0(1'b0),
-               .CEW(ipmi_bt_input_xfer_write_wren),
-               .CLKW(ipmi_bt_input_xfer_write_clk),
-               .CER(1'b1),
-               .CLKR(lpc_clock),
-               .OCER(1'b1),
-               .RST(1'b0)
+               .wb_read_port_clk(lpc_clock),
+               .wb_read_port_adr(ipmi_bt_input_xfer_read_addr),
+               .wb_read_port_dat_r(ipmi_bt_input_xfer_read_data),
+
+               .wb_write_port_clk(ipmi_bt_input_xfer_write_clk),
+               .wb_write_port_cyc(ipmi_bt_input_xfer_write_wren),
+               .wb_write_port_stb(ipmi_bt_input_xfer_write_wren),
+               .wb_write_port_we(ipmi_bt_input_xfer_write_wren),
+               .wb_write_port_adr(ipmi_bt_input_xfer_write_addr),
+               .wb_write_port_dat_w(ipmi_bt_input_xfer_write_data)
        );
 
-       PDPW16KD #(
-               .INITVAL_00(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_01(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_02(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_03(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_04(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_05(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_06(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_07(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_08(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_09(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_0F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_10(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_11(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_12(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_13(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_14(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_15(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_16(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_17(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_18(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_19(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_1F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_20(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_21(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_22(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_23(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_24(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_25(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_26(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_27(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_28(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_29(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_2F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_30(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_31(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_32(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_33(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_34(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_35(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_36(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_37(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_38(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_39(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3A(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3B(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3C(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3D(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3E(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               .INITVAL_3F(320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000),
-               // Ordinarily this would be 2048 elements deep, 9 bits wide, but Yosys doesn't have support
-               // for bit widths other than 36 (https://github.com/YosysHQ/yosys/issues/2143)
-               // Since we don't need 2048 (or even 512) elements here, run it in 36 bit data mode with 512 elements
-               .DATA_WIDTH_W(36),
-               .DATA_WIDTH_R(36)
+       pinyon_ram_wishbone #(
+               .BLOCK_RAM_ADDR_BUS_WIDTH(9),
+               .BLOCK_RAM_DATA_BUS_WIDTH(8)
        ) ipmi_bt_cycle_output_xfer_bram(
-               .BE3(1'b1),
-               .BE2(1'b1),
-               .BE1(1'b1),
-               .BE0(1'b1),
-               .DI7(ipmi_bt_output_xfer_write_data[7]),
-               .DI6(ipmi_bt_output_xfer_write_data[6]),
-               .DI5(ipmi_bt_output_xfer_write_data[5]),
-               .DI4(ipmi_bt_output_xfer_write_data[4]),
-               .DI3(ipmi_bt_output_xfer_write_data[3]),
-               .DI2(ipmi_bt_output_xfer_write_data[2]),
-               .DI1(ipmi_bt_output_xfer_write_data[1]),
-               .DI0(ipmi_bt_output_xfer_write_data[0]),
-               .CSW2(1'b0),
-               .CSW1(1'b0),
-               .CSW0(1'b0),
-               .ADW8(ipmi_bt_output_xfer_write_addr[8]),
-               .ADW7(ipmi_bt_output_xfer_write_addr[7]),
-               .ADW6(ipmi_bt_output_xfer_write_addr[6]),
-               .ADW5(ipmi_bt_output_xfer_write_addr[5]),
-               .ADW4(ipmi_bt_output_xfer_write_addr[4]),
-               .ADW3(ipmi_bt_output_xfer_write_addr[3]),
-               .ADW2(ipmi_bt_output_xfer_write_addr[2]),
-               .ADW1(ipmi_bt_output_xfer_write_addr[1]),
-               .ADW0(ipmi_bt_output_xfer_write_addr[0]),
-               // NOTE
-               // The ECP5 block RAMs operate in a non-intuitive manner.
-               // To connect both ports to the same set of memory cells, one port has to be attached
-               // 1:1 in address and data lines, while the other is offset (data + 18, address + 5).
-               .DO25(ipmi_bt_output_xfer_read_data[7]),
-               .DO24(ipmi_bt_output_xfer_read_data[6]),
-               .DO23(ipmi_bt_output_xfer_read_data[5]),
-               .DO22(ipmi_bt_output_xfer_read_data[4]),
-               .DO21(ipmi_bt_output_xfer_read_data[3]),
-               .DO20(ipmi_bt_output_xfer_read_data[2]),
-               .DO19(ipmi_bt_output_xfer_read_data[1]),
-               .DO18(ipmi_bt_output_xfer_read_data[0]),
-               .CSR2(1'b0),
-               .CSR1(1'b0),
-               .CSR0(1'b0),
-               .ADR13(ipmi_bt_output_xfer_read_addr[8]),
-               .ADR12(ipmi_bt_output_xfer_read_addr[7]),
-               .ADR11(ipmi_bt_output_xfer_read_addr[6]),
-               .ADR10(ipmi_bt_output_xfer_read_addr[5]),
-               .ADR9(ipmi_bt_output_xfer_read_addr[4]),
-               .ADR8(ipmi_bt_output_xfer_read_addr[3]),
-               .ADR7(ipmi_bt_output_xfer_read_addr[2]),
-               .ADR6(ipmi_bt_output_xfer_read_addr[1]),
-               .ADR5(ipmi_bt_output_xfer_read_addr[0]),
-               .ADR4(1'b0),
-               .ADR3(1'b0),
-               .ADR2(1'b0),
-               .ADR1(1'b0),
-               .ADR0(1'b0),
-               .CEW(ipmi_bt_output_xfer_write_wren),
-               .CLKW(lpc_clock),
-               .CER(1'b1),
-               .CLKR(ipmi_bt_output_xfer_read_clk),
-               .OCER(1'b1),
-               .RST(1'b0)
+               .wb_read_port_clk(ipmi_bt_output_xfer_read_clk),
+               .wb_read_port_adr(ipmi_bt_output_xfer_read_addr),
+               .wb_read_port_dat_r(ipmi_bt_output_xfer_read_data),
+
+               .wb_write_port_clk(lpc_clock),
+               .wb_write_port_cyc(ipmi_bt_output_xfer_write_wren),
+               .wb_write_port_stb(ipmi_bt_output_xfer_write_wren),
+               .wb_write_port_we(ipmi_bt_output_xfer_write_wren),
+               .wb_write_port_adr(ipmi_bt_output_xfer_write_addr),
+               .wb_write_port_dat_w(ipmi_bt_output_xfer_write_data)
        );
 endmodule