diff --git a/fpga/.gitignore b/fpga/.gitignore index ea78afa..c3a1231 100755 --- a/fpga/.gitignore +++ b/fpga/.gitignore @@ -10,3 +10,4 @@ vera_module_tcr.dir/ *.xml *.vcd *.bak +promote.pfl diff --git a/fpga/source/generated/palette_ram/constraints/palette_ram.ldc b/fpga/source/generated/palette_ram/constraints/palette_ram.ldc index 6a0c44a..659939f 100644 --- a/fpga/source/generated/palette_ram/constraints/palette_ram.ldc +++ b/fpga/source/generated/palette_ram/constraints/palette_ram.ldc @@ -1,7 +1,13 @@ set device "iCE40UP5K" -set speed "High-Performance_1.2V" -set architecture "iCE40UP" +set device_int "itpa08" set package "SG48" +set package_int "SG48" +set speed "High-Performance_1.2V" +set speed_int "6" +set operation "Industrial" +set family "iCE40UP" +set architecture "ice40tp" +set partnumber "iCE40UP5K-SG48I" set WRAPPER_INST "lscc_ram_dp_inst" set FAMILY "iCE40UP" set MEM_ID "palette_ram" @@ -17,10 +23,12 @@ set OUTPUT_CLK_EN 0 set RESETMODE "sync" set BYTE_ENABLE 1 set BYTE_WIDTH 2 +set BYTE_SIZE 8 set ECC_ENABLE 0 set INIT_MODE "mem_file" -set INIT_FILE "misc/palette_ram_palette_ram_copy.mem" +set INIT_FILE "/home/zmetzing/vera-module-local/fpga/source/generated/palette_ram/misc/palette_ram_palette_ram_copy.mem" set INIT_FILE_FORMAT "hex" +set INIT_DATA_TYPE 1 set INIT_VALUE_00 "0x0BBB008F0AF6077703330F7706400D850EE7000A00C50C4C0AFE08000FFF0000" set INIT_VALUE_01 "0x0FFF0EEE0DDD0CCC0BBB0AAA0999088807770666055504440333022201110000" set INIT_VALUE_02 "0x041102000F770C660A5508440633042202110FBB0C990A880866064404330211" @@ -85,5 +93,69 @@ set INIT_VALUE_3C "0x00000000000000000000000000000000000000000000000000000000000 set INIT_VALUE_3D "0x0000000000000000000000000000000000000000000000000000000000000000" set INIT_VALUE_3E "0x0000000000000000000000000000000000000000000000000000000000000000" set INIT_VALUE_3F "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_40 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_41 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_42 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_43 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_44 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_45 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_46 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_47 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_48 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_49 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_4A "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_4B "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_4C "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_4D "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_4E "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_4F "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_50 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_51 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_52 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_53 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_54 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_55 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_56 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_57 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_58 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_59 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_5A "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_5B "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_5C "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_5D "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_5E "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_5F "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_60 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_61 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_62 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_63 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_64 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_65 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_66 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_67 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_68 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_69 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_6A "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_6B "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_6C "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_6D "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_6E "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_6F "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_70 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_71 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_72 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_73 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_74 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_75 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_76 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_77 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_78 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_79 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_7A "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_7B "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_7C "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_7D "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_7E "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_7F "0x0000000000000000000000000000000000000000000000000000000000000000" diff --git a/fpga/source/generated/palette_ram/palette_ram.cfg b/fpga/source/generated/palette_ram/palette_ram.cfg index 32a06a0..1d3318e 100644 --- a/fpga/source/generated/palette_ram/palette_ram.cfg +++ b/fpga/source/generated/palette_ram/palette_ram.cfg @@ -1,11 +1,11 @@ { - "INIT_FILE_FORMAT": "hex", - "INIT_FILE": "source/palette_ram.mem", - "REGMODE": false, - "BYTE_ENABLE": true, - "RDATA_WIDTH": 16, - "WDATA_WIDTH": 16, - "RADDR_DEPTH": 256, - "INIT_MODE": "mem_file", - "WADDR_DEPTH": 256 + "WADDR_DEPTH": 256, + "WDATA_WIDTH": 16, + "RADDR_DEPTH": 256, + "RDATA_WIDTH": 16, + "REGMODE": false, + "BYTE_ENABLE": true, + "INIT_MODE": "mem_file", + "INIT_FILE": "source/palette_ram.mem", + "INIT_FILE_FORMAT": "hex" } \ No newline at end of file diff --git a/fpga/source/generated/palette_ram/palette_ram.ipx b/fpga/source/generated/palette_ram/palette_ram.ipx index c12b452..a97552d 100644 --- a/fpga/source/generated/palette_ram/palette_ram.ipx +++ b/fpga/source/generated/palette_ram/palette_ram.ipx @@ -1,16 +1,19 @@ - + - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/fpga/source/generated/palette_ram/rtl/palette_ram.v b/fpga/source/generated/palette_ram/rtl/palette_ram.v index 12eb2bf..437856f 100644 --- a/fpga/source/generated/palette_ram/rtl/palette_ram.v +++ b/fpga/source/generated/palette_ram/rtl/palette_ram.v @@ -1,13 +1,14 @@ /******************************************************************************* - Verilog netlist generated by IPGEN Radiant Software (64-bit) 2.0.1.281.2 - Soft IP Version: 1.1.0 - Wed Apr 15 20:30:31 2020 + Verilog netlist generated by IPGEN Lattice Radiant Software (64-bit) + 2024.2.0.3.0 + Soft IP Version: 2.4.0 + 2025 01 08 20:20:09 *******************************************************************************/ /******************************************************************************* Wrapper Module generated per user settings. *******************************************************************************/ -module palette_ram (wr_clk_i, +(* ORIG_MODULE_NAME="palette_ram", LATTICE_IP_GENERATED="1" *) module palette_ram (wr_clk_i, rd_clk_i, rst_i, wr_clk_en_i, @@ -46,10 +47,12 @@ module palette_ram (wr_clk_i, .RESETMODE("sync"), .BYTE_ENABLE(1), .BYTE_WIDTH(2), + .BYTE_SIZE(8), .ECC_ENABLE(0), .INIT_MODE("mem_file"), - .INIT_FILE("misc/palette_ram_palette_ram_copy.mem"), + .INIT_FILE("/home/zmetzing/vera-module-local/fpga/source/generated/palette_ram/misc/palette_ram_palette_ram_copy.mem"), .INIT_FILE_FORMAT("hex"), + .INIT_DATA_TYPE(1), .INIT_VALUE_00("0x0BBB008F0AF6077703330F7706400D850EE7000A00C50C4C0AFE08000FFF0000"), .INIT_VALUE_01("0x0FFF0EEE0DDD0CCC0BBB0AAA0999088807770666055504440333022201110000"), .INIT_VALUE_02("0x041102000F770C660A5508440633042202110FBB0C990A880866064404330211"), @@ -113,7 +116,71 @@ module palette_ram (wr_clk_i, .INIT_VALUE_3C("0x0000000000000000000000000000000000000000000000000000000000000000"), .INIT_VALUE_3D("0x0000000000000000000000000000000000000000000000000000000000000000"), .INIT_VALUE_3E("0x0000000000000000000000000000000000000000000000000000000000000000"), - .INIT_VALUE_3F("0x0000000000000000000000000000000000000000000000000000000000000000")) lscc_ram_dp_inst (.wr_clk_i(wr_clk_i), + .INIT_VALUE_3F("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_40("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_41("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_42("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_43("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_44("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_45("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_46("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_47("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_48("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_49("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_4A("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_4B("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_4C("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_4D("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_4E("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_4F("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_50("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_51("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_52("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_53("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_54("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_55("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_56("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_57("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_58("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_59("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_5A("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_5B("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_5C("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_5D("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_5E("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_5F("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_60("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_61("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_62("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_63("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_64("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_65("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_66("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_67("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_68("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_69("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_6A("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_6B("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_6C("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_6D("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_6E("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_6F("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_70("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_71("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_72("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_73("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_74("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_75("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_76("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_77("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_78("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_79("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_7A("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_7B("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_7C("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_7D("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_7E("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_7F("0x0000000000000000000000000000000000000000000000000000000000000000")) lscc_ram_dp_inst (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), .wr_clk_en_i(wr_clk_en_i), @@ -135,7 +202,7 @@ endmodule // ============================================================================= // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // ----------------------------------------------------------------------------- -// Copyright (c) 2017 by Lattice Semiconductor Corporation +// Copyright (c) 2023 by Lattice Semiconductor Corporation // ALL RIGHTS RESERVED // ----------------------------------------------------------------------------- // @@ -184,13 +251,419 @@ endmodule // Mod. Date : // Changes Made : Initial release. // ============================================================================= -module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, +module palette_ram_ipgen_lscc_ram_dp #(parameter MEM_ID = "MEM0", + parameter MEM_SIZE = "18,1024", + parameter FAMILY = "common", + parameter WADDR_DEPTH = 1024, + parameter WADDR_WIDTH = clog2(WADDR_DEPTH), + parameter WDATA_WIDTH = 18, + parameter RADDR_DEPTH = 1024, + parameter RADDR_WIDTH = clog2(RADDR_DEPTH), + parameter RDATA_WIDTH = 18, + parameter REGMODE = "reg", + parameter GSR = "enable", + parameter RESETMODE = "sync", + parameter RESET_RELEASE = "sync", + parameter INIT_FILE = "none", + parameter INIT_FILE_FORMAT = "binary", + parameter MODULE_TYPE = "ram_dp", + parameter INIT_DATA_TYPE = 1, + parameter INIT_MODE = "none", + parameter BYTE_ENABLE = 1, + parameter BYTE_SIZE = 9, + parameter BYTE_WIDTH = (WDATA_WIDTH / BYTE_SIZE), + parameter PIPELINES = 0, + parameter ECC_ENABLE = 0, + parameter OUTPUT_CLK_EN = 0, + parameter BYTE_ENABLE_POL = "active-high", + parameter INIT_VALUE_00 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_01 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_02 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_03 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_04 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_05 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_06 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_07 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_08 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_09 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_0A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_0B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_0C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_0D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_0E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_0F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_10 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_11 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_12 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_13 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_14 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_15 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_16 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_17 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_18 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_19 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_1A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_1B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_1C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_1D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_1E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_1F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_20 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_21 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_22 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_23 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_24 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_25 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_26 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_27 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_28 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_29 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_2A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_2B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_2C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_2D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_2E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_2F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_30 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_31 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_32 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_33 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_34 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_35 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_36 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_37 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_38 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_39 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_3A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_3B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_3C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_3D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_3E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_3F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_40 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_41 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_42 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_43 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_44 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_45 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_46 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_47 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_48 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_49 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_50 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_51 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_52 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_53 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_54 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_55 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_56 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_57 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_58 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_59 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_60 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_61 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_62 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_63 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_64 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_65 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_66 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_67 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_68 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_69 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_70 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_71 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_72 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_73 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_74 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_75 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_76 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_77 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_78 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_79 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7F = "0x0000000000000000000000000000000000000000000000000000000000000000") ( + // ----------------------------------------------------------------------------- + // Input/Output Ports + // ----------------------------------------------------------------------------- + input wr_clk_i, + input rd_clk_i, + input rst_i, + input wr_clk_en_i, + input rd_clk_en_i, + input rd_out_clk_en_i, + input wr_en_i, + input [(WDATA_WIDTH - 1):0] wr_data_i, + input [(WADDR_WIDTH - 1):0] wr_addr_i, + input rd_en_i, + input [(RADDR_WIDTH - 1):0] rd_addr_i, + input [(BYTE_WIDTH - 1):0] ben_i, + output [(RDATA_WIDTH - 1):0] rd_data_o, + output one_err_det_o, + output two_err_det_o) ; + localparam T_FAMILY = ((((((FAMILY == "LFD2NX") || (FAMILY == "LFCPNX")) || (FAMILY == "LFMXO5")) || (FAMILY == "UT24C")) || (FAMILY == "UT24CP")) ? "LIFCL" : (((FAMILY == "LN2-CT") || (FAMILY == "LN2-MH")) ? "LAV-AT" : FAMILY)) ; + localparam INIT_DATA = ((INIT_DATA_TYPE == 0) ? "STATIC" : "DYNAMIC") ; + palette_ram_ipgen_lscc_ram_dp_main #(.MEM_ID(MEM_ID), + .MEM_SIZE(MEM_SIZE), + .FAMILY(T_FAMILY), + .WADDR_DEPTH(WADDR_DEPTH), + .WADDR_WIDTH(WADDR_WIDTH), + .WDATA_WIDTH(WDATA_WIDTH), + .RADDR_DEPTH(RADDR_DEPTH), + .RADDR_WIDTH(RADDR_WIDTH), + .RDATA_WIDTH(RDATA_WIDTH), + .REGMODE(REGMODE), + .GSR(GSR), + .RESETMODE(RESETMODE), + .RESET_RELEASE(RESET_RELEASE), + .INIT_FILE(INIT_FILE), + .INIT_FILE_FORMAT(INIT_FILE_FORMAT), + .MODULE_TYPE(MODULE_TYPE), + .INIT_DATA(INIT_DATA), + .INIT_MODE(INIT_MODE), + .BYTE_ENABLE(BYTE_ENABLE), + .BYTE_SIZE(BYTE_SIZE), + .BYTE_WIDTH(BYTE_WIDTH), + .PIPELINES(PIPELINES), + .ECC_ENABLE(ECC_ENABLE), + .OUTPUT_CLK_EN(OUTPUT_CLK_EN), + .BYTE_ENABLE_POL(BYTE_ENABLE_POL), + .INIT_VALUE_00(INIT_VALUE_00), + .INIT_VALUE_01(INIT_VALUE_01), + .INIT_VALUE_02(INIT_VALUE_02), + .INIT_VALUE_03(INIT_VALUE_03), + .INIT_VALUE_04(INIT_VALUE_04), + .INIT_VALUE_05(INIT_VALUE_05), + .INIT_VALUE_06(INIT_VALUE_06), + .INIT_VALUE_07(INIT_VALUE_07), + .INIT_VALUE_08(INIT_VALUE_08), + .INIT_VALUE_09(INIT_VALUE_09), + .INIT_VALUE_0A(INIT_VALUE_0A), + .INIT_VALUE_0B(INIT_VALUE_0B), + .INIT_VALUE_0C(INIT_VALUE_0C), + .INIT_VALUE_0D(INIT_VALUE_0D), + .INIT_VALUE_0E(INIT_VALUE_0E), + .INIT_VALUE_0F(INIT_VALUE_0F), + .INIT_VALUE_10(INIT_VALUE_10), + .INIT_VALUE_11(INIT_VALUE_11), + .INIT_VALUE_12(INIT_VALUE_12), + .INIT_VALUE_13(INIT_VALUE_13), + .INIT_VALUE_14(INIT_VALUE_14), + .INIT_VALUE_15(INIT_VALUE_15), + .INIT_VALUE_16(INIT_VALUE_16), + .INIT_VALUE_17(INIT_VALUE_17), + .INIT_VALUE_18(INIT_VALUE_18), + .INIT_VALUE_19(INIT_VALUE_19), + .INIT_VALUE_1A(INIT_VALUE_1A), + .INIT_VALUE_1B(INIT_VALUE_1B), + .INIT_VALUE_1C(INIT_VALUE_1C), + .INIT_VALUE_1D(INIT_VALUE_1D), + .INIT_VALUE_1E(INIT_VALUE_1E), + .INIT_VALUE_1F(INIT_VALUE_1F), + .INIT_VALUE_20(INIT_VALUE_20), + .INIT_VALUE_21(INIT_VALUE_21), + .INIT_VALUE_22(INIT_VALUE_22), + .INIT_VALUE_23(INIT_VALUE_23), + .INIT_VALUE_24(INIT_VALUE_24), + .INIT_VALUE_25(INIT_VALUE_25), + .INIT_VALUE_26(INIT_VALUE_26), + .INIT_VALUE_27(INIT_VALUE_27), + .INIT_VALUE_28(INIT_VALUE_28), + .INIT_VALUE_29(INIT_VALUE_29), + .INIT_VALUE_2A(INIT_VALUE_2A), + .INIT_VALUE_2B(INIT_VALUE_2B), + .INIT_VALUE_2C(INIT_VALUE_2C), + .INIT_VALUE_2D(INIT_VALUE_2D), + .INIT_VALUE_2E(INIT_VALUE_2E), + .INIT_VALUE_2F(INIT_VALUE_2F), + .INIT_VALUE_30(INIT_VALUE_30), + .INIT_VALUE_31(INIT_VALUE_31), + .INIT_VALUE_32(INIT_VALUE_32), + .INIT_VALUE_33(INIT_VALUE_33), + .INIT_VALUE_34(INIT_VALUE_34), + .INIT_VALUE_35(INIT_VALUE_35), + .INIT_VALUE_36(INIT_VALUE_36), + .INIT_VALUE_37(INIT_VALUE_37), + .INIT_VALUE_38(INIT_VALUE_38), + .INIT_VALUE_39(INIT_VALUE_39), + .INIT_VALUE_3A(INIT_VALUE_3A), + .INIT_VALUE_3B(INIT_VALUE_3B), + .INIT_VALUE_3C(INIT_VALUE_3C), + .INIT_VALUE_3D(INIT_VALUE_3D), + .INIT_VALUE_3E(INIT_VALUE_3E), + .INIT_VALUE_3F(INIT_VALUE_3F), + .INIT_VALUE_40(INIT_VALUE_40), + .INIT_VALUE_41(INIT_VALUE_41), + .INIT_VALUE_42(INIT_VALUE_42), + .INIT_VALUE_43(INIT_VALUE_43), + .INIT_VALUE_44(INIT_VALUE_44), + .INIT_VALUE_45(INIT_VALUE_45), + .INIT_VALUE_46(INIT_VALUE_46), + .INIT_VALUE_47(INIT_VALUE_47), + .INIT_VALUE_48(INIT_VALUE_48), + .INIT_VALUE_49(INIT_VALUE_49), + .INIT_VALUE_4A(INIT_VALUE_4A), + .INIT_VALUE_4B(INIT_VALUE_4B), + .INIT_VALUE_4C(INIT_VALUE_4C), + .INIT_VALUE_4D(INIT_VALUE_4D), + .INIT_VALUE_4E(INIT_VALUE_4E), + .INIT_VALUE_4F(INIT_VALUE_4F), + .INIT_VALUE_50(INIT_VALUE_50), + .INIT_VALUE_51(INIT_VALUE_51), + .INIT_VALUE_52(INIT_VALUE_52), + .INIT_VALUE_53(INIT_VALUE_53), + .INIT_VALUE_54(INIT_VALUE_54), + .INIT_VALUE_55(INIT_VALUE_55), + .INIT_VALUE_56(INIT_VALUE_56), + .INIT_VALUE_57(INIT_VALUE_57), + .INIT_VALUE_58(INIT_VALUE_58), + .INIT_VALUE_59(INIT_VALUE_59), + .INIT_VALUE_5A(INIT_VALUE_5A), + .INIT_VALUE_5B(INIT_VALUE_5B), + .INIT_VALUE_5C(INIT_VALUE_5C), + .INIT_VALUE_5D(INIT_VALUE_5D), + .INIT_VALUE_5E(INIT_VALUE_5E), + .INIT_VALUE_5F(INIT_VALUE_5F), + .INIT_VALUE_60(INIT_VALUE_60), + .INIT_VALUE_61(INIT_VALUE_61), + .INIT_VALUE_62(INIT_VALUE_62), + .INIT_VALUE_63(INIT_VALUE_63), + .INIT_VALUE_64(INIT_VALUE_64), + .INIT_VALUE_65(INIT_VALUE_65), + .INIT_VALUE_66(INIT_VALUE_66), + .INIT_VALUE_67(INIT_VALUE_67), + .INIT_VALUE_68(INIT_VALUE_68), + .INIT_VALUE_69(INIT_VALUE_69), + .INIT_VALUE_6A(INIT_VALUE_6A), + .INIT_VALUE_6B(INIT_VALUE_6B), + .INIT_VALUE_6C(INIT_VALUE_6C), + .INIT_VALUE_6D(INIT_VALUE_6D), + .INIT_VALUE_6E(INIT_VALUE_6E), + .INIT_VALUE_6F(INIT_VALUE_6F), + .INIT_VALUE_70(INIT_VALUE_70), + .INIT_VALUE_71(INIT_VALUE_71), + .INIT_VALUE_72(INIT_VALUE_72), + .INIT_VALUE_73(INIT_VALUE_73), + .INIT_VALUE_74(INIT_VALUE_74), + .INIT_VALUE_75(INIT_VALUE_75), + .INIT_VALUE_76(INIT_VALUE_76), + .INIT_VALUE_77(INIT_VALUE_77), + .INIT_VALUE_78(INIT_VALUE_78), + .INIT_VALUE_79(INIT_VALUE_79), + .INIT_VALUE_7A(INIT_VALUE_7A), + .INIT_VALUE_7B(INIT_VALUE_7B), + .INIT_VALUE_7C(INIT_VALUE_7C), + .INIT_VALUE_7D(INIT_VALUE_7D), + .INIT_VALUE_7E(INIT_VALUE_7E), + .INIT_VALUE_7F(INIT_VALUE_7F)) mem_main (.wr_clk_i(wr_clk_i), + .rd_clk_i(rd_clk_i), + .rst_i(rst_i), + .wr_clk_en_i(wr_clk_en_i), + .rd_clk_en_i(rd_clk_en_i), + .rd_out_clk_en_i(rd_out_clk_en_i), + .wr_en_i(wr_en_i), + .wr_data_i(wr_data_i), + .wr_addr_i(wr_addr_i), + .rd_en_i(rd_en_i), + .rd_addr_i(rd_addr_i), + .ben_i(ben_i), + .rd_data_o(rd_data_o), + .one_err_det_o(one_err_det_o), + .two_err_det_o(two_err_det_o)) ; + function [31:0] clog2 ; + input [31:0] value ; + reg [31:0] num ; + begin + num = (value - 1) ; + for (clog2 = 0 ; (num > 0) ; clog2 = (clog2 + 1)) + num = (num >> 1) ; + end + endfunction +endmodule + + + +// ============================================================================= +// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +// ----------------------------------------------------------------------------- +// Copyright (c) 2023 by Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// ----------------------------------------------------------------------------- +// +// Permission: +// +// Lattice SG Pte. Ltd. grants permission to use this code +// pursuant to the terms of the Lattice Reference Design License Agreement. +// +// +// Disclaimer: +// +// This VHDL or Verilog source code is intended as a design reference +// which illustrates how these types of functions can be implemented. +// It is the user's responsibility to verify their design for +// consistency and functionality through the use of formal +// verification methods. Lattice provides no warranty +// regarding the use or functionality of this code. +// +// ----------------------------------------------------------------------------- +// +// Lattice SG Pte. Ltd. +// 101 Thomson Road, United Square #07-02 +// Singapore 307591 +// +// +// TEL: 1-800-Lattice (USA and Canada) +// +65-6631-2000 (Singapore) +// +1-503-268-8001 (other locations) +// +// web: http://www.latticesemi.com/ +// email: techsupport@latticesemi.com +// +// ----------------------------------------------------------------------------- +// +// ============================================================================= +// FILE DETAILS +// Project : Radiant Software 1.1 +// File : lscc_ram_dp_main.v +// Title : +// Dependencies : +// Description : Top-level pseudo Dual Port RAM using EBR. +// ============================================================================= +// REVISION HISTORY +// Version : 1.1.0. +// Author(s) : +// Mod. Date : +// Changes Made : Initial release. +// ============================================================================= +module palette_ram_ipgen_lscc_ram_dp_main #(parameter _FCODE_LIFCL_ = 1, parameter _FCODE_ICE_ = 2, + parameter _FCODE_AP6_ = 3, parameter _FCODE_COMMON_ = 0, parameter MEM_ID = "MEM0", parameter MEM_SIZE = "18,1024", parameter FAMILY = "common", - parameter FAMILY_CODE = ((FAMILY == "LIFCL") ? _FCODE_LIFCL_ : ((FAMILY == "iCE40UP") ? _FCODE_ICE_ : _FCODE_COMMON_)), + parameter FAMILY_CODE = ((FAMILY == "LIFCL") ? _FCODE_LIFCL_ : ((FAMILY == "iCE40UP") ? _FCODE_ICE_ : ((FAMILY == "ap6a00") ? _FCODE_AP6_ : ((FAMILY == "ap6a00b") ? _FCODE_AP6_ : ((FAMILY == "ap6a400") ? _FCODE_AP6_ : ((FAMILY == "LATG1") ? _FCODE_AP6_ : ((FAMILY == "LAV-AT") ? _FCODE_AP6_ : _FCODE_COMMON_))))))), parameter WADDR_DEPTH = 1024, parameter WADDR_WIDTH = clog2(WADDR_DEPTH), parameter WDATA_WIDTH = 18, @@ -201,6 +674,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, parameter GSR = "enable", parameter RESETMODE = "sync", parameter RESET_RELEASE = "sync", + parameter INIT_DATA = "DYNAMIC", parameter INIT_FILE = "none", parameter INIT_FILE_FORMAT = "binary", parameter MODULE_TYPE = "ram_dp", @@ -276,7 +750,71 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, parameter INIT_VALUE_3C = "0x0000000000000000000000000000000000000000000000000000000000000000", parameter INIT_VALUE_3D = "0x0000000000000000000000000000000000000000000000000000000000000000", parameter INIT_VALUE_3E = "0x0000000000000000000000000000000000000000000000000000000000000000", - parameter INIT_VALUE_3F = "0x0000000000000000000000000000000000000000000000000000000000000000") ( + parameter INIT_VALUE_3F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_40 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_41 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_42 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_43 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_44 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_45 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_46 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_47 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_48 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_49 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_50 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_51 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_52 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_53 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_54 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_55 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_56 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_57 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_58 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_59 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_60 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_61 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_62 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_63 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_64 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_65 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_66 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_67 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_68 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_69 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_70 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_71 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_72 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_73 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_74 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_75 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_76 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_77 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_78 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_79 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7F = "0x0000000000000000000000000000000000000000000000000000000000000000") ( // ----------------------------------------------------------------------------- // Input/Output Ports // ----------------------------------------------------------------------------- @@ -305,16 +843,12 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, // ----------------------------------------------------------------------------- // Generate Sequential Blocks // ----------------------------------------------------------------------------- - genvar i0, - i1, - i_0, - i_1 ; generate if ((FAMILY == "common")) begin : behavioral reg [(RDATA_WIDTH - 1):0] dataout_reg ; reg [(RDATA_WIDTH - 1):0] dataout_reg_buffer ; - reg [(RDATA_WIDTH - 1):0] mem /* sythesis syn_ramstyle="block_ram" */ [((2 ** RADDR_WIDTH) - 1):0] ; + (* syn_ramstyle="block_ram" *) reg [(RDATA_WIDTH - 1):0] mem [((2 ** RADDR_WIDTH) - 1):0] ; assign rd_data_o = ((REGMODE == "reg") ? dataout_reg : dataout_reg_buffer) ; initial begin @@ -389,10 +923,12 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, OPT_DATA_WIDTH) ; localparam EBR_ADDR = roundUP(RADDR_DEPTH, OPT_ADDR_DEPTH) ; - localparam BYTE_WIDTH_IMPL = ((BYTE_ENABLE == 0) ? 1 : (((OPT_DATA_WIDTH == 36) | (OPT_DATA_WIDTH == 32)) ? 4 : (((OPT_DATA_WIDTH == 18) | (OPT_DATA_WIDTH == 16)) ? 2 : 1))) ; + localparam BYTE_WIDTH_IMPL = ((BYTE_ENABLE == 0) ? 1 : (((OPT_DATA_WIDTH == 72) | (OPT_DATA_WIDTH == 64)) ? 8 : (((OPT_DATA_WIDTH == 36) | (OPT_DATA_WIDTH == 32)) ? 4 : (((OPT_DATA_WIDTH == 18) | (OPT_DATA_WIDTH == 16)) ? 2 : 1)))) ; wire [(RDATA_WIDTH - 1):0] rd_data_raw_w [(EBR_ADDR - 1):0] ; wire [(EBR_ADDR - 1):0] one_err_det_raw_w ; wire [(EBR_ADDR - 1):0] two_err_det_raw_w ; + genvar i0, + i1 ; for (i0 = 0;(i0 < EBR_ADDR);i0 = (i0 + 1)) begin : ADDR_ROUTE wire [(RDATA_WIDTH - 1):0] raw_output_w ; @@ -502,47 +1038,6 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end wire f_wr_en_w = (chk_addr_w_w & wr_en_i) ; wire f_rd_en_w = (chk_addr_r_w & rd_en_i) ; - wire ff_rd_en_w ; - if ((REGMODE == "noreg")) - begin : genblk3 - assign ff_rd_en_w = f_rd_en_w ; - end - else - begin : genblk3 - reg f_rd_en_r = 1'b0 ; - assign ff_rd_en_w = (f_rd_en_w | f_rd_en_r) ; - if ((RESETMODE == "sync")) - begin : genblk1 - always - @(posedge rd_clk_i) - begin - if (rst_i) - begin - f_rd_en_r <= 1'b0 ; - end - else - begin - f_rd_en_r <= f_rd_en_w ; - end - end - end - else - begin : genblk1 - always - @(posedge rd_clk_i or - posedge rst_i) - begin - if (rst_i) - begin - f_rd_en_r <= 1'b0 ; - end - else - begin - f_rd_en_r <= f_rd_en_w ; - end - end - end - end if ((INIT_MODE == "mem_file")) begin : mem_init palette_ram_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID), @@ -552,14 +1047,17 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(OPT_DATA_WIDTH), .DATA_WIDTH_R(OPT_DATA_WIDTH), .REGMODE(REGMODE), .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .BYTE_ENABLE(IS_BYTE_ENABLE), + .ECC_ENABLE(ECC_ENABLE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL), .INIT_VALUE_00(INIT_VALUE_00[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), @@ -578,54 +1076,118 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .INIT_VALUE_0D(INIT_VALUE_0D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), .INIT_VALUE_0E(INIT_VALUE_0E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), .INIT_VALUE_0F(INIT_VALUE_0F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), - .INIT_VALUE_10(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_10[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_11(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_11[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_12(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_12[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_13(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_13[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_14(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_14[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_15(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_15[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_16(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_16[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_17(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_17[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_18(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_18[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_19(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_19[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_20(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_20[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_21(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_21[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_22(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_22[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_23(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_23[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_24(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_24[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_25(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_25[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_26(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_26[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_27(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_27[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_28(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_28[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_29(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_29[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_30(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_30[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_31(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_31[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_32(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_32[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_33(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_33[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_34(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_34[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_35(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_35[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_36(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_36[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_37(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_37[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_38(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_38[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_39(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_39[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), + .INIT_VALUE_10(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_10[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_11(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_11[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_12(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_12[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_13(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_13[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_14(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_14[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_15(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_15[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_16(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_16[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_17(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_17[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_18(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_18[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_19(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_19[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_20(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_20[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_21(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_21[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_22(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_22[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_23(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_23[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_24(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_24[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_25(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_25[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_26(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_26[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_27(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_27[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_28(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_28[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_29(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_29[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_30(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_30[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_31(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_31[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_32(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_32[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_33(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_33[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_34(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_34[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_35(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_35[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_36(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_36[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_37(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_37[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_38(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_38[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_39(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_39[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_40(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_40[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_41(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_41[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_42(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_42[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_43(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_43[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_44(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_44[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_45(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_45[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_46(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_46[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_47(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_47[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_48(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_48[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_49(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_49[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_50(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_50[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_51(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_51[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_52(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_52[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_53(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_53[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_54(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_54[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_55(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_55[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_56(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_56[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_57(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_57[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_58(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_58[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_59(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_59[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_60(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_60[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_61(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_61[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_62(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_62[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_63(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_63[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_64(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_64[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_65(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_65[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_66(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_66[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_67(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_67[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_68(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_68[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_69(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_69[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_70(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_70[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_71(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_71[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_72(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_72[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_73(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_73[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_74(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_74[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_75(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_75[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_76(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_76[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_77(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_77[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_78(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_78[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_79(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_79[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), .wr_clk_en_i(wr_clk_en_i), @@ -634,7 +1196,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .wr_en_i(f_wr_en_w), .wr_data_i(act_in_w), .wr_addr_i(act_addr_w_w), - .rd_en_i(ff_rd_en_w), + .rd_en_i(f_rd_en_w), .rd_addr_i(act_addr_r_w), .ben_i(act_ben_w), .rd_data_o(act_out_w), @@ -650,14 +1212,17 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(OPT_DATA_WIDTH), .DATA_WIDTH_R(OPT_DATA_WIDTH), .REGMODE(REGMODE), .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .BYTE_ENABLE(IS_BYTE_ENABLE), + .ECC_ENABLE(ECC_ENABLE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL)) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), @@ -668,7 +1233,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .wr_en_i(f_wr_en_w), .wr_data_i(act_in_w), .wr_addr_i(act_addr_w_w), - .rd_en_i(ff_rd_en_w), + .rd_en_i(f_rd_en_w), .rd_addr_i(act_addr_r_w), .ben_i(act_ben_w), .rd_data_o(act_out_w), @@ -705,7 +1270,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end else begin - rd_addr_0_r <= rd_addr_i ; + rd_addr_0_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_0_r) ; end end end @@ -721,7 +1286,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end else begin - rd_addr_0_r <= rd_addr_i ; + rd_addr_0_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_0_r) ; end end end @@ -742,7 +1307,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else begin rd_addr_0_r <= rd_addr_1_r ; - rd_addr_1_r <= rd_addr_i ; + rd_addr_1_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_1_r) ; end end end @@ -760,7 +1325,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else begin rd_addr_0_r <= rd_addr_1_r ; - rd_addr_1_r <= rd_addr_i ; + rd_addr_1_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_1_r) ; end end end @@ -838,6 +1403,8 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, wire [(R_PORT_USE - 1):0] master_data_out_w ; if ((EBR_DATA > 1)) begin : genblk3 + genvar i_0, + i_1 ; if ((W_PORT_USE > R_PORT_USE)) begin : genblk1 assign rd_data_o = output_buff_w[(RDATA_WIDTH - 1):0] ; @@ -898,6 +1465,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else if ((EBR_ADDR > 1)) begin : genblk3 + genvar i_0 ; localparam Q_SRD_x = (R_PORT_USE / W_PORT_USE) ; localparam Q_SWR_x = (W_PORT_USE / R_PORT_USE) ; if ((R_PORT_USE < W_PORT_USE)) @@ -937,6 +1505,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, wire [(R_SINGULAR_DATA_x - 1):0] single_wire_out_w ; wire [(W_SINGULAR_ADDR_WIDTH - 1):0] single_wr_addr_w ; wire [(R_SINGULAR_ADDR_WIDTH - 1):0] single_rd_addr_w ; + genvar i0 ; if ((R_SINGULAR_DATA_x < W_SINGULAR_DATA_x)) begin : genblk1 for (i0 = 0;(i0 < Q_SWR_x);i0 = (i0 + 1)) @@ -974,6 +1543,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_SINGULAR_DATA_x), .DATA_WIDTH_R(R_SINGULAR_DATA_x), @@ -981,6 +1551,8 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(0), + .ECC_ENABLE(ECC_ENABLE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .INIT_VALUE_00(INIT_VALUE_00), @@ -999,54 +1571,118 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .INIT_VALUE_0D(INIT_VALUE_0D), .INIT_VALUE_0E(INIT_VALUE_0E), .INIT_VALUE_0F(INIT_VALUE_0F), - .INIT_VALUE_10(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_10 : "0x00")), - .INIT_VALUE_11(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_11 : "0x00")), - .INIT_VALUE_12(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_12 : "0x00")), - .INIT_VALUE_13(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_13 : "0x00")), - .INIT_VALUE_14(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_14 : "0x00")), - .INIT_VALUE_15(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_15 : "0x00")), - .INIT_VALUE_16(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_16 : "0x00")), - .INIT_VALUE_17(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_17 : "0x00")), - .INIT_VALUE_18(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_18 : "0x00")), - .INIT_VALUE_19(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_19 : "0x00")), - .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1A : "0x00")), - .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1B : "0x00")), - .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1C : "0x00")), - .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1D : "0x00")), - .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1E : "0x00")), - .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1F : "0x00")), - .INIT_VALUE_20(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_20 : "0x00")), - .INIT_VALUE_21(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_21 : "0x00")), - .INIT_VALUE_22(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_22 : "0x00")), - .INIT_VALUE_23(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_23 : "0x00")), - .INIT_VALUE_24(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_24 : "0x00")), - .INIT_VALUE_25(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_25 : "0x00")), - .INIT_VALUE_26(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_26 : "0x00")), - .INIT_VALUE_27(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_27 : "0x00")), - .INIT_VALUE_28(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_28 : "0x00")), - .INIT_VALUE_29(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_29 : "0x00")), - .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2A : "0x00")), - .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2B : "0x00")), - .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2C : "0x00")), - .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2D : "0x00")), - .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2E : "0x00")), - .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2F : "0x00")), - .INIT_VALUE_30(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_30 : "0x00")), - .INIT_VALUE_31(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_31 : "0x00")), - .INIT_VALUE_32(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_32 : "0x00")), - .INIT_VALUE_33(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_33 : "0x00")), - .INIT_VALUE_34(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_34 : "0x00")), - .INIT_VALUE_35(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_35 : "0x00")), - .INIT_VALUE_36(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_36 : "0x00")), - .INIT_VALUE_37(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_37 : "0x00")), - .INIT_VALUE_38(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_38 : "0x00")), - .INIT_VALUE_39(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_39 : "0x00")), - .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3A : "0x00")), - .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3B : "0x00")), - .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3C : "0x00")), - .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3D : "0x00")), - .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3E : "0x00")), - .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3F : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), + .INIT_VALUE_10(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_10 : "0x00")), + .INIT_VALUE_11(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_11 : "0x00")), + .INIT_VALUE_12(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_12 : "0x00")), + .INIT_VALUE_13(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_13 : "0x00")), + .INIT_VALUE_14(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_14 : "0x00")), + .INIT_VALUE_15(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_15 : "0x00")), + .INIT_VALUE_16(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_16 : "0x00")), + .INIT_VALUE_17(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_17 : "0x00")), + .INIT_VALUE_18(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_18 : "0x00")), + .INIT_VALUE_19(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_19 : "0x00")), + .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1A : "0x00")), + .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1B : "0x00")), + .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1C : "0x00")), + .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1D : "0x00")), + .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1E : "0x00")), + .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1F : "0x00")), + .INIT_VALUE_20(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_20 : "0x00")), + .INIT_VALUE_21(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_21 : "0x00")), + .INIT_VALUE_22(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_22 : "0x00")), + .INIT_VALUE_23(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_23 : "0x00")), + .INIT_VALUE_24(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_24 : "0x00")), + .INIT_VALUE_25(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_25 : "0x00")), + .INIT_VALUE_26(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_26 : "0x00")), + .INIT_VALUE_27(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_27 : "0x00")), + .INIT_VALUE_28(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_28 : "0x00")), + .INIT_VALUE_29(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_29 : "0x00")), + .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2A : "0x00")), + .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2B : "0x00")), + .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2C : "0x00")), + .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2D : "0x00")), + .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2E : "0x00")), + .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2F : "0x00")), + .INIT_VALUE_30(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_30 : "0x00")), + .INIT_VALUE_31(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_31 : "0x00")), + .INIT_VALUE_32(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_32 : "0x00")), + .INIT_VALUE_33(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_33 : "0x00")), + .INIT_VALUE_34(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_34 : "0x00")), + .INIT_VALUE_35(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_35 : "0x00")), + .INIT_VALUE_36(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_36 : "0x00")), + .INIT_VALUE_37(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_37 : "0x00")), + .INIT_VALUE_38(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_38 : "0x00")), + .INIT_VALUE_39(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_39 : "0x00")), + .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3A : "0x00")), + .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3B : "0x00")), + .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3C : "0x00")), + .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3D : "0x00")), + .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3E : "0x00")), + .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3F : "0x00")), + .INIT_VALUE_40(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_40 : "0x00")), + .INIT_VALUE_41(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_41 : "0x00")), + .INIT_VALUE_42(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_42 : "0x00")), + .INIT_VALUE_43(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_43 : "0x00")), + .INIT_VALUE_44(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_44 : "0x00")), + .INIT_VALUE_45(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_45 : "0x00")), + .INIT_VALUE_46(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_46 : "0x00")), + .INIT_VALUE_47(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_47 : "0x00")), + .INIT_VALUE_48(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_48 : "0x00")), + .INIT_VALUE_49(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_49 : "0x00")), + .INIT_VALUE_4A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4A : "0x00")), + .INIT_VALUE_4B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4B : "0x00")), + .INIT_VALUE_4C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4C : "0x00")), + .INIT_VALUE_4D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4D : "0x00")), + .INIT_VALUE_4E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4E : "0x00")), + .INIT_VALUE_4F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4F : "0x00")), + .INIT_VALUE_50(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_50 : "0x00")), + .INIT_VALUE_51(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_51 : "0x00")), + .INIT_VALUE_52(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_52 : "0x00")), + .INIT_VALUE_53(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_53 : "0x00")), + .INIT_VALUE_54(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_54 : "0x00")), + .INIT_VALUE_55(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_55 : "0x00")), + .INIT_VALUE_56(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_56 : "0x00")), + .INIT_VALUE_57(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_57 : "0x00")), + .INIT_VALUE_58(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_58 : "0x00")), + .INIT_VALUE_59(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_59 : "0x00")), + .INIT_VALUE_5A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5A : "0x00")), + .INIT_VALUE_5B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5B : "0x00")), + .INIT_VALUE_5C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5C : "0x00")), + .INIT_VALUE_5D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5D : "0x00")), + .INIT_VALUE_5E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5E : "0x00")), + .INIT_VALUE_5F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5F : "0x00")), + .INIT_VALUE_60(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_60 : "0x00")), + .INIT_VALUE_61(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_61 : "0x00")), + .INIT_VALUE_62(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_62 : "0x00")), + .INIT_VALUE_63(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_63 : "0x00")), + .INIT_VALUE_64(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_64 : "0x00")), + .INIT_VALUE_65(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_65 : "0x00")), + .INIT_VALUE_66(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_66 : "0x00")), + .INIT_VALUE_67(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_67 : "0x00")), + .INIT_VALUE_68(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_68 : "0x00")), + .INIT_VALUE_69(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_69 : "0x00")), + .INIT_VALUE_6A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6A : "0x00")), + .INIT_VALUE_6B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6B : "0x00")), + .INIT_VALUE_6C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6C : "0x00")), + .INIT_VALUE_6D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6D : "0x00")), + .INIT_VALUE_6E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6E : "0x00")), + .INIT_VALUE_6F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6F : "0x00")), + .INIT_VALUE_70(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_70 : "0x00")), + .INIT_VALUE_71(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_71 : "0x00")), + .INIT_VALUE_72(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_72 : "0x00")), + .INIT_VALUE_73(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_73 : "0x00")), + .INIT_VALUE_74(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_74 : "0x00")), + .INIT_VALUE_75(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_75 : "0x00")), + .INIT_VALUE_76(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_76 : "0x00")), + .INIT_VALUE_77(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_77 : "0x00")), + .INIT_VALUE_78(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_78 : "0x00")), + .INIT_VALUE_79(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_79 : "0x00")), + .INIT_VALUE_7A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7A : "0x00")), + .INIT_VALUE_7B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7B : "0x00")), + .INIT_VALUE_7C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7C : "0x00")), + .INIT_VALUE_7D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7D : "0x00")), + .INIT_VALUE_7E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7E : "0x00")), + .INIT_VALUE_7F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7F : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), .wr_clk_en_i(wr_clk_en_i), @@ -1069,6 +1705,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_SINGULAR_DATA_x), .DATA_WIDTH_R(R_SINGULAR_DATA_x), @@ -1076,7 +1713,9 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(0), + .ECC_ENABLE(ECC_ENABLE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE)) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), @@ -1098,6 +1737,8 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, begin : MULT_IMPL wire [(EBR_ADDR - 1):0] one_err_det_raw_w ; wire [(EBR_ADDR - 1):0] two_err_det_raw_w ; + genvar i0, + i1 ; for (i0 = 0;(i0 < EBR_ADDR);i0 = (i0 + 1)) begin : ADDR_x wire [(R_PORT_USE - 1):0] raw_output_w ; @@ -1181,47 +1822,6 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end wire f_wr_en_w = (chk_addr_wr_w & wr_en_i) ; wire f_rd_en_w = (chk_addr_rd_w & rd_en_i) ; - wire ff_rd_en_w ; - if ((REGMODE == "noreg")) - begin : genblk3 - assign ff_rd_en_w = f_rd_en_w ; - end - else - begin : genblk3 - reg f_rd_en_r ; - assign ff_rd_en_w = (f_rd_en_w | f_rd_en_r) ; - if ((RESETMODE == "sync")) - begin : genblk1 - always - @(posedge rd_clk_i) - begin - if (rst_i) - begin - f_rd_en_r <= 1'b0 ; - end - else - begin - f_rd_en_r <= f_rd_en_w ; - end - end - end - else - begin : genblk1 - always - @(posedge rd_clk_i or - posedge rst_i) - begin - if (rst_i) - begin - f_rd_en_r <= 1'b0 ; - end - else - begin - f_rd_en_r <= f_rd_en_w ; - end - end - end - end if ((INIT_MODE == "mem_file")) begin : mem_init palette_ram_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID), @@ -1231,6 +1831,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_DATA_WIDTH_IMPL), .DATA_WIDTH_R(R_DATA_WIDTH_IMPL), @@ -1238,6 +1839,8 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(0), + .ECC_ENABLE(ECC_ENABLE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL), @@ -1257,54 +1860,118 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .INIT_VALUE_0D(INIT_VALUE_0D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), .INIT_VALUE_0E(INIT_VALUE_0E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), .INIT_VALUE_0F(INIT_VALUE_0F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), - .INIT_VALUE_10(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_10[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_11(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_11[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_12(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_12[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_13(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_13[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_14(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_14[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_15(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_15[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_16(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_16[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_17(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_17[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_18(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_18[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_19(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_19[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_20(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_20[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_21(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_21[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_22(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_22[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_23(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_23[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_24(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_24[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_25(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_25[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_26(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_26[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_27(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_27[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_28(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_28[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_29(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_29[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_30(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_30[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_31(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_31[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_32(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_32[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_33(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_33[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_34(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_34[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_35(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_35[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_36(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_36[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_37(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_37[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_38(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_38[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_39(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_39[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), + .INIT_VALUE_10(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_10[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_11(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_11[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_12(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_12[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_13(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_13[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_14(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_14[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_15(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_15[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_16(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_16[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_17(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_17[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_18(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_18[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_19(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_19[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_20(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_20[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_21(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_21[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_22(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_22[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_23(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_23[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_24(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_24[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_25(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_25[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_26(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_26[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_27(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_27[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_28(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_28[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_29(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_29[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_30(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_30[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_31(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_31[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_32(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_32[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_33(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_33[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_34(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_34[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_35(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_35[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_36(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_36[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_37(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_37[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_38(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_38[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_39(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_39[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_40(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_40[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_41(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_41[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_42(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_42[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_43(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_43[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_44(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_44[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_45(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_45[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_46(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_46[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_47(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_47[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_48(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_48[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_49(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_49[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_50(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_50[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_51(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_51[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_52(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_52[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_53(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_53[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_54(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_54[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_55(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_55[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_56(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_56[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_57(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_57[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_58(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_58[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_59(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_59[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_60(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_60[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_61(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_61[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_62(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_62[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_63(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_63[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_64(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_64[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_65(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_65[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_66(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_66[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_67(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_67[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_68(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_68[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_69(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_69[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_70(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_70[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_71(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_71[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_72(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_72[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_73(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_73[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_74(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_74[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_75(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_75[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_76(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_76[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_77(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_77[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_78(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_78[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_79(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_79[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), .wr_clk_en_i(wr_clk_en_i), @@ -1313,7 +1980,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .wr_en_i(f_wr_en_w), .wr_data_i(act_wr_data_w), .wr_addr_i(act_wr_addr_w), - .rd_en_i(ff_rd_en_w), + .rd_en_i(f_rd_en_w), .rd_addr_i(act_rd_addr_w), .ben_i(1'b1), .rd_data_o(act_rd_data_w), @@ -1329,14 +1996,17 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_DATA_WIDTH_IMPL), .DATA_WIDTH_R(R_DATA_WIDTH_IMPL), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .REGMODE(REGMODE), .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(0), + .ECC_ENABLE(ECC_ENABLE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL)) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), @@ -1347,7 +2017,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .wr_en_i(f_wr_en_w), .wr_data_i(act_wr_data_w), .wr_addr_i(act_wr_addr_w), - .rd_en_i(ff_rd_en_w), + .rd_en_i(f_rd_en_w), .rd_addr_i(act_rd_addr_w), .ben_i(1'b1), .rd_data_o(act_rd_data_w), @@ -1383,7 +2053,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end else begin - rd_addr_0_r <= rd_addr_i ; + rd_addr_0_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_0_r) ; end end end @@ -1399,7 +2069,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end else begin - rd_addr_0_r <= rd_addr_i ; + rd_addr_0_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_0_r) ; end end end @@ -1420,7 +2090,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else begin rd_addr_0_r <= rd_addr_1_r ; - rd_addr_1_r <= rd_addr_i ; + rd_addr_1_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_1_r) ; end end end @@ -1438,7 +2108,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else begin rd_addr_0_r <= rd_addr_1_r ; - rd_addr_1_r <= rd_addr_i ; + rd_addr_1_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_1_r) ; end end end @@ -1492,6 +2162,8 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, wire [(RDATA_WIDTH - 1):0] master_data_out_w ; if ((EBR_DATA > 1)) begin : WIRE_chk + genvar i_0, + i_1 ; if ((WDATA_WIDTH > RDATA_WIDTH)) begin : W_OVR_R assign rd_data_o = master_data_out_w ; @@ -1572,6 +2244,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_SINGULAR_DATA_x), .DATA_WIDTH_R(R_SINGULAR_DATA_x), @@ -1579,6 +2252,8 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(1), + .ECC_ENABLE(ECC_ENABLE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL), @@ -1598,54 +2273,118 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .INIT_VALUE_0D(INIT_VALUE_0D), .INIT_VALUE_0E(INIT_VALUE_0E), .INIT_VALUE_0F(INIT_VALUE_0F), - .INIT_VALUE_10(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_10 : "0x00")), - .INIT_VALUE_11(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_11 : "0x00")), - .INIT_VALUE_12(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_12 : "0x00")), - .INIT_VALUE_13(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_13 : "0x00")), - .INIT_VALUE_14(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_14 : "0x00")), - .INIT_VALUE_15(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_15 : "0x00")), - .INIT_VALUE_16(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_16 : "0x00")), - .INIT_VALUE_17(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_17 : "0x00")), - .INIT_VALUE_18(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_18 : "0x00")), - .INIT_VALUE_19(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_19 : "0x00")), - .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1A : "0x00")), - .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1B : "0x00")), - .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1C : "0x00")), - .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1D : "0x00")), - .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1E : "0x00")), - .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1F : "0x00")), - .INIT_VALUE_20(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_20 : "0x00")), - .INIT_VALUE_21(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_21 : "0x00")), - .INIT_VALUE_22(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_22 : "0x00")), - .INIT_VALUE_23(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_23 : "0x00")), - .INIT_VALUE_24(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_24 : "0x00")), - .INIT_VALUE_25(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_25 : "0x00")), - .INIT_VALUE_26(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_26 : "0x00")), - .INIT_VALUE_27(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_27 : "0x00")), - .INIT_VALUE_28(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_28 : "0x00")), - .INIT_VALUE_29(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_29 : "0x00")), - .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2A : "0x00")), - .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2B : "0x00")), - .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2C : "0x00")), - .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2D : "0x00")), - .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2E : "0x00")), - .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2F : "0x00")), - .INIT_VALUE_30(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_30 : "0x00")), - .INIT_VALUE_31(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_31 : "0x00")), - .INIT_VALUE_32(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_32 : "0x00")), - .INIT_VALUE_33(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_33 : "0x00")), - .INIT_VALUE_34(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_34 : "0x00")), - .INIT_VALUE_35(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_35 : "0x00")), - .INIT_VALUE_36(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_36 : "0x00")), - .INIT_VALUE_37(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_37 : "0x00")), - .INIT_VALUE_38(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_38 : "0x00")), - .INIT_VALUE_39(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_39 : "0x00")), - .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3A : "0x00")), - .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3B : "0x00")), - .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3C : "0x00")), - .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3D : "0x00")), - .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3E : "0x00")), - .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3F : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), + .INIT_VALUE_10(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_10 : "0x00")), + .INIT_VALUE_11(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_11 : "0x00")), + .INIT_VALUE_12(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_12 : "0x00")), + .INIT_VALUE_13(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_13 : "0x00")), + .INIT_VALUE_14(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_14 : "0x00")), + .INIT_VALUE_15(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_15 : "0x00")), + .INIT_VALUE_16(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_16 : "0x00")), + .INIT_VALUE_17(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_17 : "0x00")), + .INIT_VALUE_18(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_18 : "0x00")), + .INIT_VALUE_19(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_19 : "0x00")), + .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1A : "0x00")), + .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1B : "0x00")), + .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1C : "0x00")), + .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1D : "0x00")), + .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1E : "0x00")), + .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1F : "0x00")), + .INIT_VALUE_20(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_20 : "0x00")), + .INIT_VALUE_21(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_21 : "0x00")), + .INIT_VALUE_22(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_22 : "0x00")), + .INIT_VALUE_23(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_23 : "0x00")), + .INIT_VALUE_24(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_24 : "0x00")), + .INIT_VALUE_25(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_25 : "0x00")), + .INIT_VALUE_26(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_26 : "0x00")), + .INIT_VALUE_27(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_27 : "0x00")), + .INIT_VALUE_28(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_28 : "0x00")), + .INIT_VALUE_29(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_29 : "0x00")), + .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2A : "0x00")), + .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2B : "0x00")), + .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2C : "0x00")), + .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2D : "0x00")), + .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2E : "0x00")), + .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2F : "0x00")), + .INIT_VALUE_30(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_30 : "0x00")), + .INIT_VALUE_31(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_31 : "0x00")), + .INIT_VALUE_32(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_32 : "0x00")), + .INIT_VALUE_33(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_33 : "0x00")), + .INIT_VALUE_34(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_34 : "0x00")), + .INIT_VALUE_35(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_35 : "0x00")), + .INIT_VALUE_36(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_36 : "0x00")), + .INIT_VALUE_37(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_37 : "0x00")), + .INIT_VALUE_38(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_38 : "0x00")), + .INIT_VALUE_39(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_39 : "0x00")), + .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3A : "0x00")), + .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3B : "0x00")), + .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3C : "0x00")), + .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3D : "0x00")), + .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3E : "0x00")), + .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3F : "0x00")), + .INIT_VALUE_40(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_40 : "0x00")), + .INIT_VALUE_41(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_41 : "0x00")), + .INIT_VALUE_42(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_42 : "0x00")), + .INIT_VALUE_43(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_43 : "0x00")), + .INIT_VALUE_44(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_44 : "0x00")), + .INIT_VALUE_45(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_45 : "0x00")), + .INIT_VALUE_46(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_46 : "0x00")), + .INIT_VALUE_47(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_47 : "0x00")), + .INIT_VALUE_48(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_48 : "0x00")), + .INIT_VALUE_49(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_49 : "0x00")), + .INIT_VALUE_4A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4A : "0x00")), + .INIT_VALUE_4B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4B : "0x00")), + .INIT_VALUE_4C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4C : "0x00")), + .INIT_VALUE_4D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4D : "0x00")), + .INIT_VALUE_4E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4E : "0x00")), + .INIT_VALUE_4F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4F : "0x00")), + .INIT_VALUE_50(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_50 : "0x00")), + .INIT_VALUE_51(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_51 : "0x00")), + .INIT_VALUE_52(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_52 : "0x00")), + .INIT_VALUE_53(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_53 : "0x00")), + .INIT_VALUE_54(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_54 : "0x00")), + .INIT_VALUE_55(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_55 : "0x00")), + .INIT_VALUE_56(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_56 : "0x00")), + .INIT_VALUE_57(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_57 : "0x00")), + .INIT_VALUE_58(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_58 : "0x00")), + .INIT_VALUE_59(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_59 : "0x00")), + .INIT_VALUE_5A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5A : "0x00")), + .INIT_VALUE_5B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5B : "0x00")), + .INIT_VALUE_5C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5C : "0x00")), + .INIT_VALUE_5D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5D : "0x00")), + .INIT_VALUE_5E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5E : "0x00")), + .INIT_VALUE_5F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5F : "0x00")), + .INIT_VALUE_60(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_60 : "0x00")), + .INIT_VALUE_61(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_61 : "0x00")), + .INIT_VALUE_62(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_62 : "0x00")), + .INIT_VALUE_63(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_63 : "0x00")), + .INIT_VALUE_64(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_64 : "0x00")), + .INIT_VALUE_65(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_65 : "0x00")), + .INIT_VALUE_66(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_66 : "0x00")), + .INIT_VALUE_67(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_67 : "0x00")), + .INIT_VALUE_68(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_68 : "0x00")), + .INIT_VALUE_69(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_69 : "0x00")), + .INIT_VALUE_6A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6A : "0x00")), + .INIT_VALUE_6B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6B : "0x00")), + .INIT_VALUE_6C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6C : "0x00")), + .INIT_VALUE_6D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6D : "0x00")), + .INIT_VALUE_6E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6E : "0x00")), + .INIT_VALUE_6F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6F : "0x00")), + .INIT_VALUE_70(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_70 : "0x00")), + .INIT_VALUE_71(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_71 : "0x00")), + .INIT_VALUE_72(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_72 : "0x00")), + .INIT_VALUE_73(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_73 : "0x00")), + .INIT_VALUE_74(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_74 : "0x00")), + .INIT_VALUE_75(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_75 : "0x00")), + .INIT_VALUE_76(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_76 : "0x00")), + .INIT_VALUE_77(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_77 : "0x00")), + .INIT_VALUE_78(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_78 : "0x00")), + .INIT_VALUE_79(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_79 : "0x00")), + .INIT_VALUE_7A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7A : "0x00")), + .INIT_VALUE_7B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7B : "0x00")), + .INIT_VALUE_7C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7C : "0x00")), + .INIT_VALUE_7D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7D : "0x00")), + .INIT_VALUE_7E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7E : "0x00")), + .INIT_VALUE_7F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7F : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), .wr_clk_en_i(wr_clk_en_i), @@ -1668,6 +2407,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_SINGULAR_DATA_x), .DATA_WIDTH_R(R_SINGULAR_DATA_x), @@ -1675,6 +2415,8 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(1), + .ECC_ENABLE(ECC_ENABLE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL)) u_mem0 (.wr_clk_i(wr_clk_i), @@ -1698,6 +2440,8 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, begin : MULT_IMPL wire [(EBR_ADDR - 1):0] one_err_det_raw_w ; wire [(EBR_ADDR - 1):0] two_err_det_raw_w ; + genvar i0, + i1 ; for (i0 = 0;(i0 < EBR_ADDR);i0 = (i0 + 1)) begin : ADDR_x wire [(RDATA_WIDTH - 1):0] raw_output_w ; @@ -1798,47 +2542,6 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end wire f_wr_en_w = (chk_addr_wr_w & wr_en_i) ; wire f_rd_en_w = (chk_addr_rd_w & rd_en_i) ; - wire ff_rd_en_w ; - if ((REGMODE == "noreg")) - begin : genblk4 - assign ff_rd_en_w = f_rd_en_w ; - end - else - begin : genblk4 - reg f_rd_en_r ; - assign ff_rd_en_w = (f_rd_en_w | f_rd_en_r) ; - if ((RESETMODE == "sync")) - begin : genblk1 - always - @(posedge rd_clk_i) - begin - if (rst_i) - begin - f_rd_en_r <= 1'b0 ; - end - else - begin - f_rd_en_r <= f_rd_en_w ; - end - end - end - else - begin : genblk1 - always - @(posedge rd_clk_i or - posedge rst_i) - begin - if (rst_i) - begin - f_rd_en_r <= 1'b0 ; - end - else - begin - f_rd_en_r <= f_rd_en_w ; - end - end - end - end if ((INIT_MODE == "mem_file")) begin : mem_init palette_ram_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID), @@ -1848,6 +2551,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_DATA_WIDTH_IMPL), .DATA_WIDTH_R(R_DATA_WIDTH_IMPL), @@ -1855,6 +2559,8 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(1), + .ECC_ENABLE(ECC_ENABLE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL), @@ -1874,54 +2580,118 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .INIT_VALUE_0D(INIT_VALUE_0D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), .INIT_VALUE_0E(INIT_VALUE_0E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), .INIT_VALUE_0F(INIT_VALUE_0F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), - .INIT_VALUE_10(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_10[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_11(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_11[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_12(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_12[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_13(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_13[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_14(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_14[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_15(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_15[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_16(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_16[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_17(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_17[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_18(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_18[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_19(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_19[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_20(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_20[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_21(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_21[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_22(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_22[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_23(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_23[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_24(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_24[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_25(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_25[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_26(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_26[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_27(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_27[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_28(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_28[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_29(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_29[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_30(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_30[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_31(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_31[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_32(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_32[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_33(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_33[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_34(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_34[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_35(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_35[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_36(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_36[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_37(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_37[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_38(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_38[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_39(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_39[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), + .INIT_VALUE_10(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_10[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_11(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_11[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_12(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_12[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_13(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_13[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_14(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_14[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_15(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_15[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_16(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_16[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_17(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_17[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_18(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_18[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_19(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_19[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_20(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_20[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_21(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_21[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_22(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_22[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_23(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_23[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_24(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_24[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_25(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_25[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_26(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_26[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_27(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_27[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_28(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_28[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_29(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_29[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_30(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_30[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_31(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_31[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_32(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_32[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_33(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_33[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_34(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_34[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_35(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_35[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_36(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_36[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_37(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_37[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_38(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_38[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_39(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_39[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_40(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_40[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_41(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_41[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_42(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_42[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_43(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_43[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_44(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_44[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_45(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_45[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_46(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_46[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_47(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_47[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_48(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_48[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_49(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_49[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_50(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_50[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_51(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_51[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_52(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_52[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_53(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_53[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_54(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_54[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_55(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_55[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_56(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_56[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_57(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_57[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_58(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_58[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_59(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_59[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_60(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_60[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_61(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_61[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_62(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_62[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_63(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_63[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_64(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_64[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_65(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_65[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_66(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_66[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_67(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_67[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_68(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_68[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_69(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_69[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_70(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_70[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_71(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_71[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_72(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_72[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_73(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_73[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_74(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_74[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_75(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_75[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_76(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_76[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_77(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_77[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_78(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_78[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_79(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_79[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), .wr_clk_en_i(wr_clk_en_i), @@ -1930,7 +2700,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .wr_en_i(f_wr_en_w), .wr_data_i(act_wr_data_w), .wr_addr_i(act_wr_addr_w), - .rd_en_i(ff_rd_en_w), + .rd_en_i(f_rd_en_w), .rd_addr_i(act_rd_addr_w), .ben_i(act_ben_w), .rd_data_o(act_rd_data_w), @@ -1946,6 +2716,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_DATA_WIDTH_IMPL), .DATA_WIDTH_R(R_DATA_WIDTH_IMPL), @@ -1953,8 +2724,10 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(1), + .ECC_ENABLE(ECC_ENABLE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE)) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), @@ -1964,7 +2737,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .wr_en_i(f_wr_en_w), .wr_data_i(act_wr_data_w), .wr_addr_i(act_wr_addr_w), - .rd_en_i(ff_rd_en_w), + .rd_en_i(f_rd_en_w), .rd_addr_i(act_rd_addr_w), .ben_i(act_ben_w), .rd_data_o(act_rd_data_w), @@ -1984,7 +2757,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, reg [(RDATA_WIDTH - 1):0] rd_out_buff_r ; reg one_err_det_r = 1'b0 ; reg two_err_det_r = 1'b0 ; - reg [(RADDR_WIDTH - 1):0] rd_addr_0_r = {RADDR_WIDTH{1'b0}} ; + reg [(RADDR_WIDTH - 1):0] rd_addr_0_r ; assign one_err_det_o = ((ECC_ENABLE == 1) ? one_err_det_r : 1'b0) ; assign two_err_det_o = ((ECC_ENABLE == 1) ? two_err_det_r : 1'b0) ; if ((REGMODE == "noreg")) @@ -2000,7 +2773,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end else begin - rd_addr_0_r <= rd_addr_i ; + rd_addr_0_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_0_r) ; end end end @@ -2016,14 +2789,14 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end else begin - rd_addr_0_r <= rd_addr_i ; + rd_addr_0_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_0_r) ; end end end end else begin : _reg - reg [(RADDR_WIDTH - 1):0] rd_addr_1_r = {RADDR_WIDTH{1'b0}} ; + reg [(RADDR_WIDTH - 1):0] rd_addr_1_r ; if ((RESETMODE == "sync")) begin : genblk1 always @@ -2037,7 +2810,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else begin rd_addr_0_r <= rd_addr_1_r ; - rd_addr_1_r <= rd_addr_i ; + rd_addr_1_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_1_r) ; end end end @@ -2054,7 +2827,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else begin rd_addr_0_r <= rd_addr_1_r ; - rd_addr_1_r <= rd_addr_i ; + rd_addr_1_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_1_r) ; end end end @@ -2075,12 +2848,14 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, //------------------------------------------------------------------------------ // Function Definition //------------------------------------------------------------------------------ - function checkINIT ; + function [1:0] checkINIT ; input [31:0] dev_code ; begin case (dev_code) _FCODE_LIFCL_ : checkINIT = 1 ; + _FCODE_AP6_ : + checkINIT = 2 ; default : checkINIT = 0 ; endcase @@ -2095,6 +2870,10 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, getTrueByteWidth = (((dwid_in == 36) || (dwid_in == 32)) ? 4 : (((dwid_in == 18) || (dwid_in == 16)) ? 2 : 1)) ; _FCODE_ICE_ : getTrueByteWidth = ((dwid_in == 16) ? 2 : 1) ; + _FCODE_AP6_ : + getTrueByteWidth = (((dwid_in == 72) || (dwid_in == 64)) ? 8 : (((dwid_in == 36) || (dwid_in == 32)) ? 4 : (((dwid_in == 18) || (dwid_in == 16)) ? 2 : 1))) ; + default : + getTrueByteWidth = 1 ; endcase end endfunction @@ -2146,6 +2925,43 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end _FCODE_ICE_ : procData = (procData * 2) ; + _FCODE_AP6_ : + begin + if (isECC) + begin + if ((procData < 64)) + begin + procData = 64 ; + end + else + begin + procData = (procData * 2) ; + end + end + else + begin + if ((procData < 8)) + begin + procData = (procData * 2) ; + end + else + begin + if ((procData == 8)) + begin + procData = 9 ; + end + else + if (((procData % 9) == 0)) + begin + procData = ((procData / 9) * 16) ; + end + else + begin + procData = ((procData / 8) * 9) ; + end + end + end + end default : procData = TARGET_DATA ; endcase @@ -2178,6 +2994,31 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end _FCODE_ICE_ : getSingularCase = (2 ** clog2(port_use)) ; + _FCODE_AP6_ : + begin + if ((port_use > 64)) + getSingularCase = 72 ; + else + if ((port_use > 36)) + getSingularCase = 64 ; + else + if ((port_use > 32)) + getSingularCase = 36 ; + else + if ((port_use > 18)) + getSingularCase = 32 ; + else + if ((port_use > 16)) + getSingularCase = 18 ; + else + if ((port_use > 9)) + getSingularCase = 16 ; + else + if ((port_use > 8)) + getSingularCase = 9 ; + else + getSingularCase = (2 ** clog2(port_use)) ; + end default : getSingularCase = 8 ; endcase @@ -2193,7 +3034,8 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, input is_ecc ; input [31:0] family_code ; reg [5:0] num0, - num1 ; + num1, + limit ; reg [31:0] divisor, wr_addr_div, wr_data_div, @@ -2213,64 +3055,69 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, begin if ((is_taking_write_port == 1)) begin - getCASE1DataImpl = 32 ; + if ((family_code == _FCODE_AP6_)) + getCASE1DataImpl = 64 ; + else + getCASE1DataImpl = 32 ; end else begin - getCASE1DataImpl = (32 / divisor) ; + if ((family_code == _FCODE_AP6_)) + getCASE1DataImpl = (64 / divisor) ; + else + getCASE1DataImpl = (32 / divisor) ; end end else begin - if ((family_code == _FCODE_LIFCL_)) + if ((((family_code == _FCODE_LIFCL_) && (divisor <= 4)) || ((family_code == _FCODE_AP6_) && (divisor <= 8)))) begin - if ((divisor <= 4)) + limit = ((family_code == _FCODE_LIFCL_) ? 3 : 4) ; + for (num0 = 0 ; (num0 < limit) ; num0 = (num0 + 1)) begin - for (num0 = 0 ; (num0 < 3) ; num0 = (num0 + 1)) + wr_data_div = getDatabase(9, + num0, + family_code) ; + wr_addr_div = data_to_addr(wr_data_div, + family_code) ; + wr_addr_chk = roundUP(wr_addr_depth, + wr_addr_div) ; + wr_data_chk = roundUP(wr_data_width, + wr_data_div) ; + for (num1 = 0 ; (num1 < limit) ; num1 = (num1 + 1)) begin - wr_data_div = getDatabase(9, - num0, + rd_data_div = getDatabase(9, + num1, family_code) ; - wr_addr_div = data_to_addr(wr_data_div, + rd_addr_div = data_to_addr(rd_data_div, family_code) ; - wr_addr_chk = roundUP(wr_addr_depth, - wr_addr_div) ; - wr_data_chk = roundUP(wr_data_width, - wr_data_div) ; - for (num1 = 0 ; (num1 < 3) ; num1 = (num1 + 1)) + rd_addr_chk = roundUP(rd_addr_depth, + rd_addr_div) ; + rd_data_chk = roundUP(rd_data_width, + rd_data_div) ; + if (((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk))) begin - rd_data_div = getDatabase(9, - num1, - family_code) ; - rd_addr_div = data_to_addr(rd_data_div, - family_code) ; - rd_addr_chk = roundUP(rd_addr_depth, - rd_addr_div) ; - rd_data_chk = roundUP(rd_data_width, - rd_data_div) ; - if (((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk))) + if ((((wr_data_width % wr_data_div) == 0) && ((rd_data_width % rd_data_div) == 0))) begin - if ((((wr_data_width % wr_data_div) == 0) && ((rd_data_width % rd_data_div) == 0))) + prod = (wr_addr_chk * wr_data_chk) ; + if ((prod < EBR_usage)) begin - prod = (wr_addr_chk * wr_data_chk) ; - if ((prod < EBR_usage)) - begin - EBR_usage = prod ; - if ((is_taking_total_ebr == 1'b1)) - getCASE1DataImpl = EBR_usage ; - else - if ((is_taking_write_port == 1'b1)) - getCASE1DataImpl = wr_data_div ; - else - getCASE1DataImpl = rd_data_div ; - end + EBR_usage = prod ; + if ((is_taking_total_ebr == 1'b1)) + getCASE1DataImpl = EBR_usage ; + else + if ((is_taking_write_port == 1'b1)) + getCASE1DataImpl = wr_data_div ; + else + getCASE1DataImpl = rd_data_div ; end end end end end end - for (num0 = 0 ; (num0 < 6) ; num0 = (num0 + 1)) + limit = ((family_code == _FCODE_LIFCL_) ? 6 : 7) ; + for (num0 = 0 ; (num0 < limit) ; num0 = (num0 + 1)) begin wr_data_div = getDatabase(8, num0, @@ -2281,7 +3128,7 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, wr_addr_div) ; wr_data_chk = roundUP(wr_data_width, wr_data_div) ; - for (num1 = 0 ; (num1 < 6) ; num1 = (num1 + 1)) + for (num1 = 0 ; (num1 < limit) ; num1 = (num1 + 1)) begin rd_data_div = getDatabase(8, num1, @@ -2322,146 +3169,21 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, input [31:0] rd_data_width ; input is_taking_write_port ; input [31:0] family_code ; - reg [31:0] max_width, - min_width, - byte_size ; - reg [31:0] temp_00, - temp_01, - upper_factor, - lower_factor ; + reg [5:0] num0, + num1, + limit ; + reg [31:0] wr_addr_div, + wr_data_div, + rd_addr_div, + rd_data_div ; reg [31:0] wr_addr_chk, wr_data_chk, rd_addr_chk, - rd_data_chk, - wr_data_div, - rd_data_div ; + rd_data_chk ; + reg [31:0] EBR_usage, + prod ; begin - max_width = ((wr_data_width > rd_data_width) ? wr_data_width : rd_data_width) ; - min_width = ((wr_data_width < rd_data_width) ? wr_data_width : rd_data_width) ; - byte_size = (((max_width % 9) == 0) ? 9 : 8) ; - case (family_code) - _FCODE_LIFCL_ : - begin - if (((max_width / min_width) == 4)) - begin - if ((wr_data_width > rd_data_width)) - begin - if ((is_taking_write_port == 1)) - getCASE1DataImpl_wBen = (4 * byte_size) ; - else - getCASE1DataImpl_wBen = byte_size ; - end - else - begin - if ((is_taking_write_port == 1)) - getCASE1DataImpl_wBen = byte_size ; - else - getCASE1DataImpl_wBen = (4 * byte_size) ; - end - end - else - begin - if ((wr_data_width > rd_data_width)) - begin - wr_addr_chk = roundUP(wr_addr_depth, - data_to_addr(36, - family_code)) ; - wr_data_div = ((byte_size == 9) ? 36 : 32) ; - wr_data_chk = roundUP(wr_data_width, - wr_data_div) ; - rd_addr_chk = roundUP(rd_addr_depth, - data_to_addr(18, - family_code)) ; - rd_data_div = ((byte_size == 9) ? 18 : 16) ; - rd_data_chk = roundUP(rd_data_width, - rd_data_div) ; - if (((((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk)) && ((wr_data_width % wr_data_div) == 0)) && ((rd_data_width % rd_data_div) == 0))) - temp_00 = (wr_addr_chk * wr_data_chk) ; - else - temp_00 = 32'hffffffff ; - wr_addr_chk = roundUP(wr_addr_depth, - data_to_addr(18, - family_code)) ; - wr_data_div = ((byte_size == 9) ? 18 : 16) ; - wr_data_chk = roundUP(wr_data_width, - wr_data_div) ; - rd_addr_chk = roundUP(rd_addr_depth, - data_to_addr(9, - family_code)) ; - rd_data_div = ((byte_size == 9) ? 9 : 8) ; - rd_data_chk = roundUP(rd_data_width, - rd_data_div) ; - if (((((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk)) && ((wr_data_width % wr_data_div) == 0)) && ((rd_data_width % rd_data_div) == 0))) - temp_01 = (wr_addr_chk * wr_data_chk) ; - else - temp_01 = 32'hffffffff ; - if ((temp_00 < temp_01)) - begin - if ((is_taking_write_port == 1)) - getCASE1DataImpl_wBen = (4 * byte_size) ; - else - getCASE1DataImpl_wBen = (2 * byte_size) ; - end - else - begin - if ((is_taking_write_port == 1)) - getCASE1DataImpl_wBen = (2 * byte_size) ; - else - getCASE1DataImpl_wBen = byte_size ; - end - end - else - begin - wr_addr_chk = roundUP(wr_addr_depth, - data_to_addr(18, - family_code)) ; - wr_data_div = ((byte_size == 9) ? 18 : 16) ; - wr_data_chk = roundUP(wr_data_width, - wr_data_div) ; - rd_addr_chk = roundUP(rd_addr_depth, - data_to_addr(36, - family_code)) ; - rd_data_div = ((byte_size == 9) ? 36 : 32) ; - rd_data_chk = roundUP(rd_data_width, - rd_data_div) ; - if (((((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk)) && ((wr_data_width % wr_data_div) == 0)) && ((rd_data_width % rd_data_div) == 0))) - temp_00 = (wr_addr_chk * wr_data_chk) ; - else - temp_00 = 32'hffffffff ; - wr_addr_chk = roundUP(wr_addr_depth, - data_to_addr(9, - family_code)) ; - wr_data_div = ((byte_size == 9) ? 9 : 8) ; - wr_data_chk = roundUP(wr_data_width, - wr_data_div) ; - rd_addr_chk = roundUP(rd_addr_depth, - data_to_addr(18, - family_code)) ; - rd_data_div = ((byte_size == 9) ? 18 : 16) ; - rd_data_chk = roundUP(rd_data_width, - rd_data_div) ; - if (((((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk)) && ((wr_data_width % wr_data_div) == 0)) && ((rd_data_width % rd_data_div) == 0))) - temp_01 = (wr_addr_chk * wr_data_chk) ; - else - temp_01 = 32'hffffffff ; - if ((temp_00 < temp_01)) - begin - if ((is_taking_write_port == 1)) - getCASE1DataImpl_wBen = (2 * byte_size) ; - else - getCASE1DataImpl_wBen = (4 * byte_size) ; - end - else - begin - if ((is_taking_write_port == 1)) - getCASE1DataImpl_wBen = byte_size ; - else - getCASE1DataImpl_wBen = (2 * byte_size) ; - end - end - end - end - _FCODE_ICE_ : + if ((family_code == _FCODE_ICE_)) begin if ((wr_data_width > rd_data_width)) begin @@ -2478,7 +3200,97 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, getCASE1DataImpl_wBen = 16 ; end end - endcase + else + if (((family_code == _FCODE_LIFCL_) || (family_code == _FCODE_AP6_))) + begin + EBR_usage = 32'hffffffff ; + getCASE1DataImpl_wBen = 0 ; + limit = ((family_code == _FCODE_LIFCL_) ? 3 : 4) ; + if (((wr_data_width % 9) == 0)) + begin + for (num0 = 0 ; (num0 < limit) ; num0 = (num0 + 1)) + begin + wr_data_div = getDatabase_wBen(9, + num0, + family_code) ; + wr_addr_div = data_to_addr(wr_data_div, + family_code) ; + wr_addr_chk = roundUP(wr_addr_depth, + wr_addr_div) ; + wr_data_chk = roundUP(wr_data_width, + wr_data_div) ; + for (num1 = 0 ; (num1 < limit) ; num1 = (num1 + 1)) + begin + rd_data_div = getDatabase_wBen(9, + num1, + family_code) ; + rd_addr_div = data_to_addr(rd_data_div, + family_code) ; + rd_addr_chk = roundUP(rd_addr_depth, + rd_addr_div) ; + rd_data_chk = roundUP(rd_data_width, + rd_data_div) ; + if (((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk))) + begin + if ((((wr_data_width % wr_data_div) == 0) && ((rd_data_width % rd_data_div) == 0))) + begin + prod = (wr_addr_chk * wr_data_chk) ; + if ((prod < EBR_usage)) + begin + EBR_usage = prod ; + if ((is_taking_write_port == 1'b1)) + getCASE1DataImpl_wBen = wr_data_div ; + else + getCASE1DataImpl_wBen = rd_data_div ; + end + end + end + end + end + end + else + begin + for (num0 = 0 ; (num0 < limit) ; num0 = (num0 + 1)) + begin + wr_data_div = getDatabase_wBen(8, + num0, + family_code) ; + wr_addr_div = data_to_addr(wr_data_div, + family_code) ; + wr_addr_chk = roundUP(wr_addr_depth, + wr_addr_div) ; + wr_data_chk = roundUP(wr_data_width, + wr_data_div) ; + for (num1 = 0 ; (num1 < limit) ; num1 = (num1 + 1)) + begin + rd_data_div = getDatabase_wBen(8, + num1, + family_code) ; + rd_addr_div = data_to_addr(rd_data_div, + family_code) ; + rd_addr_chk = roundUP(rd_addr_depth, + rd_addr_div) ; + rd_data_chk = roundUP(rd_data_width, + rd_data_div) ; + if (((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk))) + begin + if ((((wr_data_width % wr_data_div) == 0) && ((rd_data_width % rd_data_div) == 0))) + begin + prod = (wr_addr_chk * wr_data_chk) ; + if ((prod < EBR_usage)) + begin + EBR_usage = prod ; + if ((is_taking_write_port == 1'b1)) + getCASE1DataImpl_wBen = wr_data_div ; + else + getCASE1DataImpl_wBen = rd_data_div ; + end + end + end + end + end + end + end end endfunction function [31:0] getDatabase ; @@ -2535,11 +3347,123 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, getDatabase = 16 ; endcase end + _FCODE_AP6_ : + begin + case (base_count) + 9 : + begin + case (index) + 0 : + getDatabase = 9 ; + 1 : + getDatabase = 18 ; + 2 : + getDatabase = 36 ; + default : + getDatabase = 72 ; + endcase + end + 8 : + begin + case (index) + 0 : + getDatabase = 1 ; + 1 : + getDatabase = 2 ; + 2 : + getDatabase = 4 ; + 3 : + getDatabase = 8 ; + 4 : + getDatabase = 16 ; + 5 : + getDatabase = 32 ; + default : + getDatabase = 64 ; + endcase + end + default : + getDatabase = 16 ; + endcase + end default : getDatabase = 8 ; endcase end endfunction + function [31:0] getDatabase_wBen ; + input [31:0] base_count ; + input [31:0] index ; + input [31:0] family_code ; + begin + case (family_code) + _FCODE_LIFCL_ : + begin + case (base_count) + 9 : + begin + case (index) + 0 : + getDatabase_wBen = 9 ; + 1 : + getDatabase_wBen = 18 ; + default : + getDatabase_wBen = 36 ; + endcase + end + 8 : + begin + case (index) + 0 : + getDatabase_wBen = 8 ; + 1 : + getDatabase_wBen = 16 ; + default : + getDatabase_wBen = 32 ; + endcase + end + default : + getDatabase_wBen = 16 ; + endcase + end + _FCODE_AP6_ : + begin + case (base_count) + 9 : + begin + case (index) + 0 : + getDatabase_wBen = 9 ; + 1 : + getDatabase_wBen = 18 ; + 2 : + getDatabase_wBen = 36 ; + default : + getDatabase_wBen = 72 ; + endcase + end + 8 : + begin + case (index) + 0 : + getDatabase_wBen = 8 ; + 1 : + getDatabase_wBen = 16 ; + 2 : + getDatabase_wBen = 32 ; + default : + getDatabase_wBen = 64 ; + endcase + end + default : + getDatabase_wBen = 16 ; + endcase + end + default : + getDatabase_wBen = 8 ; + endcase + end + endfunction function [31:0] data_to_addr ; input [31:0] data_size ; input [31:0] family_code ; @@ -2579,6 +3503,35 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, data_to_addr = 1024 ; 2 : data_to_addr = 2048 ; + default : + data_to_addr = 4096 ; + endcase + end + _FCODE_AP6_ : + begin + case (data_size) + 72 : + data_to_addr = 512 ; + 64 : + data_to_addr = 512 ; + 36 : + data_to_addr = 1024 ; + 32 : + data_to_addr = 1024 ; + 18 : + data_to_addr = 2048 ; + 16 : + data_to_addr = 2048 ; + 9 : + data_to_addr = 4096 ; + 8 : + data_to_addr = 4096 ; + 4 : + data_to_addr = 8192 ; + 2 : + data_to_addr = 16384 ; + default : + data_to_addr = 32768 ; endcase end default : @@ -2619,6 +3572,27 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, addr_to_data = 4 ; 2048 : addr_to_data = 2 ; + default : + addr_to_data = 1 ; + endcase + end + _FCODE_AP6_ : + begin + case (addr_size) + 512 : + addr_to_data = 72 ; + 1024 : + addr_to_data = 36 ; + 2048 : + addr_to_data = 18 ; + 4096 : + addr_to_data = 9 ; + 8192 : + addr_to_data = 4 ; + 16384 : + addr_to_data = 2 ; + default : + addr_to_data = 1 ; endcase end default : @@ -2638,7 +3612,8 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, temp_02, temp_03, temp_04, - temp_05 ; + temp_05, + temp_06 ; begin case (family_code) _FCODE_LIFCL_ : @@ -2684,320 +3659,44 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, 1024, 16) ; temp_02 = EBR_impl(depth_impl, - width_impl, - 2048, - 8) ; - if ((temp_00 < temp_01)) - begin - if ((temp_00 < temp_02)) - begin - if ((temp_00 < temp_03)) - begin - if ((temp_00 < temp_04)) - begin - if ((temp_00 < temp_05)) - getMinimaData = 32 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - else - begin - if ((temp_02 < temp_03)) - begin - if ((temp_02 < temp_04)) - begin - if ((temp_02 < temp_05)) - getMinimaData = 8 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - end - else - begin - if ((temp_01 < temp_02)) - begin - if ((temp_01 < temp_03)) - begin - if ((temp_01 < temp_04)) - begin - if ((temp_01 < temp_05)) - getMinimaData = 16 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - else - begin - if ((temp_02 < temp_03)) - begin - if ((temp_02 < temp_04)) - begin - if ((temp_02 < temp_05)) - getMinimaData = 8 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - end - end - else - begin - if ((temp_00 < temp_01)) - begin - if ((temp_00 < temp_02)) - begin - if ((temp_00 < temp_03)) - begin - if ((temp_00 < temp_04)) - begin - if ((temp_00 < temp_05)) - getMinimaData = 36 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - else - begin - if ((temp_02 < temp_03)) - begin - if ((temp_02 < temp_04)) - begin - if ((temp_02 < temp_05)) - getMinimaData = 9 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - end - else - begin - if ((temp_01 < temp_02)) - begin - if ((temp_01 < temp_03)) - begin - if ((temp_01 < temp_04)) - begin - if ((temp_01 < temp_05)) - getMinimaData = 18 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end + width_impl, + 2048, + 8) ; + if ((((((temp_00 < temp_01) && (temp_00 < temp_02)) && (temp_00 < temp_03)) && (temp_00 < temp_04)) && (temp_00 < temp_05))) + getMinimaData = 32 ; + else + if (((((temp_01 < temp_02) && (temp_01 < temp_03)) && (temp_01 < temp_04)) && (temp_01 < temp_05))) + getMinimaData = 16 ; + else + if ((((temp_02 < temp_03) && (temp_02 < temp_04)) && (temp_02 < temp_05))) + getMinimaData = 8 ; else - begin - if ((temp_02 < temp_03)) - begin - if ((temp_02 < temp_04)) - begin - if ((temp_02 < temp_05)) - getMinimaData = 9 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end + if (((temp_03 < temp_04) && (temp_03 < temp_05))) + getMinimaData = 4 ; + else + if ((temp_04 < temp_05)) + getMinimaData = 2 ; else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - end + getMinimaData = 1 ; + end + else + begin + if ((((((temp_00 < temp_01) && (temp_00 < temp_02)) && (temp_00 < temp_03)) && (temp_00 < temp_04)) && (temp_00 < temp_05))) + getMinimaData = 36 ; + else + if (((((temp_01 < temp_02) && (temp_01 < temp_03)) && (temp_01 < temp_04)) && (temp_01 < temp_05))) + getMinimaData = 18 ; + else + if ((((temp_02 < temp_03) && (temp_02 < temp_04)) && (temp_02 < temp_05))) + getMinimaData = 9 ; + else + if (((temp_03 < temp_04) && (temp_03 < temp_05))) + getMinimaData = 4 ; + else + if ((temp_04 < temp_05)) + getMinimaData = 2 ; + else + getMinimaData = 1 ; end end end @@ -3019,38 +3718,112 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, width_impl, 2048, 2) ; - if ((temp_00 < temp_01)) - begin - if ((temp_00 < temp_02)) - begin - if ((temp_00 < temp_03)) - getMinimaData = 16 ; - else - getMinimaData = 2 ; - end + if ((((temp_00 < temp_01) && (temp_00 < temp_02)) && (temp_00 < temp_03))) + getMinimaData = 16 ; + else + if (((temp_01 < temp_02) && (temp_01 < temp_03))) + getMinimaData = 8 ; + else + if ((temp_02 < temp_03)) + getMinimaData = 4 ; else - begin - if ((temp_02 < temp_03)) - getMinimaData = 4 ; - else - getMinimaData = 2 ; - end + getMinimaData = 2 ; + end + _FCODE_AP6_ : + begin + if (is_ecc) + begin + getMinimaData = 64 ; end else begin - if ((temp_01 < temp_02)) + temp_00 = EBR_impl(depth_impl, + width_impl, + 512, + 72) ; + temp_01 = EBR_impl(depth_impl, + width_impl, + 1024, + 36) ; + temp_02 = EBR_impl(depth_impl, + width_impl, + 2048, + 18) ; + temp_03 = EBR_impl(depth_impl, + width_impl, + 4096, + 9) ; + temp_04 = EBR_impl(depth_impl, + width_impl, + 8192, + 4) ; + temp_05 = EBR_impl(depth_impl, + width_impl, + 16384, + 2) ; + temp_06 = EBR_impl(depth_impl, + width_impl, + 32768, + 1) ; + if (((is_byte_enable == 1) && ((width_impl % 9) != 0))) begin - if ((temp_01 < temp_03)) - getMinimaData = 8 ; + temp_00 = EBR_impl(depth_impl, + width_impl, + 512, + 64) ; + temp_01 = EBR_impl(depth_impl, + width_impl, + 1024, + 32) ; + temp_02 = EBR_impl(depth_impl, + width_impl, + 2048, + 16) ; + temp_03 = EBR_impl(depth_impl, + width_impl, + 4096, + 8) ; + if (((((((temp_00 < temp_01) && (temp_00 < temp_02)) && (temp_00 < temp_03)) && (temp_00 < temp_04)) && (temp_00 < temp_05)) && (temp_00 < temp_06))) + getMinimaData = 64 ; else - getMinimaData = 2 ; + if ((((((temp_01 < temp_02) && (temp_01 < temp_03)) && (temp_01 < temp_04)) && (temp_01 < temp_05)) && (temp_01 < temp_06))) + getMinimaData = 32 ; + else + if (((((temp_02 < temp_03) && (temp_02 < temp_04)) && (temp_02 < temp_05)) && (temp_02 < temp_06))) + getMinimaData = 16 ; + else + if ((((temp_03 < temp_04) && (temp_03 < temp_05)) && (temp_03 < temp_06))) + getMinimaData = 8 ; + else + if (((temp_04 < temp_05) && (temp_04 < temp_06))) + getMinimaData = 4 ; + else + if ((temp_05 < temp_06)) + getMinimaData = 2 ; + else + getMinimaData = 1 ; end else begin - if ((temp_02 < temp_03)) - getMinimaData = 4 ; + if (((((((temp_00 < temp_01) && (temp_00 < temp_02)) && (temp_00 < temp_03)) && (temp_00 < temp_04)) && (temp_00 < temp_05)) && (temp_00 < temp_06))) + getMinimaData = 72 ; else - getMinimaData = 2 ; + if ((((((temp_01 < temp_02) && (temp_01 < temp_03)) && (temp_01 < temp_04)) && (temp_01 < temp_05)) && (temp_01 < temp_06))) + getMinimaData = 36 ; + else + if (((((temp_02 < temp_03) && (temp_02 < temp_04)) && (temp_02 < temp_05)) && (temp_02 < temp_06))) + getMinimaData = 18 ; + else + if ((((temp_03 < temp_04) && (temp_03 < temp_05)) && (temp_03 < temp_06))) + getMinimaData = 9 ; + else + if (((temp_04 < temp_05) && (temp_04 < temp_06))) + getMinimaData = 4 ; + else + if ((temp_05 < temp_06)) + getMinimaData = 2 ; + else + getMinimaData = 1 ; end end end @@ -3073,6 +3846,13 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end _FCODE_ICE_ : getByteSize = 8 ; + _FCODE_AP6_ : + begin + if (((data_width % 9) == 0)) + getByteSize = 9 ; + else + getByteSize = 8 ; + end default : getByteSize = 8 ; endcase @@ -3096,6 +3876,19 @@ module palette_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else is_byte_enable_good = 1'b0 ; end + _FCODE_AP6_ : + begin + if (((max_data / min_data) == 8)) + is_byte_enable_good = ((((max_data % 72) == 0) || ((max_data % 64) == 0)) ? 1'b1 : 1'b0) ; + else + if (((max_data / min_data) == 4)) + is_byte_enable_good = ((((max_data % 36) == 0) || ((max_data % 32) == 0)) ? 1'b1 : 1'b0) ; + else + if (((max_data / min_data) == 2)) + is_byte_enable_good = ((((max_data % 16) == 0) || ((max_data % 18) == 0)) ? 1'b1 : 1'b0) ; + else + is_byte_enable_good = 1'b0 ; + end default : is_byte_enable_good = 1'b0 ; endcase @@ -3153,7 +3946,7 @@ endmodule // ============================================================================= // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // ----------------------------------------------------------------------------- -// Copyright (c) 2017 by Lattice Semiconductor Corporation +// Copyright (c) 2023 by Lattice Semiconductor Corporation // ALL RIGHTS RESERVED // ----------------------------------------------------------------------------- // @@ -3204,11 +3997,12 @@ endmodule // ============================================================================= module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, parameter _FCODE_ICE_ = 2, + parameter _FCODE_AP6_ = 3, parameter _FCODE_COMMON_ = 0, parameter MEM_ID = "MEM0", parameter MEM_SIZE = "[18,1024]", parameter FAMILY = "common", - parameter FAMILY_CODE = ((FAMILY == "LIFCL") ? _FCODE_LIFCL_ : ((FAMILY == "iCE40UP") ? _FCODE_ICE_ : _FCODE_COMMON_)), + parameter FAMILY_CODE = ((FAMILY == "LIFCL") ? _FCODE_LIFCL_ : ((FAMILY == "iCE40UP") ? _FCODE_ICE_ : ((FAMILY == "ap6a00") ? _FCODE_AP6_ : ((FAMILY == "ap6a00b") ? _FCODE_AP6_ : ((FAMILY == "ap6a400") ? _FCODE_AP6_ : ((FAMILY == "LATG1") ? _FCODE_AP6_ : ((FAMILY == "LAV-AT") ? _FCODE_AP6_ : _FCODE_COMMON_))))))), parameter DATA_WIDTH_W = 36, parameter ADDR_WIDTH_W = getAddrWidth(DATA_WIDTH_W, FAMILY_CODE), @@ -3221,6 +4015,7 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, parameter RESET_RELEASE = "sync", parameter INIT_FILE = "none", parameter INIT_FILE_FORMAT = "binary", + parameter INIT_DATA = "DYNAMIC", parameter INIT_MODE = "none", parameter BYTE_ENABLE = 0, parameter BYTE_WIDTH = ((BYTE_ENABLE == 1) ? getByteWidth(DATA_WIDTH_W, @@ -3298,7 +4093,71 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, parameter INIT_VALUE_3C = "0x0000000000000000000000000000000000000000000000000000000000000000", parameter INIT_VALUE_3D = "0x0000000000000000000000000000000000000000000000000000000000000000", parameter INIT_VALUE_3E = "0x0000000000000000000000000000000000000000000000000000000000000000", - parameter INIT_VALUE_3F = "0x0000000000000000000000000000000000000000000000000000000000000000") ( + parameter INIT_VALUE_3F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_40 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_41 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_42 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_43 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_44 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_45 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_46 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_47 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_48 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_49 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_50 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_51 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_52 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_53 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_54 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_55 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_56 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_57 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_58 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_59 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_60 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_61 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_62 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_63 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_64 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_65 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_66 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_67 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_68 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_69 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_70 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_71 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_72 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_73 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_74 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_75 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_76 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_77 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_78 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_79 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7F = "0x0000000000000000000000000000000000000000000000000000000000000000") ( //unused // ----------------------------------------------------------------------------- // Input/Output Ports @@ -3340,11 +4199,10 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, localparam [79:0] NUM_STRING = "9876543210" ; localparam BLOCK_POS = getStringFromPos(POSx, POSy) ; - localparam BLOCK_SIZE = ((DATA_WIDTH_W == 36) ? "[36,512]" : ((DATA_WIDTH_W == 32) ? "[32,512]" : ((DATA_WIDTH_W == 18) ? "[18,1024]" : ((DATA_WIDTH_W == 16) ? "[16,1024]" : ((DATA_WIDTH_W == 9) ? "[9,2048]" : ((DATA_WIDTH_W == 8) ? "[8,2048]" : ((DATA_WIDTH_W == 4) ? "[4,4096]" : ((DATA_WIDTH_W == 2) ? "[2,8192]" : "[1,16384]")))))))) ; + localparam BLOCK_SIZE = ((DATA_WIDTH_W == 72) ? "[72,512]" : ((DATA_WIDTH_W == 64) ? "[64,512]" : ((DATA_WIDTH_W == 36) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[36,1024]" : "[36,512]") : ((DATA_WIDTH_W == 32) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[32,1024]" : "[32,512]") : ((DATA_WIDTH_W == 18) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[18,2048]" : "[18,1024]") : ((DATA_WIDTH_W == 16) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[16,2048]" : "[16,1024]") : ((DATA_WIDTH_W == 9) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[9,4096]" : "[9,2048]") : ((DATA_WIDTH_W == 8) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[8,4096]" : "[8,2048]") : ((DATA_WIDTH_W == 4) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[4,8192]" : "[4,4096]") : ((DATA_WIDTH_W == 2) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[2,16384]" : "[2,8192]") : ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[1,32768]" : "[1,16384]"))))))))))) ; // ----------------------------------------------------------------------------- // Generate Sequential Blocks // ----------------------------------------------------------------------------- - genvar i0 ; generate if ((FAMILY_CODE == _FCODE_ICE_)) begin : ICE_MEM @@ -3355,6 +4213,7 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, wire [15:0] mask_w ; wire [15:0] mask_t_w ; wire [(DATA_WIDTH_R - 1):0] rd_data_w ; + genvar i0 ; for (i0 = 0;(i0 < 16);i0 = (i0 + 1)) begin : genblk1 if ((i0 < 8)) @@ -3892,7 +4751,7 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, begin if ((rst_i == 1'b1)) begin - rd_buff_r <= 'h0 ; + rd_buff_r <= {DATA_WIDTH_R{1'b0}} ; end else begin @@ -3912,7 +4771,7 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, begin if ((rst_i == 1'b1)) begin - rd_buff_r <= 'h0 ; + rd_buff_r <= {DATA_WIDTH_R{1'b0}} ; end else begin @@ -3930,7 +4789,7 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, begin if ((rst_i == 1'b1)) begin - rd_buff_r = 'h0 ; + rd_buff_r = {DATA_WIDTH_R{1'b0}} ; end else begin @@ -3953,8 +4812,8 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, localparam OUTREG = ((REGMODE == "reg") ? ((OUTPUT_CLK_EN == 0) ? "USED" : "BYPASSED") : "BYPASSED") ; localparam TRUE_CSW = ((CSDECODE_W == 0) ? "000" : ((CSDECODE_W == 1) ? "001" : ((CSDECODE_W == 2) ? "010" : ((CSDECODE_W == 3) ? "011" : ((CSDECODE_W == 4) ? "100" : ((CSDECODE_W == 5) ? "101" : ((CSDECODE_W == 6) ? "110" : "111"))))))) ; localparam TRUE_CSR = ((CSDECODE_R == 0) ? "000" : ((CSDECODE_R == 1) ? "001" : ((CSDECODE_R == 2) ? "010" : ((CSDECODE_R == 3) ? "011" : ((CSDECODE_R == 4) ? "100" : ((CSDECODE_R == 5) ? "101" : ((CSDECODE_R == 6) ? "110" : "111"))))))) ; - localparam DW_W = (((DATA_WIDTH_W == 36) || (DATA_WIDTH_W == 32)) ? "X36" : (((DATA_WIDTH_W == 18) || (DATA_WIDTH_W == 16)) ? "X18" : (((DATA_WIDTH_W == 9) || (DATA_WIDTH_W == 8)) ? "X9" : ((DATA_WIDTH_W == 4) ? "X4" : ((DATA_WIDTH_W == 2) ? "X2" : "X1"))))) ; - localparam DW_R = (((DATA_WIDTH_R == 36) || (DATA_WIDTH_R == 32)) ? "X36" : (((DATA_WIDTH_R == 18) || (DATA_WIDTH_R == 16)) ? "X18" : (((DATA_WIDTH_R == 9) || (DATA_WIDTH_R == 8)) ? "X9" : ((DATA_WIDTH_R == 4) ? "X4" : ((DATA_WIDTH_R == 2) ? "X2" : "X1"))))) ; + localparam DW_W = (ECC_ENABLE ? "X32" : (((DATA_WIDTH_W == 36) || (DATA_WIDTH_W == 32)) ? "X36" : (((DATA_WIDTH_W == 18) || (DATA_WIDTH_W == 16)) ? "X18" : (((DATA_WIDTH_W == 9) || (DATA_WIDTH_W == 8)) ? "X9" : ((DATA_WIDTH_W == 4) ? "X4" : ((DATA_WIDTH_W == 2) ? "X2" : "X1")))))) ; + localparam DW_R = (ECC_ENABLE ? "X32" : (((DATA_WIDTH_R == 36) || (DATA_WIDTH_R == 32)) ? "X36" : (((DATA_WIDTH_R == 18) || (DATA_WIDTH_R == 16)) ? "X18" : (((DATA_WIDTH_R == 9) || (DATA_WIDTH_R == 8)) ? "X9" : ((DATA_WIDTH_R == 4) ? "X4" : ((DATA_WIDTH_R == 2) ? "X2" : "X1")))))) ; localparam TRUE_RST = ((RESETMODE == "sync") ? "SYNC" : "ASYNC") ; localparam TRUE_RST_REL = ((RESET_RELEASE == "sync") ? "SYNC" : "ASYNC") ; localparam TRUE_ECC = (((ECC_ENABLE == 1) && (DATA_WIDTH_W == 32)) ? "ENABLED" : "DISABLED") ; @@ -3964,6 +4823,7 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, wire [35:0] w_data_w ; wire [35:0] r_data_w ; wire [(DATA_WIDTH_R - 1):0] rd_data_w ; + wire rd_en_w ; if (((REGMODE == "noreg") || (OUTPUT_CLK_EN == 0))) begin : genblk1 assign rd_data_o = rd_data_w ; @@ -4179,15 +5039,55 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, assign r_addr_w[0] = rd_addr_i[0] ; assign rd_data_w = r_data_w[0] ; end + if ((OUTREG == "BYPASSED")) + begin : genblk4 + assign rd_en_w = rd_en_i ; + end + else + begin : genblk4 + reg rd_en_r ; + assign rd_en_w = (rd_en_i | rd_en_r) ; + if ((RESETMODE == "sync")) + begin : genblk1 + always + @(posedge rd_clk_i) + begin + if (rst_i) + begin + rd_en_r <= 1'b0 ; + end + else + begin + rd_en_r <= rd_en_i ; + end + end + end + else + begin : genblk1 + always + @(posedge rd_clk_i or + posedge rst_i) + begin + if (rst_i) + begin + rd_en_r <= 1'b0 ; + end + else + begin + rd_en_r <= rd_en_i ; + end + end + end + end wire t_wr_en_i = ((BYTE_ENABLE == 0) ? wr_en_i : ((BYTE_WIDTH > 1) ? wr_en_i : (wr_en_i & ben_i))) ; - wire t_rd_en_i = rd_en_i ; + wire t_rd_en_i = (((OUTREG == "USED") && (RESETMODE == "sync")) ? (rd_en_w | rst_i) : rd_en_w) ; wire [35:0] DI = w_data_w ; wire [13:0] ADW = w_addr_w ; wire [13:0] ADR = r_addr_w ; wire CLKW = wr_clk_i ; wire CLKR = rd_clk_i ; wire CEW = wr_clk_en_i ; - wire CER = rd_clk_en_i ; + wire CER = (((OUTREG == "USED") && (RESETMODE == "sync")) ? (rd_clk_en_i | rst_i) : rd_clk_en_i) ; wire [2:0] CSW = {t_wr_en_i, t_wr_en_i, t_wr_en_i} ; @@ -4221,7 +5121,7 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, defparam pdp16k.CSDECODE_W = TRUE_CSW ; defparam pdp16k.CSDECODE_R = TRUE_CSR ; defparam pdp16k.ASYNC_RST_RELEASE = TRUE_RST_REL ; - defparam pdp16k.INIT_DATA = "DYNAMIC" ; + defparam pdp16k.INIT_DATA = INIT_DATA ; defparam pdp16k.ECC = (ECC_ENABLE ? "ENABLED" : "DISABLED") ; defparam pdp16k.INITVAL_00 = ((INIT_MODE == "mem_file") ? INIT_VALUE_00 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; defparam pdp16k.INITVAL_01 = ((INIT_MODE == "mem_file") ? INIT_VALUE_01 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; @@ -4288,6 +5188,400 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, defparam pdp16k.INITVAL_3E = ((INIT_MODE == "mem_file") ? INIT_VALUE_3E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; defparam pdp16k.INITVAL_3F = ((INIT_MODE == "mem_file") ? INIT_VALUE_3F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; end + else + if ((FAMILY_CODE == _FCODE_AP6_)) + begin : AP6_MEM + localparam OUTREG = ((REGMODE == "reg") ? "USED" : "BYPASSED") ; + localparam TRUE_CSW = ((CSDECODE_W == 0) ? "000" : ((CSDECODE_W == 1) ? "001" : ((CSDECODE_W == 2) ? "010" : ((CSDECODE_W == 3) ? "011" : ((CSDECODE_W == 4) ? "100" : ((CSDECODE_W == 5) ? "101" : ((CSDECODE_W == 6) ? "110" : "111"))))))) ; + localparam TRUE_CSR = ((CSDECODE_R == 0) ? "000" : ((CSDECODE_R == 1) ? "001" : ((CSDECODE_R == 2) ? "010" : ((CSDECODE_R == 3) ? "011" : ((CSDECODE_R == 4) ? "100" : ((CSDECODE_R == 5) ? "101" : ((CSDECODE_R == 6) ? "110" : "111"))))))) ; + localparam DW_W = (ECC_ENABLE ? "X64" : (((DATA_WIDTH_W == 72) || (DATA_WIDTH_W == 64)) ? "X72" : (((DATA_WIDTH_W == 36) || (DATA_WIDTH_W == 32)) ? "X36" : (((DATA_WIDTH_W == 18) || (DATA_WIDTH_W == 16)) ? "X18" : (((DATA_WIDTH_W == 9) || (DATA_WIDTH_W == 8)) ? "X9" : ((DATA_WIDTH_W == 4) ? "X4" : ((DATA_WIDTH_W == 2) ? "X2" : "X1"))))))) ; + localparam DW_R = (ECC_ENABLE ? "X64" : (((DATA_WIDTH_R == 72) || (DATA_WIDTH_R == 64)) ? "X72" : (((DATA_WIDTH_R == 36) || (DATA_WIDTH_R == 32)) ? "X36" : (((DATA_WIDTH_R == 18) || (DATA_WIDTH_R == 16)) ? "X18" : (((DATA_WIDTH_R == 9) || (DATA_WIDTH_R == 8)) ? "X9" : ((DATA_WIDTH_R == 4) ? "X4" : ((DATA_WIDTH_R == 2) ? "X2" : "X1"))))))) ; + localparam TRUE_RST = ((RESETMODE == "sync") ? "SYNC" : "ASYNC") ; + localparam TRUE_RST_REL = ((RESET_RELEASE == "sync") ? "SYNC" : "ASYNC") ; + localparam TRUE_ECC = (((ECC_ENABLE == 1) && (DATA_WIDTH_W == 64)) ? "ENABLED" : "DISABLED") ; + localparam TRUE_GSR = ((GSR == "disabled") ? "DISABLED" : "ENABLED") ; + wire [14:0] w_addr_w ; + wire [14:0] r_addr_w ; + wire [71:0] w_data_w ; + wire [71:0] r_data_w ; + wire [(DATA_WIDTH_R - 1):0] rd_data_w ; + if (((DATA_WIDTH_W == 72) || (DATA_WIDTH_W == 64))) + begin : genblk1 + assign w_addr_w[14:6] = wr_addr_i ; + assign w_addr_w[5:0] = ((BYTE_ENABLE == 1) ? ben_i[5:0] : 6'b11_1111) ; + if ((DATA_WIDTH_W == 72)) + begin : genblk1 + assign w_data_w = wr_data_i ; + end + else + begin : genblk1 + assign w_data_w[71] = 1'b0 ; + assign w_data_w[62] = 1'b0 ; + assign w_data_w[53] = 1'b0 ; + assign w_data_w[44] = 1'b0 ; + assign w_data_w[35] = 1'b0 ; + assign w_data_w[26] = 1'b0 ; + assign w_data_w[17] = 1'b0 ; + assign w_data_w[8] = 1'b0 ; + assign w_data_w[70:63] = wr_data_i[63:56] ; + assign w_data_w[61:54] = wr_data_i[55:48] ; + assign w_data_w[52:45] = wr_data_i[47:40] ; + assign w_data_w[43:36] = wr_data_i[39:32] ; + assign w_data_w[34:27] = wr_data_i[31:24] ; + assign w_data_w[25:18] = wr_data_i[23:16] ; + assign w_data_w[16:9] = wr_data_i[15:8] ; + assign w_data_w[7:0] = wr_data_i[7:0] ; + end + end + else + if (((DATA_WIDTH_W == 36) || (DATA_WIDTH_W == 32))) + begin : genblk1 + assign w_addr_w[14:5] = wr_addr_i ; + assign w_addr_w[4] = 1'b1 ; + assign w_addr_w[3:0] = ((BYTE_ENABLE == 1) ? ben_i : 4'b1111) ; + assign w_data_w[71:36] = {36{1'b0}} ; + if ((DATA_WIDTH_W == 36)) + begin : genblk1 + assign w_data_w = wr_data_i ; + end + else + begin : genblk1 + assign w_data_w[35] = 1'b0 ; + assign w_data_w[26] = 1'b0 ; + assign w_data_w[17] = 1'b0 ; + assign w_data_w[8] = 1'b0 ; + assign w_data_w[34:27] = wr_data_i[31:24] ; + assign w_data_w[25:18] = wr_data_i[23:16] ; + assign w_data_w[16:9] = wr_data_i[15:8] ; + assign w_data_w[7:0] = wr_data_i[7:0] ; + end + end + else + if (((DATA_WIDTH_W == 18) || (DATA_WIDTH_W == 16))) + begin : genblk1 + assign w_addr_w[14:4] = wr_addr_i ; + assign w_addr_w[3] = ((BYTE_ENABLE == 1) ? ben_i[1] : 1'b1) ; + assign w_addr_w[2] = ((BYTE_ENABLE == 1) ? ben_i[0] : 1'b1) ; + assign w_addr_w[1] = ((BYTE_ENABLE == 1) ? ben_i[1] : 1'b1) ; + assign w_addr_w[0] = ((BYTE_ENABLE == 1) ? ben_i[0] : 1'b1) ; + assign w_data_w[71:18] = {54{1'b0}} ; + if ((DATA_WIDTH_W == 18)) + begin : genblk1 + assign w_data_w[17:0] = wr_data_i ; + end + else + begin : genblk1 + assign w_data_w[17] = 1'b0 ; + assign w_data_w[8] = 1'b0 ; + assign w_data_w[16:9] = wr_data_i[15:8] ; + assign w_data_w[7:0] = wr_data_i[7:0] ; + end + end + else + if (((DATA_WIDTH_W == 9) || (DATA_WIDTH_W == 8))) + begin : genblk1 + assign w_addr_w[14:3] = wr_addr_i ; + assign w_addr_w[2:0] = 3'b111 ; + assign w_data_w[71:9] = {63{1'b0}} ; + if ((DATA_WIDTH_W == 9)) + begin: genblk1 + assign w_data_w[8:0] = wr_data_i ; + end + else + begin: genblk1 + assign w_data_w[8:0] = {1'b0, + wr_data_i} ; + end + end + else + if ((DATA_WIDTH_W == 4)) + begin : genblk1 + assign w_addr_w[14:2] = wr_addr_i ; + assign w_addr_w[1:0] = 2'b11 ; + assign w_data_w[71:4] = {68{1'b0}} ; + assign w_data_w[3:0] = wr_data_i ; + end + else + if ((DATA_WIDTH_W == 2)) + begin : genblk1 + assign w_addr_w[14:1] = wr_addr_i ; + assign w_addr_w[0] = 1'b1 ; + assign w_data_w[71:2] = {70{1'b0}} ; + assign w_data_w[1:0] = wr_data_i ; + end + else + begin : genblk1 + assign w_addr_w[14:0] = wr_addr_i ; + assign w_data_w[71:1] = {71{1'b0}} ; + assign w_data_w[0] = wr_data_i ; + end + if (((DATA_WIDTH_R == 72) || (DATA_WIDTH_R == 64))) + begin : genblk2 + assign r_addr_w[14:6] = rd_addr_i ; + assign r_addr_w[5:0] = 6'b11_1111 ; + if ((DATA_WIDTH_R == 72)) + begin : genblk1 + assign rd_data_w = r_data_w ; + end + else + begin : genblk1 + assign rd_data_w[63:56] = r_data_w[70:63] ; + assign rd_data_w[55:48] = r_data_w[61:54] ; + assign rd_data_w[47:40] = r_data_w[52:45] ; + assign rd_data_w[39:32] = r_data_w[43:36] ; + assign rd_data_w[31:24] = r_data_w[34:27] ; + assign rd_data_w[23:16] = r_data_w[25:18] ; + assign rd_data_w[15:8] = r_data_w[16:9] ; + assign rd_data_w[7:0] = r_data_w[7:0] ; + end + end + else + if (((DATA_WIDTH_R == 36) || (DATA_WIDTH_R == 32))) + begin : genblk2 + assign r_addr_w[14:5] = rd_addr_i ; + assign r_addr_w[4] = 1'b1 ; + assign r_addr_w[3:0] = 4'b1111 ; + if ((DATA_WIDTH_R == 36)) + begin : genblk1 + assign rd_data_w[35:0] = r_data_w[35:0] ; + end + else + begin : genblk1 + assign rd_data_w[31:24] = r_data_w[34:27] ; + assign rd_data_w[23:16] = r_data_w[25:18] ; + assign rd_data_w[15:8] = r_data_w[16:9] ; + assign rd_data_w[7:0] = r_data_w[7:0] ; + end + end + else + if (((DATA_WIDTH_R == 18) || (DATA_WIDTH_R == 16))) + begin : genblk2 + assign r_addr_w[14:4] = rd_addr_i ; + assign r_addr_w[3:2] = 2'b11 ; + assign r_addr_w[1:0] = 2'b11 ; + if ((DATA_WIDTH_R == 18)) + begin : genblk1 + assign rd_data_w[17:0] = r_data_w[17:0] ; + end + else + begin : genblk1 + assign rd_data_w[15:8] = r_data_w[16:9] ; + assign rd_data_w[7:0] = r_data_w[7:0] ; + end + end + else + if (((DATA_WIDTH_R == 9) || (DATA_WIDTH_R == 8))) + begin : genblk2 + assign r_addr_w[14:3] = rd_addr_i ; + assign r_addr_w[2:0] = 3'b111 ; + if ((DATA_WIDTH_R == 9)) + begin: genblk1 + assign rd_data_w[8:0] = r_data_w[8:0] ; + end + else + begin: genblk1 + assign rd_data_w[7:0] = r_data_w[7:0] ; + end + end + else + if ((DATA_WIDTH_R == 4)) + begin : genblk2 + assign r_addr_w[14:2] = rd_addr_i ; + assign r_addr_w[1:0] = 2'b11 ; + assign rd_data_w = r_data_w[3:0] ; + end + else + if ((DATA_WIDTH_R == 2)) + begin : genblk2 + assign r_addr_w[14:1] = rd_addr_i ; + assign r_addr_w[0] = 1'b1 ; + assign rd_data_w = r_data_w[1:0] ; + end + else + begin : genblk2 + assign r_addr_w[14:0] = rd_addr_i ; + assign rd_data_w = r_data_w[0] ; + end + assign rd_data_o = rd_data_w ; + wire t_wr_en_i = ((BYTE_ENABLE == 0) ? wr_en_i : ((BYTE_WIDTH > 1) ? wr_en_i : (wr_en_i & ben_i))) ; + wire t_rd_en_i = (((RESETMODE == "sync") && (REGMODE == "reg")) ? (rd_en_i | rst_i) : rd_en_i) ; + wire [71:0] DI = w_data_w ; + wire [14:0] ADW = w_addr_w ; + wire [14:0] ADR = r_addr_w ; + wire CLKW = wr_clk_i ; + wire CLKR = rd_clk_i ; + wire CEW = wr_clk_en_i ; + wire CER = (((RESETMODE == "sync") && (REGMODE == "reg")) ? (rd_clk_en_i | rst_i) : rd_clk_en_i) ; + wire [2:0] CSW = {t_wr_en_i, + t_wr_en_i, + t_wr_en_i} ; + wire [2:0] CSR = {t_rd_en_i, + t_rd_en_i, + t_rd_en_i} ; + wire RST = rst_i ; + wire [71:0] DO ; + wire BE6 = (((BYTE_ENABLE == 1) && (BYTE_WIDTH == 8)) ? ben_i[6] : 1'b1) ; + wire BE7 = (((BYTE_ENABLE == 1) && (BYTE_WIDTH == 8)) ? ben_i[7] : 1'b1) ; + wire OCE = rd_out_clk_en_i ; + assign r_data_w = DO ; + localparam MEM_TYPE = "EBR" ; + localparam T_MEM_SIZE = {"[", + MEM_SIZE, + "]"} ; + (* ECO_MEM_TYPE=MEM_TYPE, ECO_MEM_ID=MEM_ID, ECO_MEM_SIZE=T_MEM_SIZE, ECO_MEM_BLOCK_SIZE=BLOCK_SIZE, ECO_MEM_BLOCK_POS=BLOCK_POS *) PDP32K pdp32k (.DI(DI), + .ADW(ADW), + .ADR(ADR), + .CLKW(CLKW), + .CLKR(CLKR), + .CEW(CEW), + .CER(CER), + .OCE(OCE), + .BE6(BE6), + .BE7(BE7), + .CSW(CSW), + .CSR(CSR), + .RST(RST), + .DO(DO), + .ONEBITERR(one_err_det_o), + .TWOBITERR(two_err_det_o)) ; + defparam pdp32k.DATA_WIDTH_W = DW_W ; + defparam pdp32k.DATA_WIDTH_R = DW_R ; + defparam pdp32k.OUTREG = OUTREG ; + defparam pdp32k.RESETMODE = TRUE_RST ; + defparam pdp32k.CSDECODE_W = TRUE_CSW ; + defparam pdp32k.CSDECODE_R = TRUE_CSR ; + defparam pdp32k.ASYNC_RST_RELEASE = TRUE_RST_REL ; + defparam pdp32k.INIT_DATA = INIT_DATA ; + defparam pdp32k.ECC = (ECC_ENABLE ? "ENABLED" : "DISABLED") ; + defparam pdp32k.INITVAL_00 = ((INIT_MODE == "mem_file") ? INIT_VALUE_00 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_01 = ((INIT_MODE == "mem_file") ? INIT_VALUE_01 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_02 = ((INIT_MODE == "mem_file") ? INIT_VALUE_02 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_03 = ((INIT_MODE == "mem_file") ? INIT_VALUE_03 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_04 = ((INIT_MODE == "mem_file") ? INIT_VALUE_04 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_05 = ((INIT_MODE == "mem_file") ? INIT_VALUE_05 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_06 = ((INIT_MODE == "mem_file") ? INIT_VALUE_06 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_07 = ((INIT_MODE == "mem_file") ? INIT_VALUE_07 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_08 = ((INIT_MODE == "mem_file") ? INIT_VALUE_08 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_09 = ((INIT_MODE == "mem_file") ? INIT_VALUE_09 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_0A = ((INIT_MODE == "mem_file") ? INIT_VALUE_0A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_0B = ((INIT_MODE == "mem_file") ? INIT_VALUE_0B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_0C = ((INIT_MODE == "mem_file") ? INIT_VALUE_0C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_0D = ((INIT_MODE == "mem_file") ? INIT_VALUE_0D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_0E = ((INIT_MODE == "mem_file") ? INIT_VALUE_0E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_0F = ((INIT_MODE == "mem_file") ? INIT_VALUE_0F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_10 = ((INIT_MODE == "mem_file") ? INIT_VALUE_10 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_11 = ((INIT_MODE == "mem_file") ? INIT_VALUE_11 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_12 = ((INIT_MODE == "mem_file") ? INIT_VALUE_12 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_13 = ((INIT_MODE == "mem_file") ? INIT_VALUE_13 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_14 = ((INIT_MODE == "mem_file") ? INIT_VALUE_14 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_15 = ((INIT_MODE == "mem_file") ? INIT_VALUE_15 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_16 = ((INIT_MODE == "mem_file") ? INIT_VALUE_16 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_17 = ((INIT_MODE == "mem_file") ? INIT_VALUE_17 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_18 = ((INIT_MODE == "mem_file") ? INIT_VALUE_18 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_19 = ((INIT_MODE == "mem_file") ? INIT_VALUE_19 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_1A = ((INIT_MODE == "mem_file") ? INIT_VALUE_1A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_1B = ((INIT_MODE == "mem_file") ? INIT_VALUE_1B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_1C = ((INIT_MODE == "mem_file") ? INIT_VALUE_1C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_1D = ((INIT_MODE == "mem_file") ? INIT_VALUE_1D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_1E = ((INIT_MODE == "mem_file") ? INIT_VALUE_1E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_1F = ((INIT_MODE == "mem_file") ? INIT_VALUE_1F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_20 = ((INIT_MODE == "mem_file") ? INIT_VALUE_20 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_21 = ((INIT_MODE == "mem_file") ? INIT_VALUE_21 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_22 = ((INIT_MODE == "mem_file") ? INIT_VALUE_22 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_23 = ((INIT_MODE == "mem_file") ? INIT_VALUE_23 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_24 = ((INIT_MODE == "mem_file") ? INIT_VALUE_24 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_25 = ((INIT_MODE == "mem_file") ? INIT_VALUE_25 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_26 = ((INIT_MODE == "mem_file") ? INIT_VALUE_26 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_27 = ((INIT_MODE == "mem_file") ? INIT_VALUE_27 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_28 = ((INIT_MODE == "mem_file") ? INIT_VALUE_28 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_29 = ((INIT_MODE == "mem_file") ? INIT_VALUE_29 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_2A = ((INIT_MODE == "mem_file") ? INIT_VALUE_2A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_2B = ((INIT_MODE == "mem_file") ? INIT_VALUE_2B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_2C = ((INIT_MODE == "mem_file") ? INIT_VALUE_2C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_2D = ((INIT_MODE == "mem_file") ? INIT_VALUE_2D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_2E = ((INIT_MODE == "mem_file") ? INIT_VALUE_2E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_2F = ((INIT_MODE == "mem_file") ? INIT_VALUE_2F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_30 = ((INIT_MODE == "mem_file") ? INIT_VALUE_30 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_31 = ((INIT_MODE == "mem_file") ? INIT_VALUE_31 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_32 = ((INIT_MODE == "mem_file") ? INIT_VALUE_32 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_33 = ((INIT_MODE == "mem_file") ? INIT_VALUE_33 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_34 = ((INIT_MODE == "mem_file") ? INIT_VALUE_34 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_35 = ((INIT_MODE == "mem_file") ? INIT_VALUE_35 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_36 = ((INIT_MODE == "mem_file") ? INIT_VALUE_36 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_37 = ((INIT_MODE == "mem_file") ? INIT_VALUE_37 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_38 = ((INIT_MODE == "mem_file") ? INIT_VALUE_38 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_39 = ((INIT_MODE == "mem_file") ? INIT_VALUE_39 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_3A = ((INIT_MODE == "mem_file") ? INIT_VALUE_3A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_3B = ((INIT_MODE == "mem_file") ? INIT_VALUE_3B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_3C = ((INIT_MODE == "mem_file") ? INIT_VALUE_3C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_3D = ((INIT_MODE == "mem_file") ? INIT_VALUE_3D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_3E = ((INIT_MODE == "mem_file") ? INIT_VALUE_3E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_3F = ((INIT_MODE == "mem_file") ? INIT_VALUE_3F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_40 = ((INIT_MODE == "mem_file") ? INIT_VALUE_40 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_41 = ((INIT_MODE == "mem_file") ? INIT_VALUE_41 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_42 = ((INIT_MODE == "mem_file") ? INIT_VALUE_42 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_43 = ((INIT_MODE == "mem_file") ? INIT_VALUE_43 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_44 = ((INIT_MODE == "mem_file") ? INIT_VALUE_44 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_45 = ((INIT_MODE == "mem_file") ? INIT_VALUE_45 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_46 = ((INIT_MODE == "mem_file") ? INIT_VALUE_46 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_47 = ((INIT_MODE == "mem_file") ? INIT_VALUE_47 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_48 = ((INIT_MODE == "mem_file") ? INIT_VALUE_48 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_49 = ((INIT_MODE == "mem_file") ? INIT_VALUE_49 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_4A = ((INIT_MODE == "mem_file") ? INIT_VALUE_4A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_4B = ((INIT_MODE == "mem_file") ? INIT_VALUE_4B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_4C = ((INIT_MODE == "mem_file") ? INIT_VALUE_4C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_4D = ((INIT_MODE == "mem_file") ? INIT_VALUE_4D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_4E = ((INIT_MODE == "mem_file") ? INIT_VALUE_4E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_4F = ((INIT_MODE == "mem_file") ? INIT_VALUE_4F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_50 = ((INIT_MODE == "mem_file") ? INIT_VALUE_50 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_51 = ((INIT_MODE == "mem_file") ? INIT_VALUE_51 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_52 = ((INIT_MODE == "mem_file") ? INIT_VALUE_52 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_53 = ((INIT_MODE == "mem_file") ? INIT_VALUE_53 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_54 = ((INIT_MODE == "mem_file") ? INIT_VALUE_54 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_55 = ((INIT_MODE == "mem_file") ? INIT_VALUE_55 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_56 = ((INIT_MODE == "mem_file") ? INIT_VALUE_56 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_57 = ((INIT_MODE == "mem_file") ? INIT_VALUE_57 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_58 = ((INIT_MODE == "mem_file") ? INIT_VALUE_58 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_59 = ((INIT_MODE == "mem_file") ? INIT_VALUE_59 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_5A = ((INIT_MODE == "mem_file") ? INIT_VALUE_5A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_5B = ((INIT_MODE == "mem_file") ? INIT_VALUE_5B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_5C = ((INIT_MODE == "mem_file") ? INIT_VALUE_5C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_5D = ((INIT_MODE == "mem_file") ? INIT_VALUE_5D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_5E = ((INIT_MODE == "mem_file") ? INIT_VALUE_5E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_5F = ((INIT_MODE == "mem_file") ? INIT_VALUE_5F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_60 = ((INIT_MODE == "mem_file") ? INIT_VALUE_60 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_61 = ((INIT_MODE == "mem_file") ? INIT_VALUE_61 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_62 = ((INIT_MODE == "mem_file") ? INIT_VALUE_62 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_63 = ((INIT_MODE == "mem_file") ? INIT_VALUE_63 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_64 = ((INIT_MODE == "mem_file") ? INIT_VALUE_64 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_65 = ((INIT_MODE == "mem_file") ? INIT_VALUE_65 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_66 = ((INIT_MODE == "mem_file") ? INIT_VALUE_66 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_67 = ((INIT_MODE == "mem_file") ? INIT_VALUE_67 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_68 = ((INIT_MODE == "mem_file") ? INIT_VALUE_68 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_69 = ((INIT_MODE == "mem_file") ? INIT_VALUE_69 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_6A = ((INIT_MODE == "mem_file") ? INIT_VALUE_6A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_6B = ((INIT_MODE == "mem_file") ? INIT_VALUE_6B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_6C = ((INIT_MODE == "mem_file") ? INIT_VALUE_6C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_6D = ((INIT_MODE == "mem_file") ? INIT_VALUE_6D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_6E = ((INIT_MODE == "mem_file") ? INIT_VALUE_6E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_6F = ((INIT_MODE == "mem_file") ? INIT_VALUE_6F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_70 = ((INIT_MODE == "mem_file") ? INIT_VALUE_70 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_71 = ((INIT_MODE == "mem_file") ? INIT_VALUE_71 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_72 = ((INIT_MODE == "mem_file") ? INIT_VALUE_72 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_73 = ((INIT_MODE == "mem_file") ? INIT_VALUE_73 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_74 = ((INIT_MODE == "mem_file") ? INIT_VALUE_74 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_75 = ((INIT_MODE == "mem_file") ? INIT_VALUE_75 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_76 = ((INIT_MODE == "mem_file") ? INIT_VALUE_76 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_77 = ((INIT_MODE == "mem_file") ? INIT_VALUE_77 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_78 = ((INIT_MODE == "mem_file") ? INIT_VALUE_78 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_79 = ((INIT_MODE == "mem_file") ? INIT_VALUE_79 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_7A = ((INIT_MODE == "mem_file") ? INIT_VALUE_7A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_7B = ((INIT_MODE == "mem_file") ? INIT_VALUE_7B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_7C = ((INIT_MODE == "mem_file") ? INIT_VALUE_7C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_7D = ((INIT_MODE == "mem_file") ? INIT_VALUE_7D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_7E = ((INIT_MODE == "mem_file") ? INIT_VALUE_7E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_7F = ((INIT_MODE == "mem_file") ? INIT_VALUE_7F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + end endgenerate //------------------------------------------------------------------------------ // Function Definition @@ -4399,6 +5693,19 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, else getByteWidth = 1 ; end + _FCODE_AP6_ : + begin + if (((data_width == 72) || (data_width == 64))) + getByteWidth = 8 ; + else + if (((data_width == 36) || (data_width == 32))) + getByteWidth = 4 ; + else + if (((data_width == 18) || (data_width == 16))) + getByteWidth = 2 ; + else + getByteWidth = 1 ; + end default : getByteWidth = 1 ; endcase @@ -5474,6 +6781,8 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, getAddrWidth = 13 ; 1 : getAddrWidth = 14 ; + default : + getAddrWidth = 9 ; endcase end _FCODE_ICE_ : @@ -5487,6 +6796,37 @@ module palette_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, getAddrWidth = 10 ; 2 : getAddrWidth = 11 ; + default : + getAddrWidth = 8 ; + endcase + end + _FCODE_AP6_ : + begin + case (data_width) + 72 : + getAddrWidth = 9 ; + 64 : + getAddrWidth = 9 ; + 36 : + getAddrWidth = 10 ; + 32 : + getAddrWidth = 10 ; + 18 : + getAddrWidth = 11 ; + 16 : + getAddrWidth = 11 ; + 9 : + getAddrWidth = 12 ; + 8 : + getAddrWidth = 12 ; + 4 : + getAddrWidth = 13 ; + 2 : + getAddrWidth = 14 ; + 1 : + getAddrWidth = 15 ; + default : + getAddrWidth = 9 ; endcase end default : diff --git a/fpga/source/generated/palette_ram/rtl/palette_ram_bb.v b/fpga/source/generated/palette_ram/rtl/palette_ram_bb.v index 7d29b94..64b904e 100644 --- a/fpga/source/generated/palette_ram/rtl/palette_ram_bb.v +++ b/fpga/source/generated/palette_ram/rtl/palette_ram_bb.v @@ -1,7 +1,8 @@ /******************************************************************************* - Verilog netlist generated by IPGEN Radiant Software (64-bit) 2.0.1.281.2 - Soft IP Version: 1.1.0 - Wed Apr 15 20:30:31 2020 + Verilog netlist generated by IPGEN Lattice Radiant Software (64-bit) + 2024.2.0.3.0 + Soft IP Version: 2.4.0 + 2025 01 08 20:20:09 *******************************************************************************/ /******************************************************************************* Wrapper Module generated per user settings. diff --git a/fpga/source/generated/palette_ram/testbench/clk_rst_gen.v b/fpga/source/generated/palette_ram/testbench/clk_rst_gen.v new file mode 100644 index 0000000..fc6c775 --- /dev/null +++ b/fpga/source/generated/palette_ram/testbench/clk_rst_gen.v @@ -0,0 +1,43 @@ +`ifndef CLK_RST_GEN +`define CLK_RST_GEN + +`timescale 1ns/1ns + +module clk_rst_gen # ( + parameter CLK_FREQ = 10, + parameter RESET_CNT = 10, + parameter DIFF_CLOCK = 1 +)( + output reg clk1, + output reg clk2, + output reg rst +); + +initial begin + rst <= 1'b1; + #RESET_CNT; + rst <= 1'b0; +end + +initial begin + clk1 <= 1'b0; + forever #CLK_FREQ clk1 <= ~clk1; +end + +if(DIFF_CLOCK) begin + localparam CLK2FREQ = 11*CLK_FREQ/7; + initial begin + clk2 <= 1'b0; + #2; + forever #CLK2FREQ clk2 <= ~clk2; + end +end +else begin + initial begin + clk2 <= 1'b0; + forever #CLK_FREQ clk2 <= ~clk2; + end +end + +endmodule +`endif \ No newline at end of file diff --git a/fpga/source/generated/palette_ram/testbench/dut_params.v b/fpga/source/generated/palette_ram/testbench/dut_params.v index ba05371..ac181b2 100644 --- a/fpga/source/generated/palette_ram/testbench/dut_params.v +++ b/fpga/source/generated/palette_ram/testbench/dut_params.v @@ -12,10 +12,12 @@ localparam OUTPUT_CLK_EN = 0; localparam RESETMODE = "sync"; localparam BYTE_ENABLE = 1; localparam BYTE_WIDTH = 2; +localparam BYTE_SIZE = 8; localparam ECC_ENABLE = 0; localparam INIT_MODE = "mem_file"; -localparam INIT_FILE = "misc/palette_ram_palette_ram_copy.mem"; +localparam INIT_FILE = "/home/zmetzing/vera-module-local/fpga/source/generated/palette_ram/misc/palette_ram_palette_ram_copy.mem"; localparam INIT_FILE_FORMAT = "hex"; +localparam INIT_DATA_TYPE = 1; localparam INIT_VALUE_00 = "0x0BBB008F0AF6077703330F7706400D850EE7000A00C50C4C0AFE08000FFF0000"; localparam INIT_VALUE_01 = "0x0FFF0EEE0DDD0CCC0BBB0AAA0999088807770666055504440333022201110000"; localparam INIT_VALUE_02 = "0x041102000F770C660A5508440633042202110FBB0C990A880866064404330211"; @@ -80,4 +82,70 @@ localparam INIT_VALUE_3C = "0x00000000000000000000000000000000000000000000000000 localparam INIT_VALUE_3D = "0x0000000000000000000000000000000000000000000000000000000000000000"; localparam INIT_VALUE_3E = "0x0000000000000000000000000000000000000000000000000000000000000000"; localparam INIT_VALUE_3F = "0x0000000000000000000000000000000000000000000000000000000000000000"; -`define ICE40UP +localparam INIT_VALUE_40 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_41 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_42 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_43 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_44 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_45 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_46 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_47 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_48 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_49 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_4A = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_4B = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_4C = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_4D = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_4E = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_4F = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_50 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_51 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_52 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_53 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_54 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_55 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_56 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_57 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_58 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_59 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_5A = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_5B = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_5C = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_5D = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_5E = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_5F = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_60 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_61 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_62 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_63 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_64 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_65 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_66 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_67 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_68 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_69 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_6A = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_6B = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_6C = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_6D = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_6E = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_6F = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_70 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_71 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_72 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_73 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_74 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_75 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_76 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_77 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_78 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_79 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_7A = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_7B = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_7C = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_7D = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_7E = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_7F = "0x0000000000000000000000000000000000000000000000000000000000000000"; +`define ice40tp +`define iCE40UP +`define iCE40UP5K diff --git a/fpga/source/generated/palette_ram/testbench/mem_model.v b/fpga/source/generated/palette_ram/testbench/mem_model.v new file mode 100644 index 0000000..7ee7dc6 --- /dev/null +++ b/fpga/source/generated/palette_ram/testbench/mem_model.v @@ -0,0 +1,350 @@ +`ifndef MEM_MODEL +`define MEM_MODEL + +module mem_model # ( + parameter FAMILY = "common", + parameter A_DEPTH = 1024, + parameter A_AWID = clog2(A_DEPTH), + parameter A_DWID = 32, + parameter B_DEPTH = 2048, + parameter B_AWID = clog2(B_DEPTH), + parameter B_DWID = 16, + parameter INIT_MODE = "none", + parameter INIT_FORMAT = "hex", + parameter INIT_FILE = "none", + parameter BEN_WID = 8, + parameter A_BDWID = roundUP(A_DWID, BEN_WID), + parameter B_BDWID = roundUP(B_DWID, BEN_WID), + parameter BYTE_EN_A = 1, + parameter BYTE_EN_B = 1, + parameter BENA_POL = 1, + parameter BENB_POL = 1, + parameter REGMODE_A = "noreg", + parameter REGMODE_B = "noreg", + parameter RSTA_POL = 1, + parameter RSTB_POL = 1 +)( + input clk_a_i, + input clk_en_a_i, + input rst_a_i, + input wr_en_a_i, + input [A_AWID-1:0] addr_a_i, + input [A_DWID-1:0] data_a_i, + input [A_BDWID-1:0] ben_a_i, + + output reg [A_DWID-1:0] data_a_o, + + input clk_b_i, + input clk_en_b_i, + input rst_b_i, + input wr_en_b_i, + input [B_AWID-1:0] addr_b_i, + input [B_DWID-1:0] data_b_i, + input [B_BDWID-1:0] ben_b_i, + + output reg [B_DWID-1:0] data_b_o +); + +genvar g0, g1; +integer i0; + +reg [A_DWID-1:0] mem [(2**A_AWID)-1:0]; + +wire rst_a_c; +wire rst_b_c; + +assign rst_a_c = (RSTA_POL) ? rst_a_i : ~rst_a_i; +assign rst_b_c = (RSTB_POL) ? rst_b_i : ~rst_b_i; + +initial begin + if(INIT_MODE == "mem_file") begin + if(INIT_FORMAT == "hex") begin + $readmemh(INIT_FILE, mem, 0, A_DEPTH-1); + end + else begin + $readmemb(INIT_FILE, mem, 0, A_DEPTH-1); + end + for(i0 = 0; i0 < (2**A_AWID); i0 = i0 + 1) begin + if(mem[i0] == {A_DWID{1'bx}} && FAMILY != "common") begin + mem[i0] = {A_DWID{1'b0}}; + end + end + end + else if(FAMILY != "common") begin + for(i0 = 0; i0 < (2**A_AWID); i0 = i0 + 1) begin + mem[i0] = (INIT_MODE == "all_one") ? {A_DWID{1'b1}} : {A_DWID{1'b0}}; + end + end +end + +/* + * WRITING AT PORT A + */ +wire [A_DWID-1:0] data_a_nxt_c; +if(BYTE_EN_A == 0) begin : _BEN_A_DIS + assign data_a_nxt_c = data_a_i; +end +else begin : _BEN_A_EN + wire [A_DWID-1:0] data_a_p; + assign data_a_p = mem[addr_a_i]; + + for(g0 = 0; g0 < A_BDWID; g0 = g0 + 1) begin + assign data_a_nxt_c[g0*BEN_WID +: BEN_WID] = (ben_a_i[g0] == BENA_POL) ? data_a_i[g0*BEN_WID +: BEN_WID] : + data_a_p[g0*BEN_WID +: BEN_WID]; + end +end + +always @ (posedge clk_a_i) begin + if(clk_en_a_i & wr_en_a_i) begin + mem[addr_a_i] <= data_a_nxt_c; + end +end + +/* + * READING AT PORT A + */ +if(REGMODE_A == "noreg") begin :_NREG_A + always @ (posedge clk_a_i, posedge rst_a_c) begin + if(rst_a_c) begin + data_a_o <= {A_DWID{1'b0}}; + end + else begin + if(~wr_en_a_i & clk_en_a_i) begin + data_a_o <= mem[addr_a_i]; + end + end + end +end +else begin : _REG_A + reg [A_DWID-1:0] dbuf_a_r; + always @ (posedge clk_a_i, posedge rst_a_c) begin + if(rst_a_c) begin + dbuf_a_r <= {A_DWID{1'b0}}; + data_a_o <= {A_DWID{1'b0}}; + end + else begin + if(clk_en_a_i) begin + data_a_o <= dbuf_a_r; + if(~wr_en_a_i) begin + dbuf_a_r <= mem[addr_a_i]; + end + end + end + end +end + +if(A_DWID == B_DWID) begin : A_EQ_B + wire [B_DWID-1:0] data_b_nxt_c; + /* + * WRITING AT PORT B + */ + if(BYTE_EN_B == 0) begin : _BEN_B_DIS + assign data_b_nxt_c = data_b_i; + end + else begin : _BEN_B_EN + wire [B_DWID-1:0] data_b_p; + for(g0 = 0; g0 < B_BDWID; g0 = g0 + 1) begin + assign data_b_nxt_c[g0*BEN_WID +: BEN_WID] = (ben_b_i[g0] == BENB_POL) ? data_b_i[g0*BEN_WID +: BEN_WID] : + data_b_p[g0*BEN_WID +: BEN_WID]; + end + end + + always @ (posedge clk_b_i) begin + if(clk_en_b_i & wr_en_b_i) begin + mem[addr_b_i] <= data_b_nxt_c; + end + end + /* + * READING AT PORT B + */ + if(REGMODE_B == "noreg") begin : _NREG_B + always @ (posedge clk_b_i, posedge rst_b_c) begin + if(rst_b_c) begin + data_b_o <= {B_DWID{1'b0}}; + end + else begin + if(~wr_en_b_i) begin + data_b_o <= mem[addr_b_i]; + end + end + end + end + else begin : _REG_B + reg [B_DWID-1:0] dbuf_b_r; + always @ (posedge clk_b_i, posedge rst_b_c) begin + if(rst_b_c) begin + dbuf_b_r <= {B_DWID{1'b0}}; + data_b_o <= {B_DWID{1'b0}}; + end + else begin + data_b_o <= dbuf_b_r; + if(~wr_en_b_i) begin + dbuf_b_r <= mem[addr_b_i]; + end + end + end + end +end +else if(A_DWID > B_DWID) begin : A_GR_B + /* + * WRITING AT PORT B + */ + wire [A_AWID-1:0] addr_b_eq_c; + wire [B_AWID-(A_AWID+1):0] addr_b_exc_c; + wire [A_DWID-1:0] data_b_p_c; + wire [A_DWID-1:0] data_b_nxt_c; + + assign addr_b_eq_c = addr_b_i[B_AWID-1:B_AWID-A_AWID]; + assign addr_b_exc_c = addr_b_i[B_AWID-(A_AWID+1):0]; + assign data_b_p_c = mem[addr_b_eq_c]; + + if(BYTE_EN_B == 0) begin : _BEN_B_DIS + for(g0 = 0; g0 < 2**(B_AWID-A_AWID); g0 = g0 + 1) begin + assign data_b_nxt_c [B_DWID*g0 +: B_DWID] = (addr_b_exc_c == g0) ? data_b_i : data_b_p_c[B_DWID*g0 +: B_DWID]; + end + end + else begin : _BEN_B_EN + for(g0 = 0; g0 < 2**(B_AWID-A_AWID); g0 = g0 + 1) begin + for(g1 = 0; g1 < B_BDWID; g1 = g1 + 1) begin + assign data_b_nxt_c [(B_DWID*g0 + BEN_WID*g1) +: BEN_WID] = (addr_b_exc_c == g0 && ben_b_i[g0] == BENB_POL) ? data_b_i[g1*BEN_WID +: BEN_WID] : + data_b_p_c[(B_DWID*g0 + BEN_WID*g1) +: BEN_WID]; + end + end + end + + always @ (posedge clk_b_i) begin + if(clk_en_b_i & wr_en_b_i) begin + mem[addr_b_eq_c] <= data_b_nxt_c; + end + end + + /* + * READING AT PORT B + */ + wire [B_DWID-1:0] data_b_o_nxt_c; + assign data_b_o_nxt_c = (addr_b_eq_c >= A_DEPTH) ? {B_DWID{(INIT_MODE == "all_one") ? 1'b1 : 1'b0}} : (data_b_p_c >> (B_DWID * addr_b_exc_c)); + + if(REGMODE_B == "noreg") begin : _NREG_B + always @ (posedge clk_b_i, posedge rst_b_c) begin + if(rst_b_c) begin + data_b_o <= {B_DWID{1'b0}}; + end + else begin + if(~wr_en_b_i & clk_en_b_i) begin + data_b_o <= data_b_o_nxt_c; + end + end + end + end + else begin : _REG_B + reg [B_DWID-1:0] dbuf_b_r; + always @ (posedge clk_b_i, posedge rst_b_c) begin + if(rst_b_c) begin + dbuf_b_r <= {B_DWID{1'b0}}; + data_b_o <= {B_DWID{1'b0}}; + end + else begin + data_b_o <= dbuf_b_r; + if(~wr_en_b_i) begin + dbuf_b_r <= data_b_o_nxt_c; + end + end + end + end + +end +else begin : B_GR_A + /* + * WRITING AT PORT B + */ + wire [A_AWID-1:0] addr_b_eq_c; + assign addr_b_eq_c = {addr_b_i, {(A_AWID-B_AWID){1'b0}}}; + + if(BYTE_EN_B == 0) begin : _BEN_B_DIS + for(g0 = 0; g0 < B_DWID/A_DWID; g0 = g0 + 1) begin + always @ (posedge clk_b_i) begin + if(clk_en_b_i & wr_en_b_i) begin + mem[addr_b_eq_c + g0] <= data_b_i[g0*A_DWID +: A_DWID]; + end + end + end + end + else begin : _BEN_B_EN + wire [B_DWID-1:0] data_b_nxt_c; + wire [B_DWID-1:0] data_b_p_c; + for(g0 = 0; g0 < B_BDWID; g0 = g0 + 1) begin + assign data_b_nxt_c = (ben_b_i[g0] == BENB_POL) ? data_b_i[g0 * BEN_WID +: BEN_WID] : data_b_p_c [g0 * BEN_WID +: BEN_WID]; + end + for(g0 = 0; g0 < B_DWID/A_DWID; g0 = g0 + 1) begin + assign data_b_p_c[g0*A_DWID +: A_DWID] = mem[addr_b_eq_c + g0]; + always @ (posedge clk_b_i) begin + if(clk_en_b_i & wr_en_b_i) begin + mem[addr_b_eq_c + g0] <= data_b_nxt_c[g0*A_DWID +: A_DWID]; + end + end + end + end + /* + * READING AT PORT B + */ + wire [B_DWID-1:0] data_b_o_nxt_c; + for(g0 = 0; g0 < B_DWID/A_DWID; g0 = g0 + 1) begin + assign data_b_o_nxt_c [g0*A_DWID +: A_DWID] = mem[addr_b_eq_c + g0]; + end + + if(REGMODE_B == "noreg") begin : _NREG_B + always @ (posedge clk_b_i, posedge rst_b_c) begin + if(rst_b_c) begin + data_b_o <= {B_DWID{1'b0}}; + end + else begin + if(~wr_en_b_i & clk_en_b_i) begin + data_b_o <= data_b_o_nxt_c; + end + end + end + end + else begin : _REG_B + reg [B_DWID-1:0] dbuf_b_r; + always @ (posedge clk_b_i, posedge rst_b_c) begin + if(rst_b_c) begin + dbuf_b_r <= {B_DWID{1'b0}}; + data_b_o <= {B_DWID{1'b0}}; + end + else begin + data_b_o <= dbuf_b_r; + if(~wr_en_b_i) begin + dbuf_b_r <= data_b_o_nxt_c; + end + end + end + end +end + +function [31:0] roundUP; + input [31:0] dividend; + input [31:0] divisor; + begin + if(divisor == 1) begin + roundUP = dividend; + end + else if(divisor == dividend) begin + roundUP = 1; + end + else begin + roundUP = dividend/divisor + (((dividend % divisor) == 0) ? 0 : 1); + end + end +endfunction + +function [31:0] clog2; + input [31:0] value; + reg [31:0] num; + begin + num = value - 1; + for (clog2=0; num>0; clog2=clog2+1) num = num>>1; + end +endfunction + +endmodule +`endif \ No newline at end of file diff --git a/fpga/source/generated/palette_ram/testbench/pdp_master.v b/fpga/source/generated/palette_ram/testbench/pdp_master.v new file mode 100644 index 0000000..225563f --- /dev/null +++ b/fpga/source/generated/palette_ram/testbench/pdp_master.v @@ -0,0 +1,326 @@ +`ifndef PDP_MASTER +`define PDP_MASTER + +`timescale 1 ns / 1 ps + +module pdp_master # ( + parameter WADDR_DEPTH = 1024, + parameter WADDR_WIDTH = clog2(WADDR_DEPTH), + parameter WDATA_WIDTH = 18, + parameter RADDR_DEPTH = 1024, + parameter RADDR_WIDTH = clog2(RADDR_DEPTH), + parameter RDATA_WIDTH = 18, + parameter REGMODE = "reg", + parameter RESETMODE = "sync", + parameter INIT_FILE = "none", + parameter INIT_FILE_FORMAT = "binary", + parameter INIT_MODE = "none", + parameter BYTE_ENABLE = 1, + parameter BYTE_SIZE = 9, + parameter BYTE_WIDTH = WDATA_WIDTH/BYTE_SIZE, + parameter ECC_ENABLE = 0, + parameter OUTPUT_CLK_EN = 0, + parameter BYTE_ENABLE_POL = "active-high" +)( + input wr_clk_i, + input rd_clk_i, + input rst_i, + output reg rst_o, + + output reg wr_clk_en_o, + output rd_clk_en_o, + output rd_out_clk_en_o, + + output reg wr_en_o, + output reg [WDATA_WIDTH-1:0] wr_data_o, + output reg [WADDR_WIDTH-1:0] wr_addr_o, + output reg rd_en_o, + output reg [RADDR_WIDTH-1:0] rd_addr_o, + output reg [BYTE_WIDTH-1:0] ben_o, + + input [RDATA_WIDTH-1:0] rd_data_dut_i, + input [RDATA_WIDTH-1:0] rd_data_ref_i, + input one_err_det_i, + input two_err_det_i +); + +genvar g0; +integer i0, i1; + +reg [WADDR_WIDTH-1:0] waddr_rand_r; +reg [RADDR_WIDTH-1:0] raddr_rand_r; + +wire [WADDR_WIDTH-1:0] waddr_rand_nxt_c; +wire [RADDR_WIDTH-1:0] raddr_rand_nxt_c; + +reg [1023:0] rdat0; +reg [1023:0] rdat1; +reg [1023:0] rdat2; + +reg rd_valid_r; +reg chk_r; +reg rd_en_r; +reg rst_chk_r; + +realtime timestamp; + +assign waddr_rand_nxt_c = (rdat0[WADDR_WIDTH-1:0] > WADDR_DEPTH) ? (rdat0[WADDR_WIDTH-1:0] - WADDR_DEPTH): rdat0[WADDR_WIDTH-1:0]; +assign raddr_rand_nxt_c = (rdat2[RADDR_WIDTH-1:0] > RADDR_DEPTH) ? (rdat2[RADDR_WIDTH-1:0] - RADDR_DEPTH): rdat2[RADDR_WIDTH-1:0]; + +assign rd_clk_en_o = (REGMODE == "reg") ? rd_en_o | rd_en_r : rd_en_o; +assign rd_out_clk_en_o = rd_en_o | rd_en_r; + +always @ (posedge rd_clk_i or posedge rst_i) + if(rst_i) + rd_en_r <= 1'b0; + else + rd_en_r <= rd_en_o; + +for (g0 = 0; g0 < 32; g0 = g0 + 1) begin + always @ (posedge wr_clk_i) begin + rdat0[g0*32 +: 32] <= $urandom_range({32{1'b0}}, {32{1'b1}}); + rdat1[g0*32 +: 32] <= $urandom_range({32{1'b0}}, {32{1'b1}}); + end + always @ (posedge rd_clk_i) begin + rdat2[g0*32 +: 32] <= $urandom_range({32{1'b0}}, {32{1'b1}}); + end +end + +initial begin + rst_o <= 1'b0; + wr_clk_en_o <= 1'b0; + wr_en_o <= 1'b0; + wr_data_o <= {WDATA_WIDTH{1'b0}}; + wr_addr_o <= {WADDR_WIDTH{1'b0}}; + rd_en_o <= 1'b0; + rd_addr_o <= {RADDR_WIDTH{1'b0}}; + ben_o <= {BYTE_WIDTH{1'b0}}; + waddr_rand_r <= {WADDR_WIDTH{1'b0}}; + raddr_rand_r <= {RADDR_WIDTH{1'b0}}; + rdat0 <= {1024{1'b0}}; + rdat1 <= {1024{1'b0}}; + rdat2 <= {1024{1'b0}}; + chk_r <= 1'b1; + rst_chk_r <= 1'b0; + $timeformat(-9, 2, " ns", 20); +end + +initial begin + @(posedge rst_i); + @(posedge wr_clk_i); + wr_clk_en_o <= 1'b1; + @(posedge wr_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + $display("-----------------------------------------------------"); + $display("----------- Pseudo-Dual Port Memory Test ------------"); + if(INIT_MODE == "mem_file") begin + $display("------------- Start Initialization Test -------------"); + rd_en_o <= 1'b1; + for(i0 = 0; i0 < RADDR_DEPTH; i0 = i0 + 1) begin + read_data(i0); + end + rd_en_o <= 1'b0; + end + @(posedge rd_clk_i); + $display("------------- Start Random Access Test --------------"); + fork + begin + for(i0 = 0; i0 < 2*WADDR_DEPTH; i0 = i0 + 1) begin + write_data(waddr_rand_nxt_c, rdat1[WDATA_WIDTH-1:0], rdat1[BYTE_WIDTH-1:0]); + random_write_enable(); + end + wr_en_o <= 1'b0; + end + begin + for(i1 = 0; i1 < 2*RADDR_DEPTH; i1 = i1 + 1) begin + read_data(raddr_rand_nxt_c); + random_read_enable(); + end + rd_en_o <= 1'b0; + end + join + @(posedge wr_clk_i); + @(posedge rd_clk_i); + @(posedge wr_clk_i); + $display("-------------- Start Memory Sweep Test --------------"); + wr_en_o <= 1'b1; + for(i0 = 0; i0 < WADDR_DEPTH; i0 = i0 + 1) begin + write_data(i0, rdat1[WDATA_WIDTH-1:0], rdat1[BYTE_WIDTH-1:0]); + end + wr_en_o <= 1'b0; + @(posedge wr_clk_i); + @(posedge rd_clk_i); + rd_en_o <= 1'b1; + for(i0 = 0; i0 < RADDR_DEPTH; i0 = i0 + 1) begin + read_data(i0); + end + rd_en_o <= 1'b0; + @(posedge rd_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + $display("-------------------- Reset Test ---------------------"); + rst_chk_r = 1'b1; + @(negedge rd_clk_i); + rst_o <= 1'b1; + if(REGMODE == "reg") begin + rd_en_o <= 1'b1; + end + @(negedge rd_clk_i); + @(negedge rd_clk_i); + rst_o <= 1'b0; + if(REGMODE == "reg") begin + rd_en_o <= 1'b0; + end + @(posedge rd_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + if(chk_r) begin + $display("-----------------------------------------------------"); + $display("----------------- SIMULATION PASSED -----------------"); + $display("-----------------------------------------------------"); + end + else begin + $display("-----------------------------------------------------"); + $display("!!!!!!!!!!!!!!!!! SIMULATION FAILED !!!!!!!!!!!!!!!!!"); + $display("-----------------------------------------------------"); + end + $display("Total Simulation Time : %t", $time); + $finish; +end + +if(REGMODE == "reg") begin : _REG_CHECK + reg del1; + always @ (posedge rd_clk_i, posedge rst_i) begin + if(rst_i) begin + del1 <= 1'b0; + rd_valid_r <= 1'b0; + end + else begin + del1 <= rd_en_o; + rd_valid_r <= del1; + end + end +end +else begin : _NREG_CHECK + always @ (posedge rd_clk_i, posedge rst_i) begin + if(rst_i) begin + rd_valid_r <= 1'b0; + end + else begin + rd_valid_r <= rd_en_o; + end + end +end + +always @ (posedge rd_clk_i) begin + if(rd_valid_r) begin + if(rd_data_dut_i !== rd_data_ref_i) begin + $display("!! Read Data Error Occurred at : %t", $time); + chk_r <= 1'b0; + end + end +end + +if(REGMODE == "reg") begin : _RESET_CHECK + if(RESETMODE == "sync") begin : _RESET_SYNC_CHECK + always @ (posedge rd_clk_i) begin + if(rst_i) begin + timestamp = $realtime; + #1; + if((rd_data_dut_i !== {RDATA_WIDTH{1'b0}}) && rst_chk_r) begin + $display("!! Reset Data Error Occurred at : %t", timestamp); + chk_r <= 1'b0; + end + end + end + end + else begin: _RESET_ASYNC_CHECK + always @ (posedge rd_clk_i, posedge rst_i) begin + if(rst_i) begin + timestamp = $realtime; + #1; + if((rd_data_dut_i !== {RDATA_WIDTH{1'b0}}) && rst_chk_r) begin + $display("!! Reset Data Error Occurred at : %t", timestamp); + chk_r <= 1'b0; + end + end + end + end +end +else begin: _RESET_NOREG_CHECK + reg [RDATA_WIDTH-1:0] rd_data_dut_r; + always @ (posedge rd_clk_i, posedge rst_i) begin + if(rst_i) begin + timestamp = $realtime; + rd_data_dut_r = rd_data_dut_i; + @ (posedge rd_clk_i); + if((rd_data_dut_i !== rd_data_dut_r) && rst_chk_r) begin + $display("!! Reset Data Error Occurred at : %t", timestamp); + chk_r <= 1'b0; + end + end + end +end + +if(ECC_ENABLE == 1) begin: _BYTE_ENABLE_ERROR_DET + always @ (posedge rd_clk_i, posedge rst_i) begin + if(rst_i) begin + timestamp = $realtime; + if((one_err_det_i == 1) || (two_err_det_i == 1)) begin + $display("!! ECC Error Occurred at : %t", $realtime); + chk_r <= 1'b0; + end + end + end +end + +task write_data; + input [WADDR_WIDTH-1:0] wtb_addr_i; + input [WDATA_WIDTH-1:0] wtb_data_i; + input [BYTE_WIDTH-1:0] wtb_byte_i; + begin + wr_addr_o <= wtb_addr_i; + wr_data_o <= wtb_data_i; + ben_o <= wtb_byte_i; + @(posedge wr_clk_i); + end +endtask + +task random_write_enable; + begin + wr_en_o <= $urandom_range({1'b0}, {1'b1}); + @(posedge wr_clk_i); + end +endtask + +task read_data; + input [RADDR_WIDTH-1:0] rtb_addr_i; + begin + rd_addr_o <= rtb_addr_i; + @(posedge rd_clk_i); + end +endtask + +task random_read_enable; + begin + rd_en_o <= $urandom_range({1'b0}, {1'b1}); + @(posedge rd_clk_i); + end +endtask + +function [31:0] clog2; + input [31:0] value; + reg [31:0] num; + begin + num = value - 1; + for (clog2=0; num>0; clog2=clog2+1) num = num>>1; + end +endfunction + +endmodule +`endif \ No newline at end of file diff --git a/fpga/source/generated/palette_ram/testbench/tb_top.v b/fpga/source/generated/palette_ram/testbench/tb_top.v old mode 100755 new mode 100644 index 74780dd..3fae197 --- a/fpga/source/generated/palette_ram/testbench/tb_top.v +++ b/fpga/source/generated/palette_ram/testbench/tb_top.v @@ -52,6 +52,10 @@ // Changes Made : Initial version of testbench for ram_dp // ============================================================================= +`include "mem_model.v" +`include "pdp_master.v" +`include "clk_rst_gen.v" + `ifndef TB_TOP `define TB_TOP @@ -65,476 +69,146 @@ module tb_top(); `include "dut_params.v" -localparam CLK_FREQ = (FAMILY == "iCE40UP") ? 40 : 10; -localparam RESET_CNT = (FAMILY == "iCE40UP") ? 140 : 35; - -reg chk_init = 1'b1; -reg chk_norm = 1'b1; - -reg wr_clk_i; -reg rd_clk_i; -reg rst_i; -reg wr_clk_en_i; -reg rd_clk_en_i; - -reg rd_out_clk_en_i; - -reg wr_en_i; -reg [WDATA_WIDTH-1:0] wr_data_i; -reg [WADDR_WIDTH-1:0] wr_addr_i; -reg rd_en_i; -reg [RADDR_WIDTH-1:0] rd_addr_i; -reg [BYTE_WIDTH-1:0] ben_i; - -wire [RDATA_WIDTH-1:0] rd_data_o; - -reg [255:0] data_in = {256{1'b0}}; - -`ifdef LIFCL - // ---------------------------- - // LIFCL GSR instance - // ---------------------------- - reg CLK_GSR = 0; - reg USER_GSR = 1; - wire GSROUT; - - initial begin - forever begin - #5; - CLK_GSR = ~CLK_GSR; - end - end - - GSR GSR_INST ( - .GSR_N(USER_GSR), - .CLK(CLK_GSR) - ); +localparam CLK_FREQ = (FAMILY == "iCE40UP") ? 40 : 10; +localparam RESET_CNT = (FAMILY == "iCE40UP") ? 140 : 100; +localparam DIFF_CLOCK = 1; + +wire wr_clk_i; +wire rd_clk_i; +wire rst_i; +wire wr_clk_en_i; +wire rd_clk_en_i; +wire rd_out_clk_en_i; + +wire wr_en_i; +wire [WDATA_WIDTH-1:0] wr_data_i; +wire [WADDR_WIDTH-1:0] wr_addr_i; +wire rd_en_i; +wire [RADDR_WIDTH-1:0] rd_addr_i; +wire [BYTE_WIDTH-1:0] ben_i; + +wire [RDATA_WIDTH-1:0] rd_data_o; +wire one_err_det_o; +wire two_err_det_o; + +wire [RDATA_WIDTH-1:0] rd_data_ref; + +wire rst; +wire rst_o; + +assign rst_i = rst | rst_o; + +// ---------------------------- +// GSR instance +// ---------------------------- +`ifndef iCE40UP + GSR GSR_INST ( .GSR_N(1'b1), .CLK(1'b0)); `endif `include "dut_inst.v" -genvar din0; -begin : data_generate - for(din0 = 0; din0 < 8; din0 = din0 + 1) begin - always @ (posedge wr_clk_i) begin - data_in[din0*32+31:din0*32] <= $urandom_range({32{1'b0}}, {32{1'b1}}); - end - end -end - -initial begin - wr_clk_en_i <= 1'b1; - rd_clk_en_i <= 1'b1; - rd_out_clk_en_i <= 1'b1; - wr_en_i <= 1'b0; - rd_en_i <= 1'b0; - ben_i <= {BYTE_WIDTH{1'b1}}; - wr_addr_i <= 'h0; - rd_addr_i <= 'h0; - wr_data_i <= data_in[WDATA_WIDTH-1:0]; -end - -initial begin - wr_clk_i = 1'b0; - forever #CLK_FREQ wr_clk_i = ~wr_clk_i; -end - -initial begin - rd_clk_i = 1'b0; - forever #CLK_FREQ rd_clk_i = ~rd_clk_i; -end - -initial begin - rst_i = 1'b1; - #RESET_CNT; - rst_i = 1'b0; -end - -localparam INIT_EN = (INIT_MODE == "none") ? 0 : 1; -localparam WRITE_EN = 1; -localparam READ_EN = 1; -localparam TARGET_WRITE = WADDR_DEPTH; -localparam TARGET_READ = RADDR_DEPTH; - -localparam [1:0] SM_IDLE = 2'b00; -localparam [1:0] SM_INIT_MODE = 2'b01; -localparam [1:0] SM_WRITE_MODE = 2'b10; -localparam [1:0] SM_READ_MODE = 2'b11; - -reg [1:0] current_state; -reg [1:0] prev_state = SM_IDLE; -reg [1:0] prev2_state = SM_IDLE; - -always @ (posedge rd_clk_i) begin - prev_state <= current_state; - prev2_state <= prev_state; -end - -integer i0, i1; -initial begin - current_state <= (INIT_EN == 1) ? SM_INIT_MODE : SM_WRITE_MODE; - @(negedge rst_i); - @(posedge wr_clk_i); - if(current_state == SM_INIT_MODE) begin - rd_addr_i <= 'h0; - rd_en_i <= 1'b1; - for(i1 = 0; i1 < TARGET_READ; i1 = i1 + 1) begin - @(posedge rd_clk_i); - rd_addr_i <= rd_addr_i + 1; - end - current_state <= SM_WRITE_MODE; - @(posedge rd_clk_i); - if(REGMODE == "noreg") @(posedge rd_clk_i); - rd_en_i <= 1'b0; - if(chk_init == 1'b1) begin - $display("-----------------------------------------------------"); - $display("------------ MEMORY INITIALIZATION PASSED -----------"); - $display("-----------------------------------------------------"); - end - else begin - $display("-----------------------------------------------------"); - $display("!!!!!!!!!!!! MEMORY INITIALIZATION FAILED !!!!!!!!!!!"); - $display("-----------------------------------------------------"); - end - end - if(current_state == SM_WRITE_MODE) begin - wr_addr_i <= 'h0; - wr_data_i <= data_in[WDATA_WIDTH-1:0]; - wr_en_i <= 1'b1; - for(i1 = 0; i1 < TARGET_WRITE; i1 = i1 + 1) begin - @(posedge wr_clk_i); - wr_addr_i <= wr_addr_i + 1'b1; - wr_data_i <= data_in[WDATA_WIDTH-1:0]; - if(BYTE_ENABLE == 1) begin - ben_i <= (ben_i == {BYTE_WIDTH{1'b1}}) ? {{(BYTE_WIDTH-1){1'b0}}, 1'b1} : - (ben_i == {BYTE_WIDTH{1'b0}}) ? {BYTE_WIDTH{1'b1}} : (ben_i << 1); - end - end - wr_en_i <= 1'b0; - current_state <= SM_READ_MODE; - @(posedge wr_clk_i); - end - if(current_state == SM_READ_MODE) begin - rd_addr_i <= 'h0; - rd_en_i <= 1'b1; - for(i1 = 0; i1 < TARGET_READ; i1 = i1 + 1) begin - @(posedge rd_clk_i); - rd_addr_i <= rd_addr_i + 1; - end - @(posedge rd_clk_i); - current_state <= SM_IDLE; - if(REGMODE == "reg") @(posedge rd_clk_i); - end - if(chk_norm == 1'b1) begin - $display("-----------------------------------------------------"); - $display("----------------- SIMULATION PASSED -----------------"); - $display("-----------------------------------------------------"); - end - else begin - $display("-----------------------------------------------------"); - $display("!!!!!!!!!!!!!!!!! SIMULATION FAILED !!!!!!!!!!!!!!!!!"); - $display("-----------------------------------------------------"); - end - $finish; -end - -genvar i_1; -integer mem_i0; -if (INIT_EN == 1) begin : INIT_MODE_CHECKER - reg [WDATA_WIDTH-1:0] mem_init [2**WADDR_WIDTH-1:0]; - initial begin - if (INIT_MODE == "mem_file") begin - if (INIT_FILE_FORMAT == "hex") begin - $readmemh(INIT_FILE, mem_init, 0, WADDR_DEPTH-1); - end - else begin - $readmemb(INIT_FILE, mem_init, 0, WADDR_DEPTH-1); - end - end - else begin - for(mem_i0 = 0; mem_i0 < WADDR_DEPTH; mem_i0 = mem_i0 + 1) begin - mem_init[mem_i0] = (INIT_MODE == "all_one") ? {WDATA_WIDTH{1'b1}} : {WDATA_WIDTH{1'b0}}; - end - end - end - - localparam Q_WOR = WDATA_WIDTH/RDATA_WIDTH; - localparam Q_ROW = RDATA_WIDTH/WDATA_WIDTH; - - wire [1:0] state_check = (REGMODE == "noreg") ? prev_state : prev2_state; - - if(WDATA_WIDTH == RDATA_WIDTH) begin : W_EQ_R - wire [WADDR_WIDTH-1:0] rd_addr_chk_w = rd_addr_i; - reg [WADDR_WIDTH-1:0] rd_addr_p = {WADDR_WIDTH{1'b0}}; - reg rd_en_p_r = 1'b0; - wire [WDATA_WIDTH-1:0] sel_mem = (INIT_MODE == "mem_file") ? mem_init[rd_addr_p] : - (INIT_MODE == "all_one") ? {WDATA_WIDTH{1'b1}} : {WDATA_WIDTH{1'b0}}; - - if(REGMODE == "noreg") begin - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_chk_w; - rd_en_p_r <= rd_en_i; - end - end - else begin - reg [WADDR_WIDTH-1:0] rd_addr_p2 = {WADDR_WIDTH{1'b0}}; - reg rd_en_p2_r = 1'b0; - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_p2; - rd_en_p_r <= rd_en_p2_r; - rd_addr_p2 <= rd_addr_chk_w; - rd_en_p2_r <= rd_en_i; - end - end - - always @ (posedge rd_clk_i) begin - if(rd_en_p_r & state_check == SM_INIT_MODE) begin - if(sel_mem != rd_data_o) begin - $display("Expected DATA = %h, Read DATA = %h", sel_mem, rd_data_o); - chk_init = 1'b0; - end - end - end - end - else if(WDATA_WIDTH > RDATA_WIDTH) begin : W_G_R - wire [WADDR_WIDTH-1:0] rd_addr_chk_w = rd_addr_i[RADDR_WIDTH-1:RADDR_WIDTH-WADDR_WIDTH]; - wire [RADDR_WIDTH-(WADDR_WIDTH+1):0] rd_addr_sel_w = rd_addr_i[RADDR_WIDTH-(WADDR_WIDTH+1):0]; - reg [WADDR_WIDTH-1:0] rd_addr_p = {WADDR_WIDTH{1'b0}}; - reg [RADDR_WIDTH-(WADDR_WIDTH+1):0] rd_addr_sel_r = {(RADDR_WIDTH-WADDR_WIDTH){1'b0}}; - reg rd_en_p_r = 1'b0; - wire [WDATA_WIDTH-1:0] sel_mem = (INIT_MODE == "mem_file") ? mem_init[rd_addr_p] : - (INIT_MODE == "all_one") ? {WDATA_WIDTH{1'b1}} : {WDATA_WIDTH{1'b0}}; - wire [RDATA_WIDTH-1:0] cmp_mem = sel_mem >> (RDATA_WIDTH*rd_addr_sel_r); - - if(REGMODE == "noreg") begin - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_chk_w; - rd_addr_sel_r <= rd_addr_sel_w; - rd_en_p_r <= rd_en_i; - end - end - else begin - reg [WADDR_WIDTH-1:0] rd_addr_p2 = {WADDR_WIDTH{1'b0}}; - reg [RADDR_WIDTH-(WADDR_WIDTH+1):0] rd_addr_sel2_r = {(RADDR_WIDTH-WADDR_WIDTH){1'b0}}; - reg rd_en_p2_r = 1'b0; - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_p2; - rd_addr_sel_r <= rd_addr_sel2_r; - rd_en_p_r <= rd_en_p2_r; - rd_addr_p2 <= rd_addr_chk_w; - rd_addr_sel2_r <= rd_addr_sel_w; - rd_en_p2_r <= rd_en_i; - end - end - always @ (posedge rd_clk_i) begin - if(rd_en_p_r & state_check == SM_INIT_MODE) begin - if(cmp_mem != rd_data_o) begin - $display("Expected DATA = %h, Read DATA = %h", cmp_mem, rd_data_o); - chk_init = 1'b0; - end - end - end - end - else begin : W_L_R - wire [WADDR_WIDTH-1:0] rd_addr_chk_w; - assign rd_addr_chk_w [WADDR_WIDTH-1:WADDR_WIDTH-RADDR_WIDTH] = rd_addr_i; - assign rd_addr_chk_w [(WADDR_WIDTH-RADDR_WIDTH)-1:0] = {(WADDR_WIDTH-RADDR_WIDTH){1'b0}}; - reg [WADDR_WIDTH-1:0] rd_addr_p = {WADDR_WIDTH{1'b0}}; - reg rd_en_p_r; - wire [RDATA_WIDTH-1:0] cmp_mem; - for(i_1 = 0; i_1 < Q_ROW; i_1 = i_1 + 1) begin - wire [WDATA_WIDTH-1:0] tmem_read = (INIT_MODE == "mem_file") ? mem_init[rd_addr_p + i_1] : - (INIT_MODE == "all_one") ? {WDATA_WIDTH{1'b1}} : {WDATA_WIDTH{1'b0}}; - assign cmp_mem[i_1*WDATA_WIDTH+WDATA_WIDTH-1:i_1*WDATA_WIDTH] = tmem_read; - end - if(REGMODE == "noreg") begin - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_chk_w; - rd_en_p_r <= rd_en_i; - end - end - else begin - reg [WADDR_WIDTH-1:0] rd_addr_p2 = {WADDR_WIDTH{1'b0}}; - reg rd_en_p2_r = 1'b0; - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_p2; - rd_en_p_r <= rd_en_p2_r; - rd_addr_p2 <= rd_addr_chk_w; - rd_en_p2_r <= rd_en_i; - end - end - always @ (posedge rd_clk_i) begin - if(rd_en_p_r & state_check == SM_INIT_MODE) begin - if(cmp_mem != rd_data_o) begin - $display("Expected DATA = %h, Read DATA = %h", cmp_mem, rd_data_o); - chk_init = 1'b0; - end - end - end - end -end - -genvar ben0; -integer mem_normi0; -begin : MEM_NORMAL_OPERATION - reg [WDATA_WIDTH-1:0] mem_norm [2**WADDR_WIDTH-1:0]; - reg [BYTE_WIDTH-1:0] byte_en_rec [2**WADDR_WIDTH-1:0]; - - initial begin - if (INIT_MODE == "mem_file" && INIT_FILE != "none") begin - if (INIT_FILE_FORMAT == "hex") begin - $readmemh(INIT_FILE, mem_norm, 0, WADDR_DEPTH-1); - end - else begin - $readmemb(INIT_FILE, mem_norm, 0, WADDR_DEPTH-1); - end - end - else begin - for(mem_normi0 = 0; mem_normi0 < 2**WADDR_WIDTH; mem_normi0 = mem_normi0 + 1) begin - mem_norm[mem_normi0] = (INIT_MODE == "all_one") ? {WDATA_WIDTH{1'b1}} : {WDATA_WIDTH{1'b0}}; - end - end - end - - if(BYTE_ENABLE == 0) begin - always @ (posedge wr_clk_i) begin - if(current_state == SM_WRITE_MODE & wr_en_i) begin - mem_norm[wr_addr_i] <= wr_data_i; - end - end - end - else begin - localparam BYTE_SIZE = (WDATA_WIDTH % 9 == 0) ? 9 : 8; - localparam EQUIV_LEN = (WDATA_WIDTH/BYTE_SIZE); - wire [BYTE_SIZE-1:0] act_wr_data [EQUIV_LEN-1:0]; - wire [WDATA_WIDTH-1:0] pref_data = mem_norm[wr_addr_i]; - for(ben0 = 0; ben0 < EQUIV_LEN; ben0 = ben0 + 1) begin - assign act_wr_data [ben0] = (ben_i[ben0] == 1'b1) ? (wr_data_i[ben0*BYTE_SIZE+BYTE_SIZE-1:ben0*BYTE_SIZE]) : - (pref_data[ben0*BYTE_SIZE+BYTE_SIZE-1:ben0*BYTE_SIZE]); - end - wire [WDATA_WIDTH-1:0] wr_data_t_w; - for(ben0 = 0; ben0 < EQUIV_LEN; ben0 = ben0 + 1) begin - assign wr_data_t_w[ben0*BYTE_SIZE+BYTE_SIZE-1:ben0*BYTE_SIZE] = act_wr_data[ben0]; - end - always @ (posedge wr_clk_i) begin - if(current_state == SM_WRITE_MODE & wr_en_i) begin - mem_norm[wr_addr_i] <= wr_data_t_w; - end - end - end - - localparam Q_WOR = WDATA_WIDTH/RDATA_WIDTH; - localparam Q_ROW = RDATA_WIDTH/WDATA_WIDTH; - - wire [1:0] state_check = (REGMODE == "noreg") ? prev_state : prev2_state; - - if(WDATA_WIDTH == RDATA_WIDTH) begin : W_EQ_R - wire [WADDR_WIDTH-1:0] rd_addr_chk_w = rd_addr_i; - reg [WADDR_WIDTH-1:0] rd_addr_p = {WADDR_WIDTH{1'b0}}; - reg rd_en_p_r = 1'b0; - wire [WDATA_WIDTH-1:0] sel_mem = mem_norm[rd_addr_p]; - - if(REGMODE == "noreg") begin - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_chk_w; - rd_en_p_r <= rd_en_i; - end - end - else begin - reg [WADDR_WIDTH-1:0] rd_addr_p2 = {WADDR_WIDTH{1'b0}}; - reg rd_en_p2_r = 1'b0; - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_p2; - rd_en_p_r <= rd_en_p2_r; - rd_addr_p2 <= rd_addr_chk_w; - rd_en_p2_r <= rd_en_i; - end - end - - always @ (posedge rd_clk_i) begin - if(rd_en_p_r & state_check == SM_READ_MODE) begin - if(sel_mem != rd_data_o) begin - $display("Expected DATA = %h, Read DATA = %h", sel_mem, rd_data_o); - chk_norm = 1'b0; - end - end - end - end - else if(WDATA_WIDTH > RDATA_WIDTH) begin : W_G_R - wire [WADDR_WIDTH-1:0] rd_addr_chk_w = rd_addr_i[RADDR_WIDTH-1:RADDR_WIDTH-WADDR_WIDTH]; - wire [RADDR_WIDTH-(WADDR_WIDTH+1):0] rd_addr_sel_w = rd_addr_i[RADDR_WIDTH-(WADDR_WIDTH+1):0]; - reg [WADDR_WIDTH-1:0] rd_addr_p = {WADDR_WIDTH{1'b0}}; - reg [RADDR_WIDTH-(WADDR_WIDTH+1):0] rd_addr_sel_r = {(RADDR_WIDTH-WADDR_WIDTH){1'b0}}; - reg rd_en_p_r = 1'b0; - wire [WDATA_WIDTH-1:0] sel_mem = mem_norm[rd_addr_p]; - wire [RDATA_WIDTH-1:0] cmp_mem = sel_mem >> (RDATA_WIDTH*rd_addr_sel_r); - - if(REGMODE == "noreg") begin - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_chk_w; - rd_addr_sel_r <= rd_addr_sel_w; - rd_en_p_r <= rd_en_i; - end - end - else begin - reg [WADDR_WIDTH-1:0] rd_addr_p2 = {WADDR_WIDTH{1'b0}}; - reg [RADDR_WIDTH-(WADDR_WIDTH+1):0] rd_addr_sel2_r = {(RADDR_WIDTH-WADDR_WIDTH){1'b0}}; - reg rd_en_p2_r = 1'b0; - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_p2; - rd_addr_sel_r <= rd_addr_sel2_r; - rd_en_p_r <= rd_en_p2_r; - rd_addr_p2 <= rd_addr_chk_w; - rd_addr_sel2_r <= rd_addr_sel_w; - rd_en_p2_r <= rd_en_i; - end - end - always @ (posedge rd_clk_i) begin - if(rd_en_p_r & state_check == SM_READ_MODE) begin - if(cmp_mem != rd_data_o) begin - $display("Expected DATA = %h, Read DATA = %h", cmp_mem, rd_data_o); - chk_norm = 1'b0; - end - end - end - end - else begin : W_L_R - wire [WADDR_WIDTH-1:0] rd_addr_chk_w; - assign rd_addr_chk_w [WADDR_WIDTH-1:WADDR_WIDTH-RADDR_WIDTH] = rd_addr_i; - assign rd_addr_chk_w [(WADDR_WIDTH-RADDR_WIDTH)-1:0] = {(WADDR_WIDTH-RADDR_WIDTH){1'b0}}; - reg [WADDR_WIDTH-1:0] rd_addr_p = {WADDR_WIDTH{1'b0}}; - reg rd_en_p_r; - wire [RDATA_WIDTH-1:0] cmp_mem; - for(i_1 = 0; i_1 < Q_ROW; i_1 = i_1 + 1) begin - wire [WDATA_WIDTH-1:0] tmem_read = mem_norm[rd_addr_p + i_1]; - assign cmp_mem[i_1*WDATA_WIDTH+WDATA_WIDTH-1:i_1*WDATA_WIDTH] = tmem_read; - end - if(REGMODE == "noreg") begin - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_chk_w; - rd_en_p_r <= rd_en_i; - end +pdp_master # ( + .WADDR_DEPTH (WADDR_DEPTH ), + .WADDR_WIDTH (WADDR_WIDTH ), + .WDATA_WIDTH (WDATA_WIDTH ), + .RADDR_DEPTH (RADDR_DEPTH ), + .RADDR_WIDTH (RADDR_WIDTH ), + .RDATA_WIDTH (RDATA_WIDTH ), + .REGMODE (REGMODE ), + .RESETMODE (RESETMODE ), + .INIT_FILE (INIT_FILE ), + .INIT_FILE_FORMAT (INIT_FILE_FORMAT), + .INIT_MODE (INIT_MODE ), + .BYTE_ENABLE (BYTE_ENABLE ), + .BYTE_SIZE (BYTE_SIZE ), + .BYTE_WIDTH (BYTE_WIDTH ), + .ECC_ENABLE (ECC_ENABLE ), + .OUTPUT_CLK_EN (OUTPUT_CLK_EN ) +) pdp_ctrl ( + .wr_clk_i (wr_clk_i), + .rd_clk_i (rd_clk_i), + .rst_i (rst_i), + .rst_o (rst_o), + .wr_clk_en_o (wr_clk_en_i), + .rd_clk_en_o (rd_clk_en_i), + .rd_out_clk_en_o (rd_out_clk_en_i), + + .wr_en_o (wr_en_i), + .wr_data_o (wr_data_i), + .wr_addr_o (wr_addr_i), + .rd_en_o (rd_en_i), + .rd_addr_o (rd_addr_i), + .ben_o (ben_i), + + .rd_data_dut_i (rd_data_o), + .rd_data_ref_i (rd_data_ref), + .one_err_det_i (one_err_det_o), + .two_err_det_i (two_err_det_o) +); + +clk_rst_gen # ( + .CLK_FREQ (CLK_FREQ ), + .RESET_CNT (RESET_CNT ), + .DIFF_CLOCK (DIFF_CLOCK) +) clk_gen ( + .clk1 (wr_clk_i), + .clk2 (rd_clk_i), + .rst (rst) +); + +mem_model # ( + .FAMILY (FAMILY), + .A_DEPTH (WADDR_DEPTH), + .A_AWID (WADDR_WIDTH), + .A_DWID (WDATA_WIDTH), + .B_DEPTH (RADDR_DEPTH), + .B_AWID (RADDR_WIDTH), + .B_DWID (RDATA_WIDTH), + .INIT_MODE (INIT_MODE), + .INIT_FORMAT (INIT_FILE_FORMAT), + .INIT_FILE (INIT_FILE), + .BEN_WID (BYTE_SIZE), + .A_BDWID (BYTE_WIDTH), + .BYTE_EN_A (BYTE_ENABLE), + .BYTE_EN_B (0), + .REGMODE_B (REGMODE) +) mem0_ref ( + .clk_a_i (wr_clk_i), + .clk_en_a_i (wr_clk_en_i & wr_en_i), + .rst_a_i (rst_i), + .wr_en_a_i (1'b1), + .addr_a_i (wr_addr_i), + .data_a_i (wr_data_i), + .ben_a_i (ben_i), + + .data_a_o (), + + .clk_b_i (rd_clk_i), + .clk_en_b_i (rd_clk_en_i & rd_en_i), + .rst_b_i (rst_i), + .wr_en_b_i (1'b0), + .addr_b_i (rd_addr_i), + .data_b_i ({RDATA_WIDTH{1'b0}}), + .ben_b_i ({roundUP(RDATA_WIDTH, BYTE_SIZE){1'b0}}), + + .data_b_o (rd_data_ref) +); + +function [31:0] roundUP; + input [31:0] dividend; + input [31:0] divisor; + begin + if(divisor == 1) begin + roundUP = dividend; + end + else if(divisor == dividend) begin + roundUP = 1; end else begin - reg [WADDR_WIDTH-1:0] rd_addr_p2 = {WADDR_WIDTH{1'b0}}; - reg rd_en_p2_r = 1'b0; - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_p2; - rd_en_p_r <= rd_en_p2_r; - rd_addr_p2 <= rd_addr_chk_w; - rd_en_p2_r <= rd_en_i; - end - end - always @ (posedge rd_clk_i) begin - if(rd_en_p_r & state_check == SM_READ_MODE) begin - if(cmp_mem != rd_data_o) begin - $display("Expected DATA = %h, Read DATA = %h", cmp_mem, rd_data_o); - chk_norm = 1'b0; - end - end + roundUP = dividend/divisor + (((dividend % divisor) == 0) ? 0 : 1); end end -end +endfunction endmodule `endif diff --git a/fpga/source/generated/sprite_ram/constraints/sprite_ram.ldc b/fpga/source/generated/sprite_ram/constraints/sprite_ram.ldc index 2037dba..a443df9 100644 --- a/fpga/source/generated/sprite_ram/constraints/sprite_ram.ldc +++ b/fpga/source/generated/sprite_ram/constraints/sprite_ram.ldc @@ -1,7 +1,13 @@ set device "iCE40UP5K" -set speed "High-Performance_1.2V" -set architecture "iCE40UP" +set device_int "itpa08" set package "SG48" +set package_int "SG48" +set speed "High-Performance_1.2V" +set speed_int "6" +set operation "Industrial" +set family "iCE40UP" +set architecture "ice40tp" +set partnumber "iCE40UP5K-SG48I" set WRAPPER_INST "lscc_ram_dp_inst" set FAMILY "iCE40UP" set MEM_ID "sprite_ram" @@ -17,10 +23,12 @@ set OUTPUT_CLK_EN 0 set RESETMODE "sync" set BYTE_ENABLE 1 set BYTE_WIDTH 4 +set BYTE_SIZE 8 set ECC_ENABLE 0 set INIT_MODE "all_zero" set INIT_FILE "none" set INIT_FILE_FORMAT "hex" +set INIT_DATA_TYPE 1 set INIT_VALUE_00 "0x0000000000000000000000000000000000000000000000000000000000000000" set INIT_VALUE_01 "0x0000000000000000000000000000000000000000000000000000000000000000" set INIT_VALUE_02 "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -85,5 +93,69 @@ set INIT_VALUE_3C "0x00000000000000000000000000000000000000000000000000000000000 set INIT_VALUE_3D "0x0000000000000000000000000000000000000000000000000000000000000000" set INIT_VALUE_3E "0x0000000000000000000000000000000000000000000000000000000000000000" set INIT_VALUE_3F "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_40 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_41 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_42 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_43 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_44 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_45 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_46 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_47 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_48 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_49 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_4A "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_4B "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_4C "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_4D "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_4E "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_4F "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_50 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_51 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_52 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_53 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_54 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_55 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_56 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_57 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_58 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_59 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_5A "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_5B "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_5C "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_5D "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_5E "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_5F "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_60 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_61 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_62 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_63 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_64 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_65 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_66 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_67 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_68 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_69 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_6A "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_6B "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_6C "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_6D "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_6E "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_6F "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_70 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_71 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_72 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_73 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_74 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_75 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_76 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_77 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_78 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_79 "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_7A "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_7B "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_7C "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_7D "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_7E "0x0000000000000000000000000000000000000000000000000000000000000000" +set INIT_VALUE_7F "0x0000000000000000000000000000000000000000000000000000000000000000" diff --git a/fpga/source/generated/sprite_ram/rtl/sprite_ram.v b/fpga/source/generated/sprite_ram/rtl/sprite_ram.v index 38a53e3..76110e4 100644 --- a/fpga/source/generated/sprite_ram/rtl/sprite_ram.v +++ b/fpga/source/generated/sprite_ram/rtl/sprite_ram.v @@ -1,13 +1,14 @@ /******************************************************************************* - Verilog netlist generated by IPGEN Radiant Software (64-bit) 2.0.1.281.2 - Soft IP Version: 1.1.0 - Wed Apr 15 20:29:57 2020 + Verilog netlist generated by IPGEN Lattice Radiant Software (64-bit) + 2024.2.0.3.0 + Soft IP Version: 2.4.0 + 2025 01 08 20:20:24 *******************************************************************************/ /******************************************************************************* Wrapper Module generated per user settings. *******************************************************************************/ -module sprite_ram (wr_clk_i, +(* ORIG_MODULE_NAME="sprite_ram", LATTICE_IP_GENERATED="1" *) module sprite_ram (wr_clk_i, rd_clk_i, rst_i, wr_clk_en_i, @@ -46,10 +47,12 @@ module sprite_ram (wr_clk_i, .RESETMODE("sync"), .BYTE_ENABLE(1), .BYTE_WIDTH(4), + .BYTE_SIZE(8), .ECC_ENABLE(0), .INIT_MODE("all_zero"), .INIT_FILE("none"), .INIT_FILE_FORMAT("hex"), + .INIT_DATA_TYPE(1), .INIT_VALUE_00("0x0000000000000000000000000000000000000000000000000000000000000000"), .INIT_VALUE_01("0x0000000000000000000000000000000000000000000000000000000000000000"), .INIT_VALUE_02("0x0000000000000000000000000000000000000000000000000000000000000000"), @@ -113,7 +116,71 @@ module sprite_ram (wr_clk_i, .INIT_VALUE_3C("0x0000000000000000000000000000000000000000000000000000000000000000"), .INIT_VALUE_3D("0x0000000000000000000000000000000000000000000000000000000000000000"), .INIT_VALUE_3E("0x0000000000000000000000000000000000000000000000000000000000000000"), - .INIT_VALUE_3F("0x0000000000000000000000000000000000000000000000000000000000000000")) lscc_ram_dp_inst (.wr_clk_i(wr_clk_i), + .INIT_VALUE_3F("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_40("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_41("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_42("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_43("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_44("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_45("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_46("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_47("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_48("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_49("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_4A("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_4B("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_4C("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_4D("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_4E("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_4F("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_50("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_51("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_52("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_53("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_54("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_55("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_56("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_57("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_58("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_59("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_5A("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_5B("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_5C("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_5D("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_5E("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_5F("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_60("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_61("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_62("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_63("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_64("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_65("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_66("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_67("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_68("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_69("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_6A("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_6B("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_6C("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_6D("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_6E("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_6F("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_70("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_71("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_72("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_73("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_74("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_75("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_76("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_77("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_78("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_79("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_7A("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_7B("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_7C("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_7D("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_7E("0x0000000000000000000000000000000000000000000000000000000000000000"), + .INIT_VALUE_7F("0x0000000000000000000000000000000000000000000000000000000000000000")) lscc_ram_dp_inst (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), .wr_clk_en_i(wr_clk_en_i), @@ -135,7 +202,7 @@ endmodule // ============================================================================= // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // ----------------------------------------------------------------------------- -// Copyright (c) 2017 by Lattice Semiconductor Corporation +// Copyright (c) 2023 by Lattice Semiconductor Corporation // ALL RIGHTS RESERVED // ----------------------------------------------------------------------------- // @@ -184,13 +251,419 @@ endmodule // Mod. Date : // Changes Made : Initial release. // ============================================================================= -module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, +module sprite_ram_ipgen_lscc_ram_dp #(parameter MEM_ID = "MEM0", + parameter MEM_SIZE = "18,1024", + parameter FAMILY = "common", + parameter WADDR_DEPTH = 1024, + parameter WADDR_WIDTH = clog2(WADDR_DEPTH), + parameter WDATA_WIDTH = 18, + parameter RADDR_DEPTH = 1024, + parameter RADDR_WIDTH = clog2(RADDR_DEPTH), + parameter RDATA_WIDTH = 18, + parameter REGMODE = "reg", + parameter GSR = "enable", + parameter RESETMODE = "sync", + parameter RESET_RELEASE = "sync", + parameter INIT_FILE = "none", + parameter INIT_FILE_FORMAT = "binary", + parameter MODULE_TYPE = "ram_dp", + parameter INIT_DATA_TYPE = 1, + parameter INIT_MODE = "none", + parameter BYTE_ENABLE = 1, + parameter BYTE_SIZE = 9, + parameter BYTE_WIDTH = (WDATA_WIDTH / BYTE_SIZE), + parameter PIPELINES = 0, + parameter ECC_ENABLE = 0, + parameter OUTPUT_CLK_EN = 0, + parameter BYTE_ENABLE_POL = "active-high", + parameter INIT_VALUE_00 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_01 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_02 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_03 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_04 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_05 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_06 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_07 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_08 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_09 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_0A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_0B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_0C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_0D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_0E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_0F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_10 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_11 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_12 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_13 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_14 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_15 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_16 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_17 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_18 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_19 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_1A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_1B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_1C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_1D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_1E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_1F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_20 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_21 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_22 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_23 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_24 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_25 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_26 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_27 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_28 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_29 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_2A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_2B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_2C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_2D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_2E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_2F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_30 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_31 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_32 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_33 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_34 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_35 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_36 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_37 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_38 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_39 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_3A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_3B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_3C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_3D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_3E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_3F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_40 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_41 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_42 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_43 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_44 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_45 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_46 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_47 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_48 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_49 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_50 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_51 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_52 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_53 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_54 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_55 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_56 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_57 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_58 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_59 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_60 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_61 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_62 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_63 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_64 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_65 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_66 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_67 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_68 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_69 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_70 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_71 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_72 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_73 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_74 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_75 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_76 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_77 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_78 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_79 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7F = "0x0000000000000000000000000000000000000000000000000000000000000000") ( + // ----------------------------------------------------------------------------- + // Input/Output Ports + // ----------------------------------------------------------------------------- + input wr_clk_i, + input rd_clk_i, + input rst_i, + input wr_clk_en_i, + input rd_clk_en_i, + input rd_out_clk_en_i, + input wr_en_i, + input [(WDATA_WIDTH - 1):0] wr_data_i, + input [(WADDR_WIDTH - 1):0] wr_addr_i, + input rd_en_i, + input [(RADDR_WIDTH - 1):0] rd_addr_i, + input [(BYTE_WIDTH - 1):0] ben_i, + output [(RDATA_WIDTH - 1):0] rd_data_o, + output one_err_det_o, + output two_err_det_o) ; + localparam T_FAMILY = ((((((FAMILY == "LFD2NX") || (FAMILY == "LFCPNX")) || (FAMILY == "LFMXO5")) || (FAMILY == "UT24C")) || (FAMILY == "UT24CP")) ? "LIFCL" : (((FAMILY == "LN2-CT") || (FAMILY == "LN2-MH")) ? "LAV-AT" : FAMILY)) ; + localparam INIT_DATA = ((INIT_DATA_TYPE == 0) ? "STATIC" : "DYNAMIC") ; + sprite_ram_ipgen_lscc_ram_dp_main #(.MEM_ID(MEM_ID), + .MEM_SIZE(MEM_SIZE), + .FAMILY(T_FAMILY), + .WADDR_DEPTH(WADDR_DEPTH), + .WADDR_WIDTH(WADDR_WIDTH), + .WDATA_WIDTH(WDATA_WIDTH), + .RADDR_DEPTH(RADDR_DEPTH), + .RADDR_WIDTH(RADDR_WIDTH), + .RDATA_WIDTH(RDATA_WIDTH), + .REGMODE(REGMODE), + .GSR(GSR), + .RESETMODE(RESETMODE), + .RESET_RELEASE(RESET_RELEASE), + .INIT_FILE(INIT_FILE), + .INIT_FILE_FORMAT(INIT_FILE_FORMAT), + .MODULE_TYPE(MODULE_TYPE), + .INIT_DATA(INIT_DATA), + .INIT_MODE(INIT_MODE), + .BYTE_ENABLE(BYTE_ENABLE), + .BYTE_SIZE(BYTE_SIZE), + .BYTE_WIDTH(BYTE_WIDTH), + .PIPELINES(PIPELINES), + .ECC_ENABLE(ECC_ENABLE), + .OUTPUT_CLK_EN(OUTPUT_CLK_EN), + .BYTE_ENABLE_POL(BYTE_ENABLE_POL), + .INIT_VALUE_00(INIT_VALUE_00), + .INIT_VALUE_01(INIT_VALUE_01), + .INIT_VALUE_02(INIT_VALUE_02), + .INIT_VALUE_03(INIT_VALUE_03), + .INIT_VALUE_04(INIT_VALUE_04), + .INIT_VALUE_05(INIT_VALUE_05), + .INIT_VALUE_06(INIT_VALUE_06), + .INIT_VALUE_07(INIT_VALUE_07), + .INIT_VALUE_08(INIT_VALUE_08), + .INIT_VALUE_09(INIT_VALUE_09), + .INIT_VALUE_0A(INIT_VALUE_0A), + .INIT_VALUE_0B(INIT_VALUE_0B), + .INIT_VALUE_0C(INIT_VALUE_0C), + .INIT_VALUE_0D(INIT_VALUE_0D), + .INIT_VALUE_0E(INIT_VALUE_0E), + .INIT_VALUE_0F(INIT_VALUE_0F), + .INIT_VALUE_10(INIT_VALUE_10), + .INIT_VALUE_11(INIT_VALUE_11), + .INIT_VALUE_12(INIT_VALUE_12), + .INIT_VALUE_13(INIT_VALUE_13), + .INIT_VALUE_14(INIT_VALUE_14), + .INIT_VALUE_15(INIT_VALUE_15), + .INIT_VALUE_16(INIT_VALUE_16), + .INIT_VALUE_17(INIT_VALUE_17), + .INIT_VALUE_18(INIT_VALUE_18), + .INIT_VALUE_19(INIT_VALUE_19), + .INIT_VALUE_1A(INIT_VALUE_1A), + .INIT_VALUE_1B(INIT_VALUE_1B), + .INIT_VALUE_1C(INIT_VALUE_1C), + .INIT_VALUE_1D(INIT_VALUE_1D), + .INIT_VALUE_1E(INIT_VALUE_1E), + .INIT_VALUE_1F(INIT_VALUE_1F), + .INIT_VALUE_20(INIT_VALUE_20), + .INIT_VALUE_21(INIT_VALUE_21), + .INIT_VALUE_22(INIT_VALUE_22), + .INIT_VALUE_23(INIT_VALUE_23), + .INIT_VALUE_24(INIT_VALUE_24), + .INIT_VALUE_25(INIT_VALUE_25), + .INIT_VALUE_26(INIT_VALUE_26), + .INIT_VALUE_27(INIT_VALUE_27), + .INIT_VALUE_28(INIT_VALUE_28), + .INIT_VALUE_29(INIT_VALUE_29), + .INIT_VALUE_2A(INIT_VALUE_2A), + .INIT_VALUE_2B(INIT_VALUE_2B), + .INIT_VALUE_2C(INIT_VALUE_2C), + .INIT_VALUE_2D(INIT_VALUE_2D), + .INIT_VALUE_2E(INIT_VALUE_2E), + .INIT_VALUE_2F(INIT_VALUE_2F), + .INIT_VALUE_30(INIT_VALUE_30), + .INIT_VALUE_31(INIT_VALUE_31), + .INIT_VALUE_32(INIT_VALUE_32), + .INIT_VALUE_33(INIT_VALUE_33), + .INIT_VALUE_34(INIT_VALUE_34), + .INIT_VALUE_35(INIT_VALUE_35), + .INIT_VALUE_36(INIT_VALUE_36), + .INIT_VALUE_37(INIT_VALUE_37), + .INIT_VALUE_38(INIT_VALUE_38), + .INIT_VALUE_39(INIT_VALUE_39), + .INIT_VALUE_3A(INIT_VALUE_3A), + .INIT_VALUE_3B(INIT_VALUE_3B), + .INIT_VALUE_3C(INIT_VALUE_3C), + .INIT_VALUE_3D(INIT_VALUE_3D), + .INIT_VALUE_3E(INIT_VALUE_3E), + .INIT_VALUE_3F(INIT_VALUE_3F), + .INIT_VALUE_40(INIT_VALUE_40), + .INIT_VALUE_41(INIT_VALUE_41), + .INIT_VALUE_42(INIT_VALUE_42), + .INIT_VALUE_43(INIT_VALUE_43), + .INIT_VALUE_44(INIT_VALUE_44), + .INIT_VALUE_45(INIT_VALUE_45), + .INIT_VALUE_46(INIT_VALUE_46), + .INIT_VALUE_47(INIT_VALUE_47), + .INIT_VALUE_48(INIT_VALUE_48), + .INIT_VALUE_49(INIT_VALUE_49), + .INIT_VALUE_4A(INIT_VALUE_4A), + .INIT_VALUE_4B(INIT_VALUE_4B), + .INIT_VALUE_4C(INIT_VALUE_4C), + .INIT_VALUE_4D(INIT_VALUE_4D), + .INIT_VALUE_4E(INIT_VALUE_4E), + .INIT_VALUE_4F(INIT_VALUE_4F), + .INIT_VALUE_50(INIT_VALUE_50), + .INIT_VALUE_51(INIT_VALUE_51), + .INIT_VALUE_52(INIT_VALUE_52), + .INIT_VALUE_53(INIT_VALUE_53), + .INIT_VALUE_54(INIT_VALUE_54), + .INIT_VALUE_55(INIT_VALUE_55), + .INIT_VALUE_56(INIT_VALUE_56), + .INIT_VALUE_57(INIT_VALUE_57), + .INIT_VALUE_58(INIT_VALUE_58), + .INIT_VALUE_59(INIT_VALUE_59), + .INIT_VALUE_5A(INIT_VALUE_5A), + .INIT_VALUE_5B(INIT_VALUE_5B), + .INIT_VALUE_5C(INIT_VALUE_5C), + .INIT_VALUE_5D(INIT_VALUE_5D), + .INIT_VALUE_5E(INIT_VALUE_5E), + .INIT_VALUE_5F(INIT_VALUE_5F), + .INIT_VALUE_60(INIT_VALUE_60), + .INIT_VALUE_61(INIT_VALUE_61), + .INIT_VALUE_62(INIT_VALUE_62), + .INIT_VALUE_63(INIT_VALUE_63), + .INIT_VALUE_64(INIT_VALUE_64), + .INIT_VALUE_65(INIT_VALUE_65), + .INIT_VALUE_66(INIT_VALUE_66), + .INIT_VALUE_67(INIT_VALUE_67), + .INIT_VALUE_68(INIT_VALUE_68), + .INIT_VALUE_69(INIT_VALUE_69), + .INIT_VALUE_6A(INIT_VALUE_6A), + .INIT_VALUE_6B(INIT_VALUE_6B), + .INIT_VALUE_6C(INIT_VALUE_6C), + .INIT_VALUE_6D(INIT_VALUE_6D), + .INIT_VALUE_6E(INIT_VALUE_6E), + .INIT_VALUE_6F(INIT_VALUE_6F), + .INIT_VALUE_70(INIT_VALUE_70), + .INIT_VALUE_71(INIT_VALUE_71), + .INIT_VALUE_72(INIT_VALUE_72), + .INIT_VALUE_73(INIT_VALUE_73), + .INIT_VALUE_74(INIT_VALUE_74), + .INIT_VALUE_75(INIT_VALUE_75), + .INIT_VALUE_76(INIT_VALUE_76), + .INIT_VALUE_77(INIT_VALUE_77), + .INIT_VALUE_78(INIT_VALUE_78), + .INIT_VALUE_79(INIT_VALUE_79), + .INIT_VALUE_7A(INIT_VALUE_7A), + .INIT_VALUE_7B(INIT_VALUE_7B), + .INIT_VALUE_7C(INIT_VALUE_7C), + .INIT_VALUE_7D(INIT_VALUE_7D), + .INIT_VALUE_7E(INIT_VALUE_7E), + .INIT_VALUE_7F(INIT_VALUE_7F)) mem_main (.wr_clk_i(wr_clk_i), + .rd_clk_i(rd_clk_i), + .rst_i(rst_i), + .wr_clk_en_i(wr_clk_en_i), + .rd_clk_en_i(rd_clk_en_i), + .rd_out_clk_en_i(rd_out_clk_en_i), + .wr_en_i(wr_en_i), + .wr_data_i(wr_data_i), + .wr_addr_i(wr_addr_i), + .rd_en_i(rd_en_i), + .rd_addr_i(rd_addr_i), + .ben_i(ben_i), + .rd_data_o(rd_data_o), + .one_err_det_o(one_err_det_o), + .two_err_det_o(two_err_det_o)) ; + function [31:0] clog2 ; + input [31:0] value ; + reg [31:0] num ; + begin + num = (value - 1) ; + for (clog2 = 0 ; (num > 0) ; clog2 = (clog2 + 1)) + num = (num >> 1) ; + end + endfunction +endmodule + + + +// ============================================================================= +// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +// ----------------------------------------------------------------------------- +// Copyright (c) 2023 by Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// ----------------------------------------------------------------------------- +// +// Permission: +// +// Lattice SG Pte. Ltd. grants permission to use this code +// pursuant to the terms of the Lattice Reference Design License Agreement. +// +// +// Disclaimer: +// +// This VHDL or Verilog source code is intended as a design reference +// which illustrates how these types of functions can be implemented. +// It is the user's responsibility to verify their design for +// consistency and functionality through the use of formal +// verification methods. Lattice provides no warranty +// regarding the use or functionality of this code. +// +// ----------------------------------------------------------------------------- +// +// Lattice SG Pte. Ltd. +// 101 Thomson Road, United Square #07-02 +// Singapore 307591 +// +// +// TEL: 1-800-Lattice (USA and Canada) +// +65-6631-2000 (Singapore) +// +1-503-268-8001 (other locations) +// +// web: http://www.latticesemi.com/ +// email: techsupport@latticesemi.com +// +// ----------------------------------------------------------------------------- +// +// ============================================================================= +// FILE DETAILS +// Project : Radiant Software 1.1 +// File : lscc_ram_dp_main.v +// Title : +// Dependencies : +// Description : Top-level pseudo Dual Port RAM using EBR. +// ============================================================================= +// REVISION HISTORY +// Version : 1.1.0. +// Author(s) : +// Mod. Date : +// Changes Made : Initial release. +// ============================================================================= +module sprite_ram_ipgen_lscc_ram_dp_main #(parameter _FCODE_LIFCL_ = 1, parameter _FCODE_ICE_ = 2, + parameter _FCODE_AP6_ = 3, parameter _FCODE_COMMON_ = 0, parameter MEM_ID = "MEM0", parameter MEM_SIZE = "18,1024", parameter FAMILY = "common", - parameter FAMILY_CODE = ((FAMILY == "LIFCL") ? _FCODE_LIFCL_ : ((FAMILY == "iCE40UP") ? _FCODE_ICE_ : _FCODE_COMMON_)), + parameter FAMILY_CODE = ((FAMILY == "LIFCL") ? _FCODE_LIFCL_ : ((FAMILY == "iCE40UP") ? _FCODE_ICE_ : ((FAMILY == "ap6a00") ? _FCODE_AP6_ : ((FAMILY == "ap6a00b") ? _FCODE_AP6_ : ((FAMILY == "ap6a400") ? _FCODE_AP6_ : ((FAMILY == "LATG1") ? _FCODE_AP6_ : ((FAMILY == "LAV-AT") ? _FCODE_AP6_ : _FCODE_COMMON_))))))), parameter WADDR_DEPTH = 1024, parameter WADDR_WIDTH = clog2(WADDR_DEPTH), parameter WDATA_WIDTH = 18, @@ -201,6 +674,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, parameter GSR = "enable", parameter RESETMODE = "sync", parameter RESET_RELEASE = "sync", + parameter INIT_DATA = "DYNAMIC", parameter INIT_FILE = "none", parameter INIT_FILE_FORMAT = "binary", parameter MODULE_TYPE = "ram_dp", @@ -276,7 +750,71 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, parameter INIT_VALUE_3C = "0x0000000000000000000000000000000000000000000000000000000000000000", parameter INIT_VALUE_3D = "0x0000000000000000000000000000000000000000000000000000000000000000", parameter INIT_VALUE_3E = "0x0000000000000000000000000000000000000000000000000000000000000000", - parameter INIT_VALUE_3F = "0x0000000000000000000000000000000000000000000000000000000000000000") ( + parameter INIT_VALUE_3F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_40 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_41 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_42 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_43 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_44 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_45 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_46 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_47 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_48 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_49 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_50 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_51 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_52 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_53 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_54 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_55 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_56 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_57 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_58 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_59 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_60 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_61 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_62 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_63 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_64 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_65 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_66 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_67 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_68 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_69 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_70 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_71 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_72 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_73 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_74 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_75 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_76 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_77 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_78 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_79 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7F = "0x0000000000000000000000000000000000000000000000000000000000000000") ( // ----------------------------------------------------------------------------- // Input/Output Ports // ----------------------------------------------------------------------------- @@ -305,16 +843,12 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, // ----------------------------------------------------------------------------- // Generate Sequential Blocks // ----------------------------------------------------------------------------- - genvar i0, - i1, - i_0, - i_1 ; generate if ((FAMILY == "common")) begin : behavioral reg [(RDATA_WIDTH - 1):0] dataout_reg ; reg [(RDATA_WIDTH - 1):0] dataout_reg_buffer ; - reg [(RDATA_WIDTH - 1):0] mem /* sythesis syn_ramstyle="block_ram" */ [((2 ** RADDR_WIDTH) - 1):0] ; + (* syn_ramstyle="block_ram" *) reg [(RDATA_WIDTH - 1):0] mem [((2 ** RADDR_WIDTH) - 1):0] ; assign rd_data_o = ((REGMODE == "reg") ? dataout_reg : dataout_reg_buffer) ; initial begin @@ -389,10 +923,12 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, OPT_DATA_WIDTH) ; localparam EBR_ADDR = roundUP(RADDR_DEPTH, OPT_ADDR_DEPTH) ; - localparam BYTE_WIDTH_IMPL = ((BYTE_ENABLE == 0) ? 1 : (((OPT_DATA_WIDTH == 36) | (OPT_DATA_WIDTH == 32)) ? 4 : (((OPT_DATA_WIDTH == 18) | (OPT_DATA_WIDTH == 16)) ? 2 : 1))) ; + localparam BYTE_WIDTH_IMPL = ((BYTE_ENABLE == 0) ? 1 : (((OPT_DATA_WIDTH == 72) | (OPT_DATA_WIDTH == 64)) ? 8 : (((OPT_DATA_WIDTH == 36) | (OPT_DATA_WIDTH == 32)) ? 4 : (((OPT_DATA_WIDTH == 18) | (OPT_DATA_WIDTH == 16)) ? 2 : 1)))) ; wire [(RDATA_WIDTH - 1):0] rd_data_raw_w [(EBR_ADDR - 1):0] ; wire [(EBR_ADDR - 1):0] one_err_det_raw_w ; wire [(EBR_ADDR - 1):0] two_err_det_raw_w ; + genvar i0, + i1 ; for (i0 = 0;(i0 < EBR_ADDR);i0 = (i0 + 1)) begin : ADDR_ROUTE wire [(RDATA_WIDTH - 1):0] raw_output_w ; @@ -502,47 +1038,6 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end wire f_wr_en_w = (chk_addr_w_w & wr_en_i) ; wire f_rd_en_w = (chk_addr_r_w & rd_en_i) ; - wire ff_rd_en_w ; - if ((REGMODE == "noreg")) - begin : genblk3 - assign ff_rd_en_w = f_rd_en_w ; - end - else - begin : genblk3 - reg f_rd_en_r = 1'b0 ; - assign ff_rd_en_w = (f_rd_en_w | f_rd_en_r) ; - if ((RESETMODE == "sync")) - begin : genblk1 - always - @(posedge rd_clk_i) - begin - if (rst_i) - begin - f_rd_en_r <= 1'b0 ; - end - else - begin - f_rd_en_r <= f_rd_en_w ; - end - end - end - else - begin : genblk1 - always - @(posedge rd_clk_i or - posedge rst_i) - begin - if (rst_i) - begin - f_rd_en_r <= 1'b0 ; - end - else - begin - f_rd_en_r <= f_rd_en_w ; - end - end - end - end if ((INIT_MODE == "mem_file")) begin : mem_init sprite_ram_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID), @@ -552,14 +1047,17 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(OPT_DATA_WIDTH), .DATA_WIDTH_R(OPT_DATA_WIDTH), .REGMODE(REGMODE), .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .BYTE_ENABLE(IS_BYTE_ENABLE), + .ECC_ENABLE(ECC_ENABLE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL), .INIT_VALUE_00(INIT_VALUE_00[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), @@ -578,54 +1076,118 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .INIT_VALUE_0D(INIT_VALUE_0D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), .INIT_VALUE_0E(INIT_VALUE_0E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), .INIT_VALUE_0F(INIT_VALUE_0F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), - .INIT_VALUE_10(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_10[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_11(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_11[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_12(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_12[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_13(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_13[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_14(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_14[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_15(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_15[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_16(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_16[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_17(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_17[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_18(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_18[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_19(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_19[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_20(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_20[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_21(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_21[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_22(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_22[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_23(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_23[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_24(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_24[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_25(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_25[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_26(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_26[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_27(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_27[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_28(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_28[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_29(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_29[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_30(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_30[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_31(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_31[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_32(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_32[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_33(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_33[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_34(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_34[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_35(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_35[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_36(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_36[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_37(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_37[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_38(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_38[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_39(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_39[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), + .INIT_VALUE_10(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_10[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_11(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_11[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_12(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_12[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_13(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_13[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_14(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_14[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_15(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_15[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_16(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_16[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_17(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_17[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_18(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_18[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_19(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_19[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_20(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_20[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_21(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_21[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_22(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_22[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_23(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_23[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_24(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_24[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_25(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_25[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_26(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_26[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_27(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_27[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_28(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_28[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_29(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_29[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_30(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_30[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_31(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_31[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_32(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_32[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_33(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_33[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_34(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_34[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_35(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_35[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_36(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_36[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_37(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_37[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_38(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_38[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_39(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_39[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_40(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_40[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_41(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_41[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_42(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_42[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_43(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_43[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_44(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_44[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_45(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_45[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_46(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_46[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_47(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_47[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_48(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_48[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_49(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_49[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_50(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_50[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_51(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_51[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_52(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_52[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_53(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_53[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_54(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_54[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_55(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_55[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_56(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_56[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_57(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_57[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_58(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_58[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_59(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_59[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_60(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_60[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_61(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_61[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_62(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_62[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_63(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_63[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_64(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_64[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_65(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_65[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_66(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_66[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_67(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_67[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_68(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_68[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_69(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_69[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_70(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_70[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_71(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_71[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_72(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_72[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_73(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_73[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_74(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_74[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_75(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_75[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_76(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_76[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_77(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_77[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_78(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_78[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_79(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_79[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), .wr_clk_en_i(wr_clk_en_i), @@ -634,7 +1196,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .wr_en_i(f_wr_en_w), .wr_data_i(act_in_w), .wr_addr_i(act_addr_w_w), - .rd_en_i(ff_rd_en_w), + .rd_en_i(f_rd_en_w), .rd_addr_i(act_addr_r_w), .ben_i(act_ben_w), .rd_data_o(act_out_w), @@ -650,14 +1212,17 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(OPT_DATA_WIDTH), .DATA_WIDTH_R(OPT_DATA_WIDTH), .REGMODE(REGMODE), .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .BYTE_ENABLE(IS_BYTE_ENABLE), + .ECC_ENABLE(ECC_ENABLE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL)) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), @@ -668,7 +1233,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .wr_en_i(f_wr_en_w), .wr_data_i(act_in_w), .wr_addr_i(act_addr_w_w), - .rd_en_i(ff_rd_en_w), + .rd_en_i(f_rd_en_w), .rd_addr_i(act_addr_r_w), .ben_i(act_ben_w), .rd_data_o(act_out_w), @@ -705,7 +1270,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end else begin - rd_addr_0_r <= rd_addr_i ; + rd_addr_0_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_0_r) ; end end end @@ -721,7 +1286,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end else begin - rd_addr_0_r <= rd_addr_i ; + rd_addr_0_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_0_r) ; end end end @@ -742,7 +1307,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else begin rd_addr_0_r <= rd_addr_1_r ; - rd_addr_1_r <= rd_addr_i ; + rd_addr_1_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_1_r) ; end end end @@ -760,7 +1325,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else begin rd_addr_0_r <= rd_addr_1_r ; - rd_addr_1_r <= rd_addr_i ; + rd_addr_1_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_1_r) ; end end end @@ -838,6 +1403,8 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, wire [(R_PORT_USE - 1):0] master_data_out_w ; if ((EBR_DATA > 1)) begin : genblk3 + genvar i_0, + i_1 ; if ((W_PORT_USE > R_PORT_USE)) begin : genblk1 assign rd_data_o = output_buff_w[(RDATA_WIDTH - 1):0] ; @@ -898,6 +1465,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else if ((EBR_ADDR > 1)) begin : genblk3 + genvar i_0 ; localparam Q_SRD_x = (R_PORT_USE / W_PORT_USE) ; localparam Q_SWR_x = (W_PORT_USE / R_PORT_USE) ; if ((R_PORT_USE < W_PORT_USE)) @@ -937,6 +1505,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, wire [(R_SINGULAR_DATA_x - 1):0] single_wire_out_w ; wire [(W_SINGULAR_ADDR_WIDTH - 1):0] single_wr_addr_w ; wire [(R_SINGULAR_ADDR_WIDTH - 1):0] single_rd_addr_w ; + genvar i0 ; if ((R_SINGULAR_DATA_x < W_SINGULAR_DATA_x)) begin : genblk1 for (i0 = 0;(i0 < Q_SWR_x);i0 = (i0 + 1)) @@ -974,6 +1543,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_SINGULAR_DATA_x), .DATA_WIDTH_R(R_SINGULAR_DATA_x), @@ -981,6 +1551,8 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(0), + .ECC_ENABLE(ECC_ENABLE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .INIT_VALUE_00(INIT_VALUE_00), @@ -999,54 +1571,118 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .INIT_VALUE_0D(INIT_VALUE_0D), .INIT_VALUE_0E(INIT_VALUE_0E), .INIT_VALUE_0F(INIT_VALUE_0F), - .INIT_VALUE_10(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_10 : "0x00")), - .INIT_VALUE_11(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_11 : "0x00")), - .INIT_VALUE_12(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_12 : "0x00")), - .INIT_VALUE_13(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_13 : "0x00")), - .INIT_VALUE_14(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_14 : "0x00")), - .INIT_VALUE_15(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_15 : "0x00")), - .INIT_VALUE_16(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_16 : "0x00")), - .INIT_VALUE_17(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_17 : "0x00")), - .INIT_VALUE_18(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_18 : "0x00")), - .INIT_VALUE_19(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_19 : "0x00")), - .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1A : "0x00")), - .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1B : "0x00")), - .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1C : "0x00")), - .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1D : "0x00")), - .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1E : "0x00")), - .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1F : "0x00")), - .INIT_VALUE_20(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_20 : "0x00")), - .INIT_VALUE_21(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_21 : "0x00")), - .INIT_VALUE_22(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_22 : "0x00")), - .INIT_VALUE_23(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_23 : "0x00")), - .INIT_VALUE_24(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_24 : "0x00")), - .INIT_VALUE_25(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_25 : "0x00")), - .INIT_VALUE_26(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_26 : "0x00")), - .INIT_VALUE_27(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_27 : "0x00")), - .INIT_VALUE_28(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_28 : "0x00")), - .INIT_VALUE_29(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_29 : "0x00")), - .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2A : "0x00")), - .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2B : "0x00")), - .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2C : "0x00")), - .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2D : "0x00")), - .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2E : "0x00")), - .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2F : "0x00")), - .INIT_VALUE_30(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_30 : "0x00")), - .INIT_VALUE_31(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_31 : "0x00")), - .INIT_VALUE_32(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_32 : "0x00")), - .INIT_VALUE_33(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_33 : "0x00")), - .INIT_VALUE_34(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_34 : "0x00")), - .INIT_VALUE_35(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_35 : "0x00")), - .INIT_VALUE_36(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_36 : "0x00")), - .INIT_VALUE_37(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_37 : "0x00")), - .INIT_VALUE_38(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_38 : "0x00")), - .INIT_VALUE_39(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_39 : "0x00")), - .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3A : "0x00")), - .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3B : "0x00")), - .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3C : "0x00")), - .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3D : "0x00")), - .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3E : "0x00")), - .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3F : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), + .INIT_VALUE_10(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_10 : "0x00")), + .INIT_VALUE_11(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_11 : "0x00")), + .INIT_VALUE_12(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_12 : "0x00")), + .INIT_VALUE_13(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_13 : "0x00")), + .INIT_VALUE_14(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_14 : "0x00")), + .INIT_VALUE_15(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_15 : "0x00")), + .INIT_VALUE_16(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_16 : "0x00")), + .INIT_VALUE_17(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_17 : "0x00")), + .INIT_VALUE_18(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_18 : "0x00")), + .INIT_VALUE_19(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_19 : "0x00")), + .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1A : "0x00")), + .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1B : "0x00")), + .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1C : "0x00")), + .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1D : "0x00")), + .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1E : "0x00")), + .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1F : "0x00")), + .INIT_VALUE_20(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_20 : "0x00")), + .INIT_VALUE_21(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_21 : "0x00")), + .INIT_VALUE_22(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_22 : "0x00")), + .INIT_VALUE_23(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_23 : "0x00")), + .INIT_VALUE_24(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_24 : "0x00")), + .INIT_VALUE_25(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_25 : "0x00")), + .INIT_VALUE_26(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_26 : "0x00")), + .INIT_VALUE_27(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_27 : "0x00")), + .INIT_VALUE_28(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_28 : "0x00")), + .INIT_VALUE_29(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_29 : "0x00")), + .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2A : "0x00")), + .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2B : "0x00")), + .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2C : "0x00")), + .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2D : "0x00")), + .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2E : "0x00")), + .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2F : "0x00")), + .INIT_VALUE_30(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_30 : "0x00")), + .INIT_VALUE_31(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_31 : "0x00")), + .INIT_VALUE_32(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_32 : "0x00")), + .INIT_VALUE_33(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_33 : "0x00")), + .INIT_VALUE_34(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_34 : "0x00")), + .INIT_VALUE_35(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_35 : "0x00")), + .INIT_VALUE_36(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_36 : "0x00")), + .INIT_VALUE_37(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_37 : "0x00")), + .INIT_VALUE_38(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_38 : "0x00")), + .INIT_VALUE_39(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_39 : "0x00")), + .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3A : "0x00")), + .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3B : "0x00")), + .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3C : "0x00")), + .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3D : "0x00")), + .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3E : "0x00")), + .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3F : "0x00")), + .INIT_VALUE_40(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_40 : "0x00")), + .INIT_VALUE_41(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_41 : "0x00")), + .INIT_VALUE_42(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_42 : "0x00")), + .INIT_VALUE_43(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_43 : "0x00")), + .INIT_VALUE_44(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_44 : "0x00")), + .INIT_VALUE_45(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_45 : "0x00")), + .INIT_VALUE_46(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_46 : "0x00")), + .INIT_VALUE_47(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_47 : "0x00")), + .INIT_VALUE_48(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_48 : "0x00")), + .INIT_VALUE_49(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_49 : "0x00")), + .INIT_VALUE_4A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4A : "0x00")), + .INIT_VALUE_4B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4B : "0x00")), + .INIT_VALUE_4C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4C : "0x00")), + .INIT_VALUE_4D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4D : "0x00")), + .INIT_VALUE_4E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4E : "0x00")), + .INIT_VALUE_4F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4F : "0x00")), + .INIT_VALUE_50(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_50 : "0x00")), + .INIT_VALUE_51(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_51 : "0x00")), + .INIT_VALUE_52(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_52 : "0x00")), + .INIT_VALUE_53(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_53 : "0x00")), + .INIT_VALUE_54(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_54 : "0x00")), + .INIT_VALUE_55(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_55 : "0x00")), + .INIT_VALUE_56(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_56 : "0x00")), + .INIT_VALUE_57(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_57 : "0x00")), + .INIT_VALUE_58(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_58 : "0x00")), + .INIT_VALUE_59(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_59 : "0x00")), + .INIT_VALUE_5A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5A : "0x00")), + .INIT_VALUE_5B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5B : "0x00")), + .INIT_VALUE_5C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5C : "0x00")), + .INIT_VALUE_5D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5D : "0x00")), + .INIT_VALUE_5E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5E : "0x00")), + .INIT_VALUE_5F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5F : "0x00")), + .INIT_VALUE_60(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_60 : "0x00")), + .INIT_VALUE_61(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_61 : "0x00")), + .INIT_VALUE_62(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_62 : "0x00")), + .INIT_VALUE_63(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_63 : "0x00")), + .INIT_VALUE_64(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_64 : "0x00")), + .INIT_VALUE_65(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_65 : "0x00")), + .INIT_VALUE_66(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_66 : "0x00")), + .INIT_VALUE_67(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_67 : "0x00")), + .INIT_VALUE_68(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_68 : "0x00")), + .INIT_VALUE_69(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_69 : "0x00")), + .INIT_VALUE_6A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6A : "0x00")), + .INIT_VALUE_6B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6B : "0x00")), + .INIT_VALUE_6C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6C : "0x00")), + .INIT_VALUE_6D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6D : "0x00")), + .INIT_VALUE_6E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6E : "0x00")), + .INIT_VALUE_6F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6F : "0x00")), + .INIT_VALUE_70(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_70 : "0x00")), + .INIT_VALUE_71(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_71 : "0x00")), + .INIT_VALUE_72(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_72 : "0x00")), + .INIT_VALUE_73(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_73 : "0x00")), + .INIT_VALUE_74(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_74 : "0x00")), + .INIT_VALUE_75(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_75 : "0x00")), + .INIT_VALUE_76(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_76 : "0x00")), + .INIT_VALUE_77(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_77 : "0x00")), + .INIT_VALUE_78(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_78 : "0x00")), + .INIT_VALUE_79(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_79 : "0x00")), + .INIT_VALUE_7A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7A : "0x00")), + .INIT_VALUE_7B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7B : "0x00")), + .INIT_VALUE_7C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7C : "0x00")), + .INIT_VALUE_7D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7D : "0x00")), + .INIT_VALUE_7E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7E : "0x00")), + .INIT_VALUE_7F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7F : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), .wr_clk_en_i(wr_clk_en_i), @@ -1069,6 +1705,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_SINGULAR_DATA_x), .DATA_WIDTH_R(R_SINGULAR_DATA_x), @@ -1076,7 +1713,9 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(0), + .ECC_ENABLE(ECC_ENABLE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE)) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), @@ -1098,6 +1737,8 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, begin : MULT_IMPL wire [(EBR_ADDR - 1):0] one_err_det_raw_w ; wire [(EBR_ADDR - 1):0] two_err_det_raw_w ; + genvar i0, + i1 ; for (i0 = 0;(i0 < EBR_ADDR);i0 = (i0 + 1)) begin : ADDR_x wire [(R_PORT_USE - 1):0] raw_output_w ; @@ -1181,47 +1822,6 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end wire f_wr_en_w = (chk_addr_wr_w & wr_en_i) ; wire f_rd_en_w = (chk_addr_rd_w & rd_en_i) ; - wire ff_rd_en_w ; - if ((REGMODE == "noreg")) - begin : genblk3 - assign ff_rd_en_w = f_rd_en_w ; - end - else - begin : genblk3 - reg f_rd_en_r ; - assign ff_rd_en_w = (f_rd_en_w | f_rd_en_r) ; - if ((RESETMODE == "sync")) - begin : genblk1 - always - @(posedge rd_clk_i) - begin - if (rst_i) - begin - f_rd_en_r <= 1'b0 ; - end - else - begin - f_rd_en_r <= f_rd_en_w ; - end - end - end - else - begin : genblk1 - always - @(posedge rd_clk_i or - posedge rst_i) - begin - if (rst_i) - begin - f_rd_en_r <= 1'b0 ; - end - else - begin - f_rd_en_r <= f_rd_en_w ; - end - end - end - end if ((INIT_MODE == "mem_file")) begin : mem_init sprite_ram_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID), @@ -1231,6 +1831,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_DATA_WIDTH_IMPL), .DATA_WIDTH_R(R_DATA_WIDTH_IMPL), @@ -1238,6 +1839,8 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(0), + .ECC_ENABLE(ECC_ENABLE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL), @@ -1257,54 +1860,118 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .INIT_VALUE_0D(INIT_VALUE_0D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), .INIT_VALUE_0E(INIT_VALUE_0E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), .INIT_VALUE_0F(INIT_VALUE_0F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), - .INIT_VALUE_10(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_10[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_11(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_11[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_12(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_12[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_13(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_13[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_14(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_14[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_15(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_15[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_16(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_16[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_17(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_17[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_18(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_18[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_19(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_19[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_20(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_20[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_21(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_21[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_22(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_22[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_23(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_23[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_24(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_24[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_25(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_25[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_26(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_26[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_27(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_27[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_28(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_28[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_29(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_29[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_30(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_30[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_31(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_31[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_32(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_32[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_33(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_33[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_34(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_34[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_35(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_35[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_36(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_36[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_37(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_37[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_38(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_38[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_39(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_39[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), + .INIT_VALUE_10(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_10[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_11(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_11[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_12(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_12[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_13(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_13[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_14(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_14[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_15(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_15[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_16(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_16[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_17(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_17[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_18(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_18[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_19(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_19[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_20(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_20[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_21(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_21[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_22(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_22[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_23(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_23[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_24(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_24[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_25(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_25[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_26(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_26[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_27(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_27[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_28(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_28[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_29(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_29[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_30(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_30[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_31(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_31[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_32(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_32[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_33(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_33[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_34(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_34[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_35(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_35[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_36(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_36[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_37(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_37[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_38(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_38[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_39(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_39[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_40(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_40[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_41(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_41[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_42(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_42[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_43(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_43[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_44(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_44[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_45(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_45[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_46(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_46[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_47(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_47[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_48(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_48[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_49(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_49[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_50(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_50[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_51(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_51[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_52(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_52[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_53(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_53[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_54(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_54[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_55(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_55[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_56(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_56[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_57(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_57[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_58(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_58[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_59(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_59[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_60(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_60[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_61(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_61[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_62(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_62[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_63(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_63[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_64(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_64[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_65(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_65[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_66(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_66[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_67(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_67[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_68(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_68[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_69(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_69[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_70(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_70[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_71(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_71[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_72(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_72[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_73(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_73[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_74(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_74[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_75(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_75[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_76(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_76[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_77(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_77[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_78(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_78[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_79(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_79[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), .wr_clk_en_i(wr_clk_en_i), @@ -1313,7 +1980,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .wr_en_i(f_wr_en_w), .wr_data_i(act_wr_data_w), .wr_addr_i(act_wr_addr_w), - .rd_en_i(ff_rd_en_w), + .rd_en_i(f_rd_en_w), .rd_addr_i(act_rd_addr_w), .ben_i(1'b1), .rd_data_o(act_rd_data_w), @@ -1329,14 +1996,17 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_DATA_WIDTH_IMPL), .DATA_WIDTH_R(R_DATA_WIDTH_IMPL), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .REGMODE(REGMODE), .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(0), + .ECC_ENABLE(ECC_ENABLE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL)) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), @@ -1347,7 +2017,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .wr_en_i(f_wr_en_w), .wr_data_i(act_wr_data_w), .wr_addr_i(act_wr_addr_w), - .rd_en_i(ff_rd_en_w), + .rd_en_i(f_rd_en_w), .rd_addr_i(act_rd_addr_w), .ben_i(1'b1), .rd_data_o(act_rd_data_w), @@ -1383,7 +2053,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end else begin - rd_addr_0_r <= rd_addr_i ; + rd_addr_0_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_0_r) ; end end end @@ -1399,7 +2069,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end else begin - rd_addr_0_r <= rd_addr_i ; + rd_addr_0_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_0_r) ; end end end @@ -1420,7 +2090,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else begin rd_addr_0_r <= rd_addr_1_r ; - rd_addr_1_r <= rd_addr_i ; + rd_addr_1_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_1_r) ; end end end @@ -1438,7 +2108,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else begin rd_addr_0_r <= rd_addr_1_r ; - rd_addr_1_r <= rd_addr_i ; + rd_addr_1_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_1_r) ; end end end @@ -1492,6 +2162,8 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, wire [(RDATA_WIDTH - 1):0] master_data_out_w ; if ((EBR_DATA > 1)) begin : WIRE_chk + genvar i_0, + i_1 ; if ((WDATA_WIDTH > RDATA_WIDTH)) begin : W_OVR_R assign rd_data_o = master_data_out_w ; @@ -1572,6 +2244,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_SINGULAR_DATA_x), .DATA_WIDTH_R(R_SINGULAR_DATA_x), @@ -1579,6 +2252,8 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(1), + .ECC_ENABLE(ECC_ENABLE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL), @@ -1598,54 +2273,118 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .INIT_VALUE_0D(INIT_VALUE_0D), .INIT_VALUE_0E(INIT_VALUE_0E), .INIT_VALUE_0F(INIT_VALUE_0F), - .INIT_VALUE_10(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_10 : "0x00")), - .INIT_VALUE_11(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_11 : "0x00")), - .INIT_VALUE_12(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_12 : "0x00")), - .INIT_VALUE_13(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_13 : "0x00")), - .INIT_VALUE_14(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_14 : "0x00")), - .INIT_VALUE_15(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_15 : "0x00")), - .INIT_VALUE_16(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_16 : "0x00")), - .INIT_VALUE_17(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_17 : "0x00")), - .INIT_VALUE_18(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_18 : "0x00")), - .INIT_VALUE_19(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_19 : "0x00")), - .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1A : "0x00")), - .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1B : "0x00")), - .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1C : "0x00")), - .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1D : "0x00")), - .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1E : "0x00")), - .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1F : "0x00")), - .INIT_VALUE_20(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_20 : "0x00")), - .INIT_VALUE_21(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_21 : "0x00")), - .INIT_VALUE_22(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_22 : "0x00")), - .INIT_VALUE_23(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_23 : "0x00")), - .INIT_VALUE_24(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_24 : "0x00")), - .INIT_VALUE_25(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_25 : "0x00")), - .INIT_VALUE_26(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_26 : "0x00")), - .INIT_VALUE_27(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_27 : "0x00")), - .INIT_VALUE_28(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_28 : "0x00")), - .INIT_VALUE_29(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_29 : "0x00")), - .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2A : "0x00")), - .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2B : "0x00")), - .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2C : "0x00")), - .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2D : "0x00")), - .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2E : "0x00")), - .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2F : "0x00")), - .INIT_VALUE_30(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_30 : "0x00")), - .INIT_VALUE_31(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_31 : "0x00")), - .INIT_VALUE_32(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_32 : "0x00")), - .INIT_VALUE_33(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_33 : "0x00")), - .INIT_VALUE_34(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_34 : "0x00")), - .INIT_VALUE_35(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_35 : "0x00")), - .INIT_VALUE_36(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_36 : "0x00")), - .INIT_VALUE_37(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_37 : "0x00")), - .INIT_VALUE_38(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_38 : "0x00")), - .INIT_VALUE_39(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_39 : "0x00")), - .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3A : "0x00")), - .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3B : "0x00")), - .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3C : "0x00")), - .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3D : "0x00")), - .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3E : "0x00")), - .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3F : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), + .INIT_VALUE_10(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_10 : "0x00")), + .INIT_VALUE_11(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_11 : "0x00")), + .INIT_VALUE_12(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_12 : "0x00")), + .INIT_VALUE_13(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_13 : "0x00")), + .INIT_VALUE_14(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_14 : "0x00")), + .INIT_VALUE_15(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_15 : "0x00")), + .INIT_VALUE_16(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_16 : "0x00")), + .INIT_VALUE_17(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_17 : "0x00")), + .INIT_VALUE_18(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_18 : "0x00")), + .INIT_VALUE_19(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_19 : "0x00")), + .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1A : "0x00")), + .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1B : "0x00")), + .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1C : "0x00")), + .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1D : "0x00")), + .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1E : "0x00")), + .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1F : "0x00")), + .INIT_VALUE_20(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_20 : "0x00")), + .INIT_VALUE_21(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_21 : "0x00")), + .INIT_VALUE_22(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_22 : "0x00")), + .INIT_VALUE_23(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_23 : "0x00")), + .INIT_VALUE_24(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_24 : "0x00")), + .INIT_VALUE_25(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_25 : "0x00")), + .INIT_VALUE_26(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_26 : "0x00")), + .INIT_VALUE_27(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_27 : "0x00")), + .INIT_VALUE_28(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_28 : "0x00")), + .INIT_VALUE_29(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_29 : "0x00")), + .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2A : "0x00")), + .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2B : "0x00")), + .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2C : "0x00")), + .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2D : "0x00")), + .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2E : "0x00")), + .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2F : "0x00")), + .INIT_VALUE_30(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_30 : "0x00")), + .INIT_VALUE_31(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_31 : "0x00")), + .INIT_VALUE_32(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_32 : "0x00")), + .INIT_VALUE_33(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_33 : "0x00")), + .INIT_VALUE_34(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_34 : "0x00")), + .INIT_VALUE_35(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_35 : "0x00")), + .INIT_VALUE_36(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_36 : "0x00")), + .INIT_VALUE_37(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_37 : "0x00")), + .INIT_VALUE_38(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_38 : "0x00")), + .INIT_VALUE_39(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_39 : "0x00")), + .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3A : "0x00")), + .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3B : "0x00")), + .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3C : "0x00")), + .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3D : "0x00")), + .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3E : "0x00")), + .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3F : "0x00")), + .INIT_VALUE_40(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_40 : "0x00")), + .INIT_VALUE_41(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_41 : "0x00")), + .INIT_VALUE_42(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_42 : "0x00")), + .INIT_VALUE_43(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_43 : "0x00")), + .INIT_VALUE_44(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_44 : "0x00")), + .INIT_VALUE_45(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_45 : "0x00")), + .INIT_VALUE_46(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_46 : "0x00")), + .INIT_VALUE_47(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_47 : "0x00")), + .INIT_VALUE_48(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_48 : "0x00")), + .INIT_VALUE_49(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_49 : "0x00")), + .INIT_VALUE_4A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4A : "0x00")), + .INIT_VALUE_4B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4B : "0x00")), + .INIT_VALUE_4C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4C : "0x00")), + .INIT_VALUE_4D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4D : "0x00")), + .INIT_VALUE_4E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4E : "0x00")), + .INIT_VALUE_4F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4F : "0x00")), + .INIT_VALUE_50(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_50 : "0x00")), + .INIT_VALUE_51(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_51 : "0x00")), + .INIT_VALUE_52(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_52 : "0x00")), + .INIT_VALUE_53(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_53 : "0x00")), + .INIT_VALUE_54(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_54 : "0x00")), + .INIT_VALUE_55(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_55 : "0x00")), + .INIT_VALUE_56(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_56 : "0x00")), + .INIT_VALUE_57(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_57 : "0x00")), + .INIT_VALUE_58(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_58 : "0x00")), + .INIT_VALUE_59(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_59 : "0x00")), + .INIT_VALUE_5A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5A : "0x00")), + .INIT_VALUE_5B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5B : "0x00")), + .INIT_VALUE_5C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5C : "0x00")), + .INIT_VALUE_5D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5D : "0x00")), + .INIT_VALUE_5E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5E : "0x00")), + .INIT_VALUE_5F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5F : "0x00")), + .INIT_VALUE_60(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_60 : "0x00")), + .INIT_VALUE_61(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_61 : "0x00")), + .INIT_VALUE_62(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_62 : "0x00")), + .INIT_VALUE_63(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_63 : "0x00")), + .INIT_VALUE_64(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_64 : "0x00")), + .INIT_VALUE_65(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_65 : "0x00")), + .INIT_VALUE_66(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_66 : "0x00")), + .INIT_VALUE_67(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_67 : "0x00")), + .INIT_VALUE_68(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_68 : "0x00")), + .INIT_VALUE_69(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_69 : "0x00")), + .INIT_VALUE_6A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6A : "0x00")), + .INIT_VALUE_6B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6B : "0x00")), + .INIT_VALUE_6C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6C : "0x00")), + .INIT_VALUE_6D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6D : "0x00")), + .INIT_VALUE_6E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6E : "0x00")), + .INIT_VALUE_6F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6F : "0x00")), + .INIT_VALUE_70(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_70 : "0x00")), + .INIT_VALUE_71(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_71 : "0x00")), + .INIT_VALUE_72(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_72 : "0x00")), + .INIT_VALUE_73(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_73 : "0x00")), + .INIT_VALUE_74(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_74 : "0x00")), + .INIT_VALUE_75(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_75 : "0x00")), + .INIT_VALUE_76(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_76 : "0x00")), + .INIT_VALUE_77(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_77 : "0x00")), + .INIT_VALUE_78(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_78 : "0x00")), + .INIT_VALUE_79(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_79 : "0x00")), + .INIT_VALUE_7A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7A : "0x00")), + .INIT_VALUE_7B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7B : "0x00")), + .INIT_VALUE_7C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7C : "0x00")), + .INIT_VALUE_7D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7D : "0x00")), + .INIT_VALUE_7E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7E : "0x00")), + .INIT_VALUE_7F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7F : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), .wr_clk_en_i(wr_clk_en_i), @@ -1668,6 +2407,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_SINGULAR_DATA_x), .DATA_WIDTH_R(R_SINGULAR_DATA_x), @@ -1675,6 +2415,8 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(1), + .ECC_ENABLE(ECC_ENABLE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL)) u_mem0 (.wr_clk_i(wr_clk_i), @@ -1698,6 +2440,8 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, begin : MULT_IMPL wire [(EBR_ADDR - 1):0] one_err_det_raw_w ; wire [(EBR_ADDR - 1):0] two_err_det_raw_w ; + genvar i0, + i1 ; for (i0 = 0;(i0 < EBR_ADDR);i0 = (i0 + 1)) begin : ADDR_x wire [(RDATA_WIDTH - 1):0] raw_output_w ; @@ -1798,47 +2542,6 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end wire f_wr_en_w = (chk_addr_wr_w & wr_en_i) ; wire f_rd_en_w = (chk_addr_rd_w & rd_en_i) ; - wire ff_rd_en_w ; - if ((REGMODE == "noreg")) - begin : genblk4 - assign ff_rd_en_w = f_rd_en_w ; - end - else - begin : genblk4 - reg f_rd_en_r ; - assign ff_rd_en_w = (f_rd_en_w | f_rd_en_r) ; - if ((RESETMODE == "sync")) - begin : genblk1 - always - @(posedge rd_clk_i) - begin - if (rst_i) - begin - f_rd_en_r <= 1'b0 ; - end - else - begin - f_rd_en_r <= f_rd_en_w ; - end - end - end - else - begin : genblk1 - always - @(posedge rd_clk_i or - posedge rst_i) - begin - if (rst_i) - begin - f_rd_en_r <= 1'b0 ; - end - else - begin - f_rd_en_r <= f_rd_en_w ; - end - end - end - end if ((INIT_MODE == "mem_file")) begin : mem_init sprite_ram_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID), @@ -1848,6 +2551,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_DATA_WIDTH_IMPL), .DATA_WIDTH_R(R_DATA_WIDTH_IMPL), @@ -1855,6 +2559,8 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(1), + .ECC_ENABLE(ECC_ENABLE), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL), @@ -1874,54 +2580,118 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .INIT_VALUE_0D(INIT_VALUE_0D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), .INIT_VALUE_0E(INIT_VALUE_0E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), .INIT_VALUE_0F(INIT_VALUE_0F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]), - .INIT_VALUE_10(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_10[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_11(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_11[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_12(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_12[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_13(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_13[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_14(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_14[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_15(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_15[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_16(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_16[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_17(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_17[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_18(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_18[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_19(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_19[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_1F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_20(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_20[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_21(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_21[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_22(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_22[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_23(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_23[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_24(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_24[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_25(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_25[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_26(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_26[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_27(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_27[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_28(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_28[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_29(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_29[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_2F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_30(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_30[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_31(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_31[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_32(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_32[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_33(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_33[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_34(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_34[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_35(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_35[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_36(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_36[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_37(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_37[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_38(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_38[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_39(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_39[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), - .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) == 1) ? INIT_VALUE_3F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), + .INIT_VALUE_10(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_10[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_11(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_11[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_12(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_12[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_13(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_13[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_14(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_14[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_15(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_15[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_16(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_16[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_17(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_17[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_18(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_18[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_19(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_19[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_1F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_1F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_20(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_20[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_21(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_21[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_22(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_22[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_23(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_23[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_24(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_24[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_25(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_25[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_26(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_26[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_27(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_27[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_28(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_28[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_29(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_29[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_2F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_2F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_30(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_30[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_31(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_31[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_32(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_32[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_33(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_33[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_34(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_34[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_35(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_35[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_36(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_36[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_37(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_37[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_38(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_38[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_39(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_39[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3A(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3B(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3C(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3D(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3E(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_3F(((checkINIT(FAMILY_CODE) >= 1) ? INIT_VALUE_3F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_40(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_40[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_41(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_41[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_42(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_42[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_43(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_43[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_44(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_44[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_45(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_45[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_46(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_46[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_47(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_47[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_48(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_48[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_49(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_49[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_4F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_4F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_50(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_50[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_51(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_51[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_52(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_52[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_53(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_53[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_54(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_54[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_55(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_55[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_56(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_56[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_57(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_57[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_58(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_58[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_59(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_59[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_5F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_5F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_60(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_60[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_61(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_61[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_62(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_62[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_63(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_63[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_64(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_64[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_65(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_65[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_66(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_66[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_67(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_67[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_68(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_68[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_69(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_69[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_6F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_6F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_70(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_70[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_71(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_71[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_72(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_72[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_73(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_73[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_74(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_74[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_75(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_75[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_76(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_76[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_77(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_77[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_78(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_78[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_79(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_79[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7A(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7B(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7C(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7D(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7D[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7E(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7E[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00")), + .INIT_VALUE_7F(((checkINIT(FAMILY_CODE) >= 2) ? INIT_VALUE_7F[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)] : "0x00"))) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), .wr_clk_en_i(wr_clk_en_i), @@ -1930,7 +2700,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .wr_en_i(f_wr_en_w), .wr_data_i(act_wr_data_w), .wr_addr_i(act_wr_addr_w), - .rd_en_i(ff_rd_en_w), + .rd_en_i(f_rd_en_w), .rd_addr_i(act_rd_addr_w), .ben_i(act_ben_w), .rd_data_o(act_rd_data_w), @@ -1946,6 +2716,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .FAMILY(FAMILY), ._FCODE_ICE_(_FCODE_ICE_), ._FCODE_LIFCL_(_FCODE_LIFCL_), + ._FCODE_AP6_(_FCODE_AP6_), ._FCODE_COMMON_(_FCODE_COMMON_), .DATA_WIDTH_W(W_DATA_WIDTH_IMPL), .DATA_WIDTH_R(R_DATA_WIDTH_IMPL), @@ -1953,8 +2724,10 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .RESETMODE(RESETMODE), .RESET_RELEASE(RESET_RELEASE), .BYTE_ENABLE(1), + .ECC_ENABLE(ECC_ENABLE), .OUTPUT_CLK_EN(OUTPUT_CLK_EN), .BYTE_ENABLE_POL(BYTE_ENABLE_POL), + .INIT_DATA(INIT_DATA), .INIT_MODE(INIT_MODE)) u_mem0 (.wr_clk_i(wr_clk_i), .rd_clk_i(rd_clk_i), .rst_i(rst_i), @@ -1964,7 +2737,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, .wr_en_i(f_wr_en_w), .wr_data_i(act_wr_data_w), .wr_addr_i(act_wr_addr_w), - .rd_en_i(ff_rd_en_w), + .rd_en_i(f_rd_en_w), .rd_addr_i(act_rd_addr_w), .ben_i(act_ben_w), .rd_data_o(act_rd_data_w), @@ -1984,7 +2757,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, reg [(RDATA_WIDTH - 1):0] rd_out_buff_r ; reg one_err_det_r = 1'b0 ; reg two_err_det_r = 1'b0 ; - reg [(RADDR_WIDTH - 1):0] rd_addr_0_r = {RADDR_WIDTH{1'b0}} ; + reg [(RADDR_WIDTH - 1):0] rd_addr_0_r ; assign one_err_det_o = ((ECC_ENABLE == 1) ? one_err_det_r : 1'b0) ; assign two_err_det_o = ((ECC_ENABLE == 1) ? two_err_det_r : 1'b0) ; if ((REGMODE == "noreg")) @@ -2000,7 +2773,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end else begin - rd_addr_0_r <= rd_addr_i ; + rd_addr_0_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_0_r) ; end end end @@ -2016,14 +2789,14 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end else begin - rd_addr_0_r <= rd_addr_i ; + rd_addr_0_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_0_r) ; end end end end else begin : _reg - reg [(RADDR_WIDTH - 1):0] rd_addr_1_r = {RADDR_WIDTH{1'b0}} ; + reg [(RADDR_WIDTH - 1):0] rd_addr_1_r ; if ((RESETMODE == "sync")) begin : genblk1 always @@ -2037,7 +2810,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else begin rd_addr_0_r <= rd_addr_1_r ; - rd_addr_1_r <= rd_addr_i ; + rd_addr_1_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_1_r) ; end end end @@ -2054,7 +2827,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else begin rd_addr_0_r <= rd_addr_1_r ; - rd_addr_1_r <= rd_addr_i ; + rd_addr_1_r <= ((rd_en_i & rd_clk_en_i) ? rd_addr_i : rd_addr_1_r) ; end end end @@ -2075,12 +2848,14 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, //------------------------------------------------------------------------------ // Function Definition //------------------------------------------------------------------------------ - function checkINIT ; + function [1:0] checkINIT ; input [31:0] dev_code ; begin case (dev_code) _FCODE_LIFCL_ : checkINIT = 1 ; + _FCODE_AP6_ : + checkINIT = 2 ; default : checkINIT = 0 ; endcase @@ -2095,6 +2870,10 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, getTrueByteWidth = (((dwid_in == 36) || (dwid_in == 32)) ? 4 : (((dwid_in == 18) || (dwid_in == 16)) ? 2 : 1)) ; _FCODE_ICE_ : getTrueByteWidth = ((dwid_in == 16) ? 2 : 1) ; + _FCODE_AP6_ : + getTrueByteWidth = (((dwid_in == 72) || (dwid_in == 64)) ? 8 : (((dwid_in == 36) || (dwid_in == 32)) ? 4 : (((dwid_in == 18) || (dwid_in == 16)) ? 2 : 1))) ; + default : + getTrueByteWidth = 1 ; endcase end endfunction @@ -2146,6 +2925,43 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end _FCODE_ICE_ : procData = (procData * 2) ; + _FCODE_AP6_ : + begin + if (isECC) + begin + if ((procData < 64)) + begin + procData = 64 ; + end + else + begin + procData = (procData * 2) ; + end + end + else + begin + if ((procData < 8)) + begin + procData = (procData * 2) ; + end + else + begin + if ((procData == 8)) + begin + procData = 9 ; + end + else + if (((procData % 9) == 0)) + begin + procData = ((procData / 9) * 16) ; + end + else + begin + procData = ((procData / 8) * 9) ; + end + end + end + end default : procData = TARGET_DATA ; endcase @@ -2178,6 +2994,31 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end _FCODE_ICE_ : getSingularCase = (2 ** clog2(port_use)) ; + _FCODE_AP6_ : + begin + if ((port_use > 64)) + getSingularCase = 72 ; + else + if ((port_use > 36)) + getSingularCase = 64 ; + else + if ((port_use > 32)) + getSingularCase = 36 ; + else + if ((port_use > 18)) + getSingularCase = 32 ; + else + if ((port_use > 16)) + getSingularCase = 18 ; + else + if ((port_use > 9)) + getSingularCase = 16 ; + else + if ((port_use > 8)) + getSingularCase = 9 ; + else + getSingularCase = (2 ** clog2(port_use)) ; + end default : getSingularCase = 8 ; endcase @@ -2193,7 +3034,8 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, input is_ecc ; input [31:0] family_code ; reg [5:0] num0, - num1 ; + num1, + limit ; reg [31:0] divisor, wr_addr_div, wr_data_div, @@ -2213,64 +3055,69 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, begin if ((is_taking_write_port == 1)) begin - getCASE1DataImpl = 32 ; + if ((family_code == _FCODE_AP6_)) + getCASE1DataImpl = 64 ; + else + getCASE1DataImpl = 32 ; end else begin - getCASE1DataImpl = (32 / divisor) ; + if ((family_code == _FCODE_AP6_)) + getCASE1DataImpl = (64 / divisor) ; + else + getCASE1DataImpl = (32 / divisor) ; end end else begin - if ((family_code == _FCODE_LIFCL_)) + if ((((family_code == _FCODE_LIFCL_) && (divisor <= 4)) || ((family_code == _FCODE_AP6_) && (divisor <= 8)))) begin - if ((divisor <= 4)) + limit = ((family_code == _FCODE_LIFCL_) ? 3 : 4) ; + for (num0 = 0 ; (num0 < limit) ; num0 = (num0 + 1)) begin - for (num0 = 0 ; (num0 < 3) ; num0 = (num0 + 1)) + wr_data_div = getDatabase(9, + num0, + family_code) ; + wr_addr_div = data_to_addr(wr_data_div, + family_code) ; + wr_addr_chk = roundUP(wr_addr_depth, + wr_addr_div) ; + wr_data_chk = roundUP(wr_data_width, + wr_data_div) ; + for (num1 = 0 ; (num1 < limit) ; num1 = (num1 + 1)) begin - wr_data_div = getDatabase(9, - num0, + rd_data_div = getDatabase(9, + num1, family_code) ; - wr_addr_div = data_to_addr(wr_data_div, + rd_addr_div = data_to_addr(rd_data_div, family_code) ; - wr_addr_chk = roundUP(wr_addr_depth, - wr_addr_div) ; - wr_data_chk = roundUP(wr_data_width, - wr_data_div) ; - for (num1 = 0 ; (num1 < 3) ; num1 = (num1 + 1)) + rd_addr_chk = roundUP(rd_addr_depth, + rd_addr_div) ; + rd_data_chk = roundUP(rd_data_width, + rd_data_div) ; + if (((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk))) begin - rd_data_div = getDatabase(9, - num1, - family_code) ; - rd_addr_div = data_to_addr(rd_data_div, - family_code) ; - rd_addr_chk = roundUP(rd_addr_depth, - rd_addr_div) ; - rd_data_chk = roundUP(rd_data_width, - rd_data_div) ; - if (((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk))) + if ((((wr_data_width % wr_data_div) == 0) && ((rd_data_width % rd_data_div) == 0))) begin - if ((((wr_data_width % wr_data_div) == 0) && ((rd_data_width % rd_data_div) == 0))) + prod = (wr_addr_chk * wr_data_chk) ; + if ((prod < EBR_usage)) begin - prod = (wr_addr_chk * wr_data_chk) ; - if ((prod < EBR_usage)) - begin - EBR_usage = prod ; - if ((is_taking_total_ebr == 1'b1)) - getCASE1DataImpl = EBR_usage ; - else - if ((is_taking_write_port == 1'b1)) - getCASE1DataImpl = wr_data_div ; - else - getCASE1DataImpl = rd_data_div ; - end + EBR_usage = prod ; + if ((is_taking_total_ebr == 1'b1)) + getCASE1DataImpl = EBR_usage ; + else + if ((is_taking_write_port == 1'b1)) + getCASE1DataImpl = wr_data_div ; + else + getCASE1DataImpl = rd_data_div ; end end end end end end - for (num0 = 0 ; (num0 < 6) ; num0 = (num0 + 1)) + limit = ((family_code == _FCODE_LIFCL_) ? 6 : 7) ; + for (num0 = 0 ; (num0 < limit) ; num0 = (num0 + 1)) begin wr_data_div = getDatabase(8, num0, @@ -2281,7 +3128,7 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, wr_addr_div) ; wr_data_chk = roundUP(wr_data_width, wr_data_div) ; - for (num1 = 0 ; (num1 < 6) ; num1 = (num1 + 1)) + for (num1 = 0 ; (num1 < limit) ; num1 = (num1 + 1)) begin rd_data_div = getDatabase(8, num1, @@ -2322,146 +3169,21 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, input [31:0] rd_data_width ; input is_taking_write_port ; input [31:0] family_code ; - reg [31:0] max_width, - min_width, - byte_size ; - reg [31:0] temp_00, - temp_01, - upper_factor, - lower_factor ; + reg [5:0] num0, + num1, + limit ; + reg [31:0] wr_addr_div, + wr_data_div, + rd_addr_div, + rd_data_div ; reg [31:0] wr_addr_chk, wr_data_chk, rd_addr_chk, - rd_data_chk, - wr_data_div, - rd_data_div ; + rd_data_chk ; + reg [31:0] EBR_usage, + prod ; begin - max_width = ((wr_data_width > rd_data_width) ? wr_data_width : rd_data_width) ; - min_width = ((wr_data_width < rd_data_width) ? wr_data_width : rd_data_width) ; - byte_size = (((max_width % 9) == 0) ? 9 : 8) ; - case (family_code) - _FCODE_LIFCL_ : - begin - if (((max_width / min_width) == 4)) - begin - if ((wr_data_width > rd_data_width)) - begin - if ((is_taking_write_port == 1)) - getCASE1DataImpl_wBen = (4 * byte_size) ; - else - getCASE1DataImpl_wBen = byte_size ; - end - else - begin - if ((is_taking_write_port == 1)) - getCASE1DataImpl_wBen = byte_size ; - else - getCASE1DataImpl_wBen = (4 * byte_size) ; - end - end - else - begin - if ((wr_data_width > rd_data_width)) - begin - wr_addr_chk = roundUP(wr_addr_depth, - data_to_addr(36, - family_code)) ; - wr_data_div = ((byte_size == 9) ? 36 : 32) ; - wr_data_chk = roundUP(wr_data_width, - wr_data_div) ; - rd_addr_chk = roundUP(rd_addr_depth, - data_to_addr(18, - family_code)) ; - rd_data_div = ((byte_size == 9) ? 18 : 16) ; - rd_data_chk = roundUP(rd_data_width, - rd_data_div) ; - if (((((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk)) && ((wr_data_width % wr_data_div) == 0)) && ((rd_data_width % rd_data_div) == 0))) - temp_00 = (wr_addr_chk * wr_data_chk) ; - else - temp_00 = 32'hffffffff ; - wr_addr_chk = roundUP(wr_addr_depth, - data_to_addr(18, - family_code)) ; - wr_data_div = ((byte_size == 9) ? 18 : 16) ; - wr_data_chk = roundUP(wr_data_width, - wr_data_div) ; - rd_addr_chk = roundUP(rd_addr_depth, - data_to_addr(9, - family_code)) ; - rd_data_div = ((byte_size == 9) ? 9 : 8) ; - rd_data_chk = roundUP(rd_data_width, - rd_data_div) ; - if (((((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk)) && ((wr_data_width % wr_data_div) == 0)) && ((rd_data_width % rd_data_div) == 0))) - temp_01 = (wr_addr_chk * wr_data_chk) ; - else - temp_01 = 32'hffffffff ; - if ((temp_00 < temp_01)) - begin - if ((is_taking_write_port == 1)) - getCASE1DataImpl_wBen = (4 * byte_size) ; - else - getCASE1DataImpl_wBen = (2 * byte_size) ; - end - else - begin - if ((is_taking_write_port == 1)) - getCASE1DataImpl_wBen = (2 * byte_size) ; - else - getCASE1DataImpl_wBen = byte_size ; - end - end - else - begin - wr_addr_chk = roundUP(wr_addr_depth, - data_to_addr(18, - family_code)) ; - wr_data_div = ((byte_size == 9) ? 18 : 16) ; - wr_data_chk = roundUP(wr_data_width, - wr_data_div) ; - rd_addr_chk = roundUP(rd_addr_depth, - data_to_addr(36, - family_code)) ; - rd_data_div = ((byte_size == 9) ? 36 : 32) ; - rd_data_chk = roundUP(rd_data_width, - rd_data_div) ; - if (((((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk)) && ((wr_data_width % wr_data_div) == 0)) && ((rd_data_width % rd_data_div) == 0))) - temp_00 = (wr_addr_chk * wr_data_chk) ; - else - temp_00 = 32'hffffffff ; - wr_addr_chk = roundUP(wr_addr_depth, - data_to_addr(9, - family_code)) ; - wr_data_div = ((byte_size == 9) ? 9 : 8) ; - wr_data_chk = roundUP(wr_data_width, - wr_data_div) ; - rd_addr_chk = roundUP(rd_addr_depth, - data_to_addr(18, - family_code)) ; - rd_data_div = ((byte_size == 9) ? 18 : 16) ; - rd_data_chk = roundUP(rd_data_width, - rd_data_div) ; - if (((((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk)) && ((wr_data_width % wr_data_div) == 0)) && ((rd_data_width % rd_data_div) == 0))) - temp_01 = (wr_addr_chk * wr_data_chk) ; - else - temp_01 = 32'hffffffff ; - if ((temp_00 < temp_01)) - begin - if ((is_taking_write_port == 1)) - getCASE1DataImpl_wBen = (2 * byte_size) ; - else - getCASE1DataImpl_wBen = (4 * byte_size) ; - end - else - begin - if ((is_taking_write_port == 1)) - getCASE1DataImpl_wBen = byte_size ; - else - getCASE1DataImpl_wBen = (2 * byte_size) ; - end - end - end - end - _FCODE_ICE_ : + if ((family_code == _FCODE_ICE_)) begin if ((wr_data_width > rd_data_width)) begin @@ -2478,7 +3200,97 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, getCASE1DataImpl_wBen = 16 ; end end - endcase + else + if (((family_code == _FCODE_LIFCL_) || (family_code == _FCODE_AP6_))) + begin + EBR_usage = 32'hffffffff ; + getCASE1DataImpl_wBen = 0 ; + limit = ((family_code == _FCODE_LIFCL_) ? 3 : 4) ; + if (((wr_data_width % 9) == 0)) + begin + for (num0 = 0 ; (num0 < limit) ; num0 = (num0 + 1)) + begin + wr_data_div = getDatabase_wBen(9, + num0, + family_code) ; + wr_addr_div = data_to_addr(wr_data_div, + family_code) ; + wr_addr_chk = roundUP(wr_addr_depth, + wr_addr_div) ; + wr_data_chk = roundUP(wr_data_width, + wr_data_div) ; + for (num1 = 0 ; (num1 < limit) ; num1 = (num1 + 1)) + begin + rd_data_div = getDatabase_wBen(9, + num1, + family_code) ; + rd_addr_div = data_to_addr(rd_data_div, + family_code) ; + rd_addr_chk = roundUP(rd_addr_depth, + rd_addr_div) ; + rd_data_chk = roundUP(rd_data_width, + rd_data_div) ; + if (((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk))) + begin + if ((((wr_data_width % wr_data_div) == 0) && ((rd_data_width % rd_data_div) == 0))) + begin + prod = (wr_addr_chk * wr_data_chk) ; + if ((prod < EBR_usage)) + begin + EBR_usage = prod ; + if ((is_taking_write_port == 1'b1)) + getCASE1DataImpl_wBen = wr_data_div ; + else + getCASE1DataImpl_wBen = rd_data_div ; + end + end + end + end + end + end + else + begin + for (num0 = 0 ; (num0 < limit) ; num0 = (num0 + 1)) + begin + wr_data_div = getDatabase_wBen(8, + num0, + family_code) ; + wr_addr_div = data_to_addr(wr_data_div, + family_code) ; + wr_addr_chk = roundUP(wr_addr_depth, + wr_addr_div) ; + wr_data_chk = roundUP(wr_data_width, + wr_data_div) ; + for (num1 = 0 ; (num1 < limit) ; num1 = (num1 + 1)) + begin + rd_data_div = getDatabase_wBen(8, + num1, + family_code) ; + rd_addr_div = data_to_addr(rd_data_div, + family_code) ; + rd_addr_chk = roundUP(rd_addr_depth, + rd_addr_div) ; + rd_data_chk = roundUP(rd_data_width, + rd_data_div) ; + if (((wr_addr_chk == rd_addr_chk) && (wr_data_chk == rd_data_chk))) + begin + if ((((wr_data_width % wr_data_div) == 0) && ((rd_data_width % rd_data_div) == 0))) + begin + prod = (wr_addr_chk * wr_data_chk) ; + if ((prod < EBR_usage)) + begin + EBR_usage = prod ; + if ((is_taking_write_port == 1'b1)) + getCASE1DataImpl_wBen = wr_data_div ; + else + getCASE1DataImpl_wBen = rd_data_div ; + end + end + end + end + end + end + end end endfunction function [31:0] getDatabase ; @@ -2535,11 +3347,123 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, getDatabase = 16 ; endcase end + _FCODE_AP6_ : + begin + case (base_count) + 9 : + begin + case (index) + 0 : + getDatabase = 9 ; + 1 : + getDatabase = 18 ; + 2 : + getDatabase = 36 ; + default : + getDatabase = 72 ; + endcase + end + 8 : + begin + case (index) + 0 : + getDatabase = 1 ; + 1 : + getDatabase = 2 ; + 2 : + getDatabase = 4 ; + 3 : + getDatabase = 8 ; + 4 : + getDatabase = 16 ; + 5 : + getDatabase = 32 ; + default : + getDatabase = 64 ; + endcase + end + default : + getDatabase = 16 ; + endcase + end default : getDatabase = 8 ; endcase end endfunction + function [31:0] getDatabase_wBen ; + input [31:0] base_count ; + input [31:0] index ; + input [31:0] family_code ; + begin + case (family_code) + _FCODE_LIFCL_ : + begin + case (base_count) + 9 : + begin + case (index) + 0 : + getDatabase_wBen = 9 ; + 1 : + getDatabase_wBen = 18 ; + default : + getDatabase_wBen = 36 ; + endcase + end + 8 : + begin + case (index) + 0 : + getDatabase_wBen = 8 ; + 1 : + getDatabase_wBen = 16 ; + default : + getDatabase_wBen = 32 ; + endcase + end + default : + getDatabase_wBen = 16 ; + endcase + end + _FCODE_AP6_ : + begin + case (base_count) + 9 : + begin + case (index) + 0 : + getDatabase_wBen = 9 ; + 1 : + getDatabase_wBen = 18 ; + 2 : + getDatabase_wBen = 36 ; + default : + getDatabase_wBen = 72 ; + endcase + end + 8 : + begin + case (index) + 0 : + getDatabase_wBen = 8 ; + 1 : + getDatabase_wBen = 16 ; + 2 : + getDatabase_wBen = 32 ; + default : + getDatabase_wBen = 64 ; + endcase + end + default : + getDatabase_wBen = 16 ; + endcase + end + default : + getDatabase_wBen = 8 ; + endcase + end + endfunction function [31:0] data_to_addr ; input [31:0] data_size ; input [31:0] family_code ; @@ -2579,6 +3503,35 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, data_to_addr = 1024 ; 2 : data_to_addr = 2048 ; + default : + data_to_addr = 4096 ; + endcase + end + _FCODE_AP6_ : + begin + case (data_size) + 72 : + data_to_addr = 512 ; + 64 : + data_to_addr = 512 ; + 36 : + data_to_addr = 1024 ; + 32 : + data_to_addr = 1024 ; + 18 : + data_to_addr = 2048 ; + 16 : + data_to_addr = 2048 ; + 9 : + data_to_addr = 4096 ; + 8 : + data_to_addr = 4096 ; + 4 : + data_to_addr = 8192 ; + 2 : + data_to_addr = 16384 ; + default : + data_to_addr = 32768 ; endcase end default : @@ -2619,6 +3572,27 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, addr_to_data = 4 ; 2048 : addr_to_data = 2 ; + default : + addr_to_data = 1 ; + endcase + end + _FCODE_AP6_ : + begin + case (addr_size) + 512 : + addr_to_data = 72 ; + 1024 : + addr_to_data = 36 ; + 2048 : + addr_to_data = 18 ; + 4096 : + addr_to_data = 9 ; + 8192 : + addr_to_data = 4 ; + 16384 : + addr_to_data = 2 ; + default : + addr_to_data = 1 ; endcase end default : @@ -2638,7 +3612,8 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, temp_02, temp_03, temp_04, - temp_05 ; + temp_05, + temp_06 ; begin case (family_code) _FCODE_LIFCL_ : @@ -2684,320 +3659,44 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, 1024, 16) ; temp_02 = EBR_impl(depth_impl, - width_impl, - 2048, - 8) ; - if ((temp_00 < temp_01)) - begin - if ((temp_00 < temp_02)) - begin - if ((temp_00 < temp_03)) - begin - if ((temp_00 < temp_04)) - begin - if ((temp_00 < temp_05)) - getMinimaData = 32 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - else - begin - if ((temp_02 < temp_03)) - begin - if ((temp_02 < temp_04)) - begin - if ((temp_02 < temp_05)) - getMinimaData = 8 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - end - else - begin - if ((temp_01 < temp_02)) - begin - if ((temp_01 < temp_03)) - begin - if ((temp_01 < temp_04)) - begin - if ((temp_01 < temp_05)) - getMinimaData = 16 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - else - begin - if ((temp_02 < temp_03)) - begin - if ((temp_02 < temp_04)) - begin - if ((temp_02 < temp_05)) - getMinimaData = 8 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - end - end - else - begin - if ((temp_00 < temp_01)) - begin - if ((temp_00 < temp_02)) - begin - if ((temp_00 < temp_03)) - begin - if ((temp_00 < temp_04)) - begin - if ((temp_00 < temp_05)) - getMinimaData = 36 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - else - begin - if ((temp_02 < temp_03)) - begin - if ((temp_02 < temp_04)) - begin - if ((temp_02 < temp_05)) - getMinimaData = 9 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - end - else - begin - if ((temp_01 < temp_02)) - begin - if ((temp_01 < temp_03)) - begin - if ((temp_01 < temp_04)) - begin - if ((temp_01 < temp_05)) - getMinimaData = 18 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end + width_impl, + 2048, + 8) ; + if ((((((temp_00 < temp_01) && (temp_00 < temp_02)) && (temp_00 < temp_03)) && (temp_00 < temp_04)) && (temp_00 < temp_05))) + getMinimaData = 32 ; + else + if (((((temp_01 < temp_02) && (temp_01 < temp_03)) && (temp_01 < temp_04)) && (temp_01 < temp_05))) + getMinimaData = 16 ; + else + if ((((temp_02 < temp_03) && (temp_02 < temp_04)) && (temp_02 < temp_05))) + getMinimaData = 8 ; else - begin - if ((temp_02 < temp_03)) - begin - if ((temp_02 < temp_04)) - begin - if ((temp_02 < temp_05)) - getMinimaData = 9 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end + if (((temp_03 < temp_04) && (temp_03 < temp_05))) + getMinimaData = 4 ; + else + if ((temp_04 < temp_05)) + getMinimaData = 2 ; else - begin - if ((temp_03 < temp_04)) - begin - if ((temp_03 < temp_05)) - getMinimaData = 4 ; - else - getMinimaData = 1 ; - end - else - begin - if ((temp_04 < temp_05)) - getMinimaData = 2 ; - else - getMinimaData = 1 ; - end - end - end - end + getMinimaData = 1 ; + end + else + begin + if ((((((temp_00 < temp_01) && (temp_00 < temp_02)) && (temp_00 < temp_03)) && (temp_00 < temp_04)) && (temp_00 < temp_05))) + getMinimaData = 36 ; + else + if (((((temp_01 < temp_02) && (temp_01 < temp_03)) && (temp_01 < temp_04)) && (temp_01 < temp_05))) + getMinimaData = 18 ; + else + if ((((temp_02 < temp_03) && (temp_02 < temp_04)) && (temp_02 < temp_05))) + getMinimaData = 9 ; + else + if (((temp_03 < temp_04) && (temp_03 < temp_05))) + getMinimaData = 4 ; + else + if ((temp_04 < temp_05)) + getMinimaData = 2 ; + else + getMinimaData = 1 ; end end end @@ -3019,38 +3718,112 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, width_impl, 2048, 2) ; - if ((temp_00 < temp_01)) - begin - if ((temp_00 < temp_02)) - begin - if ((temp_00 < temp_03)) - getMinimaData = 16 ; - else - getMinimaData = 2 ; - end + if ((((temp_00 < temp_01) && (temp_00 < temp_02)) && (temp_00 < temp_03))) + getMinimaData = 16 ; + else + if (((temp_01 < temp_02) && (temp_01 < temp_03))) + getMinimaData = 8 ; + else + if ((temp_02 < temp_03)) + getMinimaData = 4 ; else - begin - if ((temp_02 < temp_03)) - getMinimaData = 4 ; - else - getMinimaData = 2 ; - end + getMinimaData = 2 ; + end + _FCODE_AP6_ : + begin + if (is_ecc) + begin + getMinimaData = 64 ; end else begin - if ((temp_01 < temp_02)) + temp_00 = EBR_impl(depth_impl, + width_impl, + 512, + 72) ; + temp_01 = EBR_impl(depth_impl, + width_impl, + 1024, + 36) ; + temp_02 = EBR_impl(depth_impl, + width_impl, + 2048, + 18) ; + temp_03 = EBR_impl(depth_impl, + width_impl, + 4096, + 9) ; + temp_04 = EBR_impl(depth_impl, + width_impl, + 8192, + 4) ; + temp_05 = EBR_impl(depth_impl, + width_impl, + 16384, + 2) ; + temp_06 = EBR_impl(depth_impl, + width_impl, + 32768, + 1) ; + if (((is_byte_enable == 1) && ((width_impl % 9) != 0))) begin - if ((temp_01 < temp_03)) - getMinimaData = 8 ; + temp_00 = EBR_impl(depth_impl, + width_impl, + 512, + 64) ; + temp_01 = EBR_impl(depth_impl, + width_impl, + 1024, + 32) ; + temp_02 = EBR_impl(depth_impl, + width_impl, + 2048, + 16) ; + temp_03 = EBR_impl(depth_impl, + width_impl, + 4096, + 8) ; + if (((((((temp_00 < temp_01) && (temp_00 < temp_02)) && (temp_00 < temp_03)) && (temp_00 < temp_04)) && (temp_00 < temp_05)) && (temp_00 < temp_06))) + getMinimaData = 64 ; else - getMinimaData = 2 ; + if ((((((temp_01 < temp_02) && (temp_01 < temp_03)) && (temp_01 < temp_04)) && (temp_01 < temp_05)) && (temp_01 < temp_06))) + getMinimaData = 32 ; + else + if (((((temp_02 < temp_03) && (temp_02 < temp_04)) && (temp_02 < temp_05)) && (temp_02 < temp_06))) + getMinimaData = 16 ; + else + if ((((temp_03 < temp_04) && (temp_03 < temp_05)) && (temp_03 < temp_06))) + getMinimaData = 8 ; + else + if (((temp_04 < temp_05) && (temp_04 < temp_06))) + getMinimaData = 4 ; + else + if ((temp_05 < temp_06)) + getMinimaData = 2 ; + else + getMinimaData = 1 ; end else begin - if ((temp_02 < temp_03)) - getMinimaData = 4 ; + if (((((((temp_00 < temp_01) && (temp_00 < temp_02)) && (temp_00 < temp_03)) && (temp_00 < temp_04)) && (temp_00 < temp_05)) && (temp_00 < temp_06))) + getMinimaData = 72 ; else - getMinimaData = 2 ; + if ((((((temp_01 < temp_02) && (temp_01 < temp_03)) && (temp_01 < temp_04)) && (temp_01 < temp_05)) && (temp_01 < temp_06))) + getMinimaData = 36 ; + else + if (((((temp_02 < temp_03) && (temp_02 < temp_04)) && (temp_02 < temp_05)) && (temp_02 < temp_06))) + getMinimaData = 18 ; + else + if ((((temp_03 < temp_04) && (temp_03 < temp_05)) && (temp_03 < temp_06))) + getMinimaData = 9 ; + else + if (((temp_04 < temp_05) && (temp_04 < temp_06))) + getMinimaData = 4 ; + else + if ((temp_05 < temp_06)) + getMinimaData = 2 ; + else + getMinimaData = 1 ; end end end @@ -3073,6 +3846,13 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, end _FCODE_ICE_ : getByteSize = 8 ; + _FCODE_AP6_ : + begin + if (((data_width % 9) == 0)) + getByteSize = 9 ; + else + getByteSize = 8 ; + end default : getByteSize = 8 ; endcase @@ -3096,6 +3876,19 @@ module sprite_ram_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1, else is_byte_enable_good = 1'b0 ; end + _FCODE_AP6_ : + begin + if (((max_data / min_data) == 8)) + is_byte_enable_good = ((((max_data % 72) == 0) || ((max_data % 64) == 0)) ? 1'b1 : 1'b0) ; + else + if (((max_data / min_data) == 4)) + is_byte_enable_good = ((((max_data % 36) == 0) || ((max_data % 32) == 0)) ? 1'b1 : 1'b0) ; + else + if (((max_data / min_data) == 2)) + is_byte_enable_good = ((((max_data % 16) == 0) || ((max_data % 18) == 0)) ? 1'b1 : 1'b0) ; + else + is_byte_enable_good = 1'b0 ; + end default : is_byte_enable_good = 1'b0 ; endcase @@ -3153,7 +3946,7 @@ endmodule // ============================================================================= // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // ----------------------------------------------------------------------------- -// Copyright (c) 2017 by Lattice Semiconductor Corporation +// Copyright (c) 2023 by Lattice Semiconductor Corporation // ALL RIGHTS RESERVED // ----------------------------------------------------------------------------- // @@ -3204,11 +3997,12 @@ endmodule // ============================================================================= module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, parameter _FCODE_ICE_ = 2, + parameter _FCODE_AP6_ = 3, parameter _FCODE_COMMON_ = 0, parameter MEM_ID = "MEM0", parameter MEM_SIZE = "[18,1024]", parameter FAMILY = "common", - parameter FAMILY_CODE = ((FAMILY == "LIFCL") ? _FCODE_LIFCL_ : ((FAMILY == "iCE40UP") ? _FCODE_ICE_ : _FCODE_COMMON_)), + parameter FAMILY_CODE = ((FAMILY == "LIFCL") ? _FCODE_LIFCL_ : ((FAMILY == "iCE40UP") ? _FCODE_ICE_ : ((FAMILY == "ap6a00") ? _FCODE_AP6_ : ((FAMILY == "ap6a00b") ? _FCODE_AP6_ : ((FAMILY == "ap6a400") ? _FCODE_AP6_ : ((FAMILY == "LATG1") ? _FCODE_AP6_ : ((FAMILY == "LAV-AT") ? _FCODE_AP6_ : _FCODE_COMMON_))))))), parameter DATA_WIDTH_W = 36, parameter ADDR_WIDTH_W = getAddrWidth(DATA_WIDTH_W, FAMILY_CODE), @@ -3221,6 +4015,7 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, parameter RESET_RELEASE = "sync", parameter INIT_FILE = "none", parameter INIT_FILE_FORMAT = "binary", + parameter INIT_DATA = "DYNAMIC", parameter INIT_MODE = "none", parameter BYTE_ENABLE = 0, parameter BYTE_WIDTH = ((BYTE_ENABLE == 1) ? getByteWidth(DATA_WIDTH_W, @@ -3298,7 +4093,71 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, parameter INIT_VALUE_3C = "0x0000000000000000000000000000000000000000000000000000000000000000", parameter INIT_VALUE_3D = "0x0000000000000000000000000000000000000000000000000000000000000000", parameter INIT_VALUE_3E = "0x0000000000000000000000000000000000000000000000000000000000000000", - parameter INIT_VALUE_3F = "0x0000000000000000000000000000000000000000000000000000000000000000") ( + parameter INIT_VALUE_3F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_40 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_41 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_42 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_43 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_44 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_45 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_46 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_47 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_48 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_49 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_4F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_50 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_51 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_52 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_53 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_54 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_55 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_56 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_57 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_58 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_59 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_5F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_60 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_61 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_62 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_63 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_64 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_65 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_66 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_67 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_68 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_69 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_6F = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_70 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_71 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_72 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_73 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_74 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_75 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_76 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_77 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_78 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_79 = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7A = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7B = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7C = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7D = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7E = "0x0000000000000000000000000000000000000000000000000000000000000000", + parameter INIT_VALUE_7F = "0x0000000000000000000000000000000000000000000000000000000000000000") ( //unused // ----------------------------------------------------------------------------- // Input/Output Ports @@ -3340,11 +4199,10 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, localparam [79:0] NUM_STRING = "9876543210" ; localparam BLOCK_POS = getStringFromPos(POSx, POSy) ; - localparam BLOCK_SIZE = ((DATA_WIDTH_W == 36) ? "[36,512]" : ((DATA_WIDTH_W == 32) ? "[32,512]" : ((DATA_WIDTH_W == 18) ? "[18,1024]" : ((DATA_WIDTH_W == 16) ? "[16,1024]" : ((DATA_WIDTH_W == 9) ? "[9,2048]" : ((DATA_WIDTH_W == 8) ? "[8,2048]" : ((DATA_WIDTH_W == 4) ? "[4,4096]" : ((DATA_WIDTH_W == 2) ? "[2,8192]" : "[1,16384]")))))))) ; + localparam BLOCK_SIZE = ((DATA_WIDTH_W == 72) ? "[72,512]" : ((DATA_WIDTH_W == 64) ? "[64,512]" : ((DATA_WIDTH_W == 36) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[36,1024]" : "[36,512]") : ((DATA_WIDTH_W == 32) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[32,1024]" : "[32,512]") : ((DATA_WIDTH_W == 18) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[18,2048]" : "[18,1024]") : ((DATA_WIDTH_W == 16) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[16,2048]" : "[16,1024]") : ((DATA_WIDTH_W == 9) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[9,4096]" : "[9,2048]") : ((DATA_WIDTH_W == 8) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[8,4096]" : "[8,2048]") : ((DATA_WIDTH_W == 4) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[4,8192]" : "[4,4096]") : ((DATA_WIDTH_W == 2) ? ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[2,16384]" : "[2,8192]") : ((((((FAMILY == "ap6a400") || (FAMILY == "ap6a00b")) || (FAMILY == "ap6a00")) || (FAMILY == "LATG1")) || (FAMILY == "LAV-AT")) ? "[1,32768]" : "[1,16384]"))))))))))) ; // ----------------------------------------------------------------------------- // Generate Sequential Blocks // ----------------------------------------------------------------------------- - genvar i0 ; generate if ((FAMILY_CODE == _FCODE_ICE_)) begin : ICE_MEM @@ -3355,6 +4213,7 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, wire [15:0] mask_w ; wire [15:0] mask_t_w ; wire [(DATA_WIDTH_R - 1):0] rd_data_w ; + genvar i0 ; for (i0 = 0;(i0 < 16);i0 = (i0 + 1)) begin : genblk1 if ((i0 < 8)) @@ -3892,7 +4751,7 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, begin if ((rst_i == 1'b1)) begin - rd_buff_r <= 'h0 ; + rd_buff_r <= {DATA_WIDTH_R{1'b0}} ; end else begin @@ -3912,7 +4771,7 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, begin if ((rst_i == 1'b1)) begin - rd_buff_r <= 'h0 ; + rd_buff_r <= {DATA_WIDTH_R{1'b0}} ; end else begin @@ -3930,7 +4789,7 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, begin if ((rst_i == 1'b1)) begin - rd_buff_r = 'h0 ; + rd_buff_r = {DATA_WIDTH_R{1'b0}} ; end else begin @@ -3953,8 +4812,8 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, localparam OUTREG = ((REGMODE == "reg") ? ((OUTPUT_CLK_EN == 0) ? "USED" : "BYPASSED") : "BYPASSED") ; localparam TRUE_CSW = ((CSDECODE_W == 0) ? "000" : ((CSDECODE_W == 1) ? "001" : ((CSDECODE_W == 2) ? "010" : ((CSDECODE_W == 3) ? "011" : ((CSDECODE_W == 4) ? "100" : ((CSDECODE_W == 5) ? "101" : ((CSDECODE_W == 6) ? "110" : "111"))))))) ; localparam TRUE_CSR = ((CSDECODE_R == 0) ? "000" : ((CSDECODE_R == 1) ? "001" : ((CSDECODE_R == 2) ? "010" : ((CSDECODE_R == 3) ? "011" : ((CSDECODE_R == 4) ? "100" : ((CSDECODE_R == 5) ? "101" : ((CSDECODE_R == 6) ? "110" : "111"))))))) ; - localparam DW_W = (((DATA_WIDTH_W == 36) || (DATA_WIDTH_W == 32)) ? "X36" : (((DATA_WIDTH_W == 18) || (DATA_WIDTH_W == 16)) ? "X18" : (((DATA_WIDTH_W == 9) || (DATA_WIDTH_W == 8)) ? "X9" : ((DATA_WIDTH_W == 4) ? "X4" : ((DATA_WIDTH_W == 2) ? "X2" : "X1"))))) ; - localparam DW_R = (((DATA_WIDTH_R == 36) || (DATA_WIDTH_R == 32)) ? "X36" : (((DATA_WIDTH_R == 18) || (DATA_WIDTH_R == 16)) ? "X18" : (((DATA_WIDTH_R == 9) || (DATA_WIDTH_R == 8)) ? "X9" : ((DATA_WIDTH_R == 4) ? "X4" : ((DATA_WIDTH_R == 2) ? "X2" : "X1"))))) ; + localparam DW_W = (ECC_ENABLE ? "X32" : (((DATA_WIDTH_W == 36) || (DATA_WIDTH_W == 32)) ? "X36" : (((DATA_WIDTH_W == 18) || (DATA_WIDTH_W == 16)) ? "X18" : (((DATA_WIDTH_W == 9) || (DATA_WIDTH_W == 8)) ? "X9" : ((DATA_WIDTH_W == 4) ? "X4" : ((DATA_WIDTH_W == 2) ? "X2" : "X1")))))) ; + localparam DW_R = (ECC_ENABLE ? "X32" : (((DATA_WIDTH_R == 36) || (DATA_WIDTH_R == 32)) ? "X36" : (((DATA_WIDTH_R == 18) || (DATA_WIDTH_R == 16)) ? "X18" : (((DATA_WIDTH_R == 9) || (DATA_WIDTH_R == 8)) ? "X9" : ((DATA_WIDTH_R == 4) ? "X4" : ((DATA_WIDTH_R == 2) ? "X2" : "X1")))))) ; localparam TRUE_RST = ((RESETMODE == "sync") ? "SYNC" : "ASYNC") ; localparam TRUE_RST_REL = ((RESET_RELEASE == "sync") ? "SYNC" : "ASYNC") ; localparam TRUE_ECC = (((ECC_ENABLE == 1) && (DATA_WIDTH_W == 32)) ? "ENABLED" : "DISABLED") ; @@ -3964,6 +4823,7 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, wire [35:0] w_data_w ; wire [35:0] r_data_w ; wire [(DATA_WIDTH_R - 1):0] rd_data_w ; + wire rd_en_w ; if (((REGMODE == "noreg") || (OUTPUT_CLK_EN == 0))) begin : genblk1 assign rd_data_o = rd_data_w ; @@ -4179,15 +5039,55 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, assign r_addr_w[0] = rd_addr_i[0] ; assign rd_data_w = r_data_w[0] ; end + if ((OUTREG == "BYPASSED")) + begin : genblk4 + assign rd_en_w = rd_en_i ; + end + else + begin : genblk4 + reg rd_en_r ; + assign rd_en_w = (rd_en_i | rd_en_r) ; + if ((RESETMODE == "sync")) + begin : genblk1 + always + @(posedge rd_clk_i) + begin + if (rst_i) + begin + rd_en_r <= 1'b0 ; + end + else + begin + rd_en_r <= rd_en_i ; + end + end + end + else + begin : genblk1 + always + @(posedge rd_clk_i or + posedge rst_i) + begin + if (rst_i) + begin + rd_en_r <= 1'b0 ; + end + else + begin + rd_en_r <= rd_en_i ; + end + end + end + end wire t_wr_en_i = ((BYTE_ENABLE == 0) ? wr_en_i : ((BYTE_WIDTH > 1) ? wr_en_i : (wr_en_i & ben_i))) ; - wire t_rd_en_i = rd_en_i ; + wire t_rd_en_i = (((OUTREG == "USED") && (RESETMODE == "sync")) ? (rd_en_w | rst_i) : rd_en_w) ; wire [35:0] DI = w_data_w ; wire [13:0] ADW = w_addr_w ; wire [13:0] ADR = r_addr_w ; wire CLKW = wr_clk_i ; wire CLKR = rd_clk_i ; wire CEW = wr_clk_en_i ; - wire CER = rd_clk_en_i ; + wire CER = (((OUTREG == "USED") && (RESETMODE == "sync")) ? (rd_clk_en_i | rst_i) : rd_clk_en_i) ; wire [2:0] CSW = {t_wr_en_i, t_wr_en_i, t_wr_en_i} ; @@ -4221,7 +5121,7 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, defparam pdp16k.CSDECODE_W = TRUE_CSW ; defparam pdp16k.CSDECODE_R = TRUE_CSR ; defparam pdp16k.ASYNC_RST_RELEASE = TRUE_RST_REL ; - defparam pdp16k.INIT_DATA = "DYNAMIC" ; + defparam pdp16k.INIT_DATA = INIT_DATA ; defparam pdp16k.ECC = (ECC_ENABLE ? "ENABLED" : "DISABLED") ; defparam pdp16k.INITVAL_00 = ((INIT_MODE == "mem_file") ? INIT_VALUE_00 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; defparam pdp16k.INITVAL_01 = ((INIT_MODE == "mem_file") ? INIT_VALUE_01 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; @@ -4288,6 +5188,400 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, defparam pdp16k.INITVAL_3E = ((INIT_MODE == "mem_file") ? INIT_VALUE_3E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; defparam pdp16k.INITVAL_3F = ((INIT_MODE == "mem_file") ? INIT_VALUE_3F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; end + else + if ((FAMILY_CODE == _FCODE_AP6_)) + begin : AP6_MEM + localparam OUTREG = ((REGMODE == "reg") ? "USED" : "BYPASSED") ; + localparam TRUE_CSW = ((CSDECODE_W == 0) ? "000" : ((CSDECODE_W == 1) ? "001" : ((CSDECODE_W == 2) ? "010" : ((CSDECODE_W == 3) ? "011" : ((CSDECODE_W == 4) ? "100" : ((CSDECODE_W == 5) ? "101" : ((CSDECODE_W == 6) ? "110" : "111"))))))) ; + localparam TRUE_CSR = ((CSDECODE_R == 0) ? "000" : ((CSDECODE_R == 1) ? "001" : ((CSDECODE_R == 2) ? "010" : ((CSDECODE_R == 3) ? "011" : ((CSDECODE_R == 4) ? "100" : ((CSDECODE_R == 5) ? "101" : ((CSDECODE_R == 6) ? "110" : "111"))))))) ; + localparam DW_W = (ECC_ENABLE ? "X64" : (((DATA_WIDTH_W == 72) || (DATA_WIDTH_W == 64)) ? "X72" : (((DATA_WIDTH_W == 36) || (DATA_WIDTH_W == 32)) ? "X36" : (((DATA_WIDTH_W == 18) || (DATA_WIDTH_W == 16)) ? "X18" : (((DATA_WIDTH_W == 9) || (DATA_WIDTH_W == 8)) ? "X9" : ((DATA_WIDTH_W == 4) ? "X4" : ((DATA_WIDTH_W == 2) ? "X2" : "X1"))))))) ; + localparam DW_R = (ECC_ENABLE ? "X64" : (((DATA_WIDTH_R == 72) || (DATA_WIDTH_R == 64)) ? "X72" : (((DATA_WIDTH_R == 36) || (DATA_WIDTH_R == 32)) ? "X36" : (((DATA_WIDTH_R == 18) || (DATA_WIDTH_R == 16)) ? "X18" : (((DATA_WIDTH_R == 9) || (DATA_WIDTH_R == 8)) ? "X9" : ((DATA_WIDTH_R == 4) ? "X4" : ((DATA_WIDTH_R == 2) ? "X2" : "X1"))))))) ; + localparam TRUE_RST = ((RESETMODE == "sync") ? "SYNC" : "ASYNC") ; + localparam TRUE_RST_REL = ((RESET_RELEASE == "sync") ? "SYNC" : "ASYNC") ; + localparam TRUE_ECC = (((ECC_ENABLE == 1) && (DATA_WIDTH_W == 64)) ? "ENABLED" : "DISABLED") ; + localparam TRUE_GSR = ((GSR == "disabled") ? "DISABLED" : "ENABLED") ; + wire [14:0] w_addr_w ; + wire [14:0] r_addr_w ; + wire [71:0] w_data_w ; + wire [71:0] r_data_w ; + wire [(DATA_WIDTH_R - 1):0] rd_data_w ; + if (((DATA_WIDTH_W == 72) || (DATA_WIDTH_W == 64))) + begin : genblk1 + assign w_addr_w[14:6] = wr_addr_i ; + assign w_addr_w[5:0] = ((BYTE_ENABLE == 1) ? ben_i[5:0] : 6'b11_1111) ; + if ((DATA_WIDTH_W == 72)) + begin : genblk1 + assign w_data_w = wr_data_i ; + end + else + begin : genblk1 + assign w_data_w[71] = 1'b0 ; + assign w_data_w[62] = 1'b0 ; + assign w_data_w[53] = 1'b0 ; + assign w_data_w[44] = 1'b0 ; + assign w_data_w[35] = 1'b0 ; + assign w_data_w[26] = 1'b0 ; + assign w_data_w[17] = 1'b0 ; + assign w_data_w[8] = 1'b0 ; + assign w_data_w[70:63] = wr_data_i[63:56] ; + assign w_data_w[61:54] = wr_data_i[55:48] ; + assign w_data_w[52:45] = wr_data_i[47:40] ; + assign w_data_w[43:36] = wr_data_i[39:32] ; + assign w_data_w[34:27] = wr_data_i[31:24] ; + assign w_data_w[25:18] = wr_data_i[23:16] ; + assign w_data_w[16:9] = wr_data_i[15:8] ; + assign w_data_w[7:0] = wr_data_i[7:0] ; + end + end + else + if (((DATA_WIDTH_W == 36) || (DATA_WIDTH_W == 32))) + begin : genblk1 + assign w_addr_w[14:5] = wr_addr_i ; + assign w_addr_w[4] = 1'b1 ; + assign w_addr_w[3:0] = ((BYTE_ENABLE == 1) ? ben_i : 4'b1111) ; + assign w_data_w[71:36] = {36{1'b0}} ; + if ((DATA_WIDTH_W == 36)) + begin : genblk1 + assign w_data_w = wr_data_i ; + end + else + begin : genblk1 + assign w_data_w[35] = 1'b0 ; + assign w_data_w[26] = 1'b0 ; + assign w_data_w[17] = 1'b0 ; + assign w_data_w[8] = 1'b0 ; + assign w_data_w[34:27] = wr_data_i[31:24] ; + assign w_data_w[25:18] = wr_data_i[23:16] ; + assign w_data_w[16:9] = wr_data_i[15:8] ; + assign w_data_w[7:0] = wr_data_i[7:0] ; + end + end + else + if (((DATA_WIDTH_W == 18) || (DATA_WIDTH_W == 16))) + begin : genblk1 + assign w_addr_w[14:4] = wr_addr_i ; + assign w_addr_w[3] = ((BYTE_ENABLE == 1) ? ben_i[1] : 1'b1) ; + assign w_addr_w[2] = ((BYTE_ENABLE == 1) ? ben_i[0] : 1'b1) ; + assign w_addr_w[1] = ((BYTE_ENABLE == 1) ? ben_i[1] : 1'b1) ; + assign w_addr_w[0] = ((BYTE_ENABLE == 1) ? ben_i[0] : 1'b1) ; + assign w_data_w[71:18] = {54{1'b0}} ; + if ((DATA_WIDTH_W == 18)) + begin : genblk1 + assign w_data_w[17:0] = wr_data_i ; + end + else + begin : genblk1 + assign w_data_w[17] = 1'b0 ; + assign w_data_w[8] = 1'b0 ; + assign w_data_w[16:9] = wr_data_i[15:8] ; + assign w_data_w[7:0] = wr_data_i[7:0] ; + end + end + else + if (((DATA_WIDTH_W == 9) || (DATA_WIDTH_W == 8))) + begin : genblk1 + assign w_addr_w[14:3] = wr_addr_i ; + assign w_addr_w[2:0] = 3'b111 ; + assign w_data_w[71:9] = {63{1'b0}} ; + if ((DATA_WIDTH_W == 9)) + begin: genblk1 + assign w_data_w[8:0] = wr_data_i ; + end + else + begin: genblk1 + assign w_data_w[8:0] = {1'b0, + wr_data_i} ; + end + end + else + if ((DATA_WIDTH_W == 4)) + begin : genblk1 + assign w_addr_w[14:2] = wr_addr_i ; + assign w_addr_w[1:0] = 2'b11 ; + assign w_data_w[71:4] = {68{1'b0}} ; + assign w_data_w[3:0] = wr_data_i ; + end + else + if ((DATA_WIDTH_W == 2)) + begin : genblk1 + assign w_addr_w[14:1] = wr_addr_i ; + assign w_addr_w[0] = 1'b1 ; + assign w_data_w[71:2] = {70{1'b0}} ; + assign w_data_w[1:0] = wr_data_i ; + end + else + begin : genblk1 + assign w_addr_w[14:0] = wr_addr_i ; + assign w_data_w[71:1] = {71{1'b0}} ; + assign w_data_w[0] = wr_data_i ; + end + if (((DATA_WIDTH_R == 72) || (DATA_WIDTH_R == 64))) + begin : genblk2 + assign r_addr_w[14:6] = rd_addr_i ; + assign r_addr_w[5:0] = 6'b11_1111 ; + if ((DATA_WIDTH_R == 72)) + begin : genblk1 + assign rd_data_w = r_data_w ; + end + else + begin : genblk1 + assign rd_data_w[63:56] = r_data_w[70:63] ; + assign rd_data_w[55:48] = r_data_w[61:54] ; + assign rd_data_w[47:40] = r_data_w[52:45] ; + assign rd_data_w[39:32] = r_data_w[43:36] ; + assign rd_data_w[31:24] = r_data_w[34:27] ; + assign rd_data_w[23:16] = r_data_w[25:18] ; + assign rd_data_w[15:8] = r_data_w[16:9] ; + assign rd_data_w[7:0] = r_data_w[7:0] ; + end + end + else + if (((DATA_WIDTH_R == 36) || (DATA_WIDTH_R == 32))) + begin : genblk2 + assign r_addr_w[14:5] = rd_addr_i ; + assign r_addr_w[4] = 1'b1 ; + assign r_addr_w[3:0] = 4'b1111 ; + if ((DATA_WIDTH_R == 36)) + begin : genblk1 + assign rd_data_w[35:0] = r_data_w[35:0] ; + end + else + begin : genblk1 + assign rd_data_w[31:24] = r_data_w[34:27] ; + assign rd_data_w[23:16] = r_data_w[25:18] ; + assign rd_data_w[15:8] = r_data_w[16:9] ; + assign rd_data_w[7:0] = r_data_w[7:0] ; + end + end + else + if (((DATA_WIDTH_R == 18) || (DATA_WIDTH_R == 16))) + begin : genblk2 + assign r_addr_w[14:4] = rd_addr_i ; + assign r_addr_w[3:2] = 2'b11 ; + assign r_addr_w[1:0] = 2'b11 ; + if ((DATA_WIDTH_R == 18)) + begin : genblk1 + assign rd_data_w[17:0] = r_data_w[17:0] ; + end + else + begin : genblk1 + assign rd_data_w[15:8] = r_data_w[16:9] ; + assign rd_data_w[7:0] = r_data_w[7:0] ; + end + end + else + if (((DATA_WIDTH_R == 9) || (DATA_WIDTH_R == 8))) + begin : genblk2 + assign r_addr_w[14:3] = rd_addr_i ; + assign r_addr_w[2:0] = 3'b111 ; + if ((DATA_WIDTH_R == 9)) + begin: genblk1 + assign rd_data_w[8:0] = r_data_w[8:0] ; + end + else + begin: genblk1 + assign rd_data_w[7:0] = r_data_w[7:0] ; + end + end + else + if ((DATA_WIDTH_R == 4)) + begin : genblk2 + assign r_addr_w[14:2] = rd_addr_i ; + assign r_addr_w[1:0] = 2'b11 ; + assign rd_data_w = r_data_w[3:0] ; + end + else + if ((DATA_WIDTH_R == 2)) + begin : genblk2 + assign r_addr_w[14:1] = rd_addr_i ; + assign r_addr_w[0] = 1'b1 ; + assign rd_data_w = r_data_w[1:0] ; + end + else + begin : genblk2 + assign r_addr_w[14:0] = rd_addr_i ; + assign rd_data_w = r_data_w[0] ; + end + assign rd_data_o = rd_data_w ; + wire t_wr_en_i = ((BYTE_ENABLE == 0) ? wr_en_i : ((BYTE_WIDTH > 1) ? wr_en_i : (wr_en_i & ben_i))) ; + wire t_rd_en_i = (((RESETMODE == "sync") && (REGMODE == "reg")) ? (rd_en_i | rst_i) : rd_en_i) ; + wire [71:0] DI = w_data_w ; + wire [14:0] ADW = w_addr_w ; + wire [14:0] ADR = r_addr_w ; + wire CLKW = wr_clk_i ; + wire CLKR = rd_clk_i ; + wire CEW = wr_clk_en_i ; + wire CER = (((RESETMODE == "sync") && (REGMODE == "reg")) ? (rd_clk_en_i | rst_i) : rd_clk_en_i) ; + wire [2:0] CSW = {t_wr_en_i, + t_wr_en_i, + t_wr_en_i} ; + wire [2:0] CSR = {t_rd_en_i, + t_rd_en_i, + t_rd_en_i} ; + wire RST = rst_i ; + wire [71:0] DO ; + wire BE6 = (((BYTE_ENABLE == 1) && (BYTE_WIDTH == 8)) ? ben_i[6] : 1'b1) ; + wire BE7 = (((BYTE_ENABLE == 1) && (BYTE_WIDTH == 8)) ? ben_i[7] : 1'b1) ; + wire OCE = rd_out_clk_en_i ; + assign r_data_w = DO ; + localparam MEM_TYPE = "EBR" ; + localparam T_MEM_SIZE = {"[", + MEM_SIZE, + "]"} ; + (* ECO_MEM_TYPE=MEM_TYPE, ECO_MEM_ID=MEM_ID, ECO_MEM_SIZE=T_MEM_SIZE, ECO_MEM_BLOCK_SIZE=BLOCK_SIZE, ECO_MEM_BLOCK_POS=BLOCK_POS *) PDP32K pdp32k (.DI(DI), + .ADW(ADW), + .ADR(ADR), + .CLKW(CLKW), + .CLKR(CLKR), + .CEW(CEW), + .CER(CER), + .OCE(OCE), + .BE6(BE6), + .BE7(BE7), + .CSW(CSW), + .CSR(CSR), + .RST(RST), + .DO(DO), + .ONEBITERR(one_err_det_o), + .TWOBITERR(two_err_det_o)) ; + defparam pdp32k.DATA_WIDTH_W = DW_W ; + defparam pdp32k.DATA_WIDTH_R = DW_R ; + defparam pdp32k.OUTREG = OUTREG ; + defparam pdp32k.RESETMODE = TRUE_RST ; + defparam pdp32k.CSDECODE_W = TRUE_CSW ; + defparam pdp32k.CSDECODE_R = TRUE_CSR ; + defparam pdp32k.ASYNC_RST_RELEASE = TRUE_RST_REL ; + defparam pdp32k.INIT_DATA = INIT_DATA ; + defparam pdp32k.ECC = (ECC_ENABLE ? "ENABLED" : "DISABLED") ; + defparam pdp32k.INITVAL_00 = ((INIT_MODE == "mem_file") ? INIT_VALUE_00 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_01 = ((INIT_MODE == "mem_file") ? INIT_VALUE_01 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_02 = ((INIT_MODE == "mem_file") ? INIT_VALUE_02 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_03 = ((INIT_MODE == "mem_file") ? INIT_VALUE_03 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_04 = ((INIT_MODE == "mem_file") ? INIT_VALUE_04 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_05 = ((INIT_MODE == "mem_file") ? INIT_VALUE_05 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_06 = ((INIT_MODE == "mem_file") ? INIT_VALUE_06 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_07 = ((INIT_MODE == "mem_file") ? INIT_VALUE_07 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_08 = ((INIT_MODE == "mem_file") ? INIT_VALUE_08 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_09 = ((INIT_MODE == "mem_file") ? INIT_VALUE_09 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_0A = ((INIT_MODE == "mem_file") ? INIT_VALUE_0A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_0B = ((INIT_MODE == "mem_file") ? INIT_VALUE_0B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_0C = ((INIT_MODE == "mem_file") ? INIT_VALUE_0C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_0D = ((INIT_MODE == "mem_file") ? INIT_VALUE_0D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_0E = ((INIT_MODE == "mem_file") ? INIT_VALUE_0E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_0F = ((INIT_MODE == "mem_file") ? INIT_VALUE_0F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_10 = ((INIT_MODE == "mem_file") ? INIT_VALUE_10 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_11 = ((INIT_MODE == "mem_file") ? INIT_VALUE_11 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_12 = ((INIT_MODE == "mem_file") ? INIT_VALUE_12 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_13 = ((INIT_MODE == "mem_file") ? INIT_VALUE_13 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_14 = ((INIT_MODE == "mem_file") ? INIT_VALUE_14 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_15 = ((INIT_MODE == "mem_file") ? INIT_VALUE_15 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_16 = ((INIT_MODE == "mem_file") ? INIT_VALUE_16 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_17 = ((INIT_MODE == "mem_file") ? INIT_VALUE_17 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_18 = ((INIT_MODE == "mem_file") ? INIT_VALUE_18 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_19 = ((INIT_MODE == "mem_file") ? INIT_VALUE_19 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_1A = ((INIT_MODE == "mem_file") ? INIT_VALUE_1A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_1B = ((INIT_MODE == "mem_file") ? INIT_VALUE_1B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_1C = ((INIT_MODE == "mem_file") ? INIT_VALUE_1C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_1D = ((INIT_MODE == "mem_file") ? INIT_VALUE_1D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_1E = ((INIT_MODE == "mem_file") ? INIT_VALUE_1E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_1F = ((INIT_MODE == "mem_file") ? INIT_VALUE_1F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_20 = ((INIT_MODE == "mem_file") ? INIT_VALUE_20 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_21 = ((INIT_MODE == "mem_file") ? INIT_VALUE_21 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_22 = ((INIT_MODE == "mem_file") ? INIT_VALUE_22 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_23 = ((INIT_MODE == "mem_file") ? INIT_VALUE_23 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_24 = ((INIT_MODE == "mem_file") ? INIT_VALUE_24 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_25 = ((INIT_MODE == "mem_file") ? INIT_VALUE_25 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_26 = ((INIT_MODE == "mem_file") ? INIT_VALUE_26 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_27 = ((INIT_MODE == "mem_file") ? INIT_VALUE_27 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_28 = ((INIT_MODE == "mem_file") ? INIT_VALUE_28 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_29 = ((INIT_MODE == "mem_file") ? INIT_VALUE_29 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_2A = ((INIT_MODE == "mem_file") ? INIT_VALUE_2A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_2B = ((INIT_MODE == "mem_file") ? INIT_VALUE_2B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_2C = ((INIT_MODE == "mem_file") ? INIT_VALUE_2C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_2D = ((INIT_MODE == "mem_file") ? INIT_VALUE_2D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_2E = ((INIT_MODE == "mem_file") ? INIT_VALUE_2E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_2F = ((INIT_MODE == "mem_file") ? INIT_VALUE_2F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_30 = ((INIT_MODE == "mem_file") ? INIT_VALUE_30 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_31 = ((INIT_MODE == "mem_file") ? INIT_VALUE_31 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_32 = ((INIT_MODE == "mem_file") ? INIT_VALUE_32 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_33 = ((INIT_MODE == "mem_file") ? INIT_VALUE_33 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_34 = ((INIT_MODE == "mem_file") ? INIT_VALUE_34 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_35 = ((INIT_MODE == "mem_file") ? INIT_VALUE_35 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_36 = ((INIT_MODE == "mem_file") ? INIT_VALUE_36 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_37 = ((INIT_MODE == "mem_file") ? INIT_VALUE_37 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_38 = ((INIT_MODE == "mem_file") ? INIT_VALUE_38 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_39 = ((INIT_MODE == "mem_file") ? INIT_VALUE_39 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_3A = ((INIT_MODE == "mem_file") ? INIT_VALUE_3A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_3B = ((INIT_MODE == "mem_file") ? INIT_VALUE_3B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_3C = ((INIT_MODE == "mem_file") ? INIT_VALUE_3C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_3D = ((INIT_MODE == "mem_file") ? INIT_VALUE_3D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_3E = ((INIT_MODE == "mem_file") ? INIT_VALUE_3E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_3F = ((INIT_MODE == "mem_file") ? INIT_VALUE_3F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_40 = ((INIT_MODE == "mem_file") ? INIT_VALUE_40 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_41 = ((INIT_MODE == "mem_file") ? INIT_VALUE_41 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_42 = ((INIT_MODE == "mem_file") ? INIT_VALUE_42 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_43 = ((INIT_MODE == "mem_file") ? INIT_VALUE_43 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_44 = ((INIT_MODE == "mem_file") ? INIT_VALUE_44 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_45 = ((INIT_MODE == "mem_file") ? INIT_VALUE_45 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_46 = ((INIT_MODE == "mem_file") ? INIT_VALUE_46 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_47 = ((INIT_MODE == "mem_file") ? INIT_VALUE_47 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_48 = ((INIT_MODE == "mem_file") ? INIT_VALUE_48 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_49 = ((INIT_MODE == "mem_file") ? INIT_VALUE_49 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_4A = ((INIT_MODE == "mem_file") ? INIT_VALUE_4A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_4B = ((INIT_MODE == "mem_file") ? INIT_VALUE_4B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_4C = ((INIT_MODE == "mem_file") ? INIT_VALUE_4C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_4D = ((INIT_MODE == "mem_file") ? INIT_VALUE_4D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_4E = ((INIT_MODE == "mem_file") ? INIT_VALUE_4E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_4F = ((INIT_MODE == "mem_file") ? INIT_VALUE_4F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_50 = ((INIT_MODE == "mem_file") ? INIT_VALUE_50 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_51 = ((INIT_MODE == "mem_file") ? INIT_VALUE_51 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_52 = ((INIT_MODE == "mem_file") ? INIT_VALUE_52 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_53 = ((INIT_MODE == "mem_file") ? INIT_VALUE_53 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_54 = ((INIT_MODE == "mem_file") ? INIT_VALUE_54 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_55 = ((INIT_MODE == "mem_file") ? INIT_VALUE_55 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_56 = ((INIT_MODE == "mem_file") ? INIT_VALUE_56 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_57 = ((INIT_MODE == "mem_file") ? INIT_VALUE_57 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_58 = ((INIT_MODE == "mem_file") ? INIT_VALUE_58 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_59 = ((INIT_MODE == "mem_file") ? INIT_VALUE_59 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_5A = ((INIT_MODE == "mem_file") ? INIT_VALUE_5A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_5B = ((INIT_MODE == "mem_file") ? INIT_VALUE_5B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_5C = ((INIT_MODE == "mem_file") ? INIT_VALUE_5C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_5D = ((INIT_MODE == "mem_file") ? INIT_VALUE_5D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_5E = ((INIT_MODE == "mem_file") ? INIT_VALUE_5E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_5F = ((INIT_MODE == "mem_file") ? INIT_VALUE_5F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_60 = ((INIT_MODE == "mem_file") ? INIT_VALUE_60 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_61 = ((INIT_MODE == "mem_file") ? INIT_VALUE_61 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_62 = ((INIT_MODE == "mem_file") ? INIT_VALUE_62 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_63 = ((INIT_MODE == "mem_file") ? INIT_VALUE_63 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_64 = ((INIT_MODE == "mem_file") ? INIT_VALUE_64 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_65 = ((INIT_MODE == "mem_file") ? INIT_VALUE_65 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_66 = ((INIT_MODE == "mem_file") ? INIT_VALUE_66 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_67 = ((INIT_MODE == "mem_file") ? INIT_VALUE_67 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_68 = ((INIT_MODE == "mem_file") ? INIT_VALUE_68 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_69 = ((INIT_MODE == "mem_file") ? INIT_VALUE_69 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_6A = ((INIT_MODE == "mem_file") ? INIT_VALUE_6A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_6B = ((INIT_MODE == "mem_file") ? INIT_VALUE_6B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_6C = ((INIT_MODE == "mem_file") ? INIT_VALUE_6C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_6D = ((INIT_MODE == "mem_file") ? INIT_VALUE_6D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_6E = ((INIT_MODE == "mem_file") ? INIT_VALUE_6E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_6F = ((INIT_MODE == "mem_file") ? INIT_VALUE_6F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_70 = ((INIT_MODE == "mem_file") ? INIT_VALUE_70 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_71 = ((INIT_MODE == "mem_file") ? INIT_VALUE_71 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_72 = ((INIT_MODE == "mem_file") ? INIT_VALUE_72 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_73 = ((INIT_MODE == "mem_file") ? INIT_VALUE_73 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_74 = ((INIT_MODE == "mem_file") ? INIT_VALUE_74 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_75 = ((INIT_MODE == "mem_file") ? INIT_VALUE_75 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_76 = ((INIT_MODE == "mem_file") ? INIT_VALUE_76 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_77 = ((INIT_MODE == "mem_file") ? INIT_VALUE_77 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_78 = ((INIT_MODE == "mem_file") ? INIT_VALUE_78 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_79 = ((INIT_MODE == "mem_file") ? INIT_VALUE_79 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_7A = ((INIT_MODE == "mem_file") ? INIT_VALUE_7A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_7B = ((INIT_MODE == "mem_file") ? INIT_VALUE_7B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_7C = ((INIT_MODE == "mem_file") ? INIT_VALUE_7C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_7D = ((INIT_MODE == "mem_file") ? INIT_VALUE_7D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_7E = ((INIT_MODE == "mem_file") ? INIT_VALUE_7E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + defparam pdp32k.INITVAL_7F = ((INIT_MODE == "mem_file") ? INIT_VALUE_7F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ; + end endgenerate //------------------------------------------------------------------------------ // Function Definition @@ -4399,6 +5693,19 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, else getByteWidth = 1 ; end + _FCODE_AP6_ : + begin + if (((data_width == 72) || (data_width == 64))) + getByteWidth = 8 ; + else + if (((data_width == 36) || (data_width == 32))) + getByteWidth = 4 ; + else + if (((data_width == 18) || (data_width == 16))) + getByteWidth = 2 ; + else + getByteWidth = 1 ; + end default : getByteWidth = 1 ; endcase @@ -5474,6 +6781,8 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, getAddrWidth = 13 ; 1 : getAddrWidth = 14 ; + default : + getAddrWidth = 9 ; endcase end _FCODE_ICE_ : @@ -5487,6 +6796,37 @@ module sprite_ram_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1, getAddrWidth = 10 ; 2 : getAddrWidth = 11 ; + default : + getAddrWidth = 8 ; + endcase + end + _FCODE_AP6_ : + begin + case (data_width) + 72 : + getAddrWidth = 9 ; + 64 : + getAddrWidth = 9 ; + 36 : + getAddrWidth = 10 ; + 32 : + getAddrWidth = 10 ; + 18 : + getAddrWidth = 11 ; + 16 : + getAddrWidth = 11 ; + 9 : + getAddrWidth = 12 ; + 8 : + getAddrWidth = 12 ; + 4 : + getAddrWidth = 13 ; + 2 : + getAddrWidth = 14 ; + 1 : + getAddrWidth = 15 ; + default : + getAddrWidth = 9 ; endcase end default : diff --git a/fpga/source/generated/sprite_ram/rtl/sprite_ram_bb.v b/fpga/source/generated/sprite_ram/rtl/sprite_ram_bb.v index fd2908e..7b29d07 100644 --- a/fpga/source/generated/sprite_ram/rtl/sprite_ram_bb.v +++ b/fpga/source/generated/sprite_ram/rtl/sprite_ram_bb.v @@ -1,7 +1,8 @@ /******************************************************************************* - Verilog netlist generated by IPGEN Radiant Software (64-bit) 2.0.1.281.2 - Soft IP Version: 1.1.0 - Wed Apr 15 20:29:57 2020 + Verilog netlist generated by IPGEN Lattice Radiant Software (64-bit) + 2024.2.0.3.0 + Soft IP Version: 2.4.0 + 2025 01 08 20:20:24 *******************************************************************************/ /******************************************************************************* Wrapper Module generated per user settings. diff --git a/fpga/source/generated/sprite_ram/sprite_ram.cfg b/fpga/source/generated/sprite_ram/sprite_ram.cfg index 4aa241f..812d782 100644 --- a/fpga/source/generated/sprite_ram/sprite_ram.cfg +++ b/fpga/source/generated/sprite_ram/sprite_ram.cfg @@ -1,9 +1,9 @@ { - "REGMODE": false, - "BYTE_ENABLE": true, - "RDATA_WIDTH": 32, - "WDATA_WIDTH": 32, - "RADDR_DEPTH": 256, - "INIT_MODE": "all_zero", - "WADDR_DEPTH": 256 + "WADDR_DEPTH": 256, + "WDATA_WIDTH": 32, + "RADDR_DEPTH": 256, + "RDATA_WIDTH": 32, + "REGMODE": false, + "BYTE_ENABLE": true, + "INIT_MODE": "all_zero" } \ No newline at end of file diff --git a/fpga/source/generated/sprite_ram/sprite_ram.ipx b/fpga/source/generated/sprite_ram/sprite_ram.ipx index 8b23127..e269e76 100644 --- a/fpga/source/generated/sprite_ram/sprite_ram.ipx +++ b/fpga/source/generated/sprite_ram/sprite_ram.ipx @@ -1,16 +1,19 @@ - + - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/fpga/source/generated/sprite_ram/testbench/clk_rst_gen.v b/fpga/source/generated/sprite_ram/testbench/clk_rst_gen.v new file mode 100644 index 0000000..fc6c775 --- /dev/null +++ b/fpga/source/generated/sprite_ram/testbench/clk_rst_gen.v @@ -0,0 +1,43 @@ +`ifndef CLK_RST_GEN +`define CLK_RST_GEN + +`timescale 1ns/1ns + +module clk_rst_gen # ( + parameter CLK_FREQ = 10, + parameter RESET_CNT = 10, + parameter DIFF_CLOCK = 1 +)( + output reg clk1, + output reg clk2, + output reg rst +); + +initial begin + rst <= 1'b1; + #RESET_CNT; + rst <= 1'b0; +end + +initial begin + clk1 <= 1'b0; + forever #CLK_FREQ clk1 <= ~clk1; +end + +if(DIFF_CLOCK) begin + localparam CLK2FREQ = 11*CLK_FREQ/7; + initial begin + clk2 <= 1'b0; + #2; + forever #CLK2FREQ clk2 <= ~clk2; + end +end +else begin + initial begin + clk2 <= 1'b0; + forever #CLK_FREQ clk2 <= ~clk2; + end +end + +endmodule +`endif \ No newline at end of file diff --git a/fpga/source/generated/sprite_ram/testbench/dut_params.v b/fpga/source/generated/sprite_ram/testbench/dut_params.v index 896f0a0..01b75b4 100644 --- a/fpga/source/generated/sprite_ram/testbench/dut_params.v +++ b/fpga/source/generated/sprite_ram/testbench/dut_params.v @@ -12,10 +12,12 @@ localparam OUTPUT_CLK_EN = 0; localparam RESETMODE = "sync"; localparam BYTE_ENABLE = 1; localparam BYTE_WIDTH = 4; +localparam BYTE_SIZE = 8; localparam ECC_ENABLE = 0; localparam INIT_MODE = "all_zero"; localparam INIT_FILE = "none"; localparam INIT_FILE_FORMAT = "hex"; +localparam INIT_DATA_TYPE = 1; localparam INIT_VALUE_00 = "0x0000000000000000000000000000000000000000000000000000000000000000"; localparam INIT_VALUE_01 = "0x0000000000000000000000000000000000000000000000000000000000000000"; localparam INIT_VALUE_02 = "0x0000000000000000000000000000000000000000000000000000000000000000"; @@ -80,4 +82,70 @@ localparam INIT_VALUE_3C = "0x00000000000000000000000000000000000000000000000000 localparam INIT_VALUE_3D = "0x0000000000000000000000000000000000000000000000000000000000000000"; localparam INIT_VALUE_3E = "0x0000000000000000000000000000000000000000000000000000000000000000"; localparam INIT_VALUE_3F = "0x0000000000000000000000000000000000000000000000000000000000000000"; -`define ICE40UP +localparam INIT_VALUE_40 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_41 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_42 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_43 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_44 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_45 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_46 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_47 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_48 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_49 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_4A = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_4B = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_4C = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_4D = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_4E = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_4F = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_50 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_51 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_52 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_53 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_54 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_55 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_56 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_57 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_58 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_59 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_5A = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_5B = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_5C = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_5D = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_5E = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_5F = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_60 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_61 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_62 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_63 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_64 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_65 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_66 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_67 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_68 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_69 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_6A = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_6B = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_6C = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_6D = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_6E = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_6F = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_70 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_71 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_72 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_73 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_74 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_75 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_76 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_77 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_78 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_79 = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_7A = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_7B = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_7C = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_7D = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_7E = "0x0000000000000000000000000000000000000000000000000000000000000000"; +localparam INIT_VALUE_7F = "0x0000000000000000000000000000000000000000000000000000000000000000"; +`define ice40tp +`define iCE40UP +`define iCE40UP5K diff --git a/fpga/source/generated/sprite_ram/testbench/mem_model.v b/fpga/source/generated/sprite_ram/testbench/mem_model.v new file mode 100644 index 0000000..7ee7dc6 --- /dev/null +++ b/fpga/source/generated/sprite_ram/testbench/mem_model.v @@ -0,0 +1,350 @@ +`ifndef MEM_MODEL +`define MEM_MODEL + +module mem_model # ( + parameter FAMILY = "common", + parameter A_DEPTH = 1024, + parameter A_AWID = clog2(A_DEPTH), + parameter A_DWID = 32, + parameter B_DEPTH = 2048, + parameter B_AWID = clog2(B_DEPTH), + parameter B_DWID = 16, + parameter INIT_MODE = "none", + parameter INIT_FORMAT = "hex", + parameter INIT_FILE = "none", + parameter BEN_WID = 8, + parameter A_BDWID = roundUP(A_DWID, BEN_WID), + parameter B_BDWID = roundUP(B_DWID, BEN_WID), + parameter BYTE_EN_A = 1, + parameter BYTE_EN_B = 1, + parameter BENA_POL = 1, + parameter BENB_POL = 1, + parameter REGMODE_A = "noreg", + parameter REGMODE_B = "noreg", + parameter RSTA_POL = 1, + parameter RSTB_POL = 1 +)( + input clk_a_i, + input clk_en_a_i, + input rst_a_i, + input wr_en_a_i, + input [A_AWID-1:0] addr_a_i, + input [A_DWID-1:0] data_a_i, + input [A_BDWID-1:0] ben_a_i, + + output reg [A_DWID-1:0] data_a_o, + + input clk_b_i, + input clk_en_b_i, + input rst_b_i, + input wr_en_b_i, + input [B_AWID-1:0] addr_b_i, + input [B_DWID-1:0] data_b_i, + input [B_BDWID-1:0] ben_b_i, + + output reg [B_DWID-1:0] data_b_o +); + +genvar g0, g1; +integer i0; + +reg [A_DWID-1:0] mem [(2**A_AWID)-1:0]; + +wire rst_a_c; +wire rst_b_c; + +assign rst_a_c = (RSTA_POL) ? rst_a_i : ~rst_a_i; +assign rst_b_c = (RSTB_POL) ? rst_b_i : ~rst_b_i; + +initial begin + if(INIT_MODE == "mem_file") begin + if(INIT_FORMAT == "hex") begin + $readmemh(INIT_FILE, mem, 0, A_DEPTH-1); + end + else begin + $readmemb(INIT_FILE, mem, 0, A_DEPTH-1); + end + for(i0 = 0; i0 < (2**A_AWID); i0 = i0 + 1) begin + if(mem[i0] == {A_DWID{1'bx}} && FAMILY != "common") begin + mem[i0] = {A_DWID{1'b0}}; + end + end + end + else if(FAMILY != "common") begin + for(i0 = 0; i0 < (2**A_AWID); i0 = i0 + 1) begin + mem[i0] = (INIT_MODE == "all_one") ? {A_DWID{1'b1}} : {A_DWID{1'b0}}; + end + end +end + +/* + * WRITING AT PORT A + */ +wire [A_DWID-1:0] data_a_nxt_c; +if(BYTE_EN_A == 0) begin : _BEN_A_DIS + assign data_a_nxt_c = data_a_i; +end +else begin : _BEN_A_EN + wire [A_DWID-1:0] data_a_p; + assign data_a_p = mem[addr_a_i]; + + for(g0 = 0; g0 < A_BDWID; g0 = g0 + 1) begin + assign data_a_nxt_c[g0*BEN_WID +: BEN_WID] = (ben_a_i[g0] == BENA_POL) ? data_a_i[g0*BEN_WID +: BEN_WID] : + data_a_p[g0*BEN_WID +: BEN_WID]; + end +end + +always @ (posedge clk_a_i) begin + if(clk_en_a_i & wr_en_a_i) begin + mem[addr_a_i] <= data_a_nxt_c; + end +end + +/* + * READING AT PORT A + */ +if(REGMODE_A == "noreg") begin :_NREG_A + always @ (posedge clk_a_i, posedge rst_a_c) begin + if(rst_a_c) begin + data_a_o <= {A_DWID{1'b0}}; + end + else begin + if(~wr_en_a_i & clk_en_a_i) begin + data_a_o <= mem[addr_a_i]; + end + end + end +end +else begin : _REG_A + reg [A_DWID-1:0] dbuf_a_r; + always @ (posedge clk_a_i, posedge rst_a_c) begin + if(rst_a_c) begin + dbuf_a_r <= {A_DWID{1'b0}}; + data_a_o <= {A_DWID{1'b0}}; + end + else begin + if(clk_en_a_i) begin + data_a_o <= dbuf_a_r; + if(~wr_en_a_i) begin + dbuf_a_r <= mem[addr_a_i]; + end + end + end + end +end + +if(A_DWID == B_DWID) begin : A_EQ_B + wire [B_DWID-1:0] data_b_nxt_c; + /* + * WRITING AT PORT B + */ + if(BYTE_EN_B == 0) begin : _BEN_B_DIS + assign data_b_nxt_c = data_b_i; + end + else begin : _BEN_B_EN + wire [B_DWID-1:0] data_b_p; + for(g0 = 0; g0 < B_BDWID; g0 = g0 + 1) begin + assign data_b_nxt_c[g0*BEN_WID +: BEN_WID] = (ben_b_i[g0] == BENB_POL) ? data_b_i[g0*BEN_WID +: BEN_WID] : + data_b_p[g0*BEN_WID +: BEN_WID]; + end + end + + always @ (posedge clk_b_i) begin + if(clk_en_b_i & wr_en_b_i) begin + mem[addr_b_i] <= data_b_nxt_c; + end + end + /* + * READING AT PORT B + */ + if(REGMODE_B == "noreg") begin : _NREG_B + always @ (posedge clk_b_i, posedge rst_b_c) begin + if(rst_b_c) begin + data_b_o <= {B_DWID{1'b0}}; + end + else begin + if(~wr_en_b_i) begin + data_b_o <= mem[addr_b_i]; + end + end + end + end + else begin : _REG_B + reg [B_DWID-1:0] dbuf_b_r; + always @ (posedge clk_b_i, posedge rst_b_c) begin + if(rst_b_c) begin + dbuf_b_r <= {B_DWID{1'b0}}; + data_b_o <= {B_DWID{1'b0}}; + end + else begin + data_b_o <= dbuf_b_r; + if(~wr_en_b_i) begin + dbuf_b_r <= mem[addr_b_i]; + end + end + end + end +end +else if(A_DWID > B_DWID) begin : A_GR_B + /* + * WRITING AT PORT B + */ + wire [A_AWID-1:0] addr_b_eq_c; + wire [B_AWID-(A_AWID+1):0] addr_b_exc_c; + wire [A_DWID-1:0] data_b_p_c; + wire [A_DWID-1:0] data_b_nxt_c; + + assign addr_b_eq_c = addr_b_i[B_AWID-1:B_AWID-A_AWID]; + assign addr_b_exc_c = addr_b_i[B_AWID-(A_AWID+1):0]; + assign data_b_p_c = mem[addr_b_eq_c]; + + if(BYTE_EN_B == 0) begin : _BEN_B_DIS + for(g0 = 0; g0 < 2**(B_AWID-A_AWID); g0 = g0 + 1) begin + assign data_b_nxt_c [B_DWID*g0 +: B_DWID] = (addr_b_exc_c == g0) ? data_b_i : data_b_p_c[B_DWID*g0 +: B_DWID]; + end + end + else begin : _BEN_B_EN + for(g0 = 0; g0 < 2**(B_AWID-A_AWID); g0 = g0 + 1) begin + for(g1 = 0; g1 < B_BDWID; g1 = g1 + 1) begin + assign data_b_nxt_c [(B_DWID*g0 + BEN_WID*g1) +: BEN_WID] = (addr_b_exc_c == g0 && ben_b_i[g0] == BENB_POL) ? data_b_i[g1*BEN_WID +: BEN_WID] : + data_b_p_c[(B_DWID*g0 + BEN_WID*g1) +: BEN_WID]; + end + end + end + + always @ (posedge clk_b_i) begin + if(clk_en_b_i & wr_en_b_i) begin + mem[addr_b_eq_c] <= data_b_nxt_c; + end + end + + /* + * READING AT PORT B + */ + wire [B_DWID-1:0] data_b_o_nxt_c; + assign data_b_o_nxt_c = (addr_b_eq_c >= A_DEPTH) ? {B_DWID{(INIT_MODE == "all_one") ? 1'b1 : 1'b0}} : (data_b_p_c >> (B_DWID * addr_b_exc_c)); + + if(REGMODE_B == "noreg") begin : _NREG_B + always @ (posedge clk_b_i, posedge rst_b_c) begin + if(rst_b_c) begin + data_b_o <= {B_DWID{1'b0}}; + end + else begin + if(~wr_en_b_i & clk_en_b_i) begin + data_b_o <= data_b_o_nxt_c; + end + end + end + end + else begin : _REG_B + reg [B_DWID-1:0] dbuf_b_r; + always @ (posedge clk_b_i, posedge rst_b_c) begin + if(rst_b_c) begin + dbuf_b_r <= {B_DWID{1'b0}}; + data_b_o <= {B_DWID{1'b0}}; + end + else begin + data_b_o <= dbuf_b_r; + if(~wr_en_b_i) begin + dbuf_b_r <= data_b_o_nxt_c; + end + end + end + end + +end +else begin : B_GR_A + /* + * WRITING AT PORT B + */ + wire [A_AWID-1:0] addr_b_eq_c; + assign addr_b_eq_c = {addr_b_i, {(A_AWID-B_AWID){1'b0}}}; + + if(BYTE_EN_B == 0) begin : _BEN_B_DIS + for(g0 = 0; g0 < B_DWID/A_DWID; g0 = g0 + 1) begin + always @ (posedge clk_b_i) begin + if(clk_en_b_i & wr_en_b_i) begin + mem[addr_b_eq_c + g0] <= data_b_i[g0*A_DWID +: A_DWID]; + end + end + end + end + else begin : _BEN_B_EN + wire [B_DWID-1:0] data_b_nxt_c; + wire [B_DWID-1:0] data_b_p_c; + for(g0 = 0; g0 < B_BDWID; g0 = g0 + 1) begin + assign data_b_nxt_c = (ben_b_i[g0] == BENB_POL) ? data_b_i[g0 * BEN_WID +: BEN_WID] : data_b_p_c [g0 * BEN_WID +: BEN_WID]; + end + for(g0 = 0; g0 < B_DWID/A_DWID; g0 = g0 + 1) begin + assign data_b_p_c[g0*A_DWID +: A_DWID] = mem[addr_b_eq_c + g0]; + always @ (posedge clk_b_i) begin + if(clk_en_b_i & wr_en_b_i) begin + mem[addr_b_eq_c + g0] <= data_b_nxt_c[g0*A_DWID +: A_DWID]; + end + end + end + end + /* + * READING AT PORT B + */ + wire [B_DWID-1:0] data_b_o_nxt_c; + for(g0 = 0; g0 < B_DWID/A_DWID; g0 = g0 + 1) begin + assign data_b_o_nxt_c [g0*A_DWID +: A_DWID] = mem[addr_b_eq_c + g0]; + end + + if(REGMODE_B == "noreg") begin : _NREG_B + always @ (posedge clk_b_i, posedge rst_b_c) begin + if(rst_b_c) begin + data_b_o <= {B_DWID{1'b0}}; + end + else begin + if(~wr_en_b_i & clk_en_b_i) begin + data_b_o <= data_b_o_nxt_c; + end + end + end + end + else begin : _REG_B + reg [B_DWID-1:0] dbuf_b_r; + always @ (posedge clk_b_i, posedge rst_b_c) begin + if(rst_b_c) begin + dbuf_b_r <= {B_DWID{1'b0}}; + data_b_o <= {B_DWID{1'b0}}; + end + else begin + data_b_o <= dbuf_b_r; + if(~wr_en_b_i) begin + dbuf_b_r <= data_b_o_nxt_c; + end + end + end + end +end + +function [31:0] roundUP; + input [31:0] dividend; + input [31:0] divisor; + begin + if(divisor == 1) begin + roundUP = dividend; + end + else if(divisor == dividend) begin + roundUP = 1; + end + else begin + roundUP = dividend/divisor + (((dividend % divisor) == 0) ? 0 : 1); + end + end +endfunction + +function [31:0] clog2; + input [31:0] value; + reg [31:0] num; + begin + num = value - 1; + for (clog2=0; num>0; clog2=clog2+1) num = num>>1; + end +endfunction + +endmodule +`endif \ No newline at end of file diff --git a/fpga/source/generated/sprite_ram/testbench/pdp_master.v b/fpga/source/generated/sprite_ram/testbench/pdp_master.v new file mode 100644 index 0000000..225563f --- /dev/null +++ b/fpga/source/generated/sprite_ram/testbench/pdp_master.v @@ -0,0 +1,326 @@ +`ifndef PDP_MASTER +`define PDP_MASTER + +`timescale 1 ns / 1 ps + +module pdp_master # ( + parameter WADDR_DEPTH = 1024, + parameter WADDR_WIDTH = clog2(WADDR_DEPTH), + parameter WDATA_WIDTH = 18, + parameter RADDR_DEPTH = 1024, + parameter RADDR_WIDTH = clog2(RADDR_DEPTH), + parameter RDATA_WIDTH = 18, + parameter REGMODE = "reg", + parameter RESETMODE = "sync", + parameter INIT_FILE = "none", + parameter INIT_FILE_FORMAT = "binary", + parameter INIT_MODE = "none", + parameter BYTE_ENABLE = 1, + parameter BYTE_SIZE = 9, + parameter BYTE_WIDTH = WDATA_WIDTH/BYTE_SIZE, + parameter ECC_ENABLE = 0, + parameter OUTPUT_CLK_EN = 0, + parameter BYTE_ENABLE_POL = "active-high" +)( + input wr_clk_i, + input rd_clk_i, + input rst_i, + output reg rst_o, + + output reg wr_clk_en_o, + output rd_clk_en_o, + output rd_out_clk_en_o, + + output reg wr_en_o, + output reg [WDATA_WIDTH-1:0] wr_data_o, + output reg [WADDR_WIDTH-1:0] wr_addr_o, + output reg rd_en_o, + output reg [RADDR_WIDTH-1:0] rd_addr_o, + output reg [BYTE_WIDTH-1:0] ben_o, + + input [RDATA_WIDTH-1:0] rd_data_dut_i, + input [RDATA_WIDTH-1:0] rd_data_ref_i, + input one_err_det_i, + input two_err_det_i +); + +genvar g0; +integer i0, i1; + +reg [WADDR_WIDTH-1:0] waddr_rand_r; +reg [RADDR_WIDTH-1:0] raddr_rand_r; + +wire [WADDR_WIDTH-1:0] waddr_rand_nxt_c; +wire [RADDR_WIDTH-1:0] raddr_rand_nxt_c; + +reg [1023:0] rdat0; +reg [1023:0] rdat1; +reg [1023:0] rdat2; + +reg rd_valid_r; +reg chk_r; +reg rd_en_r; +reg rst_chk_r; + +realtime timestamp; + +assign waddr_rand_nxt_c = (rdat0[WADDR_WIDTH-1:0] > WADDR_DEPTH) ? (rdat0[WADDR_WIDTH-1:0] - WADDR_DEPTH): rdat0[WADDR_WIDTH-1:0]; +assign raddr_rand_nxt_c = (rdat2[RADDR_WIDTH-1:0] > RADDR_DEPTH) ? (rdat2[RADDR_WIDTH-1:0] - RADDR_DEPTH): rdat2[RADDR_WIDTH-1:0]; + +assign rd_clk_en_o = (REGMODE == "reg") ? rd_en_o | rd_en_r : rd_en_o; +assign rd_out_clk_en_o = rd_en_o | rd_en_r; + +always @ (posedge rd_clk_i or posedge rst_i) + if(rst_i) + rd_en_r <= 1'b0; + else + rd_en_r <= rd_en_o; + +for (g0 = 0; g0 < 32; g0 = g0 + 1) begin + always @ (posedge wr_clk_i) begin + rdat0[g0*32 +: 32] <= $urandom_range({32{1'b0}}, {32{1'b1}}); + rdat1[g0*32 +: 32] <= $urandom_range({32{1'b0}}, {32{1'b1}}); + end + always @ (posedge rd_clk_i) begin + rdat2[g0*32 +: 32] <= $urandom_range({32{1'b0}}, {32{1'b1}}); + end +end + +initial begin + rst_o <= 1'b0; + wr_clk_en_o <= 1'b0; + wr_en_o <= 1'b0; + wr_data_o <= {WDATA_WIDTH{1'b0}}; + wr_addr_o <= {WADDR_WIDTH{1'b0}}; + rd_en_o <= 1'b0; + rd_addr_o <= {RADDR_WIDTH{1'b0}}; + ben_o <= {BYTE_WIDTH{1'b0}}; + waddr_rand_r <= {WADDR_WIDTH{1'b0}}; + raddr_rand_r <= {RADDR_WIDTH{1'b0}}; + rdat0 <= {1024{1'b0}}; + rdat1 <= {1024{1'b0}}; + rdat2 <= {1024{1'b0}}; + chk_r <= 1'b1; + rst_chk_r <= 1'b0; + $timeformat(-9, 2, " ns", 20); +end + +initial begin + @(posedge rst_i); + @(posedge wr_clk_i); + wr_clk_en_o <= 1'b1; + @(posedge wr_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + $display("-----------------------------------------------------"); + $display("----------- Pseudo-Dual Port Memory Test ------------"); + if(INIT_MODE == "mem_file") begin + $display("------------- Start Initialization Test -------------"); + rd_en_o <= 1'b1; + for(i0 = 0; i0 < RADDR_DEPTH; i0 = i0 + 1) begin + read_data(i0); + end + rd_en_o <= 1'b0; + end + @(posedge rd_clk_i); + $display("------------- Start Random Access Test --------------"); + fork + begin + for(i0 = 0; i0 < 2*WADDR_DEPTH; i0 = i0 + 1) begin + write_data(waddr_rand_nxt_c, rdat1[WDATA_WIDTH-1:0], rdat1[BYTE_WIDTH-1:0]); + random_write_enable(); + end + wr_en_o <= 1'b0; + end + begin + for(i1 = 0; i1 < 2*RADDR_DEPTH; i1 = i1 + 1) begin + read_data(raddr_rand_nxt_c); + random_read_enable(); + end + rd_en_o <= 1'b0; + end + join + @(posedge wr_clk_i); + @(posedge rd_clk_i); + @(posedge wr_clk_i); + $display("-------------- Start Memory Sweep Test --------------"); + wr_en_o <= 1'b1; + for(i0 = 0; i0 < WADDR_DEPTH; i0 = i0 + 1) begin + write_data(i0, rdat1[WDATA_WIDTH-1:0], rdat1[BYTE_WIDTH-1:0]); + end + wr_en_o <= 1'b0; + @(posedge wr_clk_i); + @(posedge rd_clk_i); + rd_en_o <= 1'b1; + for(i0 = 0; i0 < RADDR_DEPTH; i0 = i0 + 1) begin + read_data(i0); + end + rd_en_o <= 1'b0; + @(posedge rd_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + $display("-------------------- Reset Test ---------------------"); + rst_chk_r = 1'b1; + @(negedge rd_clk_i); + rst_o <= 1'b1; + if(REGMODE == "reg") begin + rd_en_o <= 1'b1; + end + @(negedge rd_clk_i); + @(negedge rd_clk_i); + rst_o <= 1'b0; + if(REGMODE == "reg") begin + rd_en_o <= 1'b0; + end + @(posedge rd_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + @(posedge rd_clk_i); + if(chk_r) begin + $display("-----------------------------------------------------"); + $display("----------------- SIMULATION PASSED -----------------"); + $display("-----------------------------------------------------"); + end + else begin + $display("-----------------------------------------------------"); + $display("!!!!!!!!!!!!!!!!! SIMULATION FAILED !!!!!!!!!!!!!!!!!"); + $display("-----------------------------------------------------"); + end + $display("Total Simulation Time : %t", $time); + $finish; +end + +if(REGMODE == "reg") begin : _REG_CHECK + reg del1; + always @ (posedge rd_clk_i, posedge rst_i) begin + if(rst_i) begin + del1 <= 1'b0; + rd_valid_r <= 1'b0; + end + else begin + del1 <= rd_en_o; + rd_valid_r <= del1; + end + end +end +else begin : _NREG_CHECK + always @ (posedge rd_clk_i, posedge rst_i) begin + if(rst_i) begin + rd_valid_r <= 1'b0; + end + else begin + rd_valid_r <= rd_en_o; + end + end +end + +always @ (posedge rd_clk_i) begin + if(rd_valid_r) begin + if(rd_data_dut_i !== rd_data_ref_i) begin + $display("!! Read Data Error Occurred at : %t", $time); + chk_r <= 1'b0; + end + end +end + +if(REGMODE == "reg") begin : _RESET_CHECK + if(RESETMODE == "sync") begin : _RESET_SYNC_CHECK + always @ (posedge rd_clk_i) begin + if(rst_i) begin + timestamp = $realtime; + #1; + if((rd_data_dut_i !== {RDATA_WIDTH{1'b0}}) && rst_chk_r) begin + $display("!! Reset Data Error Occurred at : %t", timestamp); + chk_r <= 1'b0; + end + end + end + end + else begin: _RESET_ASYNC_CHECK + always @ (posedge rd_clk_i, posedge rst_i) begin + if(rst_i) begin + timestamp = $realtime; + #1; + if((rd_data_dut_i !== {RDATA_WIDTH{1'b0}}) && rst_chk_r) begin + $display("!! Reset Data Error Occurred at : %t", timestamp); + chk_r <= 1'b0; + end + end + end + end +end +else begin: _RESET_NOREG_CHECK + reg [RDATA_WIDTH-1:0] rd_data_dut_r; + always @ (posedge rd_clk_i, posedge rst_i) begin + if(rst_i) begin + timestamp = $realtime; + rd_data_dut_r = rd_data_dut_i; + @ (posedge rd_clk_i); + if((rd_data_dut_i !== rd_data_dut_r) && rst_chk_r) begin + $display("!! Reset Data Error Occurred at : %t", timestamp); + chk_r <= 1'b0; + end + end + end +end + +if(ECC_ENABLE == 1) begin: _BYTE_ENABLE_ERROR_DET + always @ (posedge rd_clk_i, posedge rst_i) begin + if(rst_i) begin + timestamp = $realtime; + if((one_err_det_i == 1) || (two_err_det_i == 1)) begin + $display("!! ECC Error Occurred at : %t", $realtime); + chk_r <= 1'b0; + end + end + end +end + +task write_data; + input [WADDR_WIDTH-1:0] wtb_addr_i; + input [WDATA_WIDTH-1:0] wtb_data_i; + input [BYTE_WIDTH-1:0] wtb_byte_i; + begin + wr_addr_o <= wtb_addr_i; + wr_data_o <= wtb_data_i; + ben_o <= wtb_byte_i; + @(posedge wr_clk_i); + end +endtask + +task random_write_enable; + begin + wr_en_o <= $urandom_range({1'b0}, {1'b1}); + @(posedge wr_clk_i); + end +endtask + +task read_data; + input [RADDR_WIDTH-1:0] rtb_addr_i; + begin + rd_addr_o <= rtb_addr_i; + @(posedge rd_clk_i); + end +endtask + +task random_read_enable; + begin + rd_en_o <= $urandom_range({1'b0}, {1'b1}); + @(posedge rd_clk_i); + end +endtask + +function [31:0] clog2; + input [31:0] value; + reg [31:0] num; + begin + num = value - 1; + for (clog2=0; num>0; clog2=clog2+1) num = num>>1; + end +endfunction + +endmodule +`endif \ No newline at end of file diff --git a/fpga/source/generated/sprite_ram/testbench/tb_top.v b/fpga/source/generated/sprite_ram/testbench/tb_top.v old mode 100755 new mode 100644 index 74780dd..3fae197 --- a/fpga/source/generated/sprite_ram/testbench/tb_top.v +++ b/fpga/source/generated/sprite_ram/testbench/tb_top.v @@ -52,6 +52,10 @@ // Changes Made : Initial version of testbench for ram_dp // ============================================================================= +`include "mem_model.v" +`include "pdp_master.v" +`include "clk_rst_gen.v" + `ifndef TB_TOP `define TB_TOP @@ -65,476 +69,146 @@ module tb_top(); `include "dut_params.v" -localparam CLK_FREQ = (FAMILY == "iCE40UP") ? 40 : 10; -localparam RESET_CNT = (FAMILY == "iCE40UP") ? 140 : 35; - -reg chk_init = 1'b1; -reg chk_norm = 1'b1; - -reg wr_clk_i; -reg rd_clk_i; -reg rst_i; -reg wr_clk_en_i; -reg rd_clk_en_i; - -reg rd_out_clk_en_i; - -reg wr_en_i; -reg [WDATA_WIDTH-1:0] wr_data_i; -reg [WADDR_WIDTH-1:0] wr_addr_i; -reg rd_en_i; -reg [RADDR_WIDTH-1:0] rd_addr_i; -reg [BYTE_WIDTH-1:0] ben_i; - -wire [RDATA_WIDTH-1:0] rd_data_o; - -reg [255:0] data_in = {256{1'b0}}; - -`ifdef LIFCL - // ---------------------------- - // LIFCL GSR instance - // ---------------------------- - reg CLK_GSR = 0; - reg USER_GSR = 1; - wire GSROUT; - - initial begin - forever begin - #5; - CLK_GSR = ~CLK_GSR; - end - end - - GSR GSR_INST ( - .GSR_N(USER_GSR), - .CLK(CLK_GSR) - ); +localparam CLK_FREQ = (FAMILY == "iCE40UP") ? 40 : 10; +localparam RESET_CNT = (FAMILY == "iCE40UP") ? 140 : 100; +localparam DIFF_CLOCK = 1; + +wire wr_clk_i; +wire rd_clk_i; +wire rst_i; +wire wr_clk_en_i; +wire rd_clk_en_i; +wire rd_out_clk_en_i; + +wire wr_en_i; +wire [WDATA_WIDTH-1:0] wr_data_i; +wire [WADDR_WIDTH-1:0] wr_addr_i; +wire rd_en_i; +wire [RADDR_WIDTH-1:0] rd_addr_i; +wire [BYTE_WIDTH-1:0] ben_i; + +wire [RDATA_WIDTH-1:0] rd_data_o; +wire one_err_det_o; +wire two_err_det_o; + +wire [RDATA_WIDTH-1:0] rd_data_ref; + +wire rst; +wire rst_o; + +assign rst_i = rst | rst_o; + +// ---------------------------- +// GSR instance +// ---------------------------- +`ifndef iCE40UP + GSR GSR_INST ( .GSR_N(1'b1), .CLK(1'b0)); `endif `include "dut_inst.v" -genvar din0; -begin : data_generate - for(din0 = 0; din0 < 8; din0 = din0 + 1) begin - always @ (posedge wr_clk_i) begin - data_in[din0*32+31:din0*32] <= $urandom_range({32{1'b0}}, {32{1'b1}}); - end - end -end - -initial begin - wr_clk_en_i <= 1'b1; - rd_clk_en_i <= 1'b1; - rd_out_clk_en_i <= 1'b1; - wr_en_i <= 1'b0; - rd_en_i <= 1'b0; - ben_i <= {BYTE_WIDTH{1'b1}}; - wr_addr_i <= 'h0; - rd_addr_i <= 'h0; - wr_data_i <= data_in[WDATA_WIDTH-1:0]; -end - -initial begin - wr_clk_i = 1'b0; - forever #CLK_FREQ wr_clk_i = ~wr_clk_i; -end - -initial begin - rd_clk_i = 1'b0; - forever #CLK_FREQ rd_clk_i = ~rd_clk_i; -end - -initial begin - rst_i = 1'b1; - #RESET_CNT; - rst_i = 1'b0; -end - -localparam INIT_EN = (INIT_MODE == "none") ? 0 : 1; -localparam WRITE_EN = 1; -localparam READ_EN = 1; -localparam TARGET_WRITE = WADDR_DEPTH; -localparam TARGET_READ = RADDR_DEPTH; - -localparam [1:0] SM_IDLE = 2'b00; -localparam [1:0] SM_INIT_MODE = 2'b01; -localparam [1:0] SM_WRITE_MODE = 2'b10; -localparam [1:0] SM_READ_MODE = 2'b11; - -reg [1:0] current_state; -reg [1:0] prev_state = SM_IDLE; -reg [1:0] prev2_state = SM_IDLE; - -always @ (posedge rd_clk_i) begin - prev_state <= current_state; - prev2_state <= prev_state; -end - -integer i0, i1; -initial begin - current_state <= (INIT_EN == 1) ? SM_INIT_MODE : SM_WRITE_MODE; - @(negedge rst_i); - @(posedge wr_clk_i); - if(current_state == SM_INIT_MODE) begin - rd_addr_i <= 'h0; - rd_en_i <= 1'b1; - for(i1 = 0; i1 < TARGET_READ; i1 = i1 + 1) begin - @(posedge rd_clk_i); - rd_addr_i <= rd_addr_i + 1; - end - current_state <= SM_WRITE_MODE; - @(posedge rd_clk_i); - if(REGMODE == "noreg") @(posedge rd_clk_i); - rd_en_i <= 1'b0; - if(chk_init == 1'b1) begin - $display("-----------------------------------------------------"); - $display("------------ MEMORY INITIALIZATION PASSED -----------"); - $display("-----------------------------------------------------"); - end - else begin - $display("-----------------------------------------------------"); - $display("!!!!!!!!!!!! MEMORY INITIALIZATION FAILED !!!!!!!!!!!"); - $display("-----------------------------------------------------"); - end - end - if(current_state == SM_WRITE_MODE) begin - wr_addr_i <= 'h0; - wr_data_i <= data_in[WDATA_WIDTH-1:0]; - wr_en_i <= 1'b1; - for(i1 = 0; i1 < TARGET_WRITE; i1 = i1 + 1) begin - @(posedge wr_clk_i); - wr_addr_i <= wr_addr_i + 1'b1; - wr_data_i <= data_in[WDATA_WIDTH-1:0]; - if(BYTE_ENABLE == 1) begin - ben_i <= (ben_i == {BYTE_WIDTH{1'b1}}) ? {{(BYTE_WIDTH-1){1'b0}}, 1'b1} : - (ben_i == {BYTE_WIDTH{1'b0}}) ? {BYTE_WIDTH{1'b1}} : (ben_i << 1); - end - end - wr_en_i <= 1'b0; - current_state <= SM_READ_MODE; - @(posedge wr_clk_i); - end - if(current_state == SM_READ_MODE) begin - rd_addr_i <= 'h0; - rd_en_i <= 1'b1; - for(i1 = 0; i1 < TARGET_READ; i1 = i1 + 1) begin - @(posedge rd_clk_i); - rd_addr_i <= rd_addr_i + 1; - end - @(posedge rd_clk_i); - current_state <= SM_IDLE; - if(REGMODE == "reg") @(posedge rd_clk_i); - end - if(chk_norm == 1'b1) begin - $display("-----------------------------------------------------"); - $display("----------------- SIMULATION PASSED -----------------"); - $display("-----------------------------------------------------"); - end - else begin - $display("-----------------------------------------------------"); - $display("!!!!!!!!!!!!!!!!! SIMULATION FAILED !!!!!!!!!!!!!!!!!"); - $display("-----------------------------------------------------"); - end - $finish; -end - -genvar i_1; -integer mem_i0; -if (INIT_EN == 1) begin : INIT_MODE_CHECKER - reg [WDATA_WIDTH-1:0] mem_init [2**WADDR_WIDTH-1:0]; - initial begin - if (INIT_MODE == "mem_file") begin - if (INIT_FILE_FORMAT == "hex") begin - $readmemh(INIT_FILE, mem_init, 0, WADDR_DEPTH-1); - end - else begin - $readmemb(INIT_FILE, mem_init, 0, WADDR_DEPTH-1); - end - end - else begin - for(mem_i0 = 0; mem_i0 < WADDR_DEPTH; mem_i0 = mem_i0 + 1) begin - mem_init[mem_i0] = (INIT_MODE == "all_one") ? {WDATA_WIDTH{1'b1}} : {WDATA_WIDTH{1'b0}}; - end - end - end - - localparam Q_WOR = WDATA_WIDTH/RDATA_WIDTH; - localparam Q_ROW = RDATA_WIDTH/WDATA_WIDTH; - - wire [1:0] state_check = (REGMODE == "noreg") ? prev_state : prev2_state; - - if(WDATA_WIDTH == RDATA_WIDTH) begin : W_EQ_R - wire [WADDR_WIDTH-1:0] rd_addr_chk_w = rd_addr_i; - reg [WADDR_WIDTH-1:0] rd_addr_p = {WADDR_WIDTH{1'b0}}; - reg rd_en_p_r = 1'b0; - wire [WDATA_WIDTH-1:0] sel_mem = (INIT_MODE == "mem_file") ? mem_init[rd_addr_p] : - (INIT_MODE == "all_one") ? {WDATA_WIDTH{1'b1}} : {WDATA_WIDTH{1'b0}}; - - if(REGMODE == "noreg") begin - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_chk_w; - rd_en_p_r <= rd_en_i; - end - end - else begin - reg [WADDR_WIDTH-1:0] rd_addr_p2 = {WADDR_WIDTH{1'b0}}; - reg rd_en_p2_r = 1'b0; - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_p2; - rd_en_p_r <= rd_en_p2_r; - rd_addr_p2 <= rd_addr_chk_w; - rd_en_p2_r <= rd_en_i; - end - end - - always @ (posedge rd_clk_i) begin - if(rd_en_p_r & state_check == SM_INIT_MODE) begin - if(sel_mem != rd_data_o) begin - $display("Expected DATA = %h, Read DATA = %h", sel_mem, rd_data_o); - chk_init = 1'b0; - end - end - end - end - else if(WDATA_WIDTH > RDATA_WIDTH) begin : W_G_R - wire [WADDR_WIDTH-1:0] rd_addr_chk_w = rd_addr_i[RADDR_WIDTH-1:RADDR_WIDTH-WADDR_WIDTH]; - wire [RADDR_WIDTH-(WADDR_WIDTH+1):0] rd_addr_sel_w = rd_addr_i[RADDR_WIDTH-(WADDR_WIDTH+1):0]; - reg [WADDR_WIDTH-1:0] rd_addr_p = {WADDR_WIDTH{1'b0}}; - reg [RADDR_WIDTH-(WADDR_WIDTH+1):0] rd_addr_sel_r = {(RADDR_WIDTH-WADDR_WIDTH){1'b0}}; - reg rd_en_p_r = 1'b0; - wire [WDATA_WIDTH-1:0] sel_mem = (INIT_MODE == "mem_file") ? mem_init[rd_addr_p] : - (INIT_MODE == "all_one") ? {WDATA_WIDTH{1'b1}} : {WDATA_WIDTH{1'b0}}; - wire [RDATA_WIDTH-1:0] cmp_mem = sel_mem >> (RDATA_WIDTH*rd_addr_sel_r); - - if(REGMODE == "noreg") begin - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_chk_w; - rd_addr_sel_r <= rd_addr_sel_w; - rd_en_p_r <= rd_en_i; - end - end - else begin - reg [WADDR_WIDTH-1:0] rd_addr_p2 = {WADDR_WIDTH{1'b0}}; - reg [RADDR_WIDTH-(WADDR_WIDTH+1):0] rd_addr_sel2_r = {(RADDR_WIDTH-WADDR_WIDTH){1'b0}}; - reg rd_en_p2_r = 1'b0; - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_p2; - rd_addr_sel_r <= rd_addr_sel2_r; - rd_en_p_r <= rd_en_p2_r; - rd_addr_p2 <= rd_addr_chk_w; - rd_addr_sel2_r <= rd_addr_sel_w; - rd_en_p2_r <= rd_en_i; - end - end - always @ (posedge rd_clk_i) begin - if(rd_en_p_r & state_check == SM_INIT_MODE) begin - if(cmp_mem != rd_data_o) begin - $display("Expected DATA = %h, Read DATA = %h", cmp_mem, rd_data_o); - chk_init = 1'b0; - end - end - end - end - else begin : W_L_R - wire [WADDR_WIDTH-1:0] rd_addr_chk_w; - assign rd_addr_chk_w [WADDR_WIDTH-1:WADDR_WIDTH-RADDR_WIDTH] = rd_addr_i; - assign rd_addr_chk_w [(WADDR_WIDTH-RADDR_WIDTH)-1:0] = {(WADDR_WIDTH-RADDR_WIDTH){1'b0}}; - reg [WADDR_WIDTH-1:0] rd_addr_p = {WADDR_WIDTH{1'b0}}; - reg rd_en_p_r; - wire [RDATA_WIDTH-1:0] cmp_mem; - for(i_1 = 0; i_1 < Q_ROW; i_1 = i_1 + 1) begin - wire [WDATA_WIDTH-1:0] tmem_read = (INIT_MODE == "mem_file") ? mem_init[rd_addr_p + i_1] : - (INIT_MODE == "all_one") ? {WDATA_WIDTH{1'b1}} : {WDATA_WIDTH{1'b0}}; - assign cmp_mem[i_1*WDATA_WIDTH+WDATA_WIDTH-1:i_1*WDATA_WIDTH] = tmem_read; - end - if(REGMODE == "noreg") begin - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_chk_w; - rd_en_p_r <= rd_en_i; - end - end - else begin - reg [WADDR_WIDTH-1:0] rd_addr_p2 = {WADDR_WIDTH{1'b0}}; - reg rd_en_p2_r = 1'b0; - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_p2; - rd_en_p_r <= rd_en_p2_r; - rd_addr_p2 <= rd_addr_chk_w; - rd_en_p2_r <= rd_en_i; - end - end - always @ (posedge rd_clk_i) begin - if(rd_en_p_r & state_check == SM_INIT_MODE) begin - if(cmp_mem != rd_data_o) begin - $display("Expected DATA = %h, Read DATA = %h", cmp_mem, rd_data_o); - chk_init = 1'b0; - end - end - end - end -end - -genvar ben0; -integer mem_normi0; -begin : MEM_NORMAL_OPERATION - reg [WDATA_WIDTH-1:0] mem_norm [2**WADDR_WIDTH-1:0]; - reg [BYTE_WIDTH-1:0] byte_en_rec [2**WADDR_WIDTH-1:0]; - - initial begin - if (INIT_MODE == "mem_file" && INIT_FILE != "none") begin - if (INIT_FILE_FORMAT == "hex") begin - $readmemh(INIT_FILE, mem_norm, 0, WADDR_DEPTH-1); - end - else begin - $readmemb(INIT_FILE, mem_norm, 0, WADDR_DEPTH-1); - end - end - else begin - for(mem_normi0 = 0; mem_normi0 < 2**WADDR_WIDTH; mem_normi0 = mem_normi0 + 1) begin - mem_norm[mem_normi0] = (INIT_MODE == "all_one") ? {WDATA_WIDTH{1'b1}} : {WDATA_WIDTH{1'b0}}; - end - end - end - - if(BYTE_ENABLE == 0) begin - always @ (posedge wr_clk_i) begin - if(current_state == SM_WRITE_MODE & wr_en_i) begin - mem_norm[wr_addr_i] <= wr_data_i; - end - end - end - else begin - localparam BYTE_SIZE = (WDATA_WIDTH % 9 == 0) ? 9 : 8; - localparam EQUIV_LEN = (WDATA_WIDTH/BYTE_SIZE); - wire [BYTE_SIZE-1:0] act_wr_data [EQUIV_LEN-1:0]; - wire [WDATA_WIDTH-1:0] pref_data = mem_norm[wr_addr_i]; - for(ben0 = 0; ben0 < EQUIV_LEN; ben0 = ben0 + 1) begin - assign act_wr_data [ben0] = (ben_i[ben0] == 1'b1) ? (wr_data_i[ben0*BYTE_SIZE+BYTE_SIZE-1:ben0*BYTE_SIZE]) : - (pref_data[ben0*BYTE_SIZE+BYTE_SIZE-1:ben0*BYTE_SIZE]); - end - wire [WDATA_WIDTH-1:0] wr_data_t_w; - for(ben0 = 0; ben0 < EQUIV_LEN; ben0 = ben0 + 1) begin - assign wr_data_t_w[ben0*BYTE_SIZE+BYTE_SIZE-1:ben0*BYTE_SIZE] = act_wr_data[ben0]; - end - always @ (posedge wr_clk_i) begin - if(current_state == SM_WRITE_MODE & wr_en_i) begin - mem_norm[wr_addr_i] <= wr_data_t_w; - end - end - end - - localparam Q_WOR = WDATA_WIDTH/RDATA_WIDTH; - localparam Q_ROW = RDATA_WIDTH/WDATA_WIDTH; - - wire [1:0] state_check = (REGMODE == "noreg") ? prev_state : prev2_state; - - if(WDATA_WIDTH == RDATA_WIDTH) begin : W_EQ_R - wire [WADDR_WIDTH-1:0] rd_addr_chk_w = rd_addr_i; - reg [WADDR_WIDTH-1:0] rd_addr_p = {WADDR_WIDTH{1'b0}}; - reg rd_en_p_r = 1'b0; - wire [WDATA_WIDTH-1:0] sel_mem = mem_norm[rd_addr_p]; - - if(REGMODE == "noreg") begin - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_chk_w; - rd_en_p_r <= rd_en_i; - end - end - else begin - reg [WADDR_WIDTH-1:0] rd_addr_p2 = {WADDR_WIDTH{1'b0}}; - reg rd_en_p2_r = 1'b0; - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_p2; - rd_en_p_r <= rd_en_p2_r; - rd_addr_p2 <= rd_addr_chk_w; - rd_en_p2_r <= rd_en_i; - end - end - - always @ (posedge rd_clk_i) begin - if(rd_en_p_r & state_check == SM_READ_MODE) begin - if(sel_mem != rd_data_o) begin - $display("Expected DATA = %h, Read DATA = %h", sel_mem, rd_data_o); - chk_norm = 1'b0; - end - end - end - end - else if(WDATA_WIDTH > RDATA_WIDTH) begin : W_G_R - wire [WADDR_WIDTH-1:0] rd_addr_chk_w = rd_addr_i[RADDR_WIDTH-1:RADDR_WIDTH-WADDR_WIDTH]; - wire [RADDR_WIDTH-(WADDR_WIDTH+1):0] rd_addr_sel_w = rd_addr_i[RADDR_WIDTH-(WADDR_WIDTH+1):0]; - reg [WADDR_WIDTH-1:0] rd_addr_p = {WADDR_WIDTH{1'b0}}; - reg [RADDR_WIDTH-(WADDR_WIDTH+1):0] rd_addr_sel_r = {(RADDR_WIDTH-WADDR_WIDTH){1'b0}}; - reg rd_en_p_r = 1'b0; - wire [WDATA_WIDTH-1:0] sel_mem = mem_norm[rd_addr_p]; - wire [RDATA_WIDTH-1:0] cmp_mem = sel_mem >> (RDATA_WIDTH*rd_addr_sel_r); - - if(REGMODE == "noreg") begin - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_chk_w; - rd_addr_sel_r <= rd_addr_sel_w; - rd_en_p_r <= rd_en_i; - end - end - else begin - reg [WADDR_WIDTH-1:0] rd_addr_p2 = {WADDR_WIDTH{1'b0}}; - reg [RADDR_WIDTH-(WADDR_WIDTH+1):0] rd_addr_sel2_r = {(RADDR_WIDTH-WADDR_WIDTH){1'b0}}; - reg rd_en_p2_r = 1'b0; - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_p2; - rd_addr_sel_r <= rd_addr_sel2_r; - rd_en_p_r <= rd_en_p2_r; - rd_addr_p2 <= rd_addr_chk_w; - rd_addr_sel2_r <= rd_addr_sel_w; - rd_en_p2_r <= rd_en_i; - end - end - always @ (posedge rd_clk_i) begin - if(rd_en_p_r & state_check == SM_READ_MODE) begin - if(cmp_mem != rd_data_o) begin - $display("Expected DATA = %h, Read DATA = %h", cmp_mem, rd_data_o); - chk_norm = 1'b0; - end - end - end - end - else begin : W_L_R - wire [WADDR_WIDTH-1:0] rd_addr_chk_w; - assign rd_addr_chk_w [WADDR_WIDTH-1:WADDR_WIDTH-RADDR_WIDTH] = rd_addr_i; - assign rd_addr_chk_w [(WADDR_WIDTH-RADDR_WIDTH)-1:0] = {(WADDR_WIDTH-RADDR_WIDTH){1'b0}}; - reg [WADDR_WIDTH-1:0] rd_addr_p = {WADDR_WIDTH{1'b0}}; - reg rd_en_p_r; - wire [RDATA_WIDTH-1:0] cmp_mem; - for(i_1 = 0; i_1 < Q_ROW; i_1 = i_1 + 1) begin - wire [WDATA_WIDTH-1:0] tmem_read = mem_norm[rd_addr_p + i_1]; - assign cmp_mem[i_1*WDATA_WIDTH+WDATA_WIDTH-1:i_1*WDATA_WIDTH] = tmem_read; - end - if(REGMODE == "noreg") begin - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_chk_w; - rd_en_p_r <= rd_en_i; - end +pdp_master # ( + .WADDR_DEPTH (WADDR_DEPTH ), + .WADDR_WIDTH (WADDR_WIDTH ), + .WDATA_WIDTH (WDATA_WIDTH ), + .RADDR_DEPTH (RADDR_DEPTH ), + .RADDR_WIDTH (RADDR_WIDTH ), + .RDATA_WIDTH (RDATA_WIDTH ), + .REGMODE (REGMODE ), + .RESETMODE (RESETMODE ), + .INIT_FILE (INIT_FILE ), + .INIT_FILE_FORMAT (INIT_FILE_FORMAT), + .INIT_MODE (INIT_MODE ), + .BYTE_ENABLE (BYTE_ENABLE ), + .BYTE_SIZE (BYTE_SIZE ), + .BYTE_WIDTH (BYTE_WIDTH ), + .ECC_ENABLE (ECC_ENABLE ), + .OUTPUT_CLK_EN (OUTPUT_CLK_EN ) +) pdp_ctrl ( + .wr_clk_i (wr_clk_i), + .rd_clk_i (rd_clk_i), + .rst_i (rst_i), + .rst_o (rst_o), + .wr_clk_en_o (wr_clk_en_i), + .rd_clk_en_o (rd_clk_en_i), + .rd_out_clk_en_o (rd_out_clk_en_i), + + .wr_en_o (wr_en_i), + .wr_data_o (wr_data_i), + .wr_addr_o (wr_addr_i), + .rd_en_o (rd_en_i), + .rd_addr_o (rd_addr_i), + .ben_o (ben_i), + + .rd_data_dut_i (rd_data_o), + .rd_data_ref_i (rd_data_ref), + .one_err_det_i (one_err_det_o), + .two_err_det_i (two_err_det_o) +); + +clk_rst_gen # ( + .CLK_FREQ (CLK_FREQ ), + .RESET_CNT (RESET_CNT ), + .DIFF_CLOCK (DIFF_CLOCK) +) clk_gen ( + .clk1 (wr_clk_i), + .clk2 (rd_clk_i), + .rst (rst) +); + +mem_model # ( + .FAMILY (FAMILY), + .A_DEPTH (WADDR_DEPTH), + .A_AWID (WADDR_WIDTH), + .A_DWID (WDATA_WIDTH), + .B_DEPTH (RADDR_DEPTH), + .B_AWID (RADDR_WIDTH), + .B_DWID (RDATA_WIDTH), + .INIT_MODE (INIT_MODE), + .INIT_FORMAT (INIT_FILE_FORMAT), + .INIT_FILE (INIT_FILE), + .BEN_WID (BYTE_SIZE), + .A_BDWID (BYTE_WIDTH), + .BYTE_EN_A (BYTE_ENABLE), + .BYTE_EN_B (0), + .REGMODE_B (REGMODE) +) mem0_ref ( + .clk_a_i (wr_clk_i), + .clk_en_a_i (wr_clk_en_i & wr_en_i), + .rst_a_i (rst_i), + .wr_en_a_i (1'b1), + .addr_a_i (wr_addr_i), + .data_a_i (wr_data_i), + .ben_a_i (ben_i), + + .data_a_o (), + + .clk_b_i (rd_clk_i), + .clk_en_b_i (rd_clk_en_i & rd_en_i), + .rst_b_i (rst_i), + .wr_en_b_i (1'b0), + .addr_b_i (rd_addr_i), + .data_b_i ({RDATA_WIDTH{1'b0}}), + .ben_b_i ({roundUP(RDATA_WIDTH, BYTE_SIZE){1'b0}}), + + .data_b_o (rd_data_ref) +); + +function [31:0] roundUP; + input [31:0] dividend; + input [31:0] divisor; + begin + if(divisor == 1) begin + roundUP = dividend; + end + else if(divisor == dividend) begin + roundUP = 1; end else begin - reg [WADDR_WIDTH-1:0] rd_addr_p2 = {WADDR_WIDTH{1'b0}}; - reg rd_en_p2_r = 1'b0; - always @ (posedge rd_clk_i) begin - rd_addr_p <= rd_addr_p2; - rd_en_p_r <= rd_en_p2_r; - rd_addr_p2 <= rd_addr_chk_w; - rd_en_p2_r <= rd_en_i; - end - end - always @ (posedge rd_clk_i) begin - if(rd_en_p_r & state_check == SM_READ_MODE) begin - if(cmp_mem != rd_data_o) begin - $display("Expected DATA = %h, Read DATA = %h", cmp_mem, rd_data_o); - chk_norm = 1'b0; - end - end + roundUP = dividend/divisor + (((dividend % divisor) == 0) ? 0 : 1); end end -end +endfunction endmodule `endif diff --git a/fpga/source/spi/spictrl.v b/fpga/source/spi/spictrl.v index fe40e8d..fc1a079 100644 --- a/fpga/source/spi/spictrl.v +++ b/fpga/source/spi/spictrl.v @@ -25,43 +25,95 @@ module spictrl( assign spi_mosi = tx_shift_r[7]; assign rxdata = rx_shift_r; - reg [4:0] div_cnt_r; + reg slow_clk_r; + reg [5:0] div_cnt_r; always @(posedge clk or posedge rst) begin if (rst) begin div_cnt_r <= 0; - end else begin - div_cnt_r <= div_cnt_r + 5'd1; - end + slow_clk_r <= 0; + end else + begin + div_cnt_r <= div_cnt_r + 6'd1; + if (div_cnt_r == 6'd0) + begin + slow_clk_r <= 0; + end + else if (div_cnt_r == 6'd31) + begin + slow_clk_r <= 1; + end + end end - wire clk_pulse = slow ? (div_cnt_r == 'd31) : 1'b1; + reg txstart_r; + always @(posedge clk or posedge rst) begin + if (rst) + begin + txstart_r <= 1'b0; + end + else + begin + if (txstart_r) + begin + if (busy) + begin + // Transmit has begun, clear registered start trigger + txstart_r <= 1'b0; + end + end + else + if (txstart) + begin + txstart_r <= 1'b1; + end + end // else: !if(rst) + end - reg clk_r; - assign spi_sck = clk_r; + wire clk_speed = slow ? slow_clk_r : clk; + + reg clk_gate_r; + always @(negedge clk_speed or posedge rst) begin + if (rst) + begin + clk_gate_r <= 1'b0; + end + else + begin + if (bitcnt_r > 4'd1) + begin + clk_gate_r <= 1'b1; + end + else + begin + clk_gate_r <= 1'b0; + end + end + end + + wire clk_gated = clk_gate_r ? clk_speed : 1'b0; + + assign spi_sck = clk_gated; - always @(posedge clk or posedge rst) begin + always @(posedge clk_speed or posedge rst) begin if (rst) begin tx_shift_r <= 0; rx_shift_r <= 0; bitcnt_r <= 0; - clk_r <= 0; end else begin if (busy) begin - if (clk_pulse) begin - clk_r <= !clk_r; - if (clk_r) begin - tx_shift_r <= {tx_shift_r[6:0], 1'b0}; - bitcnt_r <= bitcnt_r - 4'd1; - end else begin - rx_shift_r <= {rx_shift_r[6:0], spi_miso}; - end - end + if (bitcnt_r != 4'd0) begin + tx_shift_r <= {tx_shift_r[6:0], 1'b0}; + end + if (bitcnt_r != 4'd9) begin + rx_shift_r <= {rx_shift_r[6:0], spi_miso}; + end + bitcnt_r <= bitcnt_r - 4'd1; end else begin - if (txstart) begin + if (txstart_r) begin tx_shift_r <= txdata; - bitcnt_r <= 4'd8; + bitcnt_r <= 4'd9; end end end diff --git a/fpga/vera_module.rdf b/fpga/vera_module.rdf index f2263ef..fe6dea3 100755 --- a/fpga/vera_module.rdf +++ b/fpga/vera_module.rdf @@ -1,5 +1,5 @@ - + @@ -81,8 +81,8 @@ - - + + diff --git a/fpga/vera_module1.sty b/fpga/vera_module1.sty index 19be2c1..26d6381 100755 --- a/fpga/vera_module1.sty +++ b/fpga/vera_module1.sty @@ -7,232 +7,129 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - + - - - + + + - - - - - + - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - + + - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - + + - + + - @@ -242,6 +139,5 @@ -