From 882ace781e457db791a70ecfa536e45c7b9d942b Mon Sep 17 00:00:00 2001 From: Raptor Engineering Development Team Date: Sun, 6 Mar 2022 14:37:23 -0600 Subject: [PATCH] Migrate LPC slave away from ECP5 block RAMs to Pinyon interface --- Makefile | 1 + aquila/lpc_slave.v | 568 +++++---------------------------------------- 2 files changed, 53 insertions(+), 516 deletions(-) diff --git a/Makefile b/Makefile index 5cc2a05..d8db01f 100644 --- 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 diff --git a/aquila/lpc_slave.v b/aquila/lpc_slave.v index 828bacb..c0f2f80 100644 --- a/aquila/lpc_slave.v +++ b/aquila/lpc_slave.v @@ -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 -- 2.30.2