5505 lines
430 KiB
Verilog
5505 lines
430 KiB
Verilog
|
|
/*******************************************************************************
|
|
Verilog netlist generated by IPGEN Radiant Software (64-bit) 2.0.1.281.2
|
|
Soft IP Version: 1.1.0
|
|
Sun Jul 10 15:47:31 2022
|
|
*******************************************************************************/
|
|
/*******************************************************************************
|
|
Wrapper Module generated per user settings.
|
|
*******************************************************************************/
|
|
module line_ram_dp (wr_clk_i,
|
|
rd_clk_i,
|
|
rst_i,
|
|
wr_clk_en_i,
|
|
rd_en_i,
|
|
rd_clk_en_i,
|
|
wr_en_i,
|
|
wr_data_i,
|
|
wr_addr_i,
|
|
rd_addr_i,
|
|
rd_data_o) ;
|
|
input wr_clk_i ;
|
|
input rd_clk_i ;
|
|
input rst_i ;
|
|
input wr_clk_en_i ;
|
|
input rd_en_i ;
|
|
input rd_clk_en_i ;
|
|
input wr_en_i ;
|
|
input [23:0] wr_data_i ;
|
|
input [10:0] wr_addr_i ;
|
|
input [10:0] rd_addr_i ;
|
|
output [23:0] rd_data_o ;
|
|
parameter MEM_ID = "line_ram_dp" ;
|
|
line_ram_dp_ipgen_lscc_ram_dp #(.FAMILY("LIFCL"),
|
|
.MEM_ID(MEM_ID),
|
|
.MEM_SIZE("24,2048"),
|
|
.WADDR_DEPTH(2048),
|
|
.WDATA_WIDTH(24),
|
|
.RADDR_DEPTH(2048),
|
|
.RDATA_WIDTH(24),
|
|
.WADDR_WIDTH(11),
|
|
.REGMODE("noreg"),
|
|
.RADDR_WIDTH(11),
|
|
.OUTPUT_CLK_EN(0),
|
|
.RESETMODE("sync"),
|
|
.BYTE_ENABLE(0),
|
|
.BYTE_WIDTH(1),
|
|
.ECC_ENABLE(0),
|
|
.INIT_MODE("none"),
|
|
.INIT_FILE("none"),
|
|
.INIT_FILE_FORMAT("hex"),
|
|
.INIT_VALUE_00("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_01("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_02("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_03("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_04("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_05("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_06("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_07("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_08("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_09("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_0A("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_0B("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_0C("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_0D("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_0E("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_0F("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_10("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_11("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_12("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_13("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_14("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_15("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_16("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_17("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_18("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_19("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_1A("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_1B("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_1C("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_1D("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_1E("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_1F("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_20("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_21("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_22("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_23("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_24("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_25("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_26("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_27("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_28("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_29("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_2A("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_2B("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_2C("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_2D("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_2E("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_2F("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_30("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_31("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_32("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_33("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_34("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_35("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_36("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_37("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_38("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_39("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_3A("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.INIT_VALUE_3B("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
|
.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),
|
|
.rd_clk_i(rd_clk_i),
|
|
.rst_i(rst_i),
|
|
.wr_clk_en_i(wr_clk_en_i),
|
|
.rd_en_i(rd_en_i),
|
|
.rd_clk_en_i(rd_clk_en_i),
|
|
.rd_out_clk_en_i(1'b1),
|
|
.wr_en_i(wr_en_i),
|
|
.ben_i(1'b1),
|
|
.wr_data_i(wr_data_i[23:0]),
|
|
.wr_addr_i(wr_addr_i[10:0]),
|
|
.rd_addr_i(rd_addr_i[10:0]),
|
|
.rd_data_o(rd_data_o[23:0]),
|
|
.one_err_det_o(),
|
|
.two_err_det_o()) ;
|
|
endmodule
|
|
|
|
|
|
|
|
// =============================================================================
|
|
// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
// -----------------------------------------------------------------------------
|
|
// Copyright (c) 2017 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.v
|
|
// Title :
|
|
// Dependencies :
|
|
// Description : Implements a pseudo Dual Port RAM using EBR.
|
|
// =============================================================================
|
|
// REVISION HISTORY
|
|
// Version : 1.1.0.
|
|
// Author(s) :
|
|
// Mod. Date :
|
|
// Changes Made : Initial release.
|
|
// =============================================================================
|
|
module line_ram_dp_ipgen_lscc_ram_dp #(parameter _FCODE_LIFCL_ = 1,
|
|
parameter _FCODE_ICE_ = 2,
|
|
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 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_MODE = "none",
|
|
parameter BYTE_ENABLE = 1,
|
|
parameter BYTE_SIZE = ((BYTE_ENABLE == 1) ? getByteSize(WDATA_WIDTH,
|
|
FAMILY_CODE) : WDATA_WIDTH),
|
|
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") (
|
|
// -----------------------------------------------------------------------------
|
|
// 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) ;
|
|
// -----------------------------------------------------------------------------
|
|
// Local Parameters
|
|
// -----------------------------------------------------------------------------
|
|
localparam IS_BYTE_ENABLE = (((BYTE_ENABLE == 1) && ((WDATA_WIDTH % BYTE_SIZE) == 0)) && (BYTE_WIDTH > 1)) ;
|
|
localparam IS_GSR_EN = ((GSR == "enable") ? "ENABLED" : "DISABLED") ;
|
|
localparam IS_ECC = (((ECC_ENABLE == "enable") || (ECC_ENABLE == "ENABLE")) ? "ENABLE" : "DISABLE") ;
|
|
localparam STRING_LENGTH = ((FAMILY == "iCE40UP") ? 66 : 82) ;
|
|
// -----------------------------------------------------------------------------
|
|
// 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] ;
|
|
assign rd_data_o = ((REGMODE == "reg") ? dataout_reg : dataout_reg_buffer) ;
|
|
initial
|
|
begin
|
|
if (((INIT_MODE == "mem_file") && (INIT_FILE != "none")))
|
|
begin
|
|
if ((INIT_FILE_FORMAT == "hex"))
|
|
$readmemh (INIT_FILE,
|
|
mem,
|
|
0,
|
|
(RADDR_DEPTH - 1)) ;
|
|
else
|
|
$readmemb (INIT_FILE,
|
|
mem,
|
|
0,
|
|
(RADDR_DEPTH - 1)) ;
|
|
end
|
|
end
|
|
always
|
|
@(posedge wr_clk_i)
|
|
begin
|
|
if (((wr_clk_en_i == 1'b1) && (wr_en_i == 1'b1)))
|
|
mem[wr_addr_i] <= wr_data_i ;
|
|
end
|
|
always
|
|
@(posedge rd_clk_i)
|
|
begin
|
|
if (((rd_clk_en_i == 1'b1) && (rd_en_i == 1'b1)))
|
|
dataout_reg_buffer <= mem[rd_addr_i] ;
|
|
end
|
|
if ((REGMODE == "reg"))
|
|
begin : genblk1
|
|
if ((RESETMODE == "sync"))
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i)
|
|
begin
|
|
if ((rst_i == 1'b1))
|
|
dataout_reg <= 'h0 ;
|
|
else
|
|
if (((rd_out_clk_en_i == 1'b1) && (rd_en_i == 1'b1)))
|
|
dataout_reg <= dataout_reg_buffer ;
|
|
end
|
|
end
|
|
else
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i or
|
|
posedge rst_i)
|
|
begin
|
|
if ((rst_i == 1'b1))
|
|
dataout_reg <= 'h0 ;
|
|
else
|
|
if (((rd_out_clk_en_i == 1'b1) && (rd_en_i == 1'b1)))
|
|
dataout_reg <= dataout_reg_buffer ;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if (((RDATA_WIDTH == WDATA_WIDTH) && (RADDR_DEPTH == WADDR_DEPTH)))
|
|
begin : NON_MIX
|
|
localparam OPT_DATA_WIDTH = getMinimaData(RADDR_DEPTH,
|
|
RDATA_WIDTH,
|
|
IS_BYTE_ENABLE,
|
|
BYTE_SIZE,
|
|
ECC_ENABLE,
|
|
FAMILY_CODE) ;
|
|
localparam OPT_ADDR_DEPTH = data_to_addr(OPT_DATA_WIDTH,
|
|
FAMILY_CODE) ;
|
|
localparam OPT_ADDR_WIDTH = clog2(OPT_ADDR_DEPTH) ;
|
|
localparam EBR_DATA = roundUP(RDATA_WIDTH,
|
|
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))) ;
|
|
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 ;
|
|
for (i0 = 0;(i0 < EBR_ADDR);i0 = (i0 + 1))
|
|
begin : ADDR_ROUTE
|
|
wire [(RDATA_WIDTH - 1):0] raw_output_w ;
|
|
assign rd_data_raw_w[i0] = raw_output_w ;
|
|
wire chk_addr_r_w ;
|
|
if ((EBR_ADDR > 1))
|
|
begin : genblk1
|
|
assign chk_addr_r_w = (rd_addr_i[(RADDR_WIDTH - 1):OPT_ADDR_WIDTH] == i0) ;
|
|
end
|
|
else
|
|
begin : genblk1
|
|
assign chk_addr_r_w = 1'b1 ;
|
|
end
|
|
wire [(OPT_ADDR_WIDTH - 1):0] act_addr_r_w ;
|
|
if ((OPT_ADDR_WIDTH > RADDR_WIDTH))
|
|
begin : genblk2
|
|
assign act_addr_r_w[(RADDR_WIDTH - 1):0] = rd_addr_i ;
|
|
assign act_addr_r_w[(OPT_ADDR_WIDTH - 1):RADDR_WIDTH] = 'h000 ;
|
|
end
|
|
else
|
|
begin : genblk2
|
|
assign act_addr_r_w = rd_addr_i[(OPT_ADDR_WIDTH - 1):0] ;
|
|
end
|
|
wire chk_addr_w_w ;
|
|
if ((EBR_ADDR > 1))
|
|
begin : genblk3
|
|
assign chk_addr_w_w = (wr_addr_i[(WADDR_WIDTH - 1):OPT_ADDR_WIDTH] == i0) ;
|
|
end
|
|
else
|
|
begin : genblk3
|
|
assign chk_addr_w_w = 1'b1 ;
|
|
end
|
|
wire [(OPT_ADDR_WIDTH - 1):0] act_addr_w_w ;
|
|
if ((OPT_ADDR_WIDTH > WADDR_WIDTH))
|
|
begin : genblk4
|
|
assign act_addr_w_w[(WADDR_WIDTH - 1):0] = wr_addr_i ;
|
|
assign act_addr_w_w[(OPT_ADDR_WIDTH - 1):WADDR_WIDTH] = 'h000 ;
|
|
end
|
|
else
|
|
begin : genblk4
|
|
assign act_addr_w_w = wr_addr_i[(OPT_ADDR_WIDTH - 1):0] ;
|
|
end
|
|
wire [(EBR_DATA - 1):0] one_err_det_ind_w ;
|
|
wire [(EBR_DATA - 1):0] two_err_det_ind_w ;
|
|
if ((EBR_DATA == 1))
|
|
begin : genblk5
|
|
assign one_err_det_raw_w[i0] = one_err_det_ind_w[0] ;
|
|
assign two_err_det_raw_w[i0] = two_err_det_ind_w[0] ;
|
|
end
|
|
else
|
|
begin : genblk5
|
|
assign one_err_det_raw_w[i0] = (|one_err_det_ind_w) ;
|
|
assign two_err_det_raw_w[i0] = (|two_err_det_ind_w) ;
|
|
end
|
|
for (i1 = 0;(i1 < EBR_DATA);i1 = (i1 + 1))
|
|
begin : DATA_ROUTE
|
|
localparam ECO_POSX = (i1 * OPT_DATA_WIDTH) ;
|
|
localparam ECO_POSY = (i0 * OPT_ADDR_DEPTH) ;
|
|
wire [(OPT_DATA_WIDTH - 1):0] act_in_w ;
|
|
wire [(OPT_DATA_WIDTH - 1):0] act_out_w ;
|
|
wire one_err_det_ebr_w ;
|
|
wire two_err_det_ebr_w ;
|
|
wire [(BYTE_WIDTH_IMPL - 1):0] act_ben_w ;
|
|
assign one_err_det_ind_w[i1] = one_err_det_ebr_w ;
|
|
assign two_err_det_ind_w[i1] = two_err_det_ebr_w ;
|
|
if (((OPT_DATA_WIDTH * (i1 + 1)) <= RDATA_WIDTH))
|
|
begin : genblk1
|
|
assign act_in_w = wr_data_i[(((i1 + 1) * OPT_DATA_WIDTH) - 1):(i1 * OPT_DATA_WIDTH)] ;
|
|
assign raw_output_w[(((i1 + 1) * OPT_DATA_WIDTH) - 1):(i1 * OPT_DATA_WIDTH)] = act_out_w ;
|
|
end
|
|
else
|
|
begin : genblk1
|
|
assign act_in_w[(WDATA_WIDTH - (1 + (i1 * OPT_DATA_WIDTH))):0] = wr_data_i[(WDATA_WIDTH - 1):(i1 * OPT_DATA_WIDTH)] ;
|
|
if ((OPT_DATA_WIDTH > (WDATA_WIDTH - (i1 * OPT_DATA_WIDTH))))
|
|
begin : genblk1
|
|
assign act_in_w[(OPT_DATA_WIDTH - 1):(WDATA_WIDTH - (i1 * OPT_DATA_WIDTH))] = {(OPT_DATA_WIDTH - (WDATA_WIDTH - (i1 * OPT_DATA_WIDTH))){1'b0}} ;
|
|
end
|
|
assign raw_output_w[(RDATA_WIDTH - 1):(i1 * OPT_DATA_WIDTH)] = act_out_w[(RDATA_WIDTH - (1 + (i1 * OPT_DATA_WIDTH))):0] ;
|
|
end
|
|
if ((IS_BYTE_ENABLE == 0))
|
|
begin : genblk2
|
|
assign act_ben_w = {BYTE_WIDTH_IMPL{1'b1}} ;
|
|
end
|
|
else
|
|
if ((OPT_DATA_WIDTH >= 8))
|
|
begin : genblk2
|
|
if ((BYTE_WIDTH_IMPL > 1))
|
|
begin : genblk1
|
|
if ((((i1 + 1) * BYTE_WIDTH_IMPL) <= BYTE_WIDTH))
|
|
begin : genblk1
|
|
assign act_ben_w = ben_i[(((i1 + 1) * BYTE_WIDTH_IMPL) - 1):(i1 * BYTE_WIDTH_IMPL)] ;
|
|
end
|
|
else
|
|
begin : genblk1
|
|
assign act_ben_w[(BYTE_WIDTH_IMPL - 1):(BYTE_WIDTH - (i1 * BYTE_WIDTH_IMPL))] = {(BYTE_WIDTH_IMPL - (BYTE_WIDTH - (i1 * BYTE_WIDTH_IMPL))){1'b1}} ;
|
|
assign act_ben_w[(BYTE_WIDTH - (1 + (i1 * BYTE_WIDTH_IMPL))):0] = ben_i[(BYTE_WIDTH - 1):(i1 * BYTE_WIDTH_IMPL)] ;
|
|
end
|
|
end
|
|
else
|
|
begin : genblk1
|
|
assign act_ben_w = ben_i[i1] ;
|
|
end
|
|
end
|
|
else
|
|
begin : genblk2
|
|
assign act_ben_w = ben_i[(((i1 * OPT_DATA_WIDTH) * BYTE_WIDTH) / WDATA_WIDTH)] ;
|
|
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
|
|
line_ram_dp_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID),
|
|
.MEM_SIZE(MEM_SIZE),
|
|
.POSx(ECO_POSX),
|
|
.POSy(ECO_POSY),
|
|
.FAMILY(FAMILY),
|
|
._FCODE_ICE_(_FCODE_ICE_),
|
|
._FCODE_LIFCL_(_FCODE_LIFCL_),
|
|
._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_MODE(INIT_MODE),
|
|
.BYTE_ENABLE(IS_BYTE_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)]),
|
|
.INIT_VALUE_01(INIT_VALUE_01[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_02(INIT_VALUE_02[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_03(INIT_VALUE_03[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_04(INIT_VALUE_04[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_05(INIT_VALUE_05[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_06(INIT_VALUE_06[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_07(INIT_VALUE_07[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_08(INIT_VALUE_08[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_09(INIT_VALUE_09[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_0A(INIT_VALUE_0A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_0B(INIT_VALUE_0B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_0C(INIT_VALUE_0C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.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),
|
|
.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(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_addr_i(act_addr_r_w),
|
|
.ben_i(act_ben_w),
|
|
.rd_data_o(act_out_w),
|
|
.one_err_det_o(one_err_det_ebr_w),
|
|
.two_err_det_o(two_err_det_ebr_w)) ;
|
|
end
|
|
else
|
|
begin : no_init
|
|
line_ram_dp_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID),
|
|
.MEM_SIZE(MEM_SIZE),
|
|
.POSx(ECO_POSX),
|
|
.POSy(ECO_POSY),
|
|
.FAMILY(FAMILY),
|
|
._FCODE_ICE_(_FCODE_ICE_),
|
|
._FCODE_LIFCL_(_FCODE_LIFCL_),
|
|
._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_MODE(INIT_MODE),
|
|
.BYTE_ENABLE(IS_BYTE_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),
|
|
.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(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_addr_i(act_addr_r_w),
|
|
.ben_i(act_ben_w),
|
|
.rd_data_o(act_out_w),
|
|
.one_err_det_o(one_err_det_ebr_w),
|
|
.two_err_det_o(two_err_det_ebr_w)) ;
|
|
end
|
|
end
|
|
end
|
|
if ((EBR_ADDR == 1))
|
|
begin : genblk2
|
|
assign rd_data_o = rd_data_raw_w[0] ;
|
|
assign one_err_det_o = ((ECC_ENABLE == 1) ? one_err_det_raw_w[0] : 1'b0) ;
|
|
assign two_err_det_o = ((ECC_ENABLE == 1) ? two_err_det_raw_w[0] : 1'b0) ;
|
|
end
|
|
else
|
|
begin : genblk2
|
|
reg [(RDATA_WIDTH - 1):0] rd_out_buff_r ;
|
|
reg [(RADDR_WIDTH - 1):0] rd_addr_0_r = {RADDR_WIDTH{1'b0}} ;
|
|
reg one_err_det_r ;
|
|
reg two_err_det_r ;
|
|
assign rd_data_o = rd_out_buff_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"))
|
|
begin : _nreg
|
|
if ((RESETMODE == "sync"))
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i)
|
|
begin
|
|
if (rst_i)
|
|
begin
|
|
rd_addr_0_r <= {RADDR_WIDTH{1'b0}} ;
|
|
end
|
|
else
|
|
begin
|
|
rd_addr_0_r <= rd_addr_i ;
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i or
|
|
posedge rst_i)
|
|
begin
|
|
if (rst_i)
|
|
begin
|
|
rd_addr_0_r <= {RADDR_WIDTH{1'b0}} ;
|
|
end
|
|
else
|
|
begin
|
|
rd_addr_0_r <= rd_addr_i ;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : _reg
|
|
reg [(RADDR_WIDTH - 1):0] rd_addr_1_r = {RADDR_WIDTH{1'b0}} ;
|
|
if ((RESETMODE == "sync"))
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i)
|
|
begin
|
|
if (rst_i)
|
|
begin
|
|
rd_addr_0_r <= {RADDR_WIDTH{1'b0}} ;
|
|
rd_addr_1_r <= {RADDR_WIDTH{1'b0}} ;
|
|
end
|
|
else
|
|
begin
|
|
rd_addr_0_r <= rd_addr_1_r ;
|
|
rd_addr_1_r <= rd_addr_i ;
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i or
|
|
posedge rst_i)
|
|
begin
|
|
if (rst_i)
|
|
begin
|
|
rd_addr_0_r <= {RADDR_WIDTH{1'b0}} ;
|
|
rd_addr_1_r <= {RADDR_WIDTH{1'b0}} ;
|
|
end
|
|
else
|
|
begin
|
|
rd_addr_0_r <= rd_addr_1_r ;
|
|
rd_addr_1_r <= rd_addr_i ;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
always
|
|
@(*)
|
|
begin
|
|
rd_out_buff_r = rd_data_raw_w[rd_addr_0_r[(RADDR_WIDTH - 1):OPT_ADDR_WIDTH]] ;
|
|
one_err_det_r = one_err_det_raw_w[rd_addr_0_r[(RADDR_WIDTH - 1):OPT_ADDR_WIDTH]] ;
|
|
two_err_det_r = two_err_det_raw_w[rd_addr_0_r[(RADDR_WIDTH - 1):OPT_ADDR_WIDTH]] ;
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if ((IS_BYTE_ENABLE == 0))
|
|
begin : MIX_NO_BYTE_EN
|
|
localparam MAX_DATA = ((WDATA_WIDTH > RDATA_WIDTH) ? WDATA_WIDTH : RDATA_WIDTH) ;
|
|
localparam MAX_PORT = ((WDATA_WIDTH > RDATA_WIDTH) ? "W" : "R") ;
|
|
localparam MIN_DEPTH = ((MAX_PORT == "W") ? WADDR_DEPTH : RADDR_DEPTH) ;
|
|
localparam Q_FACTOR = ((MAX_PORT == "W") ? (WDATA_WIDTH / RDATA_WIDTH) : (RDATA_WIDTH / WDATA_WIDTH)) ;
|
|
localparam PROC_MAX_DATA = procData(MAX_DATA,
|
|
ECC_ENABLE,
|
|
FAMILY_CODE) ;
|
|
localparam PROC_MIN_DEPTH = (2 ** clog2(MIN_DEPTH)) ;
|
|
localparam PROC_MIN_DATA = (PROC_MAX_DATA / Q_FACTOR) ;
|
|
localparam PROC_MAX_DEPTH = (PROC_MIN_DEPTH * Q_FACTOR) ;
|
|
localparam W_PORT_USE = ((MAX_PORT == "W") ? PROC_MAX_DATA : PROC_MIN_DATA) ;
|
|
localparam W_DEPTH_USE = ((MAX_PORT == "W") ? PROC_MIN_DEPTH : PROC_MAX_DEPTH) ;
|
|
localparam W_DEPTH_WIDTH_USE = clog2(W_DEPTH_USE) ;
|
|
localparam R_PORT_USE = ((MAX_PORT == "R") ? PROC_MAX_DATA : PROC_MIN_DATA) ;
|
|
localparam R_DEPTH_USE = ((MAX_PORT == "R") ? PROC_MIN_DEPTH : PROC_MAX_DEPTH) ;
|
|
localparam R_DEPTH_WIDTH_USE = clog2(R_DEPTH_USE) ;
|
|
localparam W_DATA_WIDTH_IMPL = getCASE1DataImpl(W_DEPTH_USE,
|
|
W_PORT_USE,
|
|
R_DEPTH_USE,
|
|
R_PORT_USE,
|
|
1'b1,
|
|
0,
|
|
ECC_ENABLE,
|
|
FAMILY_CODE) ;
|
|
localparam W_ADDR_DEPTH_IMPL = data_to_addr(W_DATA_WIDTH_IMPL,
|
|
FAMILY_CODE) ;
|
|
localparam W_ADDR_WIDTH_IMPL = clog2(W_ADDR_DEPTH_IMPL) ;
|
|
localparam R_DATA_WIDTH_IMPL = getCASE1DataImpl(W_DEPTH_USE,
|
|
W_PORT_USE,
|
|
R_DEPTH_USE,
|
|
R_PORT_USE,
|
|
1'b0,
|
|
0,
|
|
ECC_ENABLE,
|
|
FAMILY_CODE) ;
|
|
localparam R_ADDR_DEPTH_IMPL = data_to_addr(R_DATA_WIDTH_IMPL,
|
|
FAMILY_CODE) ;
|
|
localparam R_ADDR_WIDTH_IMPL = clog2(R_ADDR_DEPTH_IMPL) ;
|
|
localparam EBR_ADDR = roundUP(W_DEPTH_USE,
|
|
W_ADDR_DEPTH_IMPL) ;
|
|
localparam EBR_DATA = roundUP(W_PORT_USE,
|
|
W_DATA_WIDTH_IMPL) ;
|
|
wire [(W_DEPTH_WIDTH_USE - 1):0] wr_addr_buff_w ;
|
|
wire [(R_DEPTH_WIDTH_USE - 1):0] rd_addr_buff_w ;
|
|
if ((W_DEPTH_WIDTH_USE > WADDR_WIDTH))
|
|
begin : genblk1
|
|
assign wr_addr_buff_w[(W_DEPTH_WIDTH_USE - 1):WADDR_WIDTH] = 'h0000 ;
|
|
end
|
|
assign wr_addr_buff_w[(WADDR_WIDTH - 1):0] = wr_addr_i ;
|
|
if ((R_DEPTH_WIDTH_USE > RADDR_WIDTH))
|
|
begin : genblk2
|
|
assign rd_addr_buff_w[(R_DEPTH_WIDTH_USE - 1):RADDR_WIDTH] = 'h0000 ;
|
|
end
|
|
assign rd_addr_buff_w[(RADDR_WIDTH - 1):0] = rd_addr_i ;
|
|
wire [(W_PORT_USE - 1):0] input_buff_w ;
|
|
wire [(R_PORT_USE - 1):0] output_buff_w ;
|
|
wire [(R_PORT_USE - 1):0] rd_data_raw_w [(EBR_ADDR - 1):0] ;
|
|
wire [(W_PORT_USE - 1):0] master_data_in_w ;
|
|
wire [(R_PORT_USE - 1):0] master_data_out_w ;
|
|
if ((EBR_DATA > 1))
|
|
begin : genblk3
|
|
if ((W_PORT_USE > R_PORT_USE))
|
|
begin : genblk1
|
|
assign rd_data_o = output_buff_w[(RDATA_WIDTH - 1):0] ;
|
|
assign output_buff_w = master_data_out_w ;
|
|
wire [(R_PORT_USE - 1):0] inp_buff_seg_w [((W_PORT_USE / R_PORT_USE) - 1):0] ;
|
|
for (i_0 = 0;(i_0 < (W_PORT_USE / R_PORT_USE));i_0 = (i_0 + 1))
|
|
begin : genblk1
|
|
assign inp_buff_seg_w[i_0] = wr_data_i[((RDATA_WIDTH * (i_0 + 1)) - 1):(RDATA_WIDTH * i_0)] ;
|
|
end
|
|
for (i_0 = 0;(i_0 < (W_PORT_USE / R_PORT_USE));i_0 = (i_0 + 1))
|
|
begin : genblk2
|
|
assign input_buff_w[(((i_0 * R_PORT_USE) + R_PORT_USE) - 1):(i_0 * R_PORT_USE)] = inp_buff_seg_w[i_0] ;
|
|
end
|
|
wire [(R_DATA_WIDTH_IMPL - 1):0] master_data_ind_w [((W_PORT_USE / R_DATA_WIDTH_IMPL) - 1):0] ;
|
|
for (i_0 = 0;(i_0 < EBR_DATA);i_0 = (i_0 + 1))
|
|
begin : genblk3
|
|
for (i_1 = 0;(i_1 < (W_PORT_USE / (EBR_DATA * R_DATA_WIDTH_IMPL)));i_1 = (i_1 + 1))
|
|
begin : genblk1
|
|
assign master_data_ind_w[(((W_PORT_USE / (EBR_DATA * R_DATA_WIDTH_IMPL)) * i_0) + i_1)] = input_buff_w[((((i_0 * R_DATA_WIDTH_IMPL) + ((i_1 * EBR_DATA) * R_DATA_WIDTH_IMPL)) + R_DATA_WIDTH_IMPL) - 1):((i_0 * R_DATA_WIDTH_IMPL) + ((i_1 * EBR_DATA) * R_DATA_WIDTH_IMPL))] ;
|
|
end
|
|
end
|
|
for (i_0 = 0;(i_0 < (W_PORT_USE / R_DATA_WIDTH_IMPL));i_0 = (i_0 + 1))
|
|
begin : genblk4
|
|
assign master_data_in_w[(((i_0 * R_DATA_WIDTH_IMPL) + R_DATA_WIDTH_IMPL) - 1):(i_0 * R_DATA_WIDTH_IMPL)] = master_data_ind_w[i_0] ;
|
|
end
|
|
end
|
|
else
|
|
begin : genblk1
|
|
if ((W_PORT_USE > WDATA_WIDTH))
|
|
begin : genblk1
|
|
assign input_buff_w[(W_PORT_USE - 1):WDATA_WIDTH] = 'h0000 ;
|
|
end
|
|
assign input_buff_w[(WDATA_WIDTH - 1):0] = wr_data_i ;
|
|
assign master_data_in_w = input_buff_w ;
|
|
wire [(W_PORT_USE - 1):0] out_buff_seg_w [((R_PORT_USE / W_PORT_USE) - 1):0] ;
|
|
for (i_0 = 0;(i_0 < (R_PORT_USE / W_PORT_USE));i_0 = (i_0 + 1))
|
|
begin : genblk2
|
|
assign rd_data_o[((WDATA_WIDTH * (i_0 + 1)) - 1):(WDATA_WIDTH * i_0)] = out_buff_seg_w[i_0] ;
|
|
end
|
|
for (i_0 = 0;(i_0 < (R_PORT_USE / W_PORT_USE));i_0 = (i_0 + 1))
|
|
begin : genblk3
|
|
assign out_buff_seg_w[i_0] = output_buff_w[(((i_0 + 1) * W_PORT_USE) - 1):(i_0 * W_PORT_USE)] ;
|
|
end
|
|
wire [(W_DATA_WIDTH_IMPL - 1):0] master_data_ind_out_w [((R_PORT_USE / W_DATA_WIDTH_IMPL) - 1):0] ;
|
|
for (i_0 = 0;(i_0 < (R_PORT_USE / W_PORT_USE));i_0 = (i_0 + 1))
|
|
begin : genblk4
|
|
for (i_1 = 0;(i_1 < EBR_DATA);i_1 = (i_1 + 1))
|
|
begin : genblk1
|
|
assign master_data_ind_out_w[((i_0 * EBR_DATA) + i_1)] = master_data_out_w[((((i_1 * R_DATA_WIDTH_IMPL) + (i_0 * W_DATA_WIDTH_IMPL)) + W_DATA_WIDTH_IMPL) - 1):((i_1 * R_DATA_WIDTH_IMPL) + (i_0 * W_DATA_WIDTH_IMPL))] ;
|
|
end
|
|
end
|
|
for (i_0 = 0;(i_0 < (R_PORT_USE / W_DATA_WIDTH_IMPL));i_0 = (i_0 + 1))
|
|
begin : genblk5
|
|
assign output_buff_w[(((i_0 * W_DATA_WIDTH_IMPL) + W_DATA_WIDTH_IMPL) - 1):(i_0 * W_DATA_WIDTH_IMPL)] = master_data_ind_out_w[i_0] ;
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if ((EBR_ADDR > 1))
|
|
begin : genblk3
|
|
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))
|
|
begin : genblk1
|
|
for (i_0 = 0;(i_0 < Q_SWR_x);i_0 = (i_0 + 1))
|
|
begin : genblk1
|
|
assign master_data_in_w[(((i_0 * R_PORT_USE) + RDATA_WIDTH) - 1):(i_0 * R_PORT_USE)] = wr_data_i[(((i_0 * RDATA_WIDTH) + RDATA_WIDTH) - 1):(i_0 * RDATA_WIDTH)] ;
|
|
if ((R_PORT_USE != RDATA_WIDTH))
|
|
begin : genblk1
|
|
assign master_data_in_w[(((i_0 * R_PORT_USE) + R_PORT_USE) - 1):((i_0 * R_PORT_USE) + RDATA_WIDTH)] = {(R_PORT_USE - RDATA_WIDTH){1'b0}} ;
|
|
end
|
|
end
|
|
assign rd_data_o = master_data_out_w[(RDATA_WIDTH - 1):0] ;
|
|
end
|
|
else
|
|
begin : genblk1
|
|
assign master_data_in_w[(WDATA_WIDTH - 1):0] = wr_data_i ;
|
|
for (i_0 = 0;(i_0 < Q_SRD_x);i_0 = (i_0 + 1))
|
|
begin : genblk1
|
|
assign rd_data_o[(((i_0 * WDATA_WIDTH) + WDATA_WIDTH) - 1):(i_0 * WDATA_WIDTH)] = master_data_out_w[(((i_0 * W_PORT_USE) + WDATA_WIDTH) - 1):(i_0 * W_PORT_USE)] ;
|
|
end
|
|
end
|
|
end
|
|
if (((EBR_ADDR == 1) && (EBR_DATA == 1)))
|
|
begin : SINGLE_IMPL
|
|
localparam W_SINGULAR_DATA_x = getSingularCase(W_PORT_USE,
|
|
FAMILY_CODE) ;
|
|
localparam R_SINGULAR_DATA_x = getSingularCase(R_PORT_USE,
|
|
FAMILY_CODE) ;
|
|
localparam W_SINGULAR_ADDR_WIDTH = clog2(data_to_addr(W_SINGULAR_DATA_x,
|
|
FAMILY_CODE)) ;
|
|
localparam R_SINGULAR_ADDR_WIDTH = clog2(data_to_addr(R_SINGULAR_DATA_x,
|
|
FAMILY_CODE)) ;
|
|
localparam Q_SRD_x = (R_SINGULAR_DATA_x / W_SINGULAR_DATA_x) ;
|
|
localparam Q_SWR_x = (W_SINGULAR_DATA_x / R_SINGULAR_DATA_x) ;
|
|
wire [(W_SINGULAR_DATA_x - 1):0] single_wire_in_w ;
|
|
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 ;
|
|
if ((R_SINGULAR_DATA_x < W_SINGULAR_DATA_x))
|
|
begin : genblk1
|
|
for (i0 = 0;(i0 < Q_SWR_x);i0 = (i0 + 1))
|
|
begin : genblk1
|
|
assign single_wire_in_w[(((i0 * R_SINGULAR_DATA_x) + RDATA_WIDTH) - 1):(i0 * R_SINGULAR_DATA_x)] = wr_data_i[(((i0 * RDATA_WIDTH) + RDATA_WIDTH) - 1):(i0 * RDATA_WIDTH)] ;
|
|
if ((R_SINGULAR_DATA_x != RDATA_WIDTH))
|
|
begin : genblk1
|
|
assign single_wire_in_w[(((i0 * R_SINGULAR_DATA_x) + R_SINGULAR_DATA_x) - 1):((i0 * R_SINGULAR_DATA_x) + RDATA_WIDTH)] = {(R_SINGULAR_DATA_x - RDATA_WIDTH){1'b0}} ;
|
|
end
|
|
end
|
|
assign rd_data_o = single_wire_out_w[(RDATA_WIDTH - 1):0] ;
|
|
end
|
|
else
|
|
begin : genblk1
|
|
assign single_wire_in_w[(WDATA_WIDTH - 1):0] = wr_data_i ;
|
|
for (i0 = 0;(i0 < Q_SRD_x);i0 = (i0 + 1))
|
|
begin : genblk1
|
|
assign rd_data_o[(((i0 * WDATA_WIDTH) + WDATA_WIDTH) - 1):(i0 * WDATA_WIDTH)] = single_wire_out_w[(((i0 * W_SINGULAR_DATA_x) + WDATA_WIDTH) - 1):(i0 * W_SINGULAR_DATA_x)] ;
|
|
end
|
|
end
|
|
if ((W_SINGULAR_ADDR_WIDTH > WADDR_WIDTH))
|
|
begin : genblk2
|
|
assign single_wr_addr_w[(W_SINGULAR_ADDR_WIDTH - 1):WADDR_WIDTH] = 'h0000 ;
|
|
end
|
|
assign single_wr_addr_w[(WADDR_WIDTH - 1):0] = wr_addr_i ;
|
|
if ((R_SINGULAR_ADDR_WIDTH > RADDR_WIDTH))
|
|
begin : genblk3
|
|
assign single_rd_addr_w[(R_SINGULAR_ADDR_WIDTH - 1):RADDR_WIDTH] = 'h0000 ;
|
|
end
|
|
assign single_rd_addr_w[(RADDR_WIDTH - 1):0] = rd_addr_i ;
|
|
if ((INIT_MODE == "mem_file"))
|
|
begin : mem_init
|
|
line_ram_dp_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID),
|
|
.MEM_SIZE(MEM_SIZE),
|
|
.FAMILY(FAMILY),
|
|
._FCODE_ICE_(_FCODE_ICE_),
|
|
._FCODE_LIFCL_(_FCODE_LIFCL_),
|
|
._FCODE_COMMON_(_FCODE_COMMON_),
|
|
.DATA_WIDTH_W(W_SINGULAR_DATA_x),
|
|
.DATA_WIDTH_R(R_SINGULAR_DATA_x),
|
|
.REGMODE(REGMODE),
|
|
.RESETMODE(RESETMODE),
|
|
.RESET_RELEASE(RESET_RELEASE),
|
|
.BYTE_ENABLE(0),
|
|
.INIT_MODE(INIT_MODE),
|
|
.OUTPUT_CLK_EN(OUTPUT_CLK_EN),
|
|
.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(((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),
|
|
.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(single_wire_in_w),
|
|
.wr_addr_i(single_wr_addr_w),
|
|
.rd_en_i(rd_en_i),
|
|
.rd_addr_i(single_rd_addr_w),
|
|
.ben_i(1'b1),
|
|
.rd_data_o(single_wire_out_w),
|
|
.one_err_det_o(one_err_det_o),
|
|
.two_err_det_o(two_err_det_o)) ;
|
|
end
|
|
else
|
|
begin : no_init
|
|
line_ram_dp_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID),
|
|
.MEM_SIZE(MEM_SIZE),
|
|
.FAMILY(FAMILY),
|
|
._FCODE_ICE_(_FCODE_ICE_),
|
|
._FCODE_LIFCL_(_FCODE_LIFCL_),
|
|
._FCODE_COMMON_(_FCODE_COMMON_),
|
|
.DATA_WIDTH_W(W_SINGULAR_DATA_x),
|
|
.DATA_WIDTH_R(R_SINGULAR_DATA_x),
|
|
.REGMODE(REGMODE),
|
|
.RESETMODE(RESETMODE),
|
|
.RESET_RELEASE(RESET_RELEASE),
|
|
.BYTE_ENABLE(0),
|
|
.OUTPUT_CLK_EN(OUTPUT_CLK_EN),
|
|
.INIT_MODE(INIT_MODE)) 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),
|
|
.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(single_wire_in_w),
|
|
.wr_addr_i(single_wr_addr_w),
|
|
.rd_en_i(rd_en_i),
|
|
.rd_addr_i(single_rd_addr_w),
|
|
.ben_i(1'b1),
|
|
.rd_data_o(single_wire_out_w),
|
|
.one_err_det_o(one_err_det_o),
|
|
.two_err_det_o(two_err_det_o)) ;
|
|
end
|
|
end
|
|
else
|
|
begin : MULT_IMPL
|
|
wire [(EBR_ADDR - 1):0] one_err_det_raw_w ;
|
|
wire [(EBR_ADDR - 1):0] two_err_det_raw_w ;
|
|
for (i0 = 0;(i0 < EBR_ADDR);i0 = (i0 + 1))
|
|
begin : ADDR_x
|
|
wire [(R_PORT_USE - 1):0] raw_output_w ;
|
|
assign rd_data_raw_w[i0] = raw_output_w ;
|
|
wire chk_addr_wr_w ;
|
|
if ((EBR_ADDR > 1))
|
|
begin : genblk1
|
|
assign chk_addr_wr_w = (wr_addr_i[(WADDR_WIDTH - 1):W_ADDR_WIDTH_IMPL] == i0) ;
|
|
end
|
|
else
|
|
begin : genblk1
|
|
assign chk_addr_wr_w = 1'b1 ;
|
|
end
|
|
wire [(W_ADDR_WIDTH_IMPL - 1):0] act_wr_addr_w ;
|
|
if ((W_ADDR_WIDTH_IMPL > WADDR_WIDTH))
|
|
begin : genblk2
|
|
assign act_wr_addr_w[(W_ADDR_WIDTH_IMPL - 1):WADDR_WIDTH] = 'h0000 ;
|
|
assign act_wr_addr_w[(WADDR_WIDTH - 1):0] = wr_addr_i ;
|
|
end
|
|
else
|
|
begin : genblk2
|
|
assign act_wr_addr_w = wr_addr_i[(W_ADDR_WIDTH_IMPL - 1):0] ;
|
|
end
|
|
wire chk_addr_rd_w ;
|
|
if ((EBR_ADDR > 1))
|
|
begin : genblk3
|
|
assign chk_addr_rd_w = (rd_addr_i[(RADDR_WIDTH - 1):R_ADDR_WIDTH_IMPL] == i0) ;
|
|
end
|
|
else
|
|
begin : genblk3
|
|
assign chk_addr_rd_w = 1'b1 ;
|
|
end
|
|
wire [(R_ADDR_WIDTH_IMPL - 1):0] act_rd_addr_w ;
|
|
if ((R_ADDR_WIDTH_IMPL > RADDR_WIDTH))
|
|
begin : genblk4
|
|
assign act_rd_addr_w[(R_ADDR_WIDTH_IMPL - 1):RADDR_WIDTH] = 'h0000 ;
|
|
assign act_rd_addr_w[(RADDR_WIDTH - 1):0] = rd_addr_i ;
|
|
end
|
|
else
|
|
begin : genblk4
|
|
assign act_rd_addr_w = rd_addr_i[(R_ADDR_WIDTH_IMPL - 1):0] ;
|
|
end
|
|
wire [(EBR_DATA - 1):0] one_err_det_ind_w ;
|
|
wire [(EBR_DATA - 1):0] two_err_det_ind_w ;
|
|
if ((EBR_DATA == 1))
|
|
begin : genblk5
|
|
assign one_err_det_raw_w[i0] = one_err_det_ind_w[0] ;
|
|
assign two_err_det_raw_w[i0] = two_err_det_ind_w[0] ;
|
|
end
|
|
else
|
|
begin : genblk5
|
|
assign one_err_det_raw_w[i0] = (|one_err_det_ind_w) ;
|
|
assign two_err_det_raw_w[i0] = (|two_err_det_ind_w) ;
|
|
end
|
|
for (i1 = 0;(i1 < EBR_DATA);i1 = (i1 + 1))
|
|
begin : DATA_x
|
|
localparam ECO_POSX = (i1 * W_DATA_WIDTH_IMPL) ;
|
|
localparam ECO_POSY = (i0 * W_ADDR_DEPTH_IMPL) ;
|
|
wire [(W_DATA_WIDTH_IMPL - 1):0] act_wr_data_w ;
|
|
wire [(R_DATA_WIDTH_IMPL - 1):0] act_rd_data_w ;
|
|
wire one_err_det_ebr_w ;
|
|
wire two_err_det_ebr_w ;
|
|
assign one_err_det_ind_w[i1] = one_err_det_ebr_w ;
|
|
assign two_err_det_ind_w[i1] = two_err_det_ebr_w ;
|
|
if (((W_DATA_WIDTH_IMPL * (i1 + 1)) <= W_PORT_USE))
|
|
begin : genblk1
|
|
assign act_wr_data_w = master_data_in_w[((W_DATA_WIDTH_IMPL * (i1 + 1)) - 1):(W_DATA_WIDTH_IMPL * i1)] ;
|
|
end
|
|
else
|
|
begin : genblk1
|
|
assign act_wr_data_w[(W_DATA_WIDTH_IMPL - 1):(W_PORT_USE - (i1 * W_DATA_WIDTH_IMPL))] = 'h0000 ;
|
|
assign act_wr_data_w[(W_PORT_USE - (1 + (W_DATA_WIDTH_IMPL * i1))):0] = master_data_in_w[(W_PORT_USE - 1):(W_DATA_WIDTH_IMPL * i1)] ;
|
|
end
|
|
if (((R_DATA_WIDTH_IMPL * (i1 + 1)) <= R_PORT_USE))
|
|
begin : genblk2
|
|
assign raw_output_w[((R_DATA_WIDTH_IMPL * (i1 + 1)) - 1):(R_DATA_WIDTH_IMPL * i1)] = act_rd_data_w ;
|
|
end
|
|
else
|
|
begin : genblk2
|
|
assign raw_output_w[(R_PORT_USE - 1):(R_DATA_WIDTH_IMPL * i1)] = act_rd_data_w[(R_PORT_USE - (1 + (R_DATA_WIDTH_IMPL * i1))):0] ;
|
|
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
|
|
line_ram_dp_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID),
|
|
.MEM_SIZE(MEM_SIZE),
|
|
.POSx(ECO_POSX),
|
|
.POSy(ECO_POSY),
|
|
.FAMILY(FAMILY),
|
|
._FCODE_ICE_(_FCODE_ICE_),
|
|
._FCODE_LIFCL_(_FCODE_LIFCL_),
|
|
._FCODE_COMMON_(_FCODE_COMMON_),
|
|
.DATA_WIDTH_W(W_DATA_WIDTH_IMPL),
|
|
.DATA_WIDTH_R(R_DATA_WIDTH_IMPL),
|
|
.REGMODE(REGMODE),
|
|
.RESETMODE(RESETMODE),
|
|
.RESET_RELEASE(RESET_RELEASE),
|
|
.BYTE_ENABLE(0),
|
|
.INIT_MODE(INIT_MODE),
|
|
.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)]),
|
|
.INIT_VALUE_01(INIT_VALUE_01[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_02(INIT_VALUE_02[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_03(INIT_VALUE_03[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_04(INIT_VALUE_04[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_05(INIT_VALUE_05[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_06(INIT_VALUE_06[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_07(INIT_VALUE_07[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_08(INIT_VALUE_08[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_09(INIT_VALUE_09[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_0A(INIT_VALUE_0A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_0B(INIT_VALUE_0B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_0C(INIT_VALUE_0C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.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),
|
|
.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(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_addr_i(act_rd_addr_w),
|
|
.ben_i(1'b1),
|
|
.rd_data_o(act_rd_data_w),
|
|
.one_err_det_o(one_err_det_ebr_w),
|
|
.two_err_det_o(two_err_det_ebr_w)) ;
|
|
end
|
|
else
|
|
begin : no_init
|
|
line_ram_dp_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID),
|
|
.MEM_SIZE(MEM_SIZE),
|
|
.POSx(ECO_POSX),
|
|
.POSy(ECO_POSY),
|
|
.FAMILY(FAMILY),
|
|
._FCODE_ICE_(_FCODE_ICE_),
|
|
._FCODE_LIFCL_(_FCODE_LIFCL_),
|
|
._FCODE_COMMON_(_FCODE_COMMON_),
|
|
.DATA_WIDTH_W(W_DATA_WIDTH_IMPL),
|
|
.DATA_WIDTH_R(R_DATA_WIDTH_IMPL),
|
|
.INIT_MODE(INIT_MODE),
|
|
.REGMODE(REGMODE),
|
|
.RESETMODE(RESETMODE),
|
|
.RESET_RELEASE(RESET_RELEASE),
|
|
.BYTE_ENABLE(0),
|
|
.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),
|
|
.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(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_addr_i(act_rd_addr_w),
|
|
.ben_i(1'b1),
|
|
.rd_data_o(act_rd_data_w),
|
|
.one_err_det_o(one_err_det_ebr_w),
|
|
.two_err_det_o(two_err_det_ebr_w)) ;
|
|
end
|
|
end
|
|
end
|
|
if ((EBR_ADDR == 1))
|
|
begin : genblk2
|
|
assign master_data_out_w = rd_data_raw_w[0] ;
|
|
assign one_err_det_o = ((ECC_ENABLE == 1) ? one_err_det_raw_w[0] : 1'b0) ;
|
|
assign two_err_det_o = ((ECC_ENABLE == 1) ? two_err_det_raw_w[0] : 1'b0) ;
|
|
end
|
|
else
|
|
begin : genblk2
|
|
reg [(R_PORT_USE - 1):0] rd_out_buff_r ;
|
|
reg [(RADDR_WIDTH - 1):0] rd_addr_0_r ;
|
|
reg one_err_det_r ;
|
|
reg two_err_det_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"))
|
|
begin : _nreg
|
|
if ((RESETMODE == "sync"))
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i)
|
|
begin
|
|
if (rst_i)
|
|
begin
|
|
rd_addr_0_r <= {RADDR_WIDTH{1'b0}} ;
|
|
end
|
|
else
|
|
begin
|
|
rd_addr_0_r <= rd_addr_i ;
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i or
|
|
posedge rst_i)
|
|
begin
|
|
if (rst_i)
|
|
begin
|
|
rd_addr_0_r <= {RADDR_WIDTH{1'b0}} ;
|
|
end
|
|
else
|
|
begin
|
|
rd_addr_0_r <= rd_addr_i ;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : _reg
|
|
reg [(RADDR_WIDTH - 1):0] rd_addr_1_r = {RADDR_WIDTH{1'b0}} ;
|
|
if ((RESETMODE == "sync"))
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i)
|
|
begin
|
|
if (rst_i)
|
|
begin
|
|
rd_addr_0_r <= {RADDR_WIDTH{1'b0}} ;
|
|
rd_addr_1_r <= {RADDR_WIDTH{1'b0}} ;
|
|
end
|
|
else
|
|
begin
|
|
rd_addr_0_r <= rd_addr_1_r ;
|
|
rd_addr_1_r <= rd_addr_i ;
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i or
|
|
posedge rst_i)
|
|
begin
|
|
if (rst_i)
|
|
begin
|
|
rd_addr_0_r <= {RADDR_WIDTH{1'b0}} ;
|
|
rd_addr_1_r <= {RADDR_WIDTH{1'b0}} ;
|
|
end
|
|
else
|
|
begin
|
|
rd_addr_0_r <= rd_addr_1_r ;
|
|
rd_addr_1_r <= rd_addr_i ;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
always
|
|
@(*)
|
|
begin
|
|
rd_out_buff_r = rd_data_raw_w[rd_addr_0_r[(RADDR_WIDTH - 1):R_ADDR_WIDTH_IMPL]] ;
|
|
one_err_det_r = one_err_det_raw_w[rd_addr_0_r[(RADDR_WIDTH - 1):R_ADDR_WIDTH_IMPL]] ;
|
|
two_err_det_r = two_err_det_raw_w[rd_addr_0_r[(RADDR_WIDTH - 1):R_ADDR_WIDTH_IMPL]] ;
|
|
end
|
|
assign master_data_out_w = rd_out_buff_r ;
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : MIX_W_BYTE_EN
|
|
localparam MAX_DATA = ((RDATA_WIDTH > WDATA_WIDTH) ? RDATA_WIDTH : WDATA_WIDTH) ;
|
|
localparam MIN_DATA = ((RDATA_WIDTH > WDATA_WIDTH) ? WDATA_WIDTH : RDATA_WIDTH) ;
|
|
if ((is_byte_enable_good(MAX_DATA,
|
|
MIN_DATA,
|
|
FAMILY_CODE) == 1))
|
|
begin : BYTE_PASS
|
|
localparam W_DATA_WIDTH_IMPL = getCASE1DataImpl_wBen(WADDR_DEPTH,
|
|
WDATA_WIDTH,
|
|
RADDR_DEPTH,
|
|
RDATA_WIDTH,
|
|
1,
|
|
FAMILY_CODE) ;
|
|
localparam W_ADDR_DEPTH_IMPL = data_to_addr(W_DATA_WIDTH_IMPL,
|
|
FAMILY_CODE) ;
|
|
localparam W_ADDR_WIDTH_IMPL = clog2(W_ADDR_DEPTH_IMPL) ;
|
|
localparam R_DATA_WIDTH_IMPL = getCASE1DataImpl_wBen(WADDR_DEPTH,
|
|
WDATA_WIDTH,
|
|
RADDR_DEPTH,
|
|
RDATA_WIDTH,
|
|
0,
|
|
FAMILY_CODE) ;
|
|
localparam R_ADDR_DEPTH_IMPL = data_to_addr(R_DATA_WIDTH_IMPL,
|
|
FAMILY_CODE) ;
|
|
localparam R_ADDR_WIDTH_IMPL = clog2(R_ADDR_DEPTH_IMPL) ;
|
|
localparam EBR_ADDR = roundUP(WADDR_DEPTH,
|
|
W_ADDR_DEPTH_IMPL) ;
|
|
localparam EBR_DATA = roundUP(WDATA_WIDTH,
|
|
W_DATA_WIDTH_IMPL) ;
|
|
localparam TRUE_BYTE_WIDTH = getTrueByteWidth(W_DATA_WIDTH_IMPL,
|
|
FAMILY_CODE) ;
|
|
wire [(RDATA_WIDTH - 1):0] rd_data_raw_w [(EBR_ADDR - 1):0] ;
|
|
wire [(BYTE_WIDTH - 1):0] byte_en_buffer_w ;
|
|
wire [(WDATA_WIDTH - 1):0] master_data_in_w ;
|
|
wire [(RDATA_WIDTH - 1):0] master_data_out_w ;
|
|
if ((EBR_DATA > 1))
|
|
begin : WIRE_chk
|
|
if ((WDATA_WIDTH > RDATA_WIDTH))
|
|
begin : W_OVR_R
|
|
assign rd_data_o = master_data_out_w ;
|
|
wire [(R_DATA_WIDTH_IMPL - 1):0] master_data_ind_w [((WDATA_WIDTH / R_DATA_WIDTH_IMPL) - 1):0] ;
|
|
for (i_0 = 0;(i_0 < EBR_DATA);i_0 = (i_0 + 1))
|
|
begin : genblk1
|
|
for (i_1 = 0;(i_1 < (WDATA_WIDTH / (EBR_DATA * R_DATA_WIDTH_IMPL)));i_1 = (i_1 + 1))
|
|
begin : genblk1
|
|
assign master_data_ind_w[(((WDATA_WIDTH / (EBR_DATA * R_DATA_WIDTH_IMPL)) * i_0) + i_1)] = wr_data_i[((((i_0 * R_DATA_WIDTH_IMPL) + ((i_1 * EBR_DATA) * R_DATA_WIDTH_IMPL)) + R_DATA_WIDTH_IMPL) - 1):((i_0 * R_DATA_WIDTH_IMPL) + ((i_1 * EBR_DATA) * R_DATA_WIDTH_IMPL))] ;
|
|
end
|
|
end
|
|
localparam BYTE_EN_BUFF = (TRUE_BYTE_WIDTH / (WDATA_WIDTH / RDATA_WIDTH)) ;
|
|
for (i_0 = 0;(i_0 < (WDATA_WIDTH / (EBR_DATA * R_DATA_WIDTH_IMPL)));i_0 = (i_0 + 1))
|
|
begin : genblk2
|
|
for (i_1 = 0;(i_1 < EBR_DATA);i_1 = (i_1 + 1))
|
|
begin : genblk1
|
|
assign byte_en_buffer_w[(((((i_1 * (WDATA_WIDTH / (EBR_DATA * R_DATA_WIDTH_IMPL))) + i_0) * BYTE_EN_BUFF) + BYTE_EN_BUFF) - 1):(((i_1 * (WDATA_WIDTH / (EBR_DATA * R_DATA_WIDTH_IMPL))) + i_0) * BYTE_EN_BUFF)] = ben_i[(((((i_0 * EBR_DATA) + i_1) * BYTE_EN_BUFF) + BYTE_EN_BUFF) - 1):(((i_0 * EBR_DATA) + i_1) * BYTE_EN_BUFF)] ;
|
|
end
|
|
end
|
|
for (i_0 = 0;(i_0 < (WDATA_WIDTH / R_DATA_WIDTH_IMPL));i_0 = (i_0 + 1))
|
|
begin : genblk3
|
|
assign master_data_in_w[(((i_0 * R_DATA_WIDTH_IMPL) + R_DATA_WIDTH_IMPL) - 1):(i_0 * R_DATA_WIDTH_IMPL)] = master_data_ind_w[i_0] ;
|
|
end
|
|
end
|
|
else
|
|
begin : R_OVR_W
|
|
assign master_data_in_w = wr_data_i ;
|
|
assign byte_en_buffer_w = ben_i ;
|
|
wire [(W_DATA_WIDTH_IMPL - 1):0] master_data_ind_out [((RDATA_WIDTH / W_DATA_WIDTH_IMPL) - 1):0] ;
|
|
for (i_0 = 0;(i_0 < (RDATA_WIDTH / WDATA_WIDTH));i_0 = (i_0 + 1))
|
|
begin : genblk1
|
|
for (i_1 = 0;(i_1 < EBR_DATA);i_1 = (i_1 + 1))
|
|
begin : genblk1
|
|
assign master_data_ind_out[(i_1 + (i_0 * EBR_DATA))] = master_data_out_w[((((i_0 * W_DATA_WIDTH_IMPL) + (i_1 * R_DATA_WIDTH_IMPL)) + W_DATA_WIDTH_IMPL) - 1):((i_0 * W_DATA_WIDTH_IMPL) + (i_1 * R_DATA_WIDTH_IMPL))] ;
|
|
end
|
|
end
|
|
for (i_0 = 0;(i_0 < (RDATA_WIDTH / W_DATA_WIDTH_IMPL));i_0 = (i_0 + 1))
|
|
begin : genblk2
|
|
assign rd_data_o[(((i_0 + 1) * W_DATA_WIDTH_IMPL) - 1):(i_0 * W_DATA_WIDTH_IMPL)] = master_data_ind_out[i_0] ;
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if ((EBR_ADDR > 1))
|
|
begin : genblk1
|
|
assign master_data_in_w[(WDATA_WIDTH - 1):0] = wr_data_i ;
|
|
assign byte_en_buffer_w[(TRUE_BYTE_WIDTH - 1):0] = ben_i ;
|
|
assign rd_data_o = master_data_out_w[(RDATA_WIDTH - 1):0] ;
|
|
end
|
|
if (((EBR_ADDR == 1) && (EBR_DATA == 1)))
|
|
begin : SINGLE_IMPL
|
|
localparam W_SINGULAR_DATA_x = WDATA_WIDTH ;
|
|
localparam W_SINGULAR_ADDR_x = clog2(data_to_addr(W_SINGULAR_DATA_x,
|
|
FAMILY_CODE)) ;
|
|
localparam R_SINGULAR_DATA_x = RDATA_WIDTH ;
|
|
localparam R_SINGULAR_ADDR_x = clog2(data_to_addr(R_SINGULAR_DATA_x,
|
|
FAMILY_CODE)) ;
|
|
wire [(W_SINGULAR_DATA_x - 1):0] single_true_wr_in_w ;
|
|
wire [(R_SINGULAR_DATA_x - 1):0] single_true_rd_out_w ;
|
|
wire [(W_SINGULAR_ADDR_x - 1):0] single_true_wr_addr_w ;
|
|
wire [(R_SINGULAR_ADDR_x - 1):0] single_true_rd_addr_w ;
|
|
assign single_true_wr_in_w[(WDATA_WIDTH - 1):0] = wr_data_i ;
|
|
if ((W_SINGULAR_ADDR_x > WADDR_WIDTH))
|
|
begin : genblk1
|
|
assign single_true_wr_addr_w[(W_SINGULAR_ADDR_x - 1):WADDR_WIDTH] = 'h0000 ;
|
|
end
|
|
assign single_true_wr_addr_w[(WADDR_WIDTH - 1):0] = wr_addr_i ;
|
|
assign rd_data_o = single_true_rd_out_w ;
|
|
if ((R_SINGULAR_ADDR_x > RADDR_WIDTH))
|
|
begin : genblk2
|
|
assign single_true_rd_addr_w[(R_SINGULAR_ADDR_x - 1):RADDR_WIDTH] = 'h0000 ;
|
|
end
|
|
assign single_true_rd_addr_w[(RADDR_WIDTH - 1):0] = rd_addr_i ;
|
|
if ((INIT_MODE == "mem_file"))
|
|
begin : mem_init
|
|
line_ram_dp_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID),
|
|
.MEM_SIZE(MEM_SIZE),
|
|
.FAMILY(FAMILY),
|
|
._FCODE_ICE_(_FCODE_ICE_),
|
|
._FCODE_LIFCL_(_FCODE_LIFCL_),
|
|
._FCODE_COMMON_(_FCODE_COMMON_),
|
|
.DATA_WIDTH_W(W_SINGULAR_DATA_x),
|
|
.DATA_WIDTH_R(R_SINGULAR_DATA_x),
|
|
.REGMODE(REGMODE),
|
|
.RESETMODE(RESETMODE),
|
|
.RESET_RELEASE(RESET_RELEASE),
|
|
.BYTE_ENABLE(1),
|
|
.INIT_MODE(INIT_MODE),
|
|
.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(((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),
|
|
.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(single_true_wr_in_w),
|
|
.wr_addr_i(single_true_wr_addr_w),
|
|
.rd_en_i(rd_en_i),
|
|
.rd_addr_i(single_true_rd_addr_w),
|
|
.ben_i(ben_i),
|
|
.rd_data_o(single_true_rd_out_w),
|
|
.one_err_det_o(one_err_det_o),
|
|
.two_err_det_o(two_err_det_o)) ;
|
|
end
|
|
else
|
|
begin : no_init
|
|
line_ram_dp_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID),
|
|
.MEM_SIZE(MEM_SIZE),
|
|
.FAMILY(FAMILY),
|
|
._FCODE_ICE_(_FCODE_ICE_),
|
|
._FCODE_LIFCL_(_FCODE_LIFCL_),
|
|
._FCODE_COMMON_(_FCODE_COMMON_),
|
|
.DATA_WIDTH_W(W_SINGULAR_DATA_x),
|
|
.DATA_WIDTH_R(R_SINGULAR_DATA_x),
|
|
.REGMODE(REGMODE),
|
|
.RESETMODE(RESETMODE),
|
|
.RESET_RELEASE(RESET_RELEASE),
|
|
.BYTE_ENABLE(1),
|
|
.INIT_MODE(INIT_MODE),
|
|
.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),
|
|
.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(single_true_wr_in_w),
|
|
.wr_addr_i(single_true_wr_addr_w),
|
|
.rd_en_i(rd_en_i),
|
|
.rd_addr_i(single_true_rd_addr_w),
|
|
.ben_i(ben_i),
|
|
.rd_data_o(single_true_rd_out_w),
|
|
.one_err_det_o(one_err_det_o),
|
|
.two_err_det_o(two_err_det_o)) ;
|
|
end
|
|
end
|
|
else
|
|
begin : MULT_IMPL
|
|
wire [(EBR_ADDR - 1):0] one_err_det_raw_w ;
|
|
wire [(EBR_ADDR - 1):0] two_err_det_raw_w ;
|
|
for (i0 = 0;(i0 < EBR_ADDR);i0 = (i0 + 1))
|
|
begin : ADDR_x
|
|
wire [(RDATA_WIDTH - 1):0] raw_output_w ;
|
|
assign rd_data_raw_w[i0] = raw_output_w ;
|
|
wire chk_addr_wr_w ;
|
|
if ((EBR_ADDR > 1))
|
|
begin : genblk1
|
|
assign chk_addr_wr_w = (wr_addr_i[(WADDR_WIDTH - 1):W_ADDR_WIDTH_IMPL] == i0) ;
|
|
end
|
|
else
|
|
begin : genblk1
|
|
assign chk_addr_wr_w = 1'b1 ;
|
|
end
|
|
wire [(W_ADDR_WIDTH_IMPL - 1):0] act_wr_addr_w ;
|
|
if ((W_ADDR_WIDTH_IMPL > WADDR_WIDTH))
|
|
begin : genblk2
|
|
assign act_wr_addr_w[(W_ADDR_WIDTH_IMPL - 1):WADDR_WIDTH] = 'h0000 ;
|
|
assign act_wr_addr_w[(WADDR_WIDTH - 1):0] = wr_addr_i ;
|
|
end
|
|
else
|
|
begin : genblk2
|
|
assign act_wr_addr_w = wr_addr_i[(W_ADDR_WIDTH_IMPL - 1):0] ;
|
|
end
|
|
wire chk_addr_rd_w ;
|
|
if ((EBR_ADDR > 1))
|
|
begin : genblk3
|
|
assign chk_addr_rd_w = (rd_addr_i[(RADDR_WIDTH - 1):R_ADDR_WIDTH_IMPL] == i0) ;
|
|
end
|
|
else
|
|
begin : genblk3
|
|
assign chk_addr_rd_w = 1'b1 ;
|
|
end
|
|
wire [(R_ADDR_WIDTH_IMPL - 1):0] act_rd_addr_w ;
|
|
if ((R_ADDR_WIDTH_IMPL > RADDR_WIDTH))
|
|
begin : genblk4
|
|
assign act_rd_addr_w[(R_ADDR_WIDTH_IMPL - 1):RADDR_WIDTH] = 'h0000 ;
|
|
assign act_rd_addr_w[(RADDR_WIDTH - 1):0] = rd_addr_i ;
|
|
end
|
|
else
|
|
begin : genblk4
|
|
assign act_rd_addr_w = rd_addr_i[(R_ADDR_WIDTH_IMPL - 1):0] ;
|
|
end
|
|
wire [(EBR_DATA - 1):0] one_err_det_ind_w ;
|
|
wire [(EBR_DATA - 1):0] two_err_det_ind_w ;
|
|
if ((EBR_DATA == 1))
|
|
begin : genblk5
|
|
assign one_err_det_raw_w[i0] = one_err_det_ind_w[0] ;
|
|
assign two_err_det_raw_w[i0] = two_err_det_ind_w[0] ;
|
|
end
|
|
else
|
|
begin : genblk5
|
|
assign one_err_det_raw_w[i0] = (|one_err_det_ind_w) ;
|
|
assign two_err_det_raw_w[i0] = (|two_err_det_ind_w) ;
|
|
end
|
|
for (i1 = 0;(i1 < EBR_DATA);i1 = (i1 + 1))
|
|
begin : DATA_x
|
|
localparam ECO_POSX = (i1 * W_DATA_WIDTH_IMPL) ;
|
|
localparam ECO_POSY = (i0 * W_ADDR_DEPTH_IMPL) ;
|
|
wire [(W_DATA_WIDTH_IMPL - 1):0] act_wr_data_w ;
|
|
wire [(R_DATA_WIDTH_IMPL - 1):0] act_rd_data_w ;
|
|
wire [(TRUE_BYTE_WIDTH - 1):0] act_ben_w ;
|
|
wire one_err_det_ebr_w ;
|
|
wire two_err_det_ebr_w ;
|
|
assign one_err_det_ind_w[i1] = one_err_det_ebr_w ;
|
|
assign two_err_det_ind_w[i1] = two_err_det_ebr_w ;
|
|
if (((W_DATA_WIDTH_IMPL * (i1 + 1)) <= WDATA_WIDTH))
|
|
begin : genblk1
|
|
assign act_wr_data_w = master_data_in_w[((W_DATA_WIDTH_IMPL * (i1 + 1)) - 1):(W_DATA_WIDTH_IMPL * i1)] ;
|
|
end
|
|
else
|
|
begin : genblk1
|
|
assign act_wr_data_w[(W_DATA_WIDTH_IMPL - 1):(WDATA_WIDTH - (i1 * W_DATA_WIDTH_IMPL))] = 'h0000 ;
|
|
assign act_wr_data_w[(WDATA_WIDTH - (1 + (W_DATA_WIDTH_IMPL * i1))):0] = master_data_in_w[(WDATA_WIDTH - 1):(W_DATA_WIDTH_IMPL * i1)] ;
|
|
end
|
|
if (((R_DATA_WIDTH_IMPL * (i1 + 1)) <= RDATA_WIDTH))
|
|
begin : genblk2
|
|
assign raw_output_w[((R_DATA_WIDTH_IMPL * (i1 + 1)) - 1):(R_DATA_WIDTH_IMPL * i1)] = act_rd_data_w ;
|
|
end
|
|
else
|
|
begin : genblk2
|
|
assign raw_output_w[(RDATA_WIDTH - 1):(R_DATA_WIDTH_IMPL * i1)] = act_rd_data_w[(RDATA_WIDTH - (1 + (R_DATA_WIDTH_IMPL * i1))):0] ;
|
|
end
|
|
if ((TRUE_BYTE_WIDTH > 1))
|
|
begin : genblk3
|
|
if ((((i1 + 1) * TRUE_BYTE_WIDTH) <= BYTE_WIDTH))
|
|
begin : genblk1
|
|
assign act_ben_w = byte_en_buffer_w[(((i1 + 1) * TRUE_BYTE_WIDTH) - 1):(i1 * TRUE_BYTE_WIDTH)] ;
|
|
end
|
|
else
|
|
begin : genblk1
|
|
assign act_ben_w[(BYTE_WIDTH - (1 + (i1 * TRUE_BYTE_WIDTH))):0] = byte_en_buffer_w[(BYTE_WIDTH - 1):(i1 * TRUE_BYTE_WIDTH)] ;
|
|
assign act_ben_w[(TRUE_BYTE_WIDTH - 1):(BYTE_WIDTH - (i1 * TRUE_BYTE_WIDTH))] = {(TRUE_BYTE_WIDTH - (BYTE_WIDTH - (i1 * TRUE_BYTE_WIDTH))){1'b1}} ;
|
|
end
|
|
end
|
|
else
|
|
begin : genblk3
|
|
assign act_ben_w[0] = byte_en_buffer_w[i1] ;
|
|
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
|
|
line_ram_dp_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID),
|
|
.MEM_SIZE(MEM_SIZE),
|
|
.POSx(ECO_POSX),
|
|
.POSy(ECO_POSY),
|
|
.FAMILY(FAMILY),
|
|
._FCODE_ICE_(_FCODE_ICE_),
|
|
._FCODE_LIFCL_(_FCODE_LIFCL_),
|
|
._FCODE_COMMON_(_FCODE_COMMON_),
|
|
.DATA_WIDTH_W(W_DATA_WIDTH_IMPL),
|
|
.DATA_WIDTH_R(R_DATA_WIDTH_IMPL),
|
|
.REGMODE(REGMODE),
|
|
.RESETMODE(RESETMODE),
|
|
.RESET_RELEASE(RESET_RELEASE),
|
|
.BYTE_ENABLE(1),
|
|
.INIT_MODE(INIT_MODE),
|
|
.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)]),
|
|
.INIT_VALUE_01(INIT_VALUE_01[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_02(INIT_VALUE_02[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_03(INIT_VALUE_03[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_04(INIT_VALUE_04[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_05(INIT_VALUE_05[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_06(INIT_VALUE_06[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_07(INIT_VALUE_07[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_08(INIT_VALUE_08[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_09(INIT_VALUE_09[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_0A(INIT_VALUE_0A[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_0B(INIT_VALUE_0B[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.INIT_VALUE_0C(INIT_VALUE_0C[((((((i0 * EBR_DATA) + i1) + 1) * STRING_LENGTH) * 8) - 1):((((i0 * EBR_DATA) + i1) * STRING_LENGTH) * 8)]),
|
|
.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),
|
|
.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(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_addr_i(act_rd_addr_w),
|
|
.ben_i(act_ben_w),
|
|
.rd_data_o(act_rd_data_w),
|
|
.one_err_det_o(one_err_det_ebr_w),
|
|
.two_err_det_o(two_err_det_ebr_w)) ;
|
|
end
|
|
else
|
|
begin : no_init
|
|
line_ram_dp_ipgen_lscc_ram_dp_core #(.MEM_ID(MEM_ID),
|
|
.MEM_SIZE(MEM_SIZE),
|
|
.POSx(ECO_POSX),
|
|
.POSy(ECO_POSY),
|
|
.FAMILY(FAMILY),
|
|
._FCODE_ICE_(_FCODE_ICE_),
|
|
._FCODE_LIFCL_(_FCODE_LIFCL_),
|
|
._FCODE_COMMON_(_FCODE_COMMON_),
|
|
.DATA_WIDTH_W(W_DATA_WIDTH_IMPL),
|
|
.DATA_WIDTH_R(R_DATA_WIDTH_IMPL),
|
|
.REGMODE(REGMODE),
|
|
.RESETMODE(RESETMODE),
|
|
.RESET_RELEASE(RESET_RELEASE),
|
|
.BYTE_ENABLE(1),
|
|
.OUTPUT_CLK_EN(OUTPUT_CLK_EN),
|
|
.BYTE_ENABLE_POL(BYTE_ENABLE_POL),
|
|
.INIT_MODE(INIT_MODE)) 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),
|
|
.rd_clk_en_i(rd_clk_en_i),
|
|
.rd_out_clk_en_i(rd_out_clk_en_i),
|
|
.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_addr_i(act_rd_addr_w),
|
|
.ben_i(act_ben_w),
|
|
.rd_data_o(act_rd_data_w),
|
|
.one_err_det_o(one_err_det_ebr_w),
|
|
.two_err_det_o(two_err_det_ebr_w)) ;
|
|
end
|
|
end
|
|
end
|
|
if ((EBR_ADDR == 1))
|
|
begin : genblk2
|
|
assign master_data_out_w = rd_data_raw_w[0] ;
|
|
assign one_err_det_o = ((ECC_ENABLE == 1) ? one_err_det_raw_w[0] : 1'b0) ;
|
|
assign two_err_det_o = ((ECC_ENABLE == 1) ? two_err_det_raw_w[0] : 1'b0) ;
|
|
end
|
|
else
|
|
begin : genblk2
|
|
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}} ;
|
|
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"))
|
|
begin : _nreg
|
|
if ((RESETMODE == "sync"))
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i)
|
|
begin
|
|
if (rst_i)
|
|
begin
|
|
rd_addr_0_r <= {RADDR_WIDTH{1'b0}} ;
|
|
end
|
|
else
|
|
begin
|
|
rd_addr_0_r <= rd_addr_i ;
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i or
|
|
posedge rst_i)
|
|
begin
|
|
if (rst_i)
|
|
begin
|
|
rd_addr_0_r <= {RADDR_WIDTH{1'b0}} ;
|
|
end
|
|
else
|
|
begin
|
|
rd_addr_0_r <= rd_addr_i ;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : _reg
|
|
reg [(RADDR_WIDTH - 1):0] rd_addr_1_r = {RADDR_WIDTH{1'b0}} ;
|
|
if ((RESETMODE == "sync"))
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i)
|
|
begin
|
|
if (rst_i)
|
|
begin
|
|
rd_addr_0_r <= {RADDR_WIDTH{1'b0}} ;
|
|
rd_addr_1_r <= {RADDR_WIDTH{1'b0}} ;
|
|
end
|
|
else
|
|
begin
|
|
rd_addr_0_r <= rd_addr_1_r ;
|
|
rd_addr_1_r <= rd_addr_i ;
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i)
|
|
begin
|
|
if (rst_i)
|
|
begin
|
|
rd_addr_0_r <= {RADDR_WIDTH{1'b0}} ;
|
|
rd_addr_1_r <= {RADDR_WIDTH{1'b0}} ;
|
|
end
|
|
else
|
|
begin
|
|
rd_addr_0_r <= rd_addr_1_r ;
|
|
rd_addr_1_r <= rd_addr_i ;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
always
|
|
@(*)
|
|
begin
|
|
rd_out_buff_r = rd_data_raw_w[rd_addr_0_r[(RADDR_WIDTH - 1):R_ADDR_WIDTH_IMPL]] ;
|
|
one_err_det_r = one_err_det_raw_w[rd_addr_0_r[(RADDR_WIDTH - 1):R_ADDR_WIDTH_IMPL]] ;
|
|
two_err_det_r = two_err_det_raw_w[rd_addr_0_r[(RADDR_WIDTH - 1):R_ADDR_WIDTH_IMPL]] ;
|
|
end
|
|
assign master_data_out_w = rd_out_buff_r ;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
endgenerate
|
|
//------------------------------------------------------------------------------
|
|
// Function Definition
|
|
//------------------------------------------------------------------------------
|
|
function checkINIT ;
|
|
input [31:0] dev_code ;
|
|
begin
|
|
case (dev_code)
|
|
_FCODE_LIFCL_ :
|
|
checkINIT = 1 ;
|
|
default :
|
|
checkINIT = 0 ;
|
|
endcase
|
|
end
|
|
endfunction
|
|
function [31:0] getTrueByteWidth ;
|
|
input [31:0] dwid_in ;
|
|
input [31:0] family_code ;
|
|
begin
|
|
case (family_code)
|
|
_FCODE_LIFCL_ :
|
|
getTrueByteWidth = (((dwid_in == 36) || (dwid_in == 32)) ? 4 : (((dwid_in == 18) || (dwid_in == 16)) ? 2 : 1)) ;
|
|
_FCODE_ICE_ :
|
|
getTrueByteWidth = ((dwid_in == 16) ? 2 : 1) ;
|
|
endcase
|
|
end
|
|
endfunction
|
|
function [31:0] procData ;
|
|
input [31:0] TARGET_DATA ;
|
|
input isECC ;
|
|
input [31:0] FAMILY_CODE ;
|
|
begin
|
|
procData = 1 ;
|
|
while ((procData < TARGET_DATA))
|
|
begin
|
|
case (FAMILY_CODE)
|
|
_FCODE_LIFCL_ :
|
|
begin
|
|
if (isECC)
|
|
begin
|
|
if ((procData < 32))
|
|
begin
|
|
procData = 32 ;
|
|
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
|
|
_FCODE_ICE_ :
|
|
procData = (procData * 2) ;
|
|
default :
|
|
procData = TARGET_DATA ;
|
|
endcase
|
|
end
|
|
end
|
|
endfunction
|
|
function [31:0] getSingularCase ;
|
|
input [31:0] port_use ;
|
|
input [31:0] family_code ;
|
|
begin
|
|
case (family_code)
|
|
_FCODE_LIFCL_ :
|
|
begin
|
|
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
|
|
_FCODE_ICE_ :
|
|
getSingularCase = (2 ** clog2(port_use)) ;
|
|
default :
|
|
getSingularCase = 8 ;
|
|
endcase
|
|
end
|
|
endfunction
|
|
function [31:0] getCASE1DataImpl ;
|
|
input [31:0] wr_addr_depth ;
|
|
input [31:0] wr_data_width ;
|
|
input [31:0] rd_addr_depth ;
|
|
input [31:0] rd_data_width ;
|
|
input is_taking_write_port ;
|
|
input is_taking_total_ebr ;
|
|
input is_ecc ;
|
|
input [31:0] family_code ;
|
|
reg [5:0] num0,
|
|
num1 ;
|
|
reg [31:0] divisor,
|
|
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 ;
|
|
reg [31:0] EBR_usage,
|
|
prod ;
|
|
begin
|
|
divisor = ((wr_addr_depth > rd_addr_depth) ? (wr_addr_depth / rd_addr_depth) : (rd_addr_depth / wr_addr_depth)) ;
|
|
EBR_usage = 32'hffffffff ;
|
|
getCASE1DataImpl = 0 ;
|
|
if ((is_ecc == 1))
|
|
begin
|
|
if ((is_taking_write_port == 1))
|
|
begin
|
|
getCASE1DataImpl = 32 ;
|
|
end
|
|
else
|
|
begin
|
|
getCASE1DataImpl = (32 / divisor) ;
|
|
end
|
|
end
|
|
else
|
|
begin
|
|
if ((family_code == _FCODE_LIFCL_))
|
|
begin
|
|
if ((divisor <= 4))
|
|
begin
|
|
for (num0 = 0 ; (num0 < 3) ; num0 = (num0 + 1))
|
|
begin
|
|
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 < 3) ; num1 = (num1 + 1))
|
|
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)))
|
|
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_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
|
|
end
|
|
for (num0 = 0 ; (num0 < 6) ; num0 = (num0 + 1))
|
|
begin
|
|
wr_data_div = getDatabase(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 < 6) ; num1 = (num1 + 1))
|
|
begin
|
|
rd_data_div = getDatabase(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_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
|
|
end
|
|
endfunction
|
|
function [31:0] getCASE1DataImpl_wBen ;
|
|
input [31:0] wr_addr_depth ;
|
|
input [31:0] wr_data_width ;
|
|
input [31:0] rd_addr_depth ;
|
|
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 [31:0] wr_addr_chk,
|
|
wr_data_chk,
|
|
rd_addr_chk,
|
|
rd_data_chk,
|
|
wr_data_div,
|
|
rd_data_div ;
|
|
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_ :
|
|
begin
|
|
if ((wr_data_width > rd_data_width))
|
|
begin
|
|
if ((is_taking_write_port == 1))
|
|
getCASE1DataImpl_wBen = 16 ;
|
|
else
|
|
getCASE1DataImpl_wBen = 8 ;
|
|
end
|
|
else
|
|
begin
|
|
if ((is_taking_write_port == 1))
|
|
getCASE1DataImpl_wBen = 8 ;
|
|
else
|
|
getCASE1DataImpl_wBen = 16 ;
|
|
end
|
|
end
|
|
endcase
|
|
end
|
|
endfunction
|
|
function [31:0] getDatabase ;
|
|
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 = 9 ;
|
|
1 :
|
|
getDatabase = 18 ;
|
|
default :
|
|
getDatabase = 36 ;
|
|
endcase
|
|
end
|
|
8 :
|
|
begin
|
|
case (index)
|
|
0 :
|
|
getDatabase = 1 ;
|
|
1 :
|
|
getDatabase = 2 ;
|
|
2 :
|
|
getDatabase = 4 ;
|
|
3 :
|
|
getDatabase = 8 ;
|
|
4 :
|
|
getDatabase = 16 ;
|
|
default :
|
|
getDatabase = 32 ;
|
|
endcase
|
|
end
|
|
default :
|
|
getDatabase = 16 ;
|
|
endcase
|
|
end
|
|
_FCODE_ICE_ :
|
|
begin
|
|
case (index)
|
|
0 :
|
|
getDatabase = 2 ;
|
|
1 :
|
|
getDatabase = 4 ;
|
|
2 :
|
|
getDatabase = 8 ;
|
|
default :
|
|
getDatabase = 16 ;
|
|
endcase
|
|
end
|
|
default :
|
|
getDatabase = 8 ;
|
|
endcase
|
|
end
|
|
endfunction
|
|
function [31:0] data_to_addr ;
|
|
input [31:0] data_size ;
|
|
input [31:0] family_code ;
|
|
begin
|
|
case (family_code)
|
|
_FCODE_LIFCL_ :
|
|
begin
|
|
case (data_size)
|
|
36 :
|
|
data_to_addr = 512 ;
|
|
32 :
|
|
data_to_addr = 512 ;
|
|
18 :
|
|
data_to_addr = 1024 ;
|
|
16 :
|
|
data_to_addr = 1024 ;
|
|
9 :
|
|
data_to_addr = 2048 ;
|
|
8 :
|
|
data_to_addr = 2048 ;
|
|
4 :
|
|
data_to_addr = 4096 ;
|
|
2 :
|
|
data_to_addr = 8192 ;
|
|
default :
|
|
data_to_addr = 16384 ;
|
|
endcase
|
|
end
|
|
_FCODE_ICE_ :
|
|
begin
|
|
case (data_size)
|
|
16 :
|
|
data_to_addr = 256 ;
|
|
8 :
|
|
data_to_addr = 512 ;
|
|
4 :
|
|
data_to_addr = 1024 ;
|
|
2 :
|
|
data_to_addr = 2048 ;
|
|
endcase
|
|
end
|
|
default :
|
|
data_to_addr = 1024 ;
|
|
endcase
|
|
end
|
|
endfunction
|
|
function [31:0] addr_to_data ;
|
|
input [31:0] addr_size ;
|
|
input [31:0] family_code ;
|
|
begin
|
|
case (family_code)
|
|
_FCODE_LIFCL_ :
|
|
begin
|
|
case (addr_size)
|
|
512 :
|
|
addr_to_data = 36 ;
|
|
1024 :
|
|
addr_to_data = 18 ;
|
|
2048 :
|
|
addr_to_data = 9 ;
|
|
4096 :
|
|
addr_to_data = 4 ;
|
|
8192 :
|
|
addr_to_data = 2 ;
|
|
default :
|
|
addr_to_data = 1 ;
|
|
endcase
|
|
end
|
|
_FCODE_ICE_ :
|
|
begin
|
|
case (addr_size)
|
|
256 :
|
|
addr_to_data = 16 ;
|
|
512 :
|
|
addr_to_data = 8 ;
|
|
1024 :
|
|
addr_to_data = 4 ;
|
|
2048 :
|
|
addr_to_data = 2 ;
|
|
endcase
|
|
end
|
|
default :
|
|
addr_to_data = 1024 ;
|
|
endcase
|
|
end
|
|
endfunction
|
|
function [31:0] getMinimaData ;
|
|
input [31:0] depth_impl ;
|
|
input [31:0] width_impl ;
|
|
input is_byte_enable ;
|
|
input [31:0] byte_size ;
|
|
input is_ecc ;
|
|
input [31:0] family_code ;
|
|
reg [31:0] temp_00,
|
|
temp_01,
|
|
temp_02,
|
|
temp_03,
|
|
temp_04,
|
|
temp_05 ;
|
|
begin
|
|
case (family_code)
|
|
_FCODE_LIFCL_ :
|
|
begin
|
|
if (is_ecc)
|
|
begin
|
|
getMinimaData = 32 ;
|
|
end
|
|
else
|
|
begin
|
|
temp_00 = EBR_impl(depth_impl,
|
|
width_impl,
|
|
512,
|
|
36) ;
|
|
temp_01 = EBR_impl(depth_impl,
|
|
width_impl,
|
|
1024,
|
|
18) ;
|
|
temp_02 = EBR_impl(depth_impl,
|
|
width_impl,
|
|
2048,
|
|
9) ;
|
|
temp_03 = EBR_impl(depth_impl,
|
|
width_impl,
|
|
4096,
|
|
4) ;
|
|
temp_04 = EBR_impl(depth_impl,
|
|
width_impl,
|
|
8192,
|
|
2) ;
|
|
temp_05 = EBR_impl(depth_impl,
|
|
width_impl,
|
|
16384,
|
|
1) ;
|
|
if (((is_byte_enable == 1) && ((width_impl % 9) != 0)))
|
|
begin
|
|
temp_00 = EBR_impl(depth_impl,
|
|
width_impl,
|
|
512,
|
|
32) ;
|
|
temp_01 = EBR_impl(depth_impl,
|
|
width_impl,
|
|
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
|
|
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
|
|
end
|
|
end
|
|
end
|
|
_FCODE_ICE_ :
|
|
begin
|
|
temp_00 = EBR_impl(depth_impl,
|
|
width_impl,
|
|
256,
|
|
16) ;
|
|
temp_01 = EBR_impl(depth_impl,
|
|
width_impl,
|
|
512,
|
|
8) ;
|
|
temp_02 = EBR_impl(depth_impl,
|
|
width_impl,
|
|
1024,
|
|
4) ;
|
|
temp_03 = EBR_impl(depth_impl,
|
|
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
|
|
else
|
|
begin
|
|
if ((temp_02 < temp_03))
|
|
getMinimaData = 4 ;
|
|
else
|
|
getMinimaData = 2 ;
|
|
end
|
|
end
|
|
else
|
|
begin
|
|
if ((temp_01 < temp_02))
|
|
begin
|
|
if ((temp_01 < temp_03))
|
|
getMinimaData = 8 ;
|
|
else
|
|
getMinimaData = 2 ;
|
|
end
|
|
else
|
|
begin
|
|
if ((temp_02 < temp_03))
|
|
getMinimaData = 4 ;
|
|
else
|
|
getMinimaData = 2 ;
|
|
end
|
|
end
|
|
end
|
|
default :
|
|
getMinimaData = 8 ;
|
|
endcase
|
|
end
|
|
endfunction
|
|
function [31:0] getByteSize ;
|
|
input [31:0] data_width ;
|
|
input [31:0] dev_code ;
|
|
begin
|
|
case (dev_code)
|
|
_FCODE_LIFCL_ :
|
|
begin
|
|
if (((data_width % 9) == 0))
|
|
getByteSize = 9 ;
|
|
else
|
|
getByteSize = 8 ;
|
|
end
|
|
_FCODE_ICE_ :
|
|
getByteSize = 8 ;
|
|
default :
|
|
getByteSize = 8 ;
|
|
endcase
|
|
end
|
|
endfunction
|
|
function is_byte_enable_good ;
|
|
input [31:0] max_data ;
|
|
input [31:0] min_data ;
|
|
input [31:0] family_code ;
|
|
begin
|
|
case (family_code)
|
|
_FCODE_ICE_ :
|
|
is_byte_enable_good = ((((max_data / min_data) == 2) && ((max_data % 16) == 0)) ? 1'b1 : 1'b0) ;
|
|
_FCODE_LIFCL_ :
|
|
begin
|
|
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
|
|
end
|
|
endfunction
|
|
function [31:0] EBR_impl ;
|
|
input [31:0] DEPTH_IMPL ;
|
|
input [31:0] WIDTH_IMPL ;
|
|
input [31:0] ADDR_DEPTH_X ;
|
|
input [31:0] DATA_WIDTH_X ;
|
|
begin
|
|
EBR_impl = (roundUP(DEPTH_IMPL,
|
|
ADDR_DEPTH_X) * roundUP(WIDTH_IMPL,
|
|
DATA_WIDTH_X)) ;
|
|
end
|
|
endfunction
|
|
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
|
|
|
|
|
|
|
|
//=============================================================================
|
|
// lscc_ram_dp.v
|
|
// Local Variables:
|
|
// verilog-library-directories: ("../../common")
|
|
// End:
|
|
//=============================================================================
|
|
// =============================================================================
|
|
// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
// -----------------------------------------------------------------------------
|
|
// Copyright (c) 2017 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_core.v
|
|
// Title :
|
|
// Dependencies :
|
|
// Description : Implements a single pseudo dual port memory instance.
|
|
// =============================================================================
|
|
// REVISION HISTORY
|
|
// Version : 1.0.0.
|
|
// Author(s) :
|
|
// Mod. Date :
|
|
// Changes Made : Initial release.
|
|
// =============================================================================
|
|
module line_ram_dp_ipgen_lscc_ram_dp_core #(parameter _FCODE_LIFCL_ = 1,
|
|
parameter _FCODE_ICE_ = 2,
|
|
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 DATA_WIDTH_W = 36,
|
|
parameter ADDR_WIDTH_W = getAddrWidth(DATA_WIDTH_W,
|
|
FAMILY_CODE),
|
|
parameter DATA_WIDTH_R = 36,
|
|
parameter ADDR_WIDTH_R = getAddrWidth(DATA_WIDTH_R,
|
|
FAMILY_CODE),
|
|
parameter REGMODE = "reg",
|
|
parameter GSR = "enabled",
|
|
parameter RESETMODE = "sync",
|
|
parameter RESET_RELEASE = "sync",
|
|
parameter INIT_FILE = "none",
|
|
parameter INIT_FILE_FORMAT = "binary",
|
|
parameter INIT_MODE = "none",
|
|
parameter BYTE_ENABLE = 0,
|
|
parameter BYTE_WIDTH = ((BYTE_ENABLE == 1) ? getByteWidth(DATA_WIDTH_W,
|
|
FAMILY_CODE) : 1),
|
|
parameter ECC_ENABLE = 0,
|
|
parameter CSDECODE_W = 0,
|
|
parameter CSDECODE_R = 0,
|
|
parameter OPTIMIZATION = "speed",
|
|
parameter OUTPUT_CLK_EN = 0,
|
|
parameter BYTE_ENABLE_POL = "active-high",
|
|
parameter POSx = 0,
|
|
parameter POSy = 0,
|
|
parameter STRING_SIZE = calculateStringSize(POSx,
|
|
POSy),
|
|
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") (
|
|
//unused
|
|
// -----------------------------------------------------------------------------
|
|
// 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 [(DATA_WIDTH_W - 1):0] wr_data_i,
|
|
input [(ADDR_WIDTH_W - 1):0] wr_addr_i,
|
|
input rd_en_i,
|
|
input [(ADDR_WIDTH_R - 1):0] rd_addr_i,
|
|
input [(BYTE_WIDTH - 1):0] ben_i,
|
|
output [(DATA_WIDTH_R - 1):0] rd_data_o,
|
|
output one_err_det_o,
|
|
output two_err_det_o) ;
|
|
// -----------------------------------------------------------------------------
|
|
// Local Parameters
|
|
// -----------------------------------------------------------------------------
|
|
localparam POS_X0 = (POSx % 10) ;
|
|
localparam POS_X1 = ((POSx / 10) % 10) ;
|
|
localparam POS_X2 = ((POSx / 100) % 10) ;
|
|
localparam POS_X3 = ((POSx / 1000) % 10) ;
|
|
localparam POS_X4 = ((POSx / 10000) % 10) ;
|
|
localparam POS_X5 = ((POSx / 100000) % 10) ;
|
|
localparam POS_X6 = ((POSx / 1000000) % 10) ;
|
|
localparam POS_X7 = ((POSx / 10000000) % 10) ;
|
|
localparam POS_Y0 = (POSy % 10) ;
|
|
localparam POS_Y1 = ((POSy / 10) % 10) ;
|
|
localparam POS_Y2 = ((POSy / 100) % 10) ;
|
|
localparam POS_Y3 = ((POSy / 1000) % 10) ;
|
|
localparam POS_Y4 = ((POSy / 10000) % 10) ;
|
|
localparam POS_Y5 = ((POSy / 100000) % 10) ;
|
|
localparam POS_Y6 = ((POSy / 1000000) % 10) ;
|
|
localparam POS_Y7 = ((POSy / 10000000) % 10) ;
|
|
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]")))))))) ;
|
|
// -----------------------------------------------------------------------------
|
|
// Generate Sequential Blocks
|
|
// -----------------------------------------------------------------------------
|
|
genvar i0 ;
|
|
generate
|
|
if ((FAMILY_CODE == _FCODE_ICE_))
|
|
begin : ICE_MEM
|
|
wire [10:0] raddr_w ;
|
|
wire [10:0] waddr_w ;
|
|
wire [15:0] wdata_w ;
|
|
wire [15:0] rdata_w ;
|
|
wire [15:0] mask_w ;
|
|
wire [15:0] mask_t_w ;
|
|
wire [(DATA_WIDTH_R - 1):0] rd_data_w ;
|
|
for (i0 = 0;(i0 < 16);i0 = (i0 + 1))
|
|
begin : genblk1
|
|
if ((i0 < 8))
|
|
begin: genblk1
|
|
assign mask_w[i0] = ((BYTE_ENABLE == 0) ? 1'b0 : ((DATA_WIDTH_W == 16) ? (~ben_i[0]) : 1'b0)) ;
|
|
end
|
|
else
|
|
begin: genblk1
|
|
assign mask_w[i0] = ((BYTE_ENABLE == 0) ? 1'b0 : ((DATA_WIDTH_W == 16) ? (~ben_i[1]) : 1'b0)) ;
|
|
end
|
|
end
|
|
if ((DATA_WIDTH_R == 16))
|
|
begin : genblk2
|
|
assign mask_t_w = mask_w ;
|
|
end
|
|
else
|
|
if ((DATA_WIDTH_R == 8))
|
|
begin : genblk2
|
|
assign mask_t_w[0] = mask_w[0] ;
|
|
assign mask_t_w[2] = mask_w[1] ;
|
|
assign mask_t_w[4] = mask_w[2] ;
|
|
assign mask_t_w[6] = mask_w[3] ;
|
|
assign mask_t_w[8] = mask_w[4] ;
|
|
assign mask_t_w[10] = mask_w[5] ;
|
|
assign mask_t_w[12] = mask_w[6] ;
|
|
assign mask_t_w[14] = mask_w[7] ;
|
|
assign mask_t_w[1] = mask_w[8] ;
|
|
assign mask_t_w[3] = mask_w[9] ;
|
|
assign mask_t_w[5] = mask_w[10] ;
|
|
assign mask_t_w[7] = mask_w[11] ;
|
|
assign mask_t_w[9] = mask_w[12] ;
|
|
assign mask_t_w[11] = mask_w[13] ;
|
|
assign mask_t_w[13] = mask_w[14] ;
|
|
assign mask_t_w[15] = mask_w[15] ;
|
|
end
|
|
else
|
|
if ((DATA_WIDTH_R == 4))
|
|
begin : genblk2
|
|
assign mask_t_w[0] = mask_w[0] ;
|
|
assign mask_t_w[4] = mask_w[1] ;
|
|
assign mask_t_w[8] = mask_w[2] ;
|
|
assign mask_t_w[12] = mask_w[3] ;
|
|
assign mask_t_w[1] = mask_w[4] ;
|
|
assign mask_t_w[5] = mask_w[5] ;
|
|
assign mask_t_w[9] = mask_w[6] ;
|
|
assign mask_t_w[13] = mask_w[7] ;
|
|
assign mask_t_w[2] = mask_w[8] ;
|
|
assign mask_t_w[6] = mask_w[9] ;
|
|
assign mask_t_w[10] = mask_w[10] ;
|
|
assign mask_t_w[14] = mask_w[11] ;
|
|
assign mask_t_w[3] = mask_w[12] ;
|
|
assign mask_t_w[7] = mask_w[13] ;
|
|
assign mask_t_w[11] = mask_w[14] ;
|
|
assign mask_t_w[15] = mask_w[15] ;
|
|
end
|
|
else
|
|
begin : genblk2
|
|
assign mask_t_w[0] = mask_w[0] ;
|
|
assign mask_t_w[8] = mask_w[1] ;
|
|
assign mask_t_w[1] = mask_w[2] ;
|
|
assign mask_t_w[9] = mask_w[3] ;
|
|
assign mask_t_w[2] = mask_w[4] ;
|
|
assign mask_t_w[10] = mask_w[5] ;
|
|
assign mask_t_w[3] = mask_w[6] ;
|
|
assign mask_t_w[11] = mask_w[7] ;
|
|
assign mask_t_w[4] = mask_w[8] ;
|
|
assign mask_t_w[12] = mask_w[9] ;
|
|
assign mask_t_w[5] = mask_w[10] ;
|
|
assign mask_t_w[13] = mask_w[11] ;
|
|
assign mask_t_w[6] = mask_w[12] ;
|
|
assign mask_t_w[14] = mask_w[13] ;
|
|
assign mask_t_w[7] = mask_w[14] ;
|
|
assign mask_t_w[15] = mask_w[15] ;
|
|
end
|
|
if ((ADDR_WIDTH_R < 11))
|
|
begin: genblk3
|
|
assign raddr_w[10:ADDR_WIDTH_R] = {(11 - ADDR_WIDTH_R){1'b0}} ;
|
|
end
|
|
if ((ADDR_WIDTH_W < 11))
|
|
begin: genblk4
|
|
assign waddr_w[10:ADDR_WIDTH_W] = {(11 - ADDR_WIDTH_W){1'b0}} ;
|
|
end
|
|
if (((DATA_WIDTH_W == 16) && (DATA_WIDTH_R == 16)))
|
|
begin : genblk5
|
|
assign wdata_w = wr_data_i ;
|
|
assign waddr_w[(ADDR_WIDTH_W - 1):0] = wr_addr_i ;
|
|
assign raddr_w[(ADDR_WIDTH_R - 1):0] = rd_addr_i ;
|
|
assign rd_data_w = rdata_w ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 16) && (DATA_WIDTH_R == 8)))
|
|
begin : genblk5
|
|
assign wdata_w[0] = wr_data_i[0] ;
|
|
assign wdata_w[2] = wr_data_i[1] ;
|
|
assign wdata_w[4] = wr_data_i[2] ;
|
|
assign wdata_w[6] = wr_data_i[3] ;
|
|
assign wdata_w[8] = wr_data_i[4] ;
|
|
assign wdata_w[10] = wr_data_i[5] ;
|
|
assign wdata_w[12] = wr_data_i[6] ;
|
|
assign wdata_w[14] = wr_data_i[7] ;
|
|
assign wdata_w[1] = wr_data_i[8] ;
|
|
assign wdata_w[3] = wr_data_i[9] ;
|
|
assign wdata_w[5] = wr_data_i[10] ;
|
|
assign wdata_w[7] = wr_data_i[11] ;
|
|
assign wdata_w[9] = wr_data_i[12] ;
|
|
assign wdata_w[11] = wr_data_i[13] ;
|
|
assign wdata_w[13] = wr_data_i[14] ;
|
|
assign wdata_w[15] = wr_data_i[15] ;
|
|
assign waddr_w[(ADDR_WIDTH_W - 1):0] = wr_addr_i ;
|
|
assign raddr_w = {rd_addr_i[0],
|
|
rd_addr_i[(ADDR_WIDTH_R - 1):1]} ;
|
|
assign rd_data_w[7] = rdata_w[14] ;
|
|
assign rd_data_w[6] = rdata_w[12] ;
|
|
assign rd_data_w[5] = rdata_w[10] ;
|
|
assign rd_data_w[4] = rdata_w[8] ;
|
|
assign rd_data_w[3] = rdata_w[6] ;
|
|
assign rd_data_w[2] = rdata_w[4] ;
|
|
assign rd_data_w[1] = rdata_w[2] ;
|
|
assign rd_data_w[0] = rdata_w[0] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 16) && (DATA_WIDTH_R == 4)))
|
|
begin : genblk5
|
|
assign wdata_w[0] = wr_data_i[0] ;
|
|
assign wdata_w[4] = wr_data_i[1] ;
|
|
assign wdata_w[8] = wr_data_i[2] ;
|
|
assign wdata_w[12] = wr_data_i[3] ;
|
|
assign wdata_w[1] = wr_data_i[4] ;
|
|
assign wdata_w[5] = wr_data_i[5] ;
|
|
assign wdata_w[9] = wr_data_i[6] ;
|
|
assign wdata_w[13] = wr_data_i[7] ;
|
|
assign wdata_w[2] = wr_data_i[8] ;
|
|
assign wdata_w[6] = wr_data_i[9] ;
|
|
assign wdata_w[10] = wr_data_i[10] ;
|
|
assign wdata_w[14] = wr_data_i[11] ;
|
|
assign wdata_w[3] = wr_data_i[12] ;
|
|
assign wdata_w[7] = wr_data_i[13] ;
|
|
assign wdata_w[11] = wr_data_i[14] ;
|
|
assign wdata_w[15] = wr_data_i[15] ;
|
|
assign waddr_w[(ADDR_WIDTH_W - 1):0] = wr_addr_i ;
|
|
assign raddr_w = {rd_addr_i[1:0],
|
|
rd_addr_i[(ADDR_WIDTH_R - 1):2]} ;
|
|
assign rd_data_w[3] = rdata_w[13] ;
|
|
assign rd_data_w[2] = rdata_w[9] ;
|
|
assign rd_data_w[1] = rdata_w[5] ;
|
|
assign rd_data_w[0] = rdata_w[1] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 16) && (DATA_WIDTH_R == 2)))
|
|
begin : genblk5
|
|
assign wdata_w[0] = wr_data_i[0] ;
|
|
assign wdata_w[8] = wr_data_i[1] ;
|
|
assign wdata_w[1] = wr_data_i[2] ;
|
|
assign wdata_w[9] = wr_data_i[3] ;
|
|
assign wdata_w[2] = wr_data_i[4] ;
|
|
assign wdata_w[10] = wr_data_i[5] ;
|
|
assign wdata_w[3] = wr_data_i[6] ;
|
|
assign wdata_w[11] = wr_data_i[7] ;
|
|
assign wdata_w[4] = wr_data_i[8] ;
|
|
assign wdata_w[12] = wr_data_i[9] ;
|
|
assign wdata_w[5] = wr_data_i[10] ;
|
|
assign wdata_w[13] = wr_data_i[11] ;
|
|
assign wdata_w[6] = wr_data_i[12] ;
|
|
assign wdata_w[14] = wr_data_i[13] ;
|
|
assign wdata_w[7] = wr_data_i[14] ;
|
|
assign wdata_w[15] = wr_data_i[15] ;
|
|
assign waddr_w[(ADDR_WIDTH_W - 1):0] = wr_addr_i ;
|
|
assign raddr_w = {rd_addr_i[2:0],
|
|
rd_addr_i[(ADDR_WIDTH_R - 1):3]} ;
|
|
assign rd_data_w[1] = rdata_w[11] ;
|
|
assign rd_data_w[0] = rdata_w[3] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 8) && (DATA_WIDTH_R == 16)))
|
|
begin : genblk5
|
|
assign wdata_w[0] = wr_data_i[0] ;
|
|
assign wdata_w[2] = wr_data_i[1] ;
|
|
assign wdata_w[4] = wr_data_i[2] ;
|
|
assign wdata_w[6] = wr_data_i[3] ;
|
|
assign wdata_w[8] = wr_data_i[4] ;
|
|
assign wdata_w[10] = wr_data_i[5] ;
|
|
assign wdata_w[12] = wr_data_i[6] ;
|
|
assign wdata_w[14] = wr_data_i[7] ;
|
|
assign wdata_w[1] = 1'b0 ;
|
|
assign wdata_w[3] = 1'b0 ;
|
|
assign wdata_w[5] = 1'b0 ;
|
|
assign wdata_w[7] = 1'b0 ;
|
|
assign wdata_w[9] = 1'b0 ;
|
|
assign wdata_w[11] = 1'b0 ;
|
|
assign wdata_w[13] = 1'b0 ;
|
|
assign wdata_w[15] = 1'b0 ;
|
|
assign waddr_w = {wr_addr_i[0],
|
|
wr_addr_i[(ADDR_WIDTH_W - 1):1]} ;
|
|
assign raddr_w = rd_addr_i ;
|
|
assign rd_data_w[0] = rdata_w[0] ;
|
|
assign rd_data_w[1] = rdata_w[2] ;
|
|
assign rd_data_w[2] = rdata_w[4] ;
|
|
assign rd_data_w[3] = rdata_w[6] ;
|
|
assign rd_data_w[4] = rdata_w[8] ;
|
|
assign rd_data_w[5] = rdata_w[10] ;
|
|
assign rd_data_w[6] = rdata_w[12] ;
|
|
assign rd_data_w[7] = rdata_w[14] ;
|
|
assign rd_data_w[8] = rdata_w[1] ;
|
|
assign rd_data_w[9] = rdata_w[3] ;
|
|
assign rd_data_w[10] = rdata_w[5] ;
|
|
assign rd_data_w[11] = rdata_w[7] ;
|
|
assign rd_data_w[12] = rdata_w[9] ;
|
|
assign rd_data_w[13] = rdata_w[11] ;
|
|
assign rd_data_w[14] = rdata_w[13] ;
|
|
assign rd_data_w[15] = rdata_w[15] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 8) && (DATA_WIDTH_R == 8)))
|
|
begin : genblk5
|
|
assign wdata_w[0] = wr_data_i[0] ;
|
|
assign wdata_w[2] = wr_data_i[1] ;
|
|
assign wdata_w[4] = wr_data_i[2] ;
|
|
assign wdata_w[6] = wr_data_i[3] ;
|
|
assign wdata_w[8] = wr_data_i[4] ;
|
|
assign wdata_w[10] = wr_data_i[5] ;
|
|
assign wdata_w[12] = wr_data_i[6] ;
|
|
assign wdata_w[14] = wr_data_i[7] ;
|
|
assign wdata_w[1] = 1'b0 ;
|
|
assign wdata_w[3] = 1'b0 ;
|
|
assign wdata_w[5] = 1'b0 ;
|
|
assign wdata_w[7] = 1'b0 ;
|
|
assign wdata_w[9] = 1'b0 ;
|
|
assign wdata_w[11] = 1'b0 ;
|
|
assign wdata_w[13] = 1'b0 ;
|
|
assign wdata_w[15] = 1'b0 ;
|
|
assign waddr_w = {wr_addr_i} ;
|
|
assign raddr_w = {rd_addr_i} ;
|
|
assign rd_data_w[0] = rdata_w[0] ;
|
|
assign rd_data_w[1] = rdata_w[2] ;
|
|
assign rd_data_w[2] = rdata_w[4] ;
|
|
assign rd_data_w[3] = rdata_w[6] ;
|
|
assign rd_data_w[4] = rdata_w[8] ;
|
|
assign rd_data_w[5] = rdata_w[10] ;
|
|
assign rd_data_w[6] = rdata_w[12] ;
|
|
assign rd_data_w[7] = rdata_w[14] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 8) && (DATA_WIDTH_R == 4)))
|
|
begin : genblk5
|
|
assign wdata_w[0] = wr_data_i[0] ;
|
|
assign wdata_w[4] = wr_data_i[1] ;
|
|
assign wdata_w[8] = wr_data_i[2] ;
|
|
assign wdata_w[12] = wr_data_i[3] ;
|
|
assign wdata_w[2] = wr_data_i[4] ;
|
|
assign wdata_w[6] = wr_data_i[5] ;
|
|
assign wdata_w[10] = wr_data_i[6] ;
|
|
assign wdata_w[14] = wr_data_i[7] ;
|
|
assign wdata_w[1] = 1'b0 ;
|
|
assign wdata_w[3] = 1'b0 ;
|
|
assign wdata_w[5] = 1'b0 ;
|
|
assign wdata_w[7] = 1'b0 ;
|
|
assign wdata_w[9] = 1'b0 ;
|
|
assign wdata_w[11] = 1'b0 ;
|
|
assign wdata_w[13] = 1'b0 ;
|
|
assign wdata_w[15] = 1'b0 ;
|
|
assign waddr_w = {wr_addr_i} ;
|
|
assign raddr_w = {rd_addr_i[0],
|
|
rd_addr_i[(ADDR_WIDTH_R - 1):1]} ;
|
|
assign rd_data_w[0] = rdata_w[1] ;
|
|
assign rd_data_w[1] = rdata_w[5] ;
|
|
assign rd_data_w[2] = rdata_w[9] ;
|
|
assign rd_data_w[3] = rdata_w[13] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 8) && (DATA_WIDTH_R == 2)))
|
|
begin : genblk5
|
|
assign wdata_w[0] = wr_data_i[0] ;
|
|
assign wdata_w[8] = wr_data_i[1] ;
|
|
assign wdata_w[2] = wr_data_i[2] ;
|
|
assign wdata_w[10] = wr_data_i[3] ;
|
|
assign wdata_w[4] = wr_data_i[4] ;
|
|
assign wdata_w[12] = wr_data_i[5] ;
|
|
assign wdata_w[6] = wr_data_i[6] ;
|
|
assign wdata_w[14] = wr_data_i[7] ;
|
|
assign wdata_w[1] = 1'b0 ;
|
|
assign wdata_w[3] = 1'b0 ;
|
|
assign wdata_w[5] = 1'b0 ;
|
|
assign wdata_w[7] = 1'b0 ;
|
|
assign wdata_w[9] = 1'b0 ;
|
|
assign wdata_w[11] = 1'b0 ;
|
|
assign wdata_w[13] = 1'b0 ;
|
|
assign wdata_w[15] = 1'b0 ;
|
|
assign waddr_w = {wr_addr_i} ;
|
|
assign raddr_w = {rd_addr_i[1:0],
|
|
rd_addr_i[(ADDR_WIDTH_R - 1):2]} ;
|
|
assign rd_data_w[1] = rdata_w[11] ;
|
|
assign rd_data_w[0] = rdata_w[3] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 4) && (DATA_WIDTH_R == 16)))
|
|
begin : genblk5
|
|
assign wdata_w[1] = wr_data_i[0] ;
|
|
assign wdata_w[5] = wr_data_i[1] ;
|
|
assign wdata_w[9] = wr_data_i[2] ;
|
|
assign wdata_w[13] = wr_data_i[3] ;
|
|
assign wdata_w[0] = 1'b0 ;
|
|
assign wdata_w[4:2] = 3'b000 ;
|
|
assign wdata_w[8:6] = 3'b000 ;
|
|
assign wdata_w[12:10] = 3'b000 ;
|
|
assign wdata_w[15:14] = 2'b00 ;
|
|
assign waddr_w = {wr_addr_i[1:0],
|
|
wr_addr_i[(ADDR_WIDTH_W - 1):2]} ;
|
|
assign raddr_w = rd_addr_i ;
|
|
assign rd_data_w[0] = rdata_w[0] ;
|
|
assign rd_data_w[1] = rdata_w[4] ;
|
|
assign rd_data_w[2] = rdata_w[8] ;
|
|
assign rd_data_w[3] = rdata_w[12] ;
|
|
assign rd_data_w[4] = rdata_w[1] ;
|
|
assign rd_data_w[5] = rdata_w[5] ;
|
|
assign rd_data_w[6] = rdata_w[9] ;
|
|
assign rd_data_w[7] = rdata_w[13] ;
|
|
assign rd_data_w[8] = rdata_w[2] ;
|
|
assign rd_data_w[9] = rdata_w[6] ;
|
|
assign rd_data_w[10] = rdata_w[10] ;
|
|
assign rd_data_w[11] = rdata_w[14] ;
|
|
assign rd_data_w[12] = rdata_w[3] ;
|
|
assign rd_data_w[13] = rdata_w[7] ;
|
|
assign rd_data_w[14] = rdata_w[11] ;
|
|
assign rd_data_w[15] = rdata_w[15] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 4) && (DATA_WIDTH_R == 8)))
|
|
begin : genblk5
|
|
assign wdata_w[1] = wr_data_i[0] ;
|
|
assign wdata_w[5] = wr_data_i[1] ;
|
|
assign wdata_w[9] = wr_data_i[2] ;
|
|
assign wdata_w[13] = wr_data_i[3] ;
|
|
assign wdata_w[0] = 1'b0 ;
|
|
assign wdata_w[4:2] = 3'b000 ;
|
|
assign wdata_w[8:6] = 3'b000 ;
|
|
assign wdata_w[12:10] = 3'b000 ;
|
|
assign wdata_w[15:14] = 2'b00 ;
|
|
assign waddr_w = {wr_addr_i[0],
|
|
wr_addr_i[(ADDR_WIDTH_W - 1):1]} ;
|
|
assign raddr_w = rd_addr_i ;
|
|
assign rd_data_w[0] = rdata_w[0] ;
|
|
assign rd_data_w[1] = rdata_w[4] ;
|
|
assign rd_data_w[2] = rdata_w[8] ;
|
|
assign rd_data_w[3] = rdata_w[12] ;
|
|
assign rd_data_w[4] = rdata_w[2] ;
|
|
assign rd_data_w[5] = rdata_w[6] ;
|
|
assign rd_data_w[6] = rdata_w[10] ;
|
|
assign rd_data_w[7] = rdata_w[14] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 4) && (DATA_WIDTH_R == 4)))
|
|
begin : genblk5
|
|
assign wdata_w[1] = wr_data_i[0] ;
|
|
assign wdata_w[5] = wr_data_i[1] ;
|
|
assign wdata_w[9] = wr_data_i[2] ;
|
|
assign wdata_w[13] = wr_data_i[3] ;
|
|
assign wdata_w[0] = 1'b0 ;
|
|
assign wdata_w[4:2] = 3'b000 ;
|
|
assign wdata_w[8:6] = 3'b000 ;
|
|
assign wdata_w[12:10] = 3'b000 ;
|
|
assign wdata_w[15:14] = 2'b00 ;
|
|
assign waddr_w[(ADDR_WIDTH_W - 1):0] = wr_addr_i ;
|
|
assign raddr_w[(ADDR_WIDTH_R - 1):0] = rd_addr_i ;
|
|
assign rd_data_w[0] = rdata_w[1] ;
|
|
assign rd_data_w[1] = rdata_w[5] ;
|
|
assign rd_data_w[2] = rdata_w[9] ;
|
|
assign rd_data_w[3] = rdata_w[13] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 4) && (DATA_WIDTH_R == 2)))
|
|
begin : genblk5
|
|
assign wdata_w[1] = wr_data_i[0] ;
|
|
assign wdata_w[9] = wr_data_i[1] ;
|
|
assign wdata_w[5] = wr_data_i[2] ;
|
|
assign wdata_w[13] = wr_data_i[3] ;
|
|
assign wdata_w[0] = 1'b0 ;
|
|
assign wdata_w[4:2] = 3'b000 ;
|
|
assign wdata_w[8:6] = 3'b000 ;
|
|
assign wdata_w[12:10] = 3'b000 ;
|
|
assign wdata_w[15:14] = 2'b00 ;
|
|
assign waddr_w[(ADDR_WIDTH_W - 1):0] = wr_addr_i ;
|
|
assign raddr_w = {rd_addr_i[0],
|
|
rd_addr_i[(ADDR_WIDTH_R - 1):1]} ;
|
|
assign rd_data_w[1] = rdata_w[11] ;
|
|
assign rd_data_w[0] = rdata_w[3] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 2) && (DATA_WIDTH_R == 16)))
|
|
begin : genblk5
|
|
assign wdata_w[11] = wr_data_i[1] ;
|
|
assign wdata_w[3] = wr_data_i[0] ;
|
|
assign wdata_w[2:0] = 3'b000 ;
|
|
assign wdata_w[10:4] = 7'h00 ;
|
|
assign wdata_w[15:12] = 4'h0 ;
|
|
assign waddr_w = {wr_addr_i[2:0],
|
|
wr_addr_i[(ADDR_WIDTH_W - 1):3]} ;
|
|
assign raddr_w = rd_addr_i ;
|
|
assign rd_data_w[0] = rdata_w[0] ;
|
|
assign rd_data_w[1] = rdata_w[8] ;
|
|
assign rd_data_w[2] = rdata_w[1] ;
|
|
assign rd_data_w[3] = rdata_w[9] ;
|
|
assign rd_data_w[4] = rdata_w[2] ;
|
|
assign rd_data_w[5] = rdata_w[10] ;
|
|
assign rd_data_w[6] = rdata_w[3] ;
|
|
assign rd_data_w[7] = rdata_w[11] ;
|
|
assign rd_data_w[8] = rdata_w[4] ;
|
|
assign rd_data_w[9] = rdata_w[12] ;
|
|
assign rd_data_w[10] = rdata_w[5] ;
|
|
assign rd_data_w[11] = rdata_w[13] ;
|
|
assign rd_data_w[12] = rdata_w[6] ;
|
|
assign rd_data_w[13] = rdata_w[14] ;
|
|
assign rd_data_w[14] = rdata_w[7] ;
|
|
assign rd_data_w[15] = rdata_w[15] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 2) && (DATA_WIDTH_R == 8)))
|
|
begin : genblk5
|
|
assign wdata_w[11] = wr_data_i[1] ;
|
|
assign wdata_w[3] = wr_data_i[0] ;
|
|
assign wdata_w[2:0] = 3'b000 ;
|
|
assign wdata_w[10:4] = 7'h00 ;
|
|
assign wdata_w[15:12] = 4'h0 ;
|
|
assign waddr_w = {wr_addr_i[1:0],
|
|
wr_addr_i[(ADDR_WIDTH_W - 1):2]} ;
|
|
assign raddr_w = rd_addr_i ;
|
|
assign rd_data_w[0] = rdata_w[0] ;
|
|
assign rd_data_w[1] = rdata_w[8] ;
|
|
assign rd_data_w[2] = rdata_w[2] ;
|
|
assign rd_data_w[3] = rdata_w[10] ;
|
|
assign rd_data_w[4] = rdata_w[4] ;
|
|
assign rd_data_w[5] = rdata_w[12] ;
|
|
assign rd_data_w[6] = rdata_w[6] ;
|
|
assign rd_data_w[7] = rdata_w[14] ;
|
|
end
|
|
else
|
|
if (((DATA_WIDTH_W == 2) && (DATA_WIDTH_R == 4)))
|
|
begin : genblk5
|
|
assign wdata_w[11] = wr_data_i[1] ;
|
|
assign wdata_w[3] = wr_data_i[0] ;
|
|
assign wdata_w[2:0] = 3'b000 ;
|
|
assign wdata_w[10:4] = 7'h00 ;
|
|
assign wdata_w[15:12] = 4'h0 ;
|
|
assign waddr_w = {wr_addr_i[0],
|
|
wr_addr_i[(ADDR_WIDTH_W - 1):1]} ;
|
|
assign raddr_w = rd_addr_i ;
|
|
assign rd_data_w[0] = rdata_w[1] ;
|
|
assign rd_data_w[1] = rdata_w[9] ;
|
|
assign rd_data_w[2] = rdata_w[5] ;
|
|
assign rd_data_w[3] = rdata_w[13] ;
|
|
end
|
|
else
|
|
begin : genblk5
|
|
assign wdata_w[11] = wr_data_i[1] ;
|
|
assign wdata_w[3] = wr_data_i[0] ;
|
|
assign wdata_w[2:0] = 3'b000 ;
|
|
assign wdata_w[10:4] = 7'h00 ;
|
|
assign wdata_w[15:12] = 4'h0 ;
|
|
assign waddr_w = wr_addr_i ;
|
|
assign raddr_w = rd_addr_i ;
|
|
assign rd_data_w[0] = rdata_w[3] ;
|
|
assign rd_data_w[1] = rdata_w[11] ;
|
|
end
|
|
wire t_wr_en_i = ((BYTE_ENABLE == 0) ? wr_en_i : ((BYTE_WIDTH > 1) ? wr_en_i : (wr_en_i & ben_i))) ;
|
|
PDP4K u_mem0 (.ADR(raddr_w),
|
|
.ADW(waddr_w),
|
|
.DI(wdata_w),
|
|
.MASK_N(mask_t_w),
|
|
.CER(rd_clk_en_i),
|
|
.CKR(rd_clk_i),
|
|
.RE(rd_en_i),
|
|
.CEW(wr_clk_en_i),
|
|
.CKW(wr_clk_i),
|
|
.WE(t_wr_en_i),
|
|
.DO(rdata_w)) ;
|
|
localparam R = ((DATA_WIDTH_R == 16) ? "16" : ((DATA_WIDTH_R == 8) ? "8" : ((DATA_WIDTH_R == 4) ? "4" : "2"))) ;
|
|
localparam W = ((DATA_WIDTH_W == 16) ? "16" : ((DATA_WIDTH_W == 8) ? "8" : ((DATA_WIDTH_W == 4) ? "4" : "2"))) ;
|
|
localparam X_T0 = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_T1 = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_T2 = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_T3 = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_T4 = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_T5 = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_T6 = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_T7 = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_T8 = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_T9 = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_TA = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_TB = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_TC = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_TD = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_TE = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X_TF = ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x0000000000000000000000000000000000000000000000000000000000000000") ;
|
|
localparam X0 = ((INIT_MODE == "mem_file") ? INIT_VALUE_00 : X_T0) ;
|
|
localparam X1 = ((INIT_MODE == "mem_file") ? INIT_VALUE_01 : X_T1) ;
|
|
localparam X2 = ((INIT_MODE == "mem_file") ? INIT_VALUE_02 : X_T2) ;
|
|
localparam X3 = ((INIT_MODE == "mem_file") ? INIT_VALUE_03 : X_T3) ;
|
|
localparam X4 = ((INIT_MODE == "mem_file") ? INIT_VALUE_04 : X_T4) ;
|
|
localparam X5 = ((INIT_MODE == "mem_file") ? INIT_VALUE_05 : X_T5) ;
|
|
localparam X6 = ((INIT_MODE == "mem_file") ? INIT_VALUE_06 : X_T6) ;
|
|
localparam X7 = ((INIT_MODE == "mem_file") ? INIT_VALUE_07 : X_T7) ;
|
|
localparam X8 = ((INIT_MODE == "mem_file") ? INIT_VALUE_08 : X_T8) ;
|
|
localparam X9 = ((INIT_MODE == "mem_file") ? INIT_VALUE_09 : X_T9) ;
|
|
localparam XA = ((INIT_MODE == "mem_file") ? INIT_VALUE_0A : X_TA) ;
|
|
localparam XB = ((INIT_MODE == "mem_file") ? INIT_VALUE_0B : X_TB) ;
|
|
localparam XC = ((INIT_MODE == "mem_file") ? INIT_VALUE_0C : X_TC) ;
|
|
localparam XD = ((INIT_MODE == "mem_file") ? INIT_VALUE_0D : X_TD) ;
|
|
localparam XE = ((INIT_MODE == "mem_file") ? INIT_VALUE_0E : X_TE) ;
|
|
localparam XF = ((INIT_MODE == "mem_file") ? INIT_VALUE_0F : X_TF) ;
|
|
defparam u_mem0.DATA_WIDTH_W = W ;
|
|
defparam u_mem0.DATA_WIDTH_R = R ;
|
|
defparam u_mem0.INITVAL_0 = X0 ;
|
|
defparam u_mem0.INITVAL_1 = X1 ;
|
|
defparam u_mem0.INITVAL_2 = X2 ;
|
|
defparam u_mem0.INITVAL_3 = X3 ;
|
|
defparam u_mem0.INITVAL_4 = X4 ;
|
|
defparam u_mem0.INITVAL_5 = X5 ;
|
|
defparam u_mem0.INITVAL_6 = X6 ;
|
|
defparam u_mem0.INITVAL_7 = X7 ;
|
|
defparam u_mem0.INITVAL_8 = X8 ;
|
|
defparam u_mem0.INITVAL_9 = X9 ;
|
|
defparam u_mem0.INITVAL_A = XA ;
|
|
defparam u_mem0.INITVAL_B = XB ;
|
|
defparam u_mem0.INITVAL_C = XC ;
|
|
defparam u_mem0.INITVAL_D = XD ;
|
|
defparam u_mem0.INITVAL_E = XE ;
|
|
defparam u_mem0.INITVAL_F = XF ;
|
|
if ((REGMODE == "reg"))
|
|
begin : genblk6
|
|
reg [(DATA_WIDTH_R - 1):0] rd_buff_r ;
|
|
assign rd_data_o = rd_buff_r ;
|
|
if ((RESETMODE == "sync"))
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i)
|
|
begin
|
|
if ((rst_i == 1'b1))
|
|
begin
|
|
rd_buff_r <= 'h0 ;
|
|
end
|
|
else
|
|
begin
|
|
if ((rd_out_clk_en_i == 1'b1))
|
|
begin
|
|
rd_buff_r <= rd_data_w ;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if ((RESET_RELEASE == "sync"))
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i or
|
|
posedge rst_i)
|
|
begin
|
|
if ((rst_i == 1'b1))
|
|
begin
|
|
rd_buff_r <= 'h0 ;
|
|
end
|
|
else
|
|
begin
|
|
if ((rd_out_clk_en_i == 1'b1))
|
|
begin
|
|
rd_buff_r <= rd_data_w ;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : genblk1
|
|
always
|
|
@(*)
|
|
begin
|
|
if ((rst_i == 1'b1))
|
|
begin
|
|
rd_buff_r = 'h0 ;
|
|
end
|
|
else
|
|
begin
|
|
if ((rd_out_clk_en_i == 1'b1))
|
|
begin
|
|
rd_buff_r = rd_data_w ;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : genblk6
|
|
assign rd_data_o = rd_data_w ;
|
|
end
|
|
end
|
|
else
|
|
if ((FAMILY_CODE == _FCODE_LIFCL_))
|
|
begin : LIFCL_MEM
|
|
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 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") ;
|
|
localparam TRUE_GSR = ((GSR == "disabled") ? "DISABLED" : "ENABLED") ;
|
|
wire [13:0] w_addr_w ;
|
|
wire [13:0] r_addr_w ;
|
|
wire [35:0] w_data_w ;
|
|
wire [35:0] r_data_w ;
|
|
wire [(DATA_WIDTH_R - 1):0] rd_data_w ;
|
|
if (((REGMODE == "noreg") || (OUTPUT_CLK_EN == 0)))
|
|
begin : genblk1
|
|
assign rd_data_o = rd_data_w ;
|
|
end
|
|
else
|
|
begin : genblk1
|
|
reg [(DATA_WIDTH_R - 1):0] rd_data_r ;
|
|
if ((RESETMODE == "sync"))
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i)
|
|
begin
|
|
if ((rst_i == 1'b1))
|
|
begin
|
|
rd_data_r <= {DATA_WIDTH_R{1'b0}} ;
|
|
end
|
|
else
|
|
if ((rd_out_clk_en_i == 1'b1))
|
|
begin
|
|
rd_data_r <= rd_data_w ;
|
|
end
|
|
end
|
|
end
|
|
else
|
|
begin : genblk1
|
|
always
|
|
@(posedge rd_clk_i or
|
|
posedge rst_i)
|
|
begin
|
|
if ((rst_i == 1'b1))
|
|
begin
|
|
rd_data_r <= {DATA_WIDTH_R{1'b0}} ;
|
|
end
|
|
else
|
|
if ((rd_out_clk_en_i == 1'b1))
|
|
begin
|
|
rd_data_r <= rd_data_w ;
|
|
end
|
|
end
|
|
end
|
|
assign rd_data_o = rd_data_r ;
|
|
end
|
|
if (((DATA_WIDTH_W == 36) || (DATA_WIDTH_W == 32)))
|
|
begin : genblk2
|
|
assign w_addr_w[13:5] = wr_addr_i ;
|
|
assign w_addr_w[4] = 1'b1 ;
|
|
assign w_addr_w[3:0] = ((BYTE_ENABLE == 1) ? ben_i : 4'b1111) ;
|
|
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 : genblk2
|
|
assign w_addr_w[13:5] = wr_addr_i[9:1] ;
|
|
assign w_addr_w[4] = wr_addr_i[0] ;
|
|
assign w_addr_w[3:2] = 2'b11 ;
|
|
assign w_addr_w[1:0] = ((BYTE_ENABLE == 1) ? ben_i : 2'b11) ;
|
|
assign w_data_w[35:18] = {18{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 : genblk2
|
|
assign w_addr_w[13:5] = wr_addr_i[10:2] ;
|
|
assign w_addr_w[4] = wr_addr_i[1] ;
|
|
assign w_addr_w[3] = wr_addr_i[0] ;
|
|
assign w_addr_w[2:0] = 3'b111 ;
|
|
assign w_data_w[35:9] = {27{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 : genblk2
|
|
assign w_addr_w[13:5] = wr_addr_i[11:3] ;
|
|
assign w_addr_w[4] = wr_addr_i[2] ;
|
|
assign w_addr_w[3] = wr_addr_i[1] ;
|
|
assign w_addr_w[2] = wr_addr_i[0] ;
|
|
assign w_addr_w[1:0] = 2'b11 ;
|
|
assign w_data_w[35:4] = {32{1'b0}} ;
|
|
assign w_data_w[3:0] = wr_data_i ;
|
|
end
|
|
else
|
|
if ((DATA_WIDTH_W == 2))
|
|
begin : genblk2
|
|
assign w_addr_w[13:5] = wr_addr_i[12:4] ;
|
|
assign w_addr_w[4] = wr_addr_i[3] ;
|
|
assign w_addr_w[3] = wr_addr_i[2] ;
|
|
assign w_addr_w[2] = wr_addr_i[1] ;
|
|
assign w_addr_w[1] = wr_addr_i[0] ;
|
|
assign w_addr_w[0] = 1'b1 ;
|
|
assign w_data_w[35:2] = {34{1'b0}} ;
|
|
assign w_data_w[1:0] = wr_data_i ;
|
|
end
|
|
else
|
|
begin : genblk2
|
|
assign w_addr_w[13:5] = wr_addr_i[13:5] ;
|
|
assign w_addr_w[4] = wr_addr_i[4] ;
|
|
assign w_addr_w[3] = wr_addr_i[3] ;
|
|
assign w_addr_w[2] = wr_addr_i[2] ;
|
|
assign w_addr_w[1] = wr_addr_i[1] ;
|
|
assign w_addr_w[0] = wr_addr_i[0] ;
|
|
assign w_data_w[35:1] = {35{1'b0}} ;
|
|
assign w_data_w[0] = wr_data_i ;
|
|
end
|
|
if (((DATA_WIDTH_R == 36) || (DATA_WIDTH_R == 32)))
|
|
begin : genblk3
|
|
assign r_addr_w[13: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 = r_data_w ;
|
|
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 : genblk3
|
|
assign r_addr_w[13:5] = rd_addr_i[9:1] ;
|
|
assign r_addr_w[4] = rd_addr_i[0] ;
|
|
assign r_addr_w[3:0] = 4'b1111 ;
|
|
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 : genblk3
|
|
assign r_addr_w[13:5] = rd_addr_i[10:2] ;
|
|
assign r_addr_w[4] = rd_addr_i[1] ;
|
|
assign r_addr_w[3] = rd_addr_i[0] ;
|
|
assign r_addr_w[2:0] = 3'b111 ;
|
|
if ((DATA_WIDTH_R == 9))
|
|
begin: genblk1
|
|
assign rd_data_w = r_data_w[8:0] ;
|
|
end
|
|
else
|
|
begin: genblk1
|
|
assign rd_data_w = r_data_w[7:0] ;
|
|
end
|
|
end
|
|
else
|
|
if ((DATA_WIDTH_R == 4))
|
|
begin : genblk3
|
|
assign r_addr_w[13:5] = rd_addr_i[11:3] ;
|
|
assign r_addr_w[4] = rd_addr_i[2] ;
|
|
assign r_addr_w[3] = rd_addr_i[1] ;
|
|
assign r_addr_w[2] = rd_addr_i[0] ;
|
|
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 : genblk3
|
|
assign r_addr_w[13:5] = rd_addr_i[12:4] ;
|
|
assign r_addr_w[4] = rd_addr_i[3] ;
|
|
assign r_addr_w[3] = rd_addr_i[2] ;
|
|
assign r_addr_w[2] = rd_addr_i[1] ;
|
|
assign r_addr_w[1] = rd_addr_i[0] ;
|
|
assign r_addr_w[0] = 1'b1 ;
|
|
assign rd_data_w = r_data_w[1:0] ;
|
|
end
|
|
else
|
|
begin : genblk3
|
|
assign r_addr_w[13:5] = rd_addr_i[13:5] ;
|
|
assign r_addr_w[4] = rd_addr_i[4] ;
|
|
assign r_addr_w[3] = rd_addr_i[3] ;
|
|
assign r_addr_w[2] = rd_addr_i[2] ;
|
|
assign r_addr_w[1] = rd_addr_i[1] ;
|
|
assign r_addr_w[0] = rd_addr_i[0] ;
|
|
assign rd_data_w = r_data_w[0] ;
|
|
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 [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 [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 [35:0] DO ;
|
|
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 *) PDP16K pdp16k (.DI(DI),
|
|
.ADW(ADW),
|
|
.ADR(ADR),
|
|
.CLKW(CLKW),
|
|
.CLKR(CLKR),
|
|
.CEW(CEW),
|
|
.CER(CER),
|
|
.CSW(CSW),
|
|
.CSR(CSR),
|
|
.RST(RST),
|
|
.DO(DO),
|
|
.ONEBITERR(one_err_det_o),
|
|
.TWOBITERR(two_err_det_o)) ;
|
|
defparam pdp16k.DATA_WIDTH_W = DW_W ;
|
|
defparam pdp16k.DATA_WIDTH_R = DW_R ;
|
|
defparam pdp16k.OUTREG = OUTREG ;
|
|
defparam pdp16k.RESETMODE = TRUE_RST ;
|
|
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.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")) ;
|
|
defparam pdp16k.INITVAL_02 = ((INIT_MODE == "mem_file") ? INIT_VALUE_02 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_03 = ((INIT_MODE == "mem_file") ? INIT_VALUE_03 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_04 = ((INIT_MODE == "mem_file") ? INIT_VALUE_04 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_05 = ((INIT_MODE == "mem_file") ? INIT_VALUE_05 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_06 = ((INIT_MODE == "mem_file") ? INIT_VALUE_06 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_07 = ((INIT_MODE == "mem_file") ? INIT_VALUE_07 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_08 = ((INIT_MODE == "mem_file") ? INIT_VALUE_08 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_09 = ((INIT_MODE == "mem_file") ? INIT_VALUE_09 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_0A = ((INIT_MODE == "mem_file") ? INIT_VALUE_0A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_0B = ((INIT_MODE == "mem_file") ? INIT_VALUE_0B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_0C = ((INIT_MODE == "mem_file") ? INIT_VALUE_0C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_0D = ((INIT_MODE == "mem_file") ? INIT_VALUE_0D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_0E = ((INIT_MODE == "mem_file") ? INIT_VALUE_0E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_0F = ((INIT_MODE == "mem_file") ? INIT_VALUE_0F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_10 = ((INIT_MODE == "mem_file") ? INIT_VALUE_10 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_11 = ((INIT_MODE == "mem_file") ? INIT_VALUE_11 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_12 = ((INIT_MODE == "mem_file") ? INIT_VALUE_12 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_13 = ((INIT_MODE == "mem_file") ? INIT_VALUE_13 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_14 = ((INIT_MODE == "mem_file") ? INIT_VALUE_14 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_15 = ((INIT_MODE == "mem_file") ? INIT_VALUE_15 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_16 = ((INIT_MODE == "mem_file") ? INIT_VALUE_16 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_17 = ((INIT_MODE == "mem_file") ? INIT_VALUE_17 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_18 = ((INIT_MODE == "mem_file") ? INIT_VALUE_18 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_19 = ((INIT_MODE == "mem_file") ? INIT_VALUE_19 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_1A = ((INIT_MODE == "mem_file") ? INIT_VALUE_1A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_1B = ((INIT_MODE == "mem_file") ? INIT_VALUE_1B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_1C = ((INIT_MODE == "mem_file") ? INIT_VALUE_1C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_1D = ((INIT_MODE == "mem_file") ? INIT_VALUE_1D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_1E = ((INIT_MODE == "mem_file") ? INIT_VALUE_1E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_1F = ((INIT_MODE == "mem_file") ? INIT_VALUE_1F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_20 = ((INIT_MODE == "mem_file") ? INIT_VALUE_20 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_21 = ((INIT_MODE == "mem_file") ? INIT_VALUE_21 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_22 = ((INIT_MODE == "mem_file") ? INIT_VALUE_22 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_23 = ((INIT_MODE == "mem_file") ? INIT_VALUE_23 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_24 = ((INIT_MODE == "mem_file") ? INIT_VALUE_24 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_25 = ((INIT_MODE == "mem_file") ? INIT_VALUE_25 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_26 = ((INIT_MODE == "mem_file") ? INIT_VALUE_26 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_27 = ((INIT_MODE == "mem_file") ? INIT_VALUE_27 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_28 = ((INIT_MODE == "mem_file") ? INIT_VALUE_28 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_29 = ((INIT_MODE == "mem_file") ? INIT_VALUE_29 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_2A = ((INIT_MODE == "mem_file") ? INIT_VALUE_2A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_2B = ((INIT_MODE == "mem_file") ? INIT_VALUE_2B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_2C = ((INIT_MODE == "mem_file") ? INIT_VALUE_2C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_2D = ((INIT_MODE == "mem_file") ? INIT_VALUE_2D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_2E = ((INIT_MODE == "mem_file") ? INIT_VALUE_2E : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_2F = ((INIT_MODE == "mem_file") ? INIT_VALUE_2F : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_30 = ((INIT_MODE == "mem_file") ? INIT_VALUE_30 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_31 = ((INIT_MODE == "mem_file") ? INIT_VALUE_31 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_32 = ((INIT_MODE == "mem_file") ? INIT_VALUE_32 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_33 = ((INIT_MODE == "mem_file") ? INIT_VALUE_33 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_34 = ((INIT_MODE == "mem_file") ? INIT_VALUE_34 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_35 = ((INIT_MODE == "mem_file") ? INIT_VALUE_35 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_36 = ((INIT_MODE == "mem_file") ? INIT_VALUE_36 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_37 = ((INIT_MODE == "mem_file") ? INIT_VALUE_37 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_38 = ((INIT_MODE == "mem_file") ? INIT_VALUE_38 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_39 = ((INIT_MODE == "mem_file") ? INIT_VALUE_39 : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_3A = ((INIT_MODE == "mem_file") ? INIT_VALUE_3A : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_3B = ((INIT_MODE == "mem_file") ? INIT_VALUE_3B : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_3C = ((INIT_MODE == "mem_file") ? INIT_VALUE_3C : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
defparam pdp16k.INITVAL_3D = ((INIT_MODE == "mem_file") ? INIT_VALUE_3D : ((INIT_MODE == "all_one") ? "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000")) ;
|
|
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
|
|
endgenerate
|
|
//------------------------------------------------------------------------------
|
|
// Function Definition
|
|
//------------------------------------------------------------------------------
|
|
function [31:0] calculateStringSize ;
|
|
input [31:0] x_calc ;
|
|
input [31:0] y_calc ;
|
|
reg [31:0] x_func ;
|
|
reg [31:0] y_func ;
|
|
begin
|
|
if ((x_calc >= 10000000))
|
|
begin
|
|
x_func = 8 ;
|
|
end
|
|
else
|
|
if ((x_calc >= 1000000))
|
|
begin
|
|
x_func = 7 ;
|
|
end
|
|
else
|
|
if ((x_calc >= 100000))
|
|
begin
|
|
x_func = 6 ;
|
|
end
|
|
else
|
|
if ((x_calc >= 10000))
|
|
begin
|
|
x_func = 5 ;
|
|
end
|
|
else
|
|
if ((x_calc >= 1000))
|
|
begin
|
|
x_func = 4 ;
|
|
end
|
|
else
|
|
if ((x_calc >= 100))
|
|
begin
|
|
x_func = 3 ;
|
|
end
|
|
else
|
|
if ((x_calc >= 10))
|
|
begin
|
|
x_func = 2 ;
|
|
end
|
|
else
|
|
begin
|
|
x_func = 1 ;
|
|
end
|
|
if ((y_calc >= 10000000))
|
|
begin
|
|
y_func = 8 ;
|
|
end
|
|
else
|
|
if ((y_calc >= 1000000))
|
|
begin
|
|
y_func = 7 ;
|
|
end
|
|
else
|
|
if ((y_calc >= 100000))
|
|
begin
|
|
y_func = 6 ;
|
|
end
|
|
else
|
|
if ((y_calc >= 10000))
|
|
begin
|
|
y_func = 5 ;
|
|
end
|
|
else
|
|
if ((y_calc >= 1000))
|
|
begin
|
|
y_func = 4 ;
|
|
end
|
|
else
|
|
if ((y_calc >= 100))
|
|
begin
|
|
y_func = 3 ;
|
|
end
|
|
else
|
|
if ((y_calc >= 10))
|
|
begin
|
|
y_func = 2 ;
|
|
end
|
|
else
|
|
begin
|
|
y_func = 1 ;
|
|
end
|
|
calculateStringSize = (((3 + x_func) + y_func) * 8) ;
|
|
end
|
|
endfunction
|
|
function [31:0] getByteWidth ;
|
|
input [31:0] data_width ;
|
|
input [31:0] dev_code ;
|
|
begin
|
|
case (dev_code)
|
|
_FCODE_LIFCL_ :
|
|
begin
|
|
if (((data_width == 36) || (data_width == 32)))
|
|
getByteWidth = 4 ;
|
|
else
|
|
if (((data_width == 18) || (data_width == 16)))
|
|
getByteWidth = 2 ;
|
|
else
|
|
getByteWidth = 1 ;
|
|
end
|
|
_FCODE_ICE_ :
|
|
begin
|
|
if ((data_width == 16))
|
|
getByteWidth = 2 ;
|
|
else
|
|
getByteWidth = 1 ;
|
|
end
|
|
default :
|
|
getByteWidth = 1 ;
|
|
endcase
|
|
end
|
|
endfunction
|
|
function [(STRING_SIZE - 1):0] getStringFromPos ;
|
|
input [31:0] x ;
|
|
input [31:0] y ;
|
|
begin
|
|
if ((y >= 10000000))
|
|
begin
|
|
if ((x >= 10000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X7 * 8) + 7):(POS_X7 * 8)],
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y7 * 8) + 7):(POS_Y7 * 8)],
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y7 * 8) + 7):(POS_Y7 * 8)],
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y7 * 8) + 7):(POS_Y7 * 8)],
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y7 * 8) + 7):(POS_Y7 * 8)],
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y7 * 8) + 7):(POS_Y7 * 8)],
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y7 * 8) + 7):(POS_Y7 * 8)],
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y7 * 8) + 7):(POS_Y7 * 8)],
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y7 * 8) + 7):(POS_Y7 * 8)],
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
end
|
|
else
|
|
if ((y >= 1000000))
|
|
begin
|
|
if ((x >= 10000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X7 * 8) + 7):(POS_X7 * 8)],
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y6 * 8) + 7):(POS_Y6 * 8)],
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
end
|
|
else
|
|
if ((y >= 100000))
|
|
begin
|
|
if ((x >= 10000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X7 * 8) + 7):(POS_X7 * 8)],
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y5 * 8) + 7):(POS_Y5 * 8)],
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
end
|
|
else
|
|
if ((y >= 10000))
|
|
begin
|
|
if ((x >= 10000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X7 * 8) + 7):(POS_X7 * 8)],
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y4 * 8) + 7):(POS_Y4 * 8)],
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
end
|
|
else
|
|
if ((y >= 1000))
|
|
begin
|
|
if ((x >= 10000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X7 * 8) + 7):(POS_X7 * 8)],
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y3 * 8) + 7):(POS_Y3 * 8)],
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
end
|
|
else
|
|
if ((y >= 100))
|
|
begin
|
|
if ((x >= 10000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X7 * 8) + 7):(POS_X7 * 8)],
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y2 * 8) + 7):(POS_Y2 * 8)],
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
end
|
|
else
|
|
if ((y >= 10))
|
|
begin
|
|
if ((x >= 10000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X7 * 8) + 7):(POS_X7 * 8)],
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y1 * 8) + 7):(POS_Y1 * 8)],
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
end
|
|
else
|
|
begin
|
|
if ((x >= 10000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X7 * 8) + 7):(POS_X7 * 8)],
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X6 * 8) + 7):(POS_X6 * 8)],
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X5 * 8) + 7):(POS_X5 * 8)],
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X4 * 8) + 7):(POS_X4 * 8)],
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 1000))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X3 * 8) + 7):(POS_X3 * 8)],
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 100))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X2 * 8) + 7):(POS_X2 * 8)],
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
if ((x >= 10))
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X1 * 8) + 7):(POS_X1 * 8)],
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
else
|
|
begin
|
|
getStringFromPos = {"[",
|
|
NUM_STRING[((POS_X0 * 8) + 7):(POS_X0 * 8)],
|
|
",",
|
|
NUM_STRING[((POS_Y0 * 8) + 7):(POS_Y0 * 8)],
|
|
"]"} ;
|
|
end
|
|
end
|
|
end
|
|
endfunction
|
|
function [31:0] getAddrWidth ;
|
|
input [31:0] data_width ;
|
|
input [31:0] dev_code ;
|
|
begin
|
|
case (dev_code)
|
|
_FCODE_LIFCL_ :
|
|
begin
|
|
case (data_width)
|
|
36 :
|
|
getAddrWidth = 9 ;
|
|
32 :
|
|
getAddrWidth = 9 ;
|
|
18 :
|
|
getAddrWidth = 10 ;
|
|
16 :
|
|
getAddrWidth = 10 ;
|
|
9 :
|
|
getAddrWidth = 11 ;
|
|
8 :
|
|
getAddrWidth = 11 ;
|
|
4 :
|
|
getAddrWidth = 12 ;
|
|
2 :
|
|
getAddrWidth = 13 ;
|
|
1 :
|
|
getAddrWidth = 14 ;
|
|
endcase
|
|
end
|
|
_FCODE_ICE_ :
|
|
begin
|
|
case (data_width)
|
|
16 :
|
|
getAddrWidth = 8 ;
|
|
8 :
|
|
getAddrWidth = 9 ;
|
|
4 :
|
|
getAddrWidth = 10 ;
|
|
2 :
|
|
getAddrWidth = 11 ;
|
|
endcase
|
|
end
|
|
default :
|
|
getAddrWidth = 8 ;
|
|
endcase
|
|
end
|
|
endfunction
|
|
|
|
//=============================================================================
|
|
// lscc_ram_dp_core.v
|
|
// Local Variables:
|
|
// verilog-library-directories: ("../../common")
|
|
// End:
|
|
//=============================================================================
|
|
endmodule
|
|
|
|
|