4753 lines
228 KiB
Coq
4753 lines
228 KiB
Coq
|
// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/blanc/RAMB36E1.v,v 1.44.74.1 2013/03/05 22:39:05 wloo Exp $
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// Copyright (c) 1995/2008 Xilinx, Inc.
|
||
|
// All Right Reserved.
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// ____ ____
|
||
|
// / /\/ /
|
||
|
// /___/ \ / Vendor : Xilinx
|
||
|
// \ \ \/ Version : 10.1
|
||
|
// \ \ Description : Xilinx Functional Simulation Library Component
|
||
|
// / / 32K-Bit Data and 4K-Bit Parity Dual Port Block RAM
|
||
|
// /___/ /\ Filename : RAMB36E1.v
|
||
|
// \ \ / \ Timestamp : Tue Feb 26 13:49:08 PST 2008
|
||
|
// \___\/\___\
|
||
|
//
|
||
|
// Revision:
|
||
|
// 02/26/08 - Initial version.
|
||
|
// 07/25/08 - Fixed ECC in register mode. (IR 477257)
|
||
|
// 07/30/08 - Updated to support SDP mode with smaller port width <= 36. (IR 477258)
|
||
|
// 11/04/08 - Fixed incorrect output during first clock cycle. (CR 470964)
|
||
|
// 11/10/08 - Added DRC for invalid input parity for ECC (CR 482976).
|
||
|
// 11/20/08 - Changed RDADDRECC[12:0] to [8:0] (IR 496907).
|
||
|
// 03/11/09 - X's the unused bits of outputs (CR 511363).
|
||
|
// 03/23/09 - Fixed unusual behavior of X's in the unused bits of outputs (CR 513167).
|
||
|
// 04/10/09 - Implemented workaround for NCSim event triggering during initial time (CR 517450).
|
||
|
// 04/17/09 - Implemented X's in sbiterr and dbiterr outputs during collision in ECC mode (CR 508071).
|
||
|
// 08/03/09 - Updated collision behavior when both clocks are in phase/within 100 ps (CR 522327).
|
||
|
// 08/12/09 - Updated collision address check for none in phase clocks (CR 527010).
|
||
|
// 08/18/09 - Fixed output delay in SDP mode (CR 528259).
|
||
|
// 11/16/09 - Implemented DRC for ADDR[15] in non-cascade mode (CR 535882).
|
||
|
// 11/18/09 - Define tasks and functions before calling (CR 532610).
|
||
|
// 11/24/09 - Undo CR 535882, bitgen or map is going to tie off ADDR[15] instead.
|
||
|
// 12/16/09 - Enhanced memory initialization (CR 540764).
|
||
|
// 03/15/10 - Updated address collision for asynchronous clocks and read first mode (CR 527010).
|
||
|
// 04/01/10 - Fixed clocks detection for collision (CR 552123).
|
||
|
// 05/11/10 - Updated clocks detection for collision (CR 557624).
|
||
|
// - Added attribute RDADDR_COLLISION_HWCONFIG (CR 557971).
|
||
|
// 05/25/10 - Added WRITE_FIRST support in SDP mode (CR 561807).
|
||
|
// 06/03/10 - Added functionality for attribute RDADDR_COLLISION_HWCONFIG (CR 557971).
|
||
|
// 07/08/10 - Added SIM_DEVICE attribute (CR 567633).
|
||
|
// 07/09/10 - Fixed INJECTSBITERR and INJECTDBITERR behaviors (CR 565234).
|
||
|
// 07/09/10 - Initialized memory to zero for INIT_FILE (CR 560672).
|
||
|
// 08/09/10 - Updated the model according to new address collision/overlap tables (CR 566507).
|
||
|
// 09/16/10 - Updated from bit to bus timing (CR 575523).
|
||
|
// 10/14/10 - Removed NO_CHANGE support in SDP mode (CR 575924).
|
||
|
// 10/15/10 - Updated 7SERIES address overlap and address collision (CR 575953).
|
||
|
// 12/10/10 - Converted parameter to wire in specify block (CR 574534).
|
||
|
// 03/16/11 - Changed synchronous clock skew to 50ps for 7 series(CR 588053).
|
||
|
// 08/04/11 - Fixed address overlap when clocks are within 100ps (CR 611004).
|
||
|
// 09/12/11 - Fixed ECC error when clocks are within 100ps with address collision/overlap (CR 621942).
|
||
|
// 09/28/11 - Fixed ECC error when clocks are within 100ps with address collision/overlap, part 2 (CR 621942).
|
||
|
// 10/11/11 - Fixed collision with clocks rise at the same time (CR 628129).
|
||
|
// 10/17/11 - Fixed collision with clocks within 100ps in SDP mode (CR 620844).
|
||
|
// 10/28/11 - Removed all mention of internal block ram from messaging (CR 569190).
|
||
|
// 11/04/11 - Fixed collision with clock within 100ps in TDP mode (CR 627670).
|
||
|
// 12/13/11 - Added `celldefine and `endcelldefine (CR 524859).
|
||
|
// 02/05/12 - Fixed read width function when READ_WIDTH_A/B = 0 (CR 643482).
|
||
|
// 02/22/12 - Fixed mem/memp out of bounds warning messages (CR 584399).
|
||
|
// 02/23/12 - Fixed SDP mode when write width is 32 and read width is 64 (CR 647335).
|
||
|
// 03/06/12 - Fixed hierarchical error from CR 584399 (CR 648454).
|
||
|
// 03/15/12 - Reverted CR 584399 (CR 651279).
|
||
|
// 02/15/13 - Updated collision check to use clock period or 3ns (CR 694934).
|
||
|
// End Revision
|
||
|
|
||
|
`timescale 1 ps/1 ps
|
||
|
`celldefine
|
||
|
|
||
|
module RAMB36E1 (CASCADEOUTA, CASCADEOUTB, DBITERR, DOADO, DOBDO, DOPADOP, DOPBDOP, ECCPARITY, RDADDRECC, SBITERR,
|
||
|
ADDRARDADDR, ADDRBWRADDR, CASCADEINA, CASCADEINB, CLKARDCLK, CLKBWRCLK, DIADI, DIBDI, DIPADIP, DIPBDIP, ENARDEN, ENBWREN, INJECTDBITERR, INJECTSBITERR, REGCEAREGCE, REGCEB, RSTRAMARSTRAM, RSTRAMB, RSTREGARSTREG, RSTREGB, WEA, WEBWE);
|
||
|
|
||
|
parameter integer DOA_REG = 0;
|
||
|
parameter integer DOB_REG = 0;
|
||
|
parameter EN_ECC_READ = "FALSE";
|
||
|
parameter EN_ECC_WRITE = "FALSE";
|
||
|
parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_40 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_41 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_42 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_43 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_44 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_45 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_46 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_47 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_48 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_49 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_4A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_4B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_4C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_4D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_4E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_4F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_50 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_51 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_52 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_53 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_54 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_55 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_56 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_57 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_58 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_59 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_5A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_5B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_5C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_5D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_5E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_5F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_60 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_61 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_62 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_63 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_64 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_65 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_66 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_67 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_68 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_69 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_6A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_6B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_6C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_6D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_6E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_6F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_70 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_71 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_72 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_73 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_74 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_75 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_76 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_77 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_78 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_79 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_7A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_7B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_7C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_7D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_A = 36'h0;
|
||
|
parameter INIT_B = 36'h0;
|
||
|
parameter INIT_FILE = "NONE";
|
||
|
parameter RAM_EXTENSION_A = "NONE";
|
||
|
parameter RAM_EXTENSION_B = "NONE";
|
||
|
parameter RAM_MODE = "TDP";
|
||
|
parameter RDADDR_COLLISION_HWCONFIG = "DELAYED_WRITE";
|
||
|
parameter integer READ_WIDTH_A = 0;
|
||
|
parameter integer READ_WIDTH_B = 0;
|
||
|
parameter RSTREG_PRIORITY_A = "RSTREG";
|
||
|
parameter RSTREG_PRIORITY_B = "RSTREG";
|
||
|
parameter SIM_COLLISION_CHECK = "ALL";
|
||
|
parameter SIM_DEVICE = "VIRTEX6";
|
||
|
parameter SRVAL_A = 36'h0;
|
||
|
parameter SRVAL_B = 36'h0;
|
||
|
parameter WRITE_MODE_A = "WRITE_FIRST";
|
||
|
parameter WRITE_MODE_B = "WRITE_FIRST";
|
||
|
parameter integer WRITE_WIDTH_A = 0;
|
||
|
parameter integer WRITE_WIDTH_B = 0;
|
||
|
|
||
|
localparam SETUP_ALL = 1000;
|
||
|
localparam SETUP_READ_FIRST = 3000;
|
||
|
|
||
|
output CASCADEOUTA;
|
||
|
output CASCADEOUTB;
|
||
|
output [31:0] DOADO;
|
||
|
output [31:0] DOBDO;
|
||
|
output [3:0] DOPADOP;
|
||
|
output [3:0] DOPBDOP;
|
||
|
output [7:0] ECCPARITY;
|
||
|
output [8:0] RDADDRECC;
|
||
|
output SBITERR, DBITERR;
|
||
|
|
||
|
input ENARDEN, CLKARDCLK, RSTRAMARSTRAM, RSTREGARSTREG, CASCADEINA, REGCEAREGCE;
|
||
|
input ENBWREN, CLKBWRCLK, RSTRAMB, RSTREGB, CASCADEINB, REGCEB;
|
||
|
input INJECTDBITERR, INJECTSBITERR;
|
||
|
input [15:0] ADDRARDADDR;
|
||
|
input [15:0] ADDRBWRADDR;
|
||
|
input [31:0] DIADI;
|
||
|
input [31:0] DIBDI;
|
||
|
input [3:0] DIPADIP;
|
||
|
input [3:0] DIPBDIP;
|
||
|
input [3:0] WEA;
|
||
|
input [7:0] WEBWE;
|
||
|
|
||
|
tri0 GSR = glbl.GSR;
|
||
|
|
||
|
wire [3:0] dangle_out4;
|
||
|
wire [31:0] dangle_out32;
|
||
|
|
||
|
|
||
|
// special handle for sdp width = 72 and < 72
|
||
|
localparam init_sdp = {INIT_B, INIT_A};
|
||
|
localparam srval_sdp = {SRVAL_B, SRVAL_A};
|
||
|
|
||
|
|
||
|
generate
|
||
|
case (RAM_MODE)
|
||
|
|
||
|
"TDP" : begin
|
||
|
|
||
|
RB36_INTERNAL_VLOG #(.RAM_MODE(RAM_MODE),
|
||
|
.INIT_A(INIT_A),
|
||
|
.INIT_B(INIT_B),
|
||
|
.INIT_FILE(INIT_FILE),
|
||
|
.SRVAL_A(SRVAL_A),
|
||
|
.SRVAL_B(SRVAL_B),
|
||
|
.READ_WIDTH_A(READ_WIDTH_A),
|
||
|
.READ_WIDTH_B(READ_WIDTH_B),
|
||
|
.WRITE_WIDTH_A(WRITE_WIDTH_A),
|
||
|
.WRITE_WIDTH_B(WRITE_WIDTH_B),
|
||
|
.WRITE_MODE_A(WRITE_MODE_A),
|
||
|
.WRITE_MODE_B(WRITE_MODE_B),
|
||
|
.RAM_EXTENSION_A(RAM_EXTENSION_A),
|
||
|
.RAM_EXTENSION_B(RAM_EXTENSION_B),
|
||
|
.RDADDR_COLLISION_HWCONFIG(RDADDR_COLLISION_HWCONFIG),
|
||
|
.SETUP_ALL(SETUP_ALL),
|
||
|
.SETUP_READ_FIRST(SETUP_READ_FIRST),
|
||
|
.SIM_COLLISION_CHECK(SIM_COLLISION_CHECK),
|
||
|
.SIM_DEVICE(SIM_DEVICE),
|
||
|
.EN_ECC_READ(EN_ECC_READ),
|
||
|
.EN_ECC_WRITE(EN_ECC_WRITE),
|
||
|
.DOA_REG(DOA_REG),
|
||
|
.DOB_REG(DOB_REG),
|
||
|
.RSTREG_PRIORITY_A(RSTREG_PRIORITY_A),
|
||
|
.RSTREG_PRIORITY_B(RSTREG_PRIORITY_B),
|
||
|
.INIT_00(INIT_00),
|
||
|
.INIT_01(INIT_01),
|
||
|
.INIT_02(INIT_02),
|
||
|
.INIT_03(INIT_03),
|
||
|
.INIT_04(INIT_04),
|
||
|
.INIT_05(INIT_05),
|
||
|
.INIT_06(INIT_06),
|
||
|
.INIT_07(INIT_07),
|
||
|
.INIT_08(INIT_08),
|
||
|
.INIT_09(INIT_09),
|
||
|
.INIT_0A(INIT_0A),
|
||
|
.INIT_0B(INIT_0B),
|
||
|
.INIT_0C(INIT_0C),
|
||
|
.INIT_0D(INIT_0D),
|
||
|
.INIT_0E(INIT_0E),
|
||
|
.INIT_0F(INIT_0F),
|
||
|
.INIT_10(INIT_10),
|
||
|
.INIT_11(INIT_11),
|
||
|
.INIT_12(INIT_12),
|
||
|
.INIT_13(INIT_13),
|
||
|
.INIT_14(INIT_14),
|
||
|
.INIT_15(INIT_15),
|
||
|
.INIT_16(INIT_16),
|
||
|
.INIT_17(INIT_17),
|
||
|
.INIT_18(INIT_18),
|
||
|
.INIT_19(INIT_19),
|
||
|
.INIT_1A(INIT_1A),
|
||
|
.INIT_1B(INIT_1B),
|
||
|
.INIT_1C(INIT_1C),
|
||
|
.INIT_1D(INIT_1D),
|
||
|
.INIT_1E(INIT_1E),
|
||
|
.INIT_1F(INIT_1F),
|
||
|
.INIT_20(INIT_20),
|
||
|
.INIT_21(INIT_21),
|
||
|
.INIT_22(INIT_22),
|
||
|
.INIT_23(INIT_23),
|
||
|
.INIT_24(INIT_24),
|
||
|
.INIT_25(INIT_25),
|
||
|
.INIT_26(INIT_26),
|
||
|
.INIT_27(INIT_27),
|
||
|
.INIT_28(INIT_28),
|
||
|
.INIT_29(INIT_29),
|
||
|
.INIT_2A(INIT_2A),
|
||
|
.INIT_2B(INIT_2B),
|
||
|
.INIT_2C(INIT_2C),
|
||
|
.INIT_2D(INIT_2D),
|
||
|
.INIT_2E(INIT_2E),
|
||
|
.INIT_2F(INIT_2F),
|
||
|
.INIT_30(INIT_30),
|
||
|
.INIT_31(INIT_31),
|
||
|
.INIT_32(INIT_32),
|
||
|
.INIT_33(INIT_33),
|
||
|
.INIT_34(INIT_34),
|
||
|
.INIT_35(INIT_35),
|
||
|
.INIT_36(INIT_36),
|
||
|
.INIT_37(INIT_37),
|
||
|
.INIT_38(INIT_38),
|
||
|
.INIT_39(INIT_39),
|
||
|
.INIT_3A(INIT_3A),
|
||
|
.INIT_3B(INIT_3B),
|
||
|
.INIT_3C(INIT_3C),
|
||
|
.INIT_3D(INIT_3D),
|
||
|
.INIT_3E(INIT_3E),
|
||
|
.INIT_3F(INIT_3F),
|
||
|
.INIT_40(INIT_40),
|
||
|
.INIT_41(INIT_41),
|
||
|
.INIT_42(INIT_42),
|
||
|
.INIT_43(INIT_43),
|
||
|
.INIT_44(INIT_44),
|
||
|
.INIT_45(INIT_45),
|
||
|
.INIT_46(INIT_46),
|
||
|
.INIT_47(INIT_47),
|
||
|
.INIT_48(INIT_48),
|
||
|
.INIT_49(INIT_49),
|
||
|
.INIT_4A(INIT_4A),
|
||
|
.INIT_4B(INIT_4B),
|
||
|
.INIT_4C(INIT_4C),
|
||
|
.INIT_4D(INIT_4D),
|
||
|
.INIT_4E(INIT_4E),
|
||
|
.INIT_4F(INIT_4F),
|
||
|
.INIT_50(INIT_50),
|
||
|
.INIT_51(INIT_51),
|
||
|
.INIT_52(INIT_52),
|
||
|
.INIT_53(INIT_53),
|
||
|
.INIT_54(INIT_54),
|
||
|
.INIT_55(INIT_55),
|
||
|
.INIT_56(INIT_56),
|
||
|
.INIT_57(INIT_57),
|
||
|
.INIT_58(INIT_58),
|
||
|
.INIT_59(INIT_59),
|
||
|
.INIT_5A(INIT_5A),
|
||
|
.INIT_5B(INIT_5B),
|
||
|
.INIT_5C(INIT_5C),
|
||
|
.INIT_5D(INIT_5D),
|
||
|
.INIT_5E(INIT_5E),
|
||
|
.INIT_5F(INIT_5F),
|
||
|
.INIT_60(INIT_60),
|
||
|
.INIT_61(INIT_61),
|
||
|
.INIT_62(INIT_62),
|
||
|
.INIT_63(INIT_63),
|
||
|
.INIT_64(INIT_64),
|
||
|
.INIT_65(INIT_65),
|
||
|
.INIT_66(INIT_66),
|
||
|
.INIT_67(INIT_67),
|
||
|
.INIT_68(INIT_68),
|
||
|
.INIT_69(INIT_69),
|
||
|
.INIT_6A(INIT_6A),
|
||
|
.INIT_6B(INIT_6B),
|
||
|
.INIT_6C(INIT_6C),
|
||
|
.INIT_6D(INIT_6D),
|
||
|
.INIT_6E(INIT_6E),
|
||
|
.INIT_6F(INIT_6F),
|
||
|
.INIT_70(INIT_70),
|
||
|
.INIT_71(INIT_71),
|
||
|
.INIT_72(INIT_72),
|
||
|
.INIT_73(INIT_73),
|
||
|
.INIT_74(INIT_74),
|
||
|
.INIT_75(INIT_75),
|
||
|
.INIT_76(INIT_76),
|
||
|
.INIT_77(INIT_77),
|
||
|
.INIT_78(INIT_78),
|
||
|
.INIT_79(INIT_79),
|
||
|
.INIT_7A(INIT_7A),
|
||
|
.INIT_7B(INIT_7B),
|
||
|
.INIT_7C(INIT_7C),
|
||
|
.INIT_7D(INIT_7D),
|
||
|
.INIT_7E(INIT_7E),
|
||
|
.INIT_7F(INIT_7F),
|
||
|
.INITP_00(INITP_00),
|
||
|
.INITP_01(INITP_01),
|
||
|
.INITP_02(INITP_02),
|
||
|
.INITP_03(INITP_03),
|
||
|
.INITP_04(INITP_04),
|
||
|
.INITP_05(INITP_05),
|
||
|
.INITP_06(INITP_06),
|
||
|
.INITP_07(INITP_07),
|
||
|
.INITP_08(INITP_08),
|
||
|
.INITP_09(INITP_09),
|
||
|
.INITP_0A(INITP_0A),
|
||
|
.INITP_0B(INITP_0B),
|
||
|
.INITP_0C(INITP_0C),
|
||
|
.INITP_0D(INITP_0D),
|
||
|
.INITP_0E(INITP_0E),
|
||
|
.INITP_0F(INITP_0F))
|
||
|
|
||
|
INT_RAMB_TDP (.ADDRA(ADDRARDADDR),
|
||
|
.ADDRB(ADDRBWRADDR),
|
||
|
.CASCADEINA(CASCADEINA),
|
||
|
.CASCADEINB(CASCADEINB),
|
||
|
.CASCADEOUTA(CASCADEOUTA),
|
||
|
.CASCADEOUTB(CASCADEOUTB),
|
||
|
.CLKA(CLKARDCLK),
|
||
|
.CLKB(CLKBWRCLK),
|
||
|
.DBITERR(DBITERR),
|
||
|
.DIA({32'b0,DIADI}),
|
||
|
.DIB({32'b0,DIBDI}),
|
||
|
.DIPA(DIPADIP),
|
||
|
.DIPB({4'b0,DIPBDIP}),
|
||
|
.DOA({dangle_out32,DOADO}),
|
||
|
.DOB(DOBDO),
|
||
|
.DOPA({dangle_out4,DOPADOP}),
|
||
|
.DOPB(DOPBDOP),
|
||
|
.ECCPARITY(ECCPARITY),
|
||
|
.ENA(ENARDEN),
|
||
|
.ENB(ENBWREN),
|
||
|
.GSR(GSR),
|
||
|
.INJECTDBITERR(1'b0),
|
||
|
.INJECTSBITERR(1'b0),
|
||
|
.RDADDRECC(RDADDRECC),
|
||
|
.REGCEA(REGCEAREGCE),
|
||
|
.REGCEB(REGCEB),
|
||
|
.RSTRAMA(RSTRAMARSTRAM),
|
||
|
.RSTRAMB(RSTRAMB),
|
||
|
.RSTREGA(RSTREGARSTREG),
|
||
|
.RSTREGB(RSTREGB),
|
||
|
.SBITERR(SBITERR),
|
||
|
.WEA({2{WEA}}),
|
||
|
.WEB(WEBWE));
|
||
|
|
||
|
end // case: "TDP"
|
||
|
"SDP" : begin
|
||
|
|
||
|
if (WRITE_WIDTH_B == 72) begin
|
||
|
|
||
|
RB36_INTERNAL_VLOG #(.RAM_MODE(RAM_MODE),
|
||
|
.INIT_A(init_sdp),
|
||
|
.INIT_B(init_sdp),
|
||
|
.INIT_FILE(INIT_FILE),
|
||
|
.SRVAL_A(srval_sdp),
|
||
|
.SRVAL_B(srval_sdp),
|
||
|
.READ_WIDTH_A(READ_WIDTH_A),
|
||
|
.READ_WIDTH_B(READ_WIDTH_A),
|
||
|
.WRITE_WIDTH_A(WRITE_WIDTH_B),
|
||
|
.WRITE_WIDTH_B(WRITE_WIDTH_B),
|
||
|
.WRITE_MODE_A(WRITE_MODE_A),
|
||
|
.WRITE_MODE_B(WRITE_MODE_B),
|
||
|
.RAM_EXTENSION_A(RAM_EXTENSION_A),
|
||
|
.RAM_EXTENSION_B(RAM_EXTENSION_B),
|
||
|
.RDADDR_COLLISION_HWCONFIG(RDADDR_COLLISION_HWCONFIG),
|
||
|
.SETUP_ALL(SETUP_ALL),
|
||
|
.SETUP_READ_FIRST(SETUP_READ_FIRST),
|
||
|
.SIM_COLLISION_CHECK(SIM_COLLISION_CHECK),
|
||
|
.SIM_DEVICE(SIM_DEVICE),
|
||
|
.EN_ECC_READ(EN_ECC_READ),
|
||
|
.EN_ECC_WRITE(EN_ECC_WRITE),
|
||
|
.DOA_REG(DOA_REG),
|
||
|
.DOB_REG(DOB_REG),
|
||
|
.RSTREG_PRIORITY_A(RSTREG_PRIORITY_A),
|
||
|
.RSTREG_PRIORITY_B(RSTREG_PRIORITY_B),
|
||
|
.INIT_00(INIT_00),
|
||
|
.INIT_01(INIT_01),
|
||
|
.INIT_02(INIT_02),
|
||
|
.INIT_03(INIT_03),
|
||
|
.INIT_04(INIT_04),
|
||
|
.INIT_05(INIT_05),
|
||
|
.INIT_06(INIT_06),
|
||
|
.INIT_07(INIT_07),
|
||
|
.INIT_08(INIT_08),
|
||
|
.INIT_09(INIT_09),
|
||
|
.INIT_0A(INIT_0A),
|
||
|
.INIT_0B(INIT_0B),
|
||
|
.INIT_0C(INIT_0C),
|
||
|
.INIT_0D(INIT_0D),
|
||
|
.INIT_0E(INIT_0E),
|
||
|
.INIT_0F(INIT_0F),
|
||
|
.INIT_10(INIT_10),
|
||
|
.INIT_11(INIT_11),
|
||
|
.INIT_12(INIT_12),
|
||
|
.INIT_13(INIT_13),
|
||
|
.INIT_14(INIT_14),
|
||
|
.INIT_15(INIT_15),
|
||
|
.INIT_16(INIT_16),
|
||
|
.INIT_17(INIT_17),
|
||
|
.INIT_18(INIT_18),
|
||
|
.INIT_19(INIT_19),
|
||
|
.INIT_1A(INIT_1A),
|
||
|
.INIT_1B(INIT_1B),
|
||
|
.INIT_1C(INIT_1C),
|
||
|
.INIT_1D(INIT_1D),
|
||
|
.INIT_1E(INIT_1E),
|
||
|
.INIT_1F(INIT_1F),
|
||
|
.INIT_20(INIT_20),
|
||
|
.INIT_21(INIT_21),
|
||
|
.INIT_22(INIT_22),
|
||
|
.INIT_23(INIT_23),
|
||
|
.INIT_24(INIT_24),
|
||
|
.INIT_25(INIT_25),
|
||
|
.INIT_26(INIT_26),
|
||
|
.INIT_27(INIT_27),
|
||
|
.INIT_28(INIT_28),
|
||
|
.INIT_29(INIT_29),
|
||
|
.INIT_2A(INIT_2A),
|
||
|
.INIT_2B(INIT_2B),
|
||
|
.INIT_2C(INIT_2C),
|
||
|
.INIT_2D(INIT_2D),
|
||
|
.INIT_2E(INIT_2E),
|
||
|
.INIT_2F(INIT_2F),
|
||
|
.INIT_30(INIT_30),
|
||
|
.INIT_31(INIT_31),
|
||
|
.INIT_32(INIT_32),
|
||
|
.INIT_33(INIT_33),
|
||
|
.INIT_34(INIT_34),
|
||
|
.INIT_35(INIT_35),
|
||
|
.INIT_36(INIT_36),
|
||
|
.INIT_37(INIT_37),
|
||
|
.INIT_38(INIT_38),
|
||
|
.INIT_39(INIT_39),
|
||
|
.INIT_3A(INIT_3A),
|
||
|
.INIT_3B(INIT_3B),
|
||
|
.INIT_3C(INIT_3C),
|
||
|
.INIT_3D(INIT_3D),
|
||
|
.INIT_3E(INIT_3E),
|
||
|
.INIT_3F(INIT_3F),
|
||
|
.INIT_40(INIT_40),
|
||
|
.INIT_41(INIT_41),
|
||
|
.INIT_42(INIT_42),
|
||
|
.INIT_43(INIT_43),
|
||
|
.INIT_44(INIT_44),
|
||
|
.INIT_45(INIT_45),
|
||
|
.INIT_46(INIT_46),
|
||
|
.INIT_47(INIT_47),
|
||
|
.INIT_48(INIT_48),
|
||
|
.INIT_49(INIT_49),
|
||
|
.INIT_4A(INIT_4A),
|
||
|
.INIT_4B(INIT_4B),
|
||
|
.INIT_4C(INIT_4C),
|
||
|
.INIT_4D(INIT_4D),
|
||
|
.INIT_4E(INIT_4E),
|
||
|
.INIT_4F(INIT_4F),
|
||
|
.INIT_50(INIT_50),
|
||
|
.INIT_51(INIT_51),
|
||
|
.INIT_52(INIT_52),
|
||
|
.INIT_53(INIT_53),
|
||
|
.INIT_54(INIT_54),
|
||
|
.INIT_55(INIT_55),
|
||
|
.INIT_56(INIT_56),
|
||
|
.INIT_57(INIT_57),
|
||
|
.INIT_58(INIT_58),
|
||
|
.INIT_59(INIT_59),
|
||
|
.INIT_5A(INIT_5A),
|
||
|
.INIT_5B(INIT_5B),
|
||
|
.INIT_5C(INIT_5C),
|
||
|
.INIT_5D(INIT_5D),
|
||
|
.INIT_5E(INIT_5E),
|
||
|
.INIT_5F(INIT_5F),
|
||
|
.INIT_60(INIT_60),
|
||
|
.INIT_61(INIT_61),
|
||
|
.INIT_62(INIT_62),
|
||
|
.INIT_63(INIT_63),
|
||
|
.INIT_64(INIT_64),
|
||
|
.INIT_65(INIT_65),
|
||
|
.INIT_66(INIT_66),
|
||
|
.INIT_67(INIT_67),
|
||
|
.INIT_68(INIT_68),
|
||
|
.INIT_69(INIT_69),
|
||
|
.INIT_6A(INIT_6A),
|
||
|
.INIT_6B(INIT_6B),
|
||
|
.INIT_6C(INIT_6C),
|
||
|
.INIT_6D(INIT_6D),
|
||
|
.INIT_6E(INIT_6E),
|
||
|
.INIT_6F(INIT_6F),
|
||
|
.INIT_70(INIT_70),
|
||
|
.INIT_71(INIT_71),
|
||
|
.INIT_72(INIT_72),
|
||
|
.INIT_73(INIT_73),
|
||
|
.INIT_74(INIT_74),
|
||
|
.INIT_75(INIT_75),
|
||
|
.INIT_76(INIT_76),
|
||
|
.INIT_77(INIT_77),
|
||
|
.INIT_78(INIT_78),
|
||
|
.INIT_79(INIT_79),
|
||
|
.INIT_7A(INIT_7A),
|
||
|
.INIT_7B(INIT_7B),
|
||
|
.INIT_7C(INIT_7C),
|
||
|
.INIT_7D(INIT_7D),
|
||
|
.INIT_7E(INIT_7E),
|
||
|
.INIT_7F(INIT_7F),
|
||
|
.INITP_00(INITP_00),
|
||
|
.INITP_01(INITP_01),
|
||
|
.INITP_02(INITP_02),
|
||
|
.INITP_03(INITP_03),
|
||
|
.INITP_04(INITP_04),
|
||
|
.INITP_05(INITP_05),
|
||
|
.INITP_06(INITP_06),
|
||
|
.INITP_07(INITP_07),
|
||
|
.INITP_08(INITP_08),
|
||
|
.INITP_09(INITP_09),
|
||
|
.INITP_0A(INITP_0A),
|
||
|
.INITP_0B(INITP_0B),
|
||
|
.INITP_0C(INITP_0C),
|
||
|
.INITP_0D(INITP_0D),
|
||
|
.INITP_0E(INITP_0E),
|
||
|
.INITP_0F(INITP_0F))
|
||
|
|
||
|
INT_RAMB_SDP (.ADDRA(ADDRARDADDR),
|
||
|
.ADDRB(ADDRBWRADDR),
|
||
|
.CASCADEINA(CASCADEINA),
|
||
|
.CASCADEINB(CASCADEINB),
|
||
|
.CASCADEOUTA(CASCADEOUTA),
|
||
|
.CASCADEOUTB(CASCADEOUTB),
|
||
|
.CLKA(CLKARDCLK),
|
||
|
.CLKB(CLKBWRCLK),
|
||
|
.DBITERR(DBITERR),
|
||
|
.DIA(64'b0),
|
||
|
.DIB({DIBDI,DIADI}),
|
||
|
.DIPA(4'b0),
|
||
|
.DIPB({DIPBDIP,DIPADIP}),
|
||
|
.DOA({DOBDO,DOADO}),
|
||
|
.DOB(dangle_out32),
|
||
|
.DOPA({DOPBDOP,DOPADOP}),
|
||
|
.DOPB(dangle_out4),
|
||
|
.ECCPARITY(ECCPARITY),
|
||
|
.ENA(ENARDEN),
|
||
|
.ENB(ENBWREN),
|
||
|
.GSR(GSR),
|
||
|
.INJECTDBITERR(INJECTDBITERR),
|
||
|
.INJECTSBITERR(INJECTSBITERR),
|
||
|
.RDADDRECC(RDADDRECC),
|
||
|
.REGCEA(REGCEAREGCE),
|
||
|
.REGCEB(REGCEB),
|
||
|
.RSTRAMA(RSTRAMARSTRAM),
|
||
|
.RSTRAMB(RSTRAMB),
|
||
|
.RSTREGA(RSTREGARSTREG),
|
||
|
.RSTREGB(RSTREGB),
|
||
|
.SBITERR(SBITERR),
|
||
|
.WEA(8'b0),
|
||
|
.WEB(WEBWE));
|
||
|
|
||
|
end // if (WRITE_WIDTH_B == 72)
|
||
|
else begin
|
||
|
|
||
|
RB36_INTERNAL_VLOG #(.RAM_MODE(RAM_MODE),
|
||
|
.INIT_A(init_sdp),
|
||
|
.INIT_B(init_sdp),
|
||
|
.INIT_FILE(INIT_FILE),
|
||
|
.SRVAL_A(srval_sdp),
|
||
|
.SRVAL_B(srval_sdp),
|
||
|
.READ_WIDTH_A(READ_WIDTH_A),
|
||
|
.READ_WIDTH_B(READ_WIDTH_A),
|
||
|
.WRITE_WIDTH_A(WRITE_WIDTH_B),
|
||
|
.WRITE_WIDTH_B(WRITE_WIDTH_B),
|
||
|
.WRITE_MODE_A(WRITE_MODE_A),
|
||
|
.WRITE_MODE_B(WRITE_MODE_B),
|
||
|
.RAM_EXTENSION_A(RAM_EXTENSION_A),
|
||
|
.RAM_EXTENSION_B(RAM_EXTENSION_B),
|
||
|
.RDADDR_COLLISION_HWCONFIG(RDADDR_COLLISION_HWCONFIG),
|
||
|
.SETUP_ALL(SETUP_ALL),
|
||
|
.SETUP_READ_FIRST(SETUP_READ_FIRST),
|
||
|
.SIM_COLLISION_CHECK(SIM_COLLISION_CHECK),
|
||
|
.SIM_DEVICE(SIM_DEVICE),
|
||
|
.EN_ECC_READ(EN_ECC_READ),
|
||
|
.EN_ECC_WRITE(EN_ECC_WRITE),
|
||
|
.DOA_REG(DOA_REG),
|
||
|
.DOB_REG(DOB_REG),
|
||
|
.RSTREG_PRIORITY_A(RSTREG_PRIORITY_A),
|
||
|
.RSTREG_PRIORITY_B(RSTREG_PRIORITY_B),
|
||
|
.INIT_00(INIT_00),
|
||
|
.INIT_01(INIT_01),
|
||
|
.INIT_02(INIT_02),
|
||
|
.INIT_03(INIT_03),
|
||
|
.INIT_04(INIT_04),
|
||
|
.INIT_05(INIT_05),
|
||
|
.INIT_06(INIT_06),
|
||
|
.INIT_07(INIT_07),
|
||
|
.INIT_08(INIT_08),
|
||
|
.INIT_09(INIT_09),
|
||
|
.INIT_0A(INIT_0A),
|
||
|
.INIT_0B(INIT_0B),
|
||
|
.INIT_0C(INIT_0C),
|
||
|
.INIT_0D(INIT_0D),
|
||
|
.INIT_0E(INIT_0E),
|
||
|
.INIT_0F(INIT_0F),
|
||
|
.INIT_10(INIT_10),
|
||
|
.INIT_11(INIT_11),
|
||
|
.INIT_12(INIT_12),
|
||
|
.INIT_13(INIT_13),
|
||
|
.INIT_14(INIT_14),
|
||
|
.INIT_15(INIT_15),
|
||
|
.INIT_16(INIT_16),
|
||
|
.INIT_17(INIT_17),
|
||
|
.INIT_18(INIT_18),
|
||
|
.INIT_19(INIT_19),
|
||
|
.INIT_1A(INIT_1A),
|
||
|
.INIT_1B(INIT_1B),
|
||
|
.INIT_1C(INIT_1C),
|
||
|
.INIT_1D(INIT_1D),
|
||
|
.INIT_1E(INIT_1E),
|
||
|
.INIT_1F(INIT_1F),
|
||
|
.INIT_20(INIT_20),
|
||
|
.INIT_21(INIT_21),
|
||
|
.INIT_22(INIT_22),
|
||
|
.INIT_23(INIT_23),
|
||
|
.INIT_24(INIT_24),
|
||
|
.INIT_25(INIT_25),
|
||
|
.INIT_26(INIT_26),
|
||
|
.INIT_27(INIT_27),
|
||
|
.INIT_28(INIT_28),
|
||
|
.INIT_29(INIT_29),
|
||
|
.INIT_2A(INIT_2A),
|
||
|
.INIT_2B(INIT_2B),
|
||
|
.INIT_2C(INIT_2C),
|
||
|
.INIT_2D(INIT_2D),
|
||
|
.INIT_2E(INIT_2E),
|
||
|
.INIT_2F(INIT_2F),
|
||
|
.INIT_30(INIT_30),
|
||
|
.INIT_31(INIT_31),
|
||
|
.INIT_32(INIT_32),
|
||
|
.INIT_33(INIT_33),
|
||
|
.INIT_34(INIT_34),
|
||
|
.INIT_35(INIT_35),
|
||
|
.INIT_36(INIT_36),
|
||
|
.INIT_37(INIT_37),
|
||
|
.INIT_38(INIT_38),
|
||
|
.INIT_39(INIT_39),
|
||
|
.INIT_3A(INIT_3A),
|
||
|
.INIT_3B(INIT_3B),
|
||
|
.INIT_3C(INIT_3C),
|
||
|
.INIT_3D(INIT_3D),
|
||
|
.INIT_3E(INIT_3E),
|
||
|
.INIT_3F(INIT_3F),
|
||
|
.INIT_40(INIT_40),
|
||
|
.INIT_41(INIT_41),
|
||
|
.INIT_42(INIT_42),
|
||
|
.INIT_43(INIT_43),
|
||
|
.INIT_44(INIT_44),
|
||
|
.INIT_45(INIT_45),
|
||
|
.INIT_46(INIT_46),
|
||
|
.INIT_47(INIT_47),
|
||
|
.INIT_48(INIT_48),
|
||
|
.INIT_49(INIT_49),
|
||
|
.INIT_4A(INIT_4A),
|
||
|
.INIT_4B(INIT_4B),
|
||
|
.INIT_4C(INIT_4C),
|
||
|
.INIT_4D(INIT_4D),
|
||
|
.INIT_4E(INIT_4E),
|
||
|
.INIT_4F(INIT_4F),
|
||
|
.INIT_50(INIT_50),
|
||
|
.INIT_51(INIT_51),
|
||
|
.INIT_52(INIT_52),
|
||
|
.INIT_53(INIT_53),
|
||
|
.INIT_54(INIT_54),
|
||
|
.INIT_55(INIT_55),
|
||
|
.INIT_56(INIT_56),
|
||
|
.INIT_57(INIT_57),
|
||
|
.INIT_58(INIT_58),
|
||
|
.INIT_59(INIT_59),
|
||
|
.INIT_5A(INIT_5A),
|
||
|
.INIT_5B(INIT_5B),
|
||
|
.INIT_5C(INIT_5C),
|
||
|
.INIT_5D(INIT_5D),
|
||
|
.INIT_5E(INIT_5E),
|
||
|
.INIT_5F(INIT_5F),
|
||
|
.INIT_60(INIT_60),
|
||
|
.INIT_61(INIT_61),
|
||
|
.INIT_62(INIT_62),
|
||
|
.INIT_63(INIT_63),
|
||
|
.INIT_64(INIT_64),
|
||
|
.INIT_65(INIT_65),
|
||
|
.INIT_66(INIT_66),
|
||
|
.INIT_67(INIT_67),
|
||
|
.INIT_68(INIT_68),
|
||
|
.INIT_69(INIT_69),
|
||
|
.INIT_6A(INIT_6A),
|
||
|
.INIT_6B(INIT_6B),
|
||
|
.INIT_6C(INIT_6C),
|
||
|
.INIT_6D(INIT_6D),
|
||
|
.INIT_6E(INIT_6E),
|
||
|
.INIT_6F(INIT_6F),
|
||
|
.INIT_70(INIT_70),
|
||
|
.INIT_71(INIT_71),
|
||
|
.INIT_72(INIT_72),
|
||
|
.INIT_73(INIT_73),
|
||
|
.INIT_74(INIT_74),
|
||
|
.INIT_75(INIT_75),
|
||
|
.INIT_76(INIT_76),
|
||
|
.INIT_77(INIT_77),
|
||
|
.INIT_78(INIT_78),
|
||
|
.INIT_79(INIT_79),
|
||
|
.INIT_7A(INIT_7A),
|
||
|
.INIT_7B(INIT_7B),
|
||
|
.INIT_7C(INIT_7C),
|
||
|
.INIT_7D(INIT_7D),
|
||
|
.INIT_7E(INIT_7E),
|
||
|
.INIT_7F(INIT_7F),
|
||
|
.INITP_00(INITP_00),
|
||
|
.INITP_01(INITP_01),
|
||
|
.INITP_02(INITP_02),
|
||
|
.INITP_03(INITP_03),
|
||
|
.INITP_04(INITP_04),
|
||
|
.INITP_05(INITP_05),
|
||
|
.INITP_06(INITP_06),
|
||
|
.INITP_07(INITP_07),
|
||
|
.INITP_08(INITP_08),
|
||
|
.INITP_09(INITP_09),
|
||
|
.INITP_0A(INITP_0A),
|
||
|
.INITP_0B(INITP_0B),
|
||
|
.INITP_0C(INITP_0C),
|
||
|
.INITP_0D(INITP_0D),
|
||
|
.INITP_0E(INITP_0E),
|
||
|
.INITP_0F(INITP_0F))
|
||
|
|
||
|
INT_RAMB_SDP (.ADDRA(ADDRARDADDR),
|
||
|
.ADDRB(ADDRBWRADDR),
|
||
|
.CASCADEINA(CASCADEINA),
|
||
|
.CASCADEINB(CASCADEINB),
|
||
|
.CASCADEOUTA(CASCADEOUTA),
|
||
|
.CASCADEOUTB(CASCADEOUTB),
|
||
|
.CLKA(CLKARDCLK),
|
||
|
.CLKB(CLKBWRCLK),
|
||
|
.DBITERR(DBITERR),
|
||
|
.DIA(64'b0),
|
||
|
.DIB({32'b0,DIBDI}),
|
||
|
.DIPA(4'b0),
|
||
|
.DIPB({4'b0,DIPBDIP}),
|
||
|
.DOA({DOBDO,DOADO}),
|
||
|
.DOB(dangle_out32),
|
||
|
.DOPA({DOPBDOP,DOPADOP}),
|
||
|
.DOPB(dangle_out4),
|
||
|
.ECCPARITY(ECCPARITY),
|
||
|
.ENA(ENARDEN),
|
||
|
.ENB(ENBWREN),
|
||
|
.GSR(GSR),
|
||
|
.INJECTDBITERR(INJECTDBITERR),
|
||
|
.INJECTSBITERR(INJECTSBITERR),
|
||
|
.RDADDRECC(RDADDRECC),
|
||
|
.REGCEA(REGCEAREGCE),
|
||
|
.REGCEB(REGCEB),
|
||
|
.RSTRAMA(RSTRAMARSTRAM),
|
||
|
.RSTRAMB(RSTRAMB),
|
||
|
.RSTREGA(RSTREGARSTREG),
|
||
|
.RSTREGB(RSTREGB),
|
||
|
.SBITERR(SBITERR),
|
||
|
.WEA(8'b0),
|
||
|
.WEB(WEBWE));
|
||
|
|
||
|
end // else: !if(WRITE_WIDTH_B == 72)
|
||
|
|
||
|
end // case: "SDP"
|
||
|
|
||
|
endcase // case(RAM_MODE)
|
||
|
endgenerate
|
||
|
|
||
|
|
||
|
wire ram_mode_wire = (RAM_MODE == "TDP") ? 1 : 0;
|
||
|
|
||
|
specify
|
||
|
|
||
|
(CLKARDCLK *> DOADO) = (100, 100);
|
||
|
(CLKARDCLK *> DOPADOP) = (100, 100);
|
||
|
(CLKARDCLK *> RDADDRECC) = (100, 100);
|
||
|
(CLKARDCLK => DBITERR) = (100, 100);
|
||
|
(CLKARDCLK => SBITERR) = (100, 100);
|
||
|
|
||
|
if (ram_mode_wire == 0) (CLKARDCLK *> DOBDO) = (100, 100);
|
||
|
if (ram_mode_wire == 0) (CLKARDCLK *> DOPBDOP) = (100, 100);
|
||
|
|
||
|
if (ram_mode_wire == 1) (CLKBWRCLK *> DOBDO) = (100, 100);
|
||
|
if (ram_mode_wire == 1) (CLKBWRCLK *> DOPBDOP) = (100, 100);
|
||
|
|
||
|
(CLKBWRCLK *> ECCPARITY) = (100, 100);
|
||
|
(CASCADEINA => DOADO[0]) = (0, 0);
|
||
|
(CASCADEINB => DOBDO[0]) = (0, 0);
|
||
|
(CLKARDCLK => CASCADEOUTA) = (100, 100);
|
||
|
(CLKBWRCLK => CASCADEOUTB) = (100, 100);
|
||
|
|
||
|
specparam PATHPULSE$ = 0;
|
||
|
|
||
|
endspecify
|
||
|
|
||
|
endmodule // RAMB36E1
|
||
|
|
||
|
|
||
|
// WARNING !!!: The following model is not an user primitive.
|
||
|
// Please do not modify any part of it. RAMB36E1 may not work properly if do so.
|
||
|
//
|
||
|
`timescale 1 ps/1 ps
|
||
|
|
||
|
module RB36_INTERNAL_VLOG (CASCADEOUTA, CASCADEOUTB, DBITERR, DOA, DOB, DOPA, DOPB, ECCPARITY, RDADDRECC, SBITERR,
|
||
|
ADDRA, ADDRB, CASCADEINA, CASCADEINB, CLKA, CLKB, DIA, DIB, DIPA, DIPB, ENA, ENB, GSR, INJECTDBITERR, INJECTSBITERR, REGCEA, REGCEB, RSTRAMA, RSTRAMB, RSTREGA, RSTREGB, WEA, WEB);
|
||
|
|
||
|
output CASCADEOUTA;
|
||
|
output CASCADEOUTB;
|
||
|
output SBITERR, DBITERR;
|
||
|
output [8:0] RDADDRECC;
|
||
|
output [63:0] DOA;
|
||
|
output [31:0] DOB;
|
||
|
output [7:0] DOPA;
|
||
|
output [3:0] DOPB;
|
||
|
output [7:0] ECCPARITY;
|
||
|
|
||
|
input ENA, CLKA, CASCADEINA, REGCEA;
|
||
|
input ENB, CLKB, CASCADEINB, REGCEB;
|
||
|
input GSR;
|
||
|
input RSTRAMA, RSTRAMB;
|
||
|
input RSTREGA, RSTREGB;
|
||
|
input INJECTDBITERR, INJECTSBITERR;
|
||
|
input [15:0] ADDRA;
|
||
|
input [15:0] ADDRB;
|
||
|
input [63:0] DIA;
|
||
|
input [63:0] DIB;
|
||
|
input [3:0] DIPA;
|
||
|
input [7:0] DIPB;
|
||
|
input [7:0] WEA;
|
||
|
input [7:0] WEB;
|
||
|
|
||
|
parameter DOA_REG = 0;
|
||
|
parameter DOB_REG = 0;
|
||
|
parameter EN_ECC_READ = "FALSE";
|
||
|
parameter EN_ECC_WRITE = "FALSE";
|
||
|
parameter INIT_A = 72'h0;
|
||
|
parameter INIT_B = 72'h0;
|
||
|
parameter RAM_EXTENSION_A = "NONE";
|
||
|
parameter RAM_EXTENSION_B = "NONE";
|
||
|
parameter RAM_MODE = "TDP";
|
||
|
parameter RDADDR_COLLISION_HWCONFIG = "DELAYED_WRITE";
|
||
|
parameter READ_WIDTH_A = 0;
|
||
|
parameter READ_WIDTH_B = 0;
|
||
|
parameter RSTREG_PRIORITY_A = "RSTREG";
|
||
|
parameter RSTREG_PRIORITY_B = "RSTREG";
|
||
|
parameter SETUP_ALL = 1000;
|
||
|
parameter SETUP_READ_FIRST = 3000;
|
||
|
parameter SIM_COLLISION_CHECK = "ALL";
|
||
|
parameter SIM_DEVICE = "VIRTEX6";
|
||
|
parameter SRVAL_A = 72'h0;
|
||
|
parameter SRVAL_B = 72'h0;
|
||
|
parameter WRITE_MODE_A = "WRITE_FIRST";
|
||
|
parameter WRITE_MODE_B = "WRITE_FIRST";
|
||
|
parameter WRITE_WIDTH_A = 0;
|
||
|
parameter WRITE_WIDTH_B = 0;
|
||
|
parameter INIT_FILE = "NONE";
|
||
|
|
||
|
parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_40 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_41 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_42 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_43 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_44 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_45 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_46 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_47 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_48 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_49 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_4A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_4B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_4C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_4D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_4E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_4F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_50 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_51 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_52 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_53 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_54 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_55 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_56 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_57 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_58 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_59 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_5A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_5B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_5C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_5D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_5E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_5F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_60 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_61 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_62 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_63 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_64 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_65 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_66 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_67 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_68 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_69 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_6A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_6B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_6C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_6D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_6E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_6F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_70 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_71 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_72 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_73 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_74 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_75 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_76 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_77 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_78 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_79 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_7A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_7B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_7C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_7D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
parameter INITP_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||
|
|
||
|
// xilinx_internal_parameter on
|
||
|
// WARNING !!!: This model may not work properly if the following parameters are changed.
|
||
|
parameter BRAM_SIZE = 36;
|
||
|
// xilinx_internal_parameter off
|
||
|
|
||
|
|
||
|
integer count, countp, init_mult, initp_mult, large_width;
|
||
|
integer count1, countp1, i, i1, j, j1, i_p, i_mem, init_offset, initp_offset;
|
||
|
integer viol_time = 0;
|
||
|
integer rdaddr_collision_hwconfig_int, rstreg_priority_a_int, rstreg_priority_b_int;
|
||
|
integer ram_mode_int, en_ecc_write_int, en_ecc_read_int;
|
||
|
integer chk_ox_same_clk = 0, chk_ox_msg = 0, chk_col_same_clk = 0;
|
||
|
|
||
|
reg addra_in_15_reg_bram, addrb_in_15_reg_bram;
|
||
|
reg addra_in_15_reg, addrb_in_15_reg;
|
||
|
reg addra_in_15_reg1, addrb_in_15_reg1;
|
||
|
reg junk1;
|
||
|
reg [1:0] wr_mode_a, wr_mode_b, cascade_a, cascade_b;
|
||
|
reg [63:0] doa_out = 64'b0, doa_buf = 64'b0, doa_outreg = 64'b0, doa_out_out;
|
||
|
reg [31:0] dob_out = 32'b0, dob_buf = 32'b0, dob_outreg = 32'b0, dob_out_out;
|
||
|
reg [3:0] dopb_out = 4'b0, dopb_buf = 4'b0, dopb_outreg = 4'b0, dopb_out_out;
|
||
|
reg [7:0] dopa_out = 8'b0, dopa_buf = 8'b0, dopa_outreg = 8'b0, dopa_out_out;
|
||
|
reg [63:0] doa_out_mux = 64'b0, doa_outreg_mux = 64'b0;
|
||
|
reg [7:0] dopa_out_mux = 8'b0, dopa_outreg_mux = 8'b0;
|
||
|
reg [63:0] dob_out_mux = 64'b0, dob_outreg_mux = 64'b0;
|
||
|
reg [7:0] dopb_out_mux = 8'b0, dopb_outreg_mux = 8'b0;
|
||
|
|
||
|
reg [7:0] eccparity_out = 8'b0;
|
||
|
reg [7:0] dopr_ecc, syndrome = 8'b0;
|
||
|
reg [7:0] dipb_in_ecc;
|
||
|
reg [71:0] ecc_bit_position;
|
||
|
reg [7:0] dip_ecc, dip_ecc_col, dipa_in_ecc_corrected;
|
||
|
reg [63:0] dib_in_ecc, dib_ecc_col, dia_in_ecc_corrected, di_x = 64'bx;
|
||
|
reg dbiterr_out = 0, sbiterr_out = 0;
|
||
|
reg dbiterr_outreg = 0, sbiterr_outreg = 0;
|
||
|
reg dbiterr_out_out = 0, sbiterr_out_out = 0;
|
||
|
|
||
|
reg [7:0] wea_reg;
|
||
|
reg enb_reg;
|
||
|
reg [7:0] out_a = 8'b0, out_b = 8'b0, junk, web_reg;
|
||
|
reg outp_a = 1'b0, outp_b = 1'b0, junkp;
|
||
|
reg rising_clka = 1'b0, rising_clkb = 1'b0;
|
||
|
reg [15:0] addra_reg, addrb_reg;
|
||
|
|
||
|
reg [63:0] dia_reg, dib_reg;
|
||
|
reg [3:0] dipa_reg;
|
||
|
reg [7:0] dipb_reg;
|
||
|
reg [1:0] viol_type = 2'b00;
|
||
|
reg col_wr_wr_msg = 1, col_wra_rdb_msg = 1, col_wrb_rda_msg = 1;
|
||
|
reg [8:0] rdaddrecc_out = 9'b0, rdaddrecc_outreg = 9'b0;
|
||
|
reg [8:0] rdaddrecc_out_out = 9'b0;
|
||
|
reg finish_error = 0;
|
||
|
|
||
|
time time_port_a, time_port_b;
|
||
|
|
||
|
wire [63:0] dib_in;
|
||
|
wire [63:0] dia_in;
|
||
|
wire [15:0] addra_in, addrb_in;
|
||
|
wire clka_in, clkb_in;
|
||
|
wire [7:0] dipb_in;
|
||
|
wire [3:0] dipa_in;
|
||
|
wire ena_in, enb_in, gsr_in, regcea_in, regceb_in, rstrama_in, rstramb_in;
|
||
|
wire [7:0] wea_in;
|
||
|
wire [7:0] web_in;
|
||
|
wire cascadeina_in, cascadeinb_in;
|
||
|
wire injectdbiterr_in, injectsbiterr_in;
|
||
|
wire rstrega_in, rstregb_in;
|
||
|
wire [15:0] ox_addra_reconstruct, ox_addrb_reconstruct;
|
||
|
reg [15:0] ox_addra_reconstruct_reg, ox_addrb_reconstruct_reg;
|
||
|
|
||
|
wire temp_wire; // trigger NCsim at initial time
|
||
|
assign temp_wire = 1;
|
||
|
|
||
|
time time_clka_period, time_clkb_period, time_period;
|
||
|
reg time_skew_a_flag = 0;
|
||
|
reg time_skew_b_flag = 0;
|
||
|
|
||
|
assign addra_in = ADDRA;
|
||
|
assign addrb_in = ADDRB;
|
||
|
assign clka_in = CLKA;
|
||
|
assign clkb_in = CLKB;
|
||
|
|
||
|
assign dia_in = DIA;
|
||
|
assign dib_in = DIB;
|
||
|
assign dipa_in = DIPA;
|
||
|
assign dipb_in = DIPB;
|
||
|
assign DOA = doa_out_out;
|
||
|
|
||
|
assign DOPA = dopa_out_out;
|
||
|
assign DOB = dob_out_out;
|
||
|
assign DOPB = dopb_out_out;
|
||
|
|
||
|
assign ena_in = ENA;
|
||
|
assign enb_in = ENB;
|
||
|
assign gsr_in = GSR;
|
||
|
assign regcea_in = REGCEA;
|
||
|
assign regceb_in = REGCEB;
|
||
|
assign rstrama_in = RSTRAMA;
|
||
|
assign rstramb_in = RSTRAMB;
|
||
|
assign wea_in = WEA;
|
||
|
assign web_in = WEB;
|
||
|
assign cascadeina_in = CASCADEINA;
|
||
|
assign cascadeinb_in = CASCADEINB;
|
||
|
assign CASCADEOUTA = doa_out_out[0];
|
||
|
assign CASCADEOUTB = dob_out_out[0];
|
||
|
assign SBITERR = sbiterr_out_out;
|
||
|
assign DBITERR = dbiterr_out_out;
|
||
|
assign ECCPARITY = eccparity_out;
|
||
|
assign RDADDRECC = rdaddrecc_out_out;
|
||
|
assign injectdbiterr_in = INJECTDBITERR;
|
||
|
assign injectsbiterr_in = INJECTSBITERR;
|
||
|
assign rstrega_in = RSTREGA;
|
||
|
assign rstregb_in = RSTREGB;
|
||
|
|
||
|
|
||
|
localparam sync_clk_skew = (SIM_DEVICE == "7SERIES") ? 50 : 100;
|
||
|
|
||
|
|
||
|
// Determine memory size
|
||
|
localparam widest_width = (WRITE_WIDTH_A >= WRITE_WIDTH_B && WRITE_WIDTH_A >= READ_WIDTH_A &&
|
||
|
WRITE_WIDTH_A >= READ_WIDTH_B) ? WRITE_WIDTH_A :
|
||
|
(WRITE_WIDTH_B >= WRITE_WIDTH_A && WRITE_WIDTH_B >= READ_WIDTH_A &&
|
||
|
WRITE_WIDTH_B >= READ_WIDTH_B) ? WRITE_WIDTH_B :
|
||
|
(READ_WIDTH_A >= WRITE_WIDTH_A && READ_WIDTH_A >= WRITE_WIDTH_B &&
|
||
|
READ_WIDTH_A >= READ_WIDTH_B) ? READ_WIDTH_A :
|
||
|
(READ_WIDTH_B >= WRITE_WIDTH_A && READ_WIDTH_B >= WRITE_WIDTH_B &&
|
||
|
READ_WIDTH_B >= READ_WIDTH_A) ? READ_WIDTH_B : 64;
|
||
|
|
||
|
localparam wa_width = (WRITE_WIDTH_A == 1) ? 1 : (WRITE_WIDTH_A == 2) ? 2 : (WRITE_WIDTH_A == 4) ? 4 :
|
||
|
(WRITE_WIDTH_A == 9) ? 8 : (WRITE_WIDTH_A == 18) ? 16 : (WRITE_WIDTH_A == 36) ? 32 :
|
||
|
(WRITE_WIDTH_A == 72) ? 64 : 64;
|
||
|
|
||
|
localparam wb_width = (WRITE_WIDTH_B == 1) ? 1 : (WRITE_WIDTH_B == 2) ? 2 : (WRITE_WIDTH_B == 4) ? 4 :
|
||
|
(WRITE_WIDTH_B == 9) ? 8 : (WRITE_WIDTH_B == 18) ? 16 : (WRITE_WIDTH_B == 36) ? 32 :
|
||
|
(WRITE_WIDTH_B == 72) ? 64 : 64;
|
||
|
|
||
|
|
||
|
localparam wa_widthp = (WRITE_WIDTH_A == 9) ? 1 : (WRITE_WIDTH_A == 18) ? 2 : (WRITE_WIDTH_A == 36) ? 4 :
|
||
|
(WRITE_WIDTH_A == 72) ? 8 : 8;
|
||
|
|
||
|
localparam wb_widthp = (WRITE_WIDTH_B == 9) ? 1 : (WRITE_WIDTH_B == 18) ? 2 : (WRITE_WIDTH_B == 36) ? 4 :
|
||
|
(WRITE_WIDTH_B == 72) ? 8 : 8;
|
||
|
|
||
|
localparam ra_width = (READ_WIDTH_A == 1) ? 1 : (READ_WIDTH_A == 2) ? 2 : (READ_WIDTH_A == 4) ? 4 :
|
||
|
(READ_WIDTH_A == 9) ? 8 : (READ_WIDTH_A == 18) ? 16 : (READ_WIDTH_A == 36) ? 32 :
|
||
|
(READ_WIDTH_A == 72) ? 64 : (READ_WIDTH_A == 0) ? ((READ_WIDTH_B == 1) ? 1 :
|
||
|
(READ_WIDTH_B == 2) ? 2 : (READ_WIDTH_B == 4) ? 4 : (READ_WIDTH_B == 9) ? 8 :
|
||
|
(READ_WIDTH_B == 18) ? 16 : (READ_WIDTH_B == 36) ? 32 : (READ_WIDTH_B == 72) ? 64 : 64) : 64;
|
||
|
|
||
|
localparam rb_width = (READ_WIDTH_B == 1) ? 1 : (READ_WIDTH_B == 2) ? 2 : (READ_WIDTH_B == 4) ? 4 :
|
||
|
(READ_WIDTH_B == 9) ? 8 : (READ_WIDTH_B == 18) ? 16 : (READ_WIDTH_B == 36) ? 32 :
|
||
|
(READ_WIDTH_B == 72) ? 64 : (READ_WIDTH_B == 0) ? ((READ_WIDTH_A == 1) ? 1 :
|
||
|
(READ_WIDTH_A == 2) ? 2 : (READ_WIDTH_A == 4) ? 4 : (READ_WIDTH_A == 9) ? 8 :
|
||
|
(READ_WIDTH_A == 18) ? 16 : (READ_WIDTH_A == 36) ? 32 : (READ_WIDTH_A == 72) ? 64 : 64) : 64;
|
||
|
|
||
|
localparam ra_widthp = (READ_WIDTH_A == 9) ? 1 : (READ_WIDTH_A == 18) ? 2 : (READ_WIDTH_A == 36) ? 4 :
|
||
|
(READ_WIDTH_A == 72) ? 8 : 8;
|
||
|
|
||
|
localparam rb_widthp = (READ_WIDTH_B == 9) ? 1 : (READ_WIDTH_B == 18) ? 2 : (READ_WIDTH_B == 36) ? 4 :
|
||
|
(READ_WIDTH_B == 72) ? 8 : 8;
|
||
|
|
||
|
localparam col_addr_lsb = (widest_width == 1) ? 0 : (widest_width == 2) ? 1 : (widest_width == 4) ? 2 :
|
||
|
(widest_width == 9) ? 3 : (widest_width == 18) ? 4 : (widest_width == 36) ? 5 :
|
||
|
(widest_width == 72) ? 6 : 0;
|
||
|
|
||
|
assign ox_addra_reconstruct[15:0] = (WRITE_MODE_A == "READ_FIRST" || WRITE_MODE_B == "READ_FIRST") ?
|
||
|
((BRAM_SIZE == 36) ? {1'b0,addra_in[14:8],8'b0} :
|
||
|
(BRAM_SIZE == 18) ? {2'b0,addra_in[13:7],7'b0} : addra_in) : addra_in;
|
||
|
|
||
|
assign ox_addrb_reconstruct[15:0] = (WRITE_MODE_A == "READ_FIRST" || WRITE_MODE_B == "READ_FIRST") ?
|
||
|
((BRAM_SIZE == 36) ? {1'b0,addrb_in[14:8],8'b0} :
|
||
|
(BRAM_SIZE == 18) ? {2'b0,addrb_in[13:7],7'b0} : addrb_in) : addrb_in;
|
||
|
|
||
|
localparam width = (widest_width == 1) ? 1 : (widest_width == 2) ? 2 : (widest_width == 4) ? 4 :
|
||
|
(widest_width == 9) ? 8 : (widest_width == 18) ? 16 : (widest_width == 36) ? 32 :
|
||
|
(widest_width == 72) ? 64 : 64;
|
||
|
|
||
|
localparam widthp = (widest_width == 9) ? 1 : (widest_width == 18) ? 2 : (widest_width == 36) ? 4 :
|
||
|
(widest_width == 72) ? 8 : 8;
|
||
|
|
||
|
|
||
|
localparam r_addra_lbit_124 = (READ_WIDTH_A == 1) ? 0 : (READ_WIDTH_A == 2) ? 1 :
|
||
|
(READ_WIDTH_A == 4) ? 2 : (READ_WIDTH_A == 9) ? 3 :
|
||
|
(READ_WIDTH_A == 18) ? 4 : (READ_WIDTH_A == 36) ? 5 :
|
||
|
(READ_WIDTH_A == 72) ? 6 : (READ_WIDTH_A == 0) ?
|
||
|
((READ_WIDTH_B == 1) ? 0 : (READ_WIDTH_B == 2) ? 1 :
|
||
|
(READ_WIDTH_B == 4) ? 2 : (READ_WIDTH_B == 9) ? 3 :
|
||
|
(READ_WIDTH_B == 18) ? 4 : (READ_WIDTH_B == 36) ? 5 :
|
||
|
(READ_WIDTH_B == 72) ? 6 : 10) : 10;
|
||
|
|
||
|
localparam r_addrb_lbit_124 = (READ_WIDTH_B == 1) ? 0 : (READ_WIDTH_B == 2) ? 1 :
|
||
|
(READ_WIDTH_B == 4) ? 2 : (READ_WIDTH_B == 9) ? 3 :
|
||
|
(READ_WIDTH_B == 18) ? 4 : (READ_WIDTH_B == 36) ? 5 :
|
||
|
(READ_WIDTH_B == 72) ? 6 : (READ_WIDTH_B == 0) ?
|
||
|
((READ_WIDTH_A == 1) ? 0 : (READ_WIDTH_A == 2) ? 1 :
|
||
|
(READ_WIDTH_A == 4) ? 2 : (READ_WIDTH_A == 9) ? 3 :
|
||
|
(READ_WIDTH_A == 18) ? 4 : (READ_WIDTH_A == 36) ? 5 :
|
||
|
(READ_WIDTH_A == 72) ? 6 : 10) : 10;
|
||
|
|
||
|
localparam addra_lbit_124 = (WRITE_WIDTH_A == 1) ? 0 : (WRITE_WIDTH_A == 2) ? 1 :
|
||
|
(WRITE_WIDTH_A == 4) ? 2 : (WRITE_WIDTH_A == 9) ? 3 :
|
||
|
(WRITE_WIDTH_A == 18) ? 4 : (WRITE_WIDTH_A == 36) ? 5 :
|
||
|
(WRITE_WIDTH_A == 72) ? 6 : 10;
|
||
|
|
||
|
localparam addrb_lbit_124 = (WRITE_WIDTH_B == 1) ? 0 : (WRITE_WIDTH_B == 2) ? 1 :
|
||
|
(WRITE_WIDTH_B == 4) ? 2 : (WRITE_WIDTH_B == 9) ? 3 :
|
||
|
(WRITE_WIDTH_B == 18) ? 4 : (WRITE_WIDTH_B == 36) ? 5 :
|
||
|
(WRITE_WIDTH_B == 72) ? 6 : 10;
|
||
|
|
||
|
localparam addra_bit_124 = (WRITE_WIDTH_A == 1 && widest_width == 2) ? 0 : (WRITE_WIDTH_A == 1 && widest_width == 4) ? 1 :
|
||
|
(WRITE_WIDTH_A == 1 && widest_width == 9) ? 2 : (WRITE_WIDTH_A == 1 && widest_width == 18) ? 3 :
|
||
|
(WRITE_WIDTH_A == 1 && widest_width == 36) ? 4 : (WRITE_WIDTH_A == 1 && widest_width == 72) ? 5 :
|
||
|
(WRITE_WIDTH_A == 2 && widest_width == 4) ? 1 : (WRITE_WIDTH_A == 2 && widest_width == 9) ? 2 :
|
||
|
(WRITE_WIDTH_A == 2 && widest_width == 18) ? 3 : (WRITE_WIDTH_A == 2 && widest_width == 36) ? 4 :
|
||
|
(WRITE_WIDTH_A == 2 && widest_width == 72) ? 5 : (WRITE_WIDTH_A == 4 && widest_width == 9) ? 2 :
|
||
|
(WRITE_WIDTH_A == 4 && widest_width == 18) ? 3 : (WRITE_WIDTH_A == 4 && widest_width == 36) ? 4 :
|
||
|
(WRITE_WIDTH_A == 4 && widest_width == 72) ? 5 : 10;
|
||
|
|
||
|
localparam r_addra_bit_124 = (READ_WIDTH_A == 1 && widest_width == 2) ? 0 : (READ_WIDTH_A == 1 && widest_width == 4) ? 1 :
|
||
|
(READ_WIDTH_A == 1 && widest_width == 9) ? 2 : (READ_WIDTH_A == 1 && widest_width == 18) ? 3 :
|
||
|
(READ_WIDTH_A == 1 && widest_width == 36) ? 4 : (READ_WIDTH_A == 1 && widest_width == 72) ? 5 :
|
||
|
(READ_WIDTH_A == 2 && widest_width == 4) ? 1 : (READ_WIDTH_A == 2 && widest_width == 9) ? 2 :
|
||
|
(READ_WIDTH_A == 2 && widest_width == 18) ? 3 : (READ_WIDTH_A == 2 && widest_width == 36) ? 4 :
|
||
|
(READ_WIDTH_A == 2 && widest_width == 72) ? 5 : (READ_WIDTH_A == 4 && widest_width == 9) ? 2 :
|
||
|
(READ_WIDTH_A == 4 && widest_width == 18) ? 3 : (READ_WIDTH_A == 4 && widest_width == 36) ? 4 :
|
||
|
(READ_WIDTH_A == 4 && widest_width == 72) ? 5 : (READ_WIDTH_A == 0) ?
|
||
|
((READ_WIDTH_B == 1 && widest_width == 2) ? 0 : (READ_WIDTH_B == 1 && widest_width == 4) ? 1 :
|
||
|
(READ_WIDTH_B == 1 && widest_width == 9) ? 2 : (READ_WIDTH_B == 1 && widest_width == 18) ? 3 :
|
||
|
(READ_WIDTH_B == 1 && widest_width == 36) ? 4 : (READ_WIDTH_B == 1 && widest_width == 72) ? 5 :
|
||
|
(READ_WIDTH_B == 2 && widest_width == 4) ? 1 : (READ_WIDTH_B == 2 && widest_width == 9) ? 2 :
|
||
|
(READ_WIDTH_B == 2 && widest_width == 18) ? 3 : (READ_WIDTH_B == 2 && widest_width == 36) ? 4 :
|
||
|
(READ_WIDTH_B == 2 && widest_width == 72) ? 5 : (READ_WIDTH_B == 4 && widest_width == 9) ? 2 :
|
||
|
(READ_WIDTH_B == 4 && widest_width == 18) ? 3 : (READ_WIDTH_B == 4 && widest_width == 36) ? 4 :
|
||
|
(READ_WIDTH_B == 4 && widest_width == 72) ? 5 : 10) : 10;
|
||
|
|
||
|
localparam addrb_bit_124 = (WRITE_WIDTH_B == 1 && widest_width == 2) ? 0 : (WRITE_WIDTH_B == 1 && widest_width == 4) ? 1 :
|
||
|
(WRITE_WIDTH_B == 1 && widest_width == 9) ? 2 : (WRITE_WIDTH_B == 1 && widest_width == 18) ? 3 :
|
||
|
(WRITE_WIDTH_B == 1 && widest_width == 36) ? 4 : (WRITE_WIDTH_B == 1 && widest_width == 72) ? 5 :
|
||
|
(WRITE_WIDTH_B == 2 && widest_width == 4) ? 1 : (WRITE_WIDTH_B == 2 && widest_width == 9) ? 2 :
|
||
|
(WRITE_WIDTH_B == 2 && widest_width == 18) ? 3 : (WRITE_WIDTH_B == 2 && widest_width == 36) ? 4 :
|
||
|
(WRITE_WIDTH_B == 2 && widest_width == 72) ? 5 : (WRITE_WIDTH_B == 4 && widest_width == 9) ? 2 :
|
||
|
(WRITE_WIDTH_B == 4 && widest_width == 18) ? 3 : (WRITE_WIDTH_B == 4 && widest_width == 36) ? 4 :
|
||
|
(WRITE_WIDTH_B == 4 && widest_width == 72) ? 5 : 10;
|
||
|
|
||
|
localparam r_addrb_bit_124 = (READ_WIDTH_B == 1 && widest_width == 2) ? 0 : (READ_WIDTH_B == 1 && widest_width == 4) ? 1 :
|
||
|
(READ_WIDTH_B == 1 && widest_width == 9) ? 2 : (READ_WIDTH_B == 1 && widest_width == 18) ? 3 :
|
||
|
(READ_WIDTH_B == 1 && widest_width == 36) ? 4 : (READ_WIDTH_B == 1 && widest_width == 72) ? 5 :
|
||
|
(READ_WIDTH_B == 2 && widest_width == 4) ? 1 : (READ_WIDTH_B == 2 && widest_width == 9) ? 2 :
|
||
|
(READ_WIDTH_B == 2 && widest_width == 18) ? 3 : (READ_WIDTH_B == 2 && widest_width == 36) ? 4 :
|
||
|
(READ_WIDTH_B == 2 && widest_width == 72) ? 5 : (READ_WIDTH_B == 4 && widest_width == 9) ? 2 :
|
||
|
(READ_WIDTH_B == 4 && widest_width == 18) ? 3 : (READ_WIDTH_B == 4 && widest_width == 36) ? 4 :
|
||
|
(READ_WIDTH_B == 4 && widest_width == 72) ? 5 : (READ_WIDTH_B == 0) ?
|
||
|
((READ_WIDTH_A == 1 && widest_width == 2) ? 0 : (READ_WIDTH_A == 1 && widest_width == 4) ? 1 :
|
||
|
(READ_WIDTH_A == 1 && widest_width == 9) ? 2 : (READ_WIDTH_A == 1 && widest_width == 18) ? 3 :
|
||
|
(READ_WIDTH_A == 1 && widest_width == 36) ? 4 : (READ_WIDTH_A == 1 && widest_width == 72) ? 5 :
|
||
|
(READ_WIDTH_A == 2 && widest_width == 4) ? 1 : (READ_WIDTH_A == 2 && widest_width == 9) ? 2 :
|
||
|
(READ_WIDTH_A == 2 && widest_width == 18) ? 3 : (READ_WIDTH_A == 2 && widest_width == 36) ? 4 :
|
||
|
(READ_WIDTH_A == 2 && widest_width == 72) ? 5 : (READ_WIDTH_A == 4 && widest_width == 9) ? 2 :
|
||
|
(READ_WIDTH_A == 4 && widest_width == 18) ? 3 : (READ_WIDTH_A == 4 && widest_width == 36) ? 4 :
|
||
|
(READ_WIDTH_A == 4 && widest_width == 72) ? 5 : 10) : 10;
|
||
|
|
||
|
localparam addra_bit_8 = (WRITE_WIDTH_A == 9 && widest_width == 18) ? 3 : (WRITE_WIDTH_A == 9 && widest_width == 36) ? 4 :
|
||
|
(WRITE_WIDTH_A == 9 && widest_width == 72) ? 5 : 10;
|
||
|
|
||
|
localparam addra_bit_16 = (WRITE_WIDTH_A == 18 && widest_width == 36) ? 4 : (WRITE_WIDTH_A == 18 && widest_width == 72) ? 5 : 10;
|
||
|
|
||
|
localparam r_addra_bit_8 = (READ_WIDTH_A == 9 && widest_width == 18) ? 3 : (READ_WIDTH_A == 9 && widest_width == 36) ? 4 :
|
||
|
(READ_WIDTH_A == 9 && widest_width == 72) ? 5 : (READ_WIDTH_A == 0) ? ((READ_WIDTH_B == 9 && widest_width == 18) ? 3 :
|
||
|
(READ_WIDTH_B == 9 && widest_width == 36) ? 4 : (READ_WIDTH_B == 9 && widest_width == 72) ? 5 : 10) : 10;
|
||
|
|
||
|
localparam r_addra_bit_16 = (READ_WIDTH_A == 18 && widest_width == 36) ? 4 : (READ_WIDTH_A == 18 && widest_width == 72) ? 5 :
|
||
|
(READ_WIDTH_A == 0) ? ((READ_WIDTH_B == 18 && widest_width == 36) ? 4 :
|
||
|
(READ_WIDTH_B == 18 && widest_width == 72) ? 5 : 10) : 10;
|
||
|
|
||
|
localparam r_addra_bit_32 = (READ_WIDTH_A == 36 && widest_width == 72) ? 5 :
|
||
|
(READ_WIDTH_A == 0) ? ((READ_WIDTH_B == 36 && widest_width == 72) ? 5 : 10) : 10;
|
||
|
|
||
|
localparam addrb_bit_8 = (WRITE_WIDTH_B == 9 && widest_width == 18) ? 3 : (WRITE_WIDTH_B == 9 && widest_width == 36) ? 4 :
|
||
|
(WRITE_WIDTH_B == 9 && widest_width == 72) ? 5 : 10;
|
||
|
|
||
|
localparam addrb_bit_16 = (WRITE_WIDTH_B == 18 && widest_width == 36) ? 4 : (WRITE_WIDTH_B == 18 && widest_width == 72) ? 5 : 10;
|
||
|
|
||
|
localparam addrb_bit_32 = (WRITE_WIDTH_B == 36 && widest_width == 72) ? 5 : 10;
|
||
|
|
||
|
localparam r_addrb_bit_8 = (READ_WIDTH_B == 9 && widest_width == 18) ? 3 : (READ_WIDTH_B == 9 && widest_width == 36) ? 4 :
|
||
|
(READ_WIDTH_B == 9 && widest_width == 72) ? 5 : (READ_WIDTH_B == 0) ? ((READ_WIDTH_A == 9 && widest_width == 18) ? 3 :
|
||
|
(READ_WIDTH_A == 9 && widest_width == 36) ? 4 : (READ_WIDTH_A == 9 && widest_width == 72) ? 5 : 10) : 10;
|
||
|
|
||
|
localparam r_addrb_bit_16 = (READ_WIDTH_B == 18 && widest_width == 36) ? 4 : (READ_WIDTH_B == 18 && widest_width == 72) ? 5 :
|
||
|
(READ_WIDTH_B == 0) ? ((READ_WIDTH_A == 18 && widest_width == 36) ? 4 :
|
||
|
(READ_WIDTH_A == 18 && widest_width == 72) ? 5 : 10) : 10;
|
||
|
|
||
|
localparam r_addrb_bit_32 = (READ_WIDTH_B == 36 && widest_width == 72) ? 5 :
|
||
|
(READ_WIDTH_B == 0) ? ((READ_WIDTH_A == 36 && widest_width == 72) ? 5 : 10) : 10;
|
||
|
|
||
|
localparam mem_size1 = (BRAM_SIZE == 18) ? 16384 : (BRAM_SIZE == 36) ? 32768 : 32768;
|
||
|
localparam mem_size2 = (BRAM_SIZE == 18) ? 8192 : (BRAM_SIZE == 36) ? 16384 : 16384;
|
||
|
localparam mem_size4 = (BRAM_SIZE == 18) ? 4096 : (BRAM_SIZE == 36) ? 8192 : 8192;
|
||
|
localparam mem_size9 = (BRAM_SIZE == 18) ? 2048 : (BRAM_SIZE == 36) ? 4096 : 4096;
|
||
|
localparam mem_size18 = (BRAM_SIZE == 18) ? 1024 : (BRAM_SIZE == 36) ? 2048 : 2048;
|
||
|
localparam mem_size36 = (BRAM_SIZE == 18) ? 512 : (BRAM_SIZE == 36) ? 1024 : 1024;
|
||
|
localparam mem_size72 = (BRAM_SIZE == 18) ? 0 : (BRAM_SIZE == 36) ? 512 : 512;
|
||
|
|
||
|
localparam mem_depth = (widest_width == 1) ? mem_size1 : (widest_width == 2) ? mem_size2 : (widest_width == 4) ? mem_size4 :
|
||
|
(widest_width == 9) ? mem_size9 :(widest_width == 18) ? mem_size18 : (widest_width == 36) ? mem_size36 :
|
||
|
(widest_width == 72) ? mem_size72 : 32768;
|
||
|
|
||
|
localparam memp_depth = (widest_width == 9) ? mem_size9 :(widest_width == 18) ? mem_size18 : (widest_width == 36) ? mem_size36 :
|
||
|
(widest_width == 72) ? mem_size72 : 4096;
|
||
|
|
||
|
reg [widest_width-1:0] tmp_mem [mem_depth-1:0];
|
||
|
|
||
|
reg [width-1:0] mem [mem_depth-1:0];
|
||
|
reg [widthp-1:0] memp [memp_depth-1:0];
|
||
|
|
||
|
|
||
|
|
||
|
/******************************************** task and function **************************************/
|
||
|
|
||
|
task task_ram;
|
||
|
|
||
|
input ram_we;
|
||
|
input [7:0] ram_di;
|
||
|
input ram_dip;
|
||
|
inout [7:0] mem_task;
|
||
|
inout memp_task;
|
||
|
|
||
|
begin
|
||
|
|
||
|
if (ram_we == 1'b1) begin
|
||
|
|
||
|
mem_task = ram_di;
|
||
|
|
||
|
if (width >= 8)
|
||
|
memp_task = ram_dip;
|
||
|
end
|
||
|
end
|
||
|
|
||
|
endtask // task_ram
|
||
|
|
||
|
|
||
|
task task_ram_col;
|
||
|
|
||
|
input ram_col_we_o;
|
||
|
input ram_col_we;
|
||
|
input [7:0] ram_col_di;
|
||
|
input ram_col_dip;
|
||
|
inout [7:0] ram_col_mem_task;
|
||
|
inout ram_col_memp_task;
|
||
|
integer ram_col_i;
|
||
|
|
||
|
begin
|
||
|
|
||
|
if (ram_col_we == 1'b1) begin
|
||
|
|
||
|
for (ram_col_i = 0; ram_col_i < 8; ram_col_i = ram_col_i + 1)
|
||
|
if (ram_col_mem_task[ram_col_i] !== 1'bx || !(ram_col_we === ram_col_we_o && ram_col_we === 1'b1))
|
||
|
ram_col_mem_task[ram_col_i] = ram_col_di[ram_col_i];
|
||
|
|
||
|
if (width >= 8 && (ram_col_memp_task !== 1'bx || !(ram_col_we === ram_col_we_o && ram_col_we === 1'b1)))
|
||
|
ram_col_memp_task = ram_col_dip;
|
||
|
|
||
|
end
|
||
|
end
|
||
|
|
||
|
endtask // task_ram_col
|
||
|
|
||
|
|
||
|
task task_ram_ox;
|
||
|
|
||
|
input ram_ox_we_o;
|
||
|
input ram_ox_we;
|
||
|
input [7:0] ram_ox_di;
|
||
|
input ram_ox_dip;
|
||
|
inout [7:0] ram_ox_mem_task;
|
||
|
inout ram_ox_memp_task;
|
||
|
integer ram_ox_i;
|
||
|
|
||
|
begin
|
||
|
|
||
|
if (ram_ox_we == 1'b1) begin
|
||
|
|
||
|
for (ram_ox_i = 0; ram_ox_i < 8; ram_ox_i = ram_ox_i + 1)
|
||
|
ram_ox_mem_task[ram_ox_i] = ram_ox_di[ram_ox_i];
|
||
|
|
||
|
if (width >= 8)
|
||
|
ram_ox_memp_task = ram_ox_dip;
|
||
|
|
||
|
end
|
||
|
end
|
||
|
|
||
|
endtask // task_ram_ox
|
||
|
|
||
|
|
||
|
task task_x_buf;
|
||
|
input [1:0] wr_rd_mode;
|
||
|
input integer do_uindex;
|
||
|
input integer do_lindex;
|
||
|
input integer dop_index;
|
||
|
input [63:0] do_ltmp;
|
||
|
inout [63:0] x_buf_do_tmp;
|
||
|
input [7:0] dop_ltmp;
|
||
|
inout [7:0] x_buf_dop_tmp;
|
||
|
integer i;
|
||
|
|
||
|
begin
|
||
|
|
||
|
if (wr_rd_mode == 2'b01) begin
|
||
|
for (i = do_lindex; i <= do_uindex; i = i + 1) begin
|
||
|
if (do_ltmp[i] === 1'bx)
|
||
|
x_buf_do_tmp[i] = 1'bx;
|
||
|
end
|
||
|
|
||
|
if (dop_ltmp[dop_index] === 1'bx)
|
||
|
x_buf_dop_tmp[dop_index] = 1'bx;
|
||
|
|
||
|
end // if (wr_rd_mode == 2'b01)
|
||
|
else begin
|
||
|
x_buf_do_tmp[do_lindex +: 8] = do_ltmp[do_lindex +: 8];
|
||
|
x_buf_dop_tmp[dop_index] = dop_ltmp[dop_index];
|
||
|
|
||
|
end // else: !if(wr_rd_mode == 2'b01)
|
||
|
end
|
||
|
|
||
|
endtask // task_x_buf
|
||
|
|
||
|
|
||
|
task task_col_wr_ram_a;
|
||
|
|
||
|
input [1:0] col_wr_ram_a_seq;
|
||
|
input [7:0] col_wr_ram_a_web_tmp;
|
||
|
input [7:0] col_wr_ram_a_wea_tmp;
|
||
|
input [63:0] col_wr_ram_a_dia_tmp;
|
||
|
input [7:0] col_wr_ram_a_dipa_tmp;
|
||
|
input [15:0] col_wr_ram_a_addrb_tmp;
|
||
|
input [15:0] col_wr_ram_a_addra_tmp;
|
||
|
|
||
|
begin
|
||
|
|
||
|
case (wa_width)
|
||
|
|
||
|
1, 2, 4 : begin
|
||
|
if (!(col_wr_ram_a_wea_tmp[0] === 1'b1 && col_wr_ram_a_web_tmp[0] === 1'b1 && wa_width > wb_width) || col_wr_ram_a_seq == 2'b10) begin
|
||
|
if (wa_width >= width)
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[0], col_wr_ram_a_wea_tmp[0], col_wr_ram_a_dia_tmp[wa_width-1:0], 1'b0, mem[col_wr_ram_a_addra_tmp[14:addra_lbit_124]], junk1);
|
||
|
else
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[0], col_wr_ram_a_wea_tmp[0], col_wr_ram_a_dia_tmp[wa_width-1:0], 1'b0, mem[col_wr_ram_a_addra_tmp[14:addra_bit_124+1]][(col_wr_ram_a_addra_tmp[addra_bit_124:addra_lbit_124] * wa_width) +: wa_width], junk1);
|
||
|
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[0], col_wr_ram_a_web_tmp[0], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
end // if (!(col_wr_ram_a_wea_tmp[0] === 1'b1 && col_wr_ram_a_web_tmp[0] === 1'b1 && wa_width > wb_width) || col_wr_ram_a_seq == 2'b10)
|
||
|
end // case: 1, 2, 4
|
||
|
8 : begin
|
||
|
if (!(col_wr_ram_a_wea_tmp[0] === 1'b1 && col_wr_ram_a_web_tmp[0] === 1'b1 && wa_width > wb_width) || col_wr_ram_a_seq == 2'b10) begin
|
||
|
if (wa_width >= width)
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[0], col_wr_ram_a_wea_tmp[0], col_wr_ram_a_dia_tmp[7:0], col_wr_ram_a_dipa_tmp[0], mem[col_wr_ram_a_addra_tmp[14:3]], memp[col_wr_ram_a_addra_tmp[14:3]]);
|
||
|
else
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[0], col_wr_ram_a_wea_tmp[0], col_wr_ram_a_dia_tmp[7:0], col_wr_ram_a_dipa_tmp[0], mem[col_wr_ram_a_addra_tmp[14:addra_bit_8+1]][(col_wr_ram_a_addra_tmp[addra_bit_8:3] * 8) +: 8], memp[col_wr_ram_a_addra_tmp[14:addra_bit_8+1]][(col_wr_ram_a_addra_tmp[addra_bit_8:3] * 1) +: 1]);
|
||
|
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[0], col_wr_ram_a_web_tmp[0], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
end // if (wa_width <= wb_width)
|
||
|
end // case: 8
|
||
|
16 : if (wa_width == 16) begin
|
||
|
if (!(col_wr_ram_a_wea_tmp[0] === 1'b1 && col_wr_ram_a_web_tmp[0] === 1'b1 && wa_width > wb_width) || col_wr_ram_a_seq == 2'b10) begin
|
||
|
if (wa_width >= width)
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[0], col_wr_ram_a_wea_tmp[0], col_wr_ram_a_dia_tmp[7:0], col_wr_ram_a_dipa_tmp[0], mem[col_wr_ram_a_addra_tmp[14:4]][0 +: 8], memp[col_wr_ram_a_addra_tmp[14:4]][0]);
|
||
|
else
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[0], col_wr_ram_a_wea_tmp[0], col_wr_ram_a_dia_tmp[7:0], col_wr_ram_a_dipa_tmp[0], mem[col_wr_ram_a_addra_tmp[14:addra_bit_16+1]][(col_wr_ram_a_addra_tmp[addra_bit_16:4] * 16) +: 8], memp[col_wr_ram_a_addra_tmp[14:addra_bit_16+1]][(col_wr_ram_a_addra_tmp[addra_bit_16:4] * 2) +: 1]);
|
||
|
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[0], col_wr_ram_a_web_tmp[0], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
if (wa_width >= width)
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[1], col_wr_ram_a_wea_tmp[1], col_wr_ram_a_dia_tmp[15:8], col_wr_ram_a_dipa_tmp[1], mem[col_wr_ram_a_addra_tmp[14:4]][8 +: 8], memp[col_wr_ram_a_addra_tmp[14:4]][1]);
|
||
|
else
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[1], col_wr_ram_a_wea_tmp[1], col_wr_ram_a_dia_tmp[15:8], col_wr_ram_a_dipa_tmp[1], mem[col_wr_ram_a_addra_tmp[14:addra_bit_16+1]][((col_wr_ram_a_addra_tmp[addra_bit_16:4] * 16) + 8) +: 8], memp[col_wr_ram_a_addra_tmp[14:addra_bit_16+1]][((col_wr_ram_a_addra_tmp[addra_bit_16:4] * 2) + 1) +: 1]);
|
||
|
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[1], col_wr_ram_a_web_tmp[1], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
end // if (wa_width <= wb_width)
|
||
|
end // case: 16
|
||
|
32 : if (wa_width == 32) begin
|
||
|
if (!(col_wr_ram_a_wea_tmp[0] === 1'b1 && col_wr_ram_a_web_tmp[0] === 1'b1 && wa_width > wb_width) || col_wr_ram_a_seq == 2'b10) begin
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[0], col_wr_ram_a_wea_tmp[0], col_wr_ram_a_dia_tmp[7:0], col_wr_ram_a_dipa_tmp[0], mem[col_wr_ram_a_addra_tmp[14:5]][0 +: 8], memp[col_wr_ram_a_addra_tmp[14:5]][0]);
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[0], col_wr_ram_a_web_tmp[0], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[1], col_wr_ram_a_wea_tmp[1], col_wr_ram_a_dia_tmp[15:8], col_wr_ram_a_dipa_tmp[1], mem[col_wr_ram_a_addra_tmp[14:5]][8 +: 8], memp[col_wr_ram_a_addra_tmp[14:5]][1]);
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[1], col_wr_ram_a_web_tmp[1], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[2], col_wr_ram_a_wea_tmp[2], col_wr_ram_a_dia_tmp[23:16], col_wr_ram_a_dipa_tmp[2], mem[col_wr_ram_a_addra_tmp[14:5]][16 +: 8], memp[col_wr_ram_a_addra_tmp[14:5]][2]);
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[2], col_wr_ram_a_web_tmp[2], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[3], col_wr_ram_a_wea_tmp[3], col_wr_ram_a_dia_tmp[31:24], col_wr_ram_a_dipa_tmp[3], mem[col_wr_ram_a_addra_tmp[14:5]][24 +: 8], memp[col_wr_ram_a_addra_tmp[14:5]][3]);
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[3], col_wr_ram_a_web_tmp[3], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
end // if (wa_width <= wb_width)
|
||
|
end // case: 32
|
||
|
64 : if (wa_width == 64) begin
|
||
|
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[0], col_wr_ram_a_wea_tmp[0], col_wr_ram_a_dia_tmp[7:0], col_wr_ram_a_dipa_tmp[0], mem[col_wr_ram_a_addra_tmp[14:6]][0 +: 8], memp[col_wr_ram_a_addra_tmp[14:6]][0:0]);
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[0], col_wr_ram_a_web_tmp[0], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[1], col_wr_ram_a_wea_tmp[1], col_wr_ram_a_dia_tmp[15:8], col_wr_ram_a_dipa_tmp[1], mem[col_wr_ram_a_addra_tmp[14:6]][8 +: 8], memp[col_wr_ram_a_addra_tmp[14:6]][1:1]);
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[1], col_wr_ram_a_web_tmp[1], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[2], col_wr_ram_a_wea_tmp[2], col_wr_ram_a_dia_tmp[23:16], col_wr_ram_a_dipa_tmp[2], mem[col_wr_ram_a_addra_tmp[14:6]][16 +: 8], memp[col_wr_ram_a_addra_tmp[14:6]][2:2]);
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[2], col_wr_ram_a_web_tmp[2], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[3], col_wr_ram_a_wea_tmp[3], col_wr_ram_a_dia_tmp[31:24], col_wr_ram_a_dipa_tmp[3], mem[col_wr_ram_a_addra_tmp[14:6]][24 +: 8], memp[col_wr_ram_a_addra_tmp[14:6]][3:3]);
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[3], col_wr_ram_a_web_tmp[3], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[4], col_wr_ram_a_wea_tmp[4], col_wr_ram_a_dia_tmp[39:32], col_wr_ram_a_dipa_tmp[4], mem[col_wr_ram_a_addra_tmp[14:6]][32 +: 8], memp[col_wr_ram_a_addra_tmp[14:6]][4:4]);
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[4], col_wr_ram_a_web_tmp[4], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[5], col_wr_ram_a_wea_tmp[5], col_wr_ram_a_dia_tmp[47:40], col_wr_ram_a_dipa_tmp[5], mem[col_wr_ram_a_addra_tmp[14:6]][40 +: 8], memp[col_wr_ram_a_addra_tmp[14:6]][5:5]);
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[5], col_wr_ram_a_web_tmp[5], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[6], col_wr_ram_a_wea_tmp[6], col_wr_ram_a_dia_tmp[55:48], col_wr_ram_a_dipa_tmp[6], mem[col_wr_ram_a_addra_tmp[14:6]][48 +: 8], memp[col_wr_ram_a_addra_tmp[14:6]][6:6]);
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[6], col_wr_ram_a_web_tmp[6], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_a_web_tmp[7], col_wr_ram_a_wea_tmp[7], col_wr_ram_a_dia_tmp[63:56], col_wr_ram_a_dipa_tmp[7], mem[col_wr_ram_a_addra_tmp[14:6]][56 +: 8], memp[col_wr_ram_a_addra_tmp[14:6]][7:7]);
|
||
|
if (col_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_a_wea_tmp[7], col_wr_ram_a_web_tmp[7], col_wr_ram_a_addra_tmp, col_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
end // case: 64
|
||
|
|
||
|
endcase // case(wa_width)
|
||
|
|
||
|
end
|
||
|
|
||
|
endtask // task_col_wr_ram_a
|
||
|
|
||
|
|
||
|
task task_ox_wr_ram_a;
|
||
|
|
||
|
input [1:0] ox_wr_ram_a_seq;
|
||
|
input [7:0] ox_wr_ram_a_web_tmp;
|
||
|
input [7:0] ox_wr_ram_a_wea_tmp;
|
||
|
input [63:0] ox_wr_ram_a_dia_tmp;
|
||
|
input [7:0] ox_wr_ram_a_dipa_tmp;
|
||
|
input [15:0] ox_wr_ram_a_addrb_tmp;
|
||
|
input [15:0] ox_wr_ram_a_addra_tmp;
|
||
|
|
||
|
begin
|
||
|
|
||
|
case (wa_width)
|
||
|
|
||
|
1, 2, 4 : begin
|
||
|
if (!(ox_wr_ram_a_wea_tmp[0] === 1'b1 && ox_wr_ram_a_web_tmp[0] === 1'b1 && wa_width > wb_width) || ox_wr_ram_a_seq == 2'b10) begin
|
||
|
if (wa_width >= width)
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_dia_tmp[wa_width-1:0], 1'b0, mem[ox_wr_ram_a_addra_tmp[14:addra_lbit_124]], junk1);
|
||
|
else
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_dia_tmp[wa_width-1:0], 1'b0, mem[ox_wr_ram_a_addra_tmp[14:addra_bit_124+1]][(ox_wr_ram_a_addra_tmp[addra_bit_124:addra_lbit_124] * wa_width) +: wa_width], junk1);
|
||
|
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
end // if (!(ox_wr_ram_a_wea_tmp[0] === 1'b1 && ox_wr_ram_a_web_tmp[0] === 1'b1 && wa_width > wb_width) || ox_wr_ram_a_seq == 2'b10)
|
||
|
end // case: 1, 2, 4
|
||
|
8 : begin
|
||
|
if (!(ox_wr_ram_a_wea_tmp[0] === 1'b1 && ox_wr_ram_a_web_tmp[0] === 1'b1 && wa_width > wb_width) || ox_wr_ram_a_seq == 2'b10) begin
|
||
|
if (wa_width >= width)
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_dia_tmp[7:0], ox_wr_ram_a_dipa_tmp[0], mem[ox_wr_ram_a_addra_tmp[14:3]], memp[ox_wr_ram_a_addra_tmp[14:3]]);
|
||
|
else
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_dia_tmp[7:0], ox_wr_ram_a_dipa_tmp[0], mem[ox_wr_ram_a_addra_tmp[14:addra_bit_8+1]][(ox_wr_ram_a_addra_tmp[addra_bit_8:3] * 8) +: 8], memp[ox_wr_ram_a_addra_tmp[14:addra_bit_8+1]][(ox_wr_ram_a_addra_tmp[addra_bit_8:3] * 1) +: 1]);
|
||
|
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
end // if (wa_width <= wb_width)
|
||
|
end // case: 8
|
||
|
16 : if (wa_width == 16) begin
|
||
|
if (!(ox_wr_ram_a_wea_tmp[0] === 1'b1 && ox_wr_ram_a_web_tmp[0] === 1'b1 && wa_width > wb_width) || ox_wr_ram_a_seq == 2'b10) begin
|
||
|
if (wa_width >= width)
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_dia_tmp[7:0], ox_wr_ram_a_dipa_tmp[0], mem[ox_wr_ram_a_addra_tmp[14:4]][0 +: 8], memp[ox_wr_ram_a_addra_tmp[14:4]][0]);
|
||
|
else
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_dia_tmp[7:0], ox_wr_ram_a_dipa_tmp[0], mem[ox_wr_ram_a_addra_tmp[14:addra_bit_16+1]][(ox_wr_ram_a_addra_tmp[addra_bit_16:4] * 16) +: 8], memp[ox_wr_ram_a_addra_tmp[14:addra_bit_16+1]][(ox_wr_ram_a_addra_tmp[addra_bit_16:4] * 2) +: 1]);
|
||
|
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
if (wa_width >= width)
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[1], ox_wr_ram_a_wea_tmp[1], ox_wr_ram_a_dia_tmp[15:8], ox_wr_ram_a_dipa_tmp[1], mem[ox_wr_ram_a_addra_tmp[14:4]][8 +: 8], memp[ox_wr_ram_a_addra_tmp[14:4]][1]);
|
||
|
else
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[1], ox_wr_ram_a_wea_tmp[1], ox_wr_ram_a_dia_tmp[15:8], ox_wr_ram_a_dipa_tmp[1], mem[ox_wr_ram_a_addra_tmp[14:addra_bit_16+1]][((ox_wr_ram_a_addra_tmp[addra_bit_16:4] * 16) + 8) +: 8], memp[ox_wr_ram_a_addra_tmp[14:addra_bit_16+1]][((ox_wr_ram_a_addra_tmp[addra_bit_16:4] * 2) + 1) +: 1]);
|
||
|
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[1], ox_wr_ram_a_web_tmp[1], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
end // if (wa_width <= wb_width)
|
||
|
end // case: 16
|
||
|
32 : if (wa_width == 32) begin
|
||
|
if (!(ox_wr_ram_a_wea_tmp[0] === 1'b1 && ox_wr_ram_a_web_tmp[0] === 1'b1 && wa_width > wb_width) || ox_wr_ram_a_seq == 2'b10) begin
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_dia_tmp[7:0], ox_wr_ram_a_dipa_tmp[0], mem[ox_wr_ram_a_addra_tmp[14:5]][0 +: 8], memp[ox_wr_ram_a_addra_tmp[14:5]][0]);
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[1], ox_wr_ram_a_wea_tmp[1], ox_wr_ram_a_dia_tmp[15:8], ox_wr_ram_a_dipa_tmp[1], mem[ox_wr_ram_a_addra_tmp[14:5]][8 +: 8], memp[ox_wr_ram_a_addra_tmp[14:5]][1]);
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[1], ox_wr_ram_a_web_tmp[1], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[2], ox_wr_ram_a_wea_tmp[2], ox_wr_ram_a_dia_tmp[23:16], ox_wr_ram_a_dipa_tmp[2], mem[ox_wr_ram_a_addra_tmp[14:5]][16 +: 8], memp[ox_wr_ram_a_addra_tmp[14:5]][2]);
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[2], ox_wr_ram_a_web_tmp[2], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[3], ox_wr_ram_a_wea_tmp[3], ox_wr_ram_a_dia_tmp[31:24], ox_wr_ram_a_dipa_tmp[3], mem[ox_wr_ram_a_addra_tmp[14:5]][24 +: 8], memp[ox_wr_ram_a_addra_tmp[14:5]][3]);
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[3], ox_wr_ram_a_web_tmp[3], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
end // if (wa_width <= wb_width)
|
||
|
end // case: 32
|
||
|
64 : if (wa_width == 64) begin
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_dia_tmp[7:0], ox_wr_ram_a_dipa_tmp[0], mem[ox_wr_ram_a_addra_tmp[14:6]][0 +: 8], memp[ox_wr_ram_a_addra_tmp[14:6]][0:0]);
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[0], ox_wr_ram_a_web_tmp[0], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[1], ox_wr_ram_a_wea_tmp[1], ox_wr_ram_a_dia_tmp[15:8], ox_wr_ram_a_dipa_tmp[1], mem[ox_wr_ram_a_addra_tmp[14:6]][8 +: 8], memp[ox_wr_ram_a_addra_tmp[14:6]][1:1]);
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[1], ox_wr_ram_a_web_tmp[1], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[2], ox_wr_ram_a_wea_tmp[2], ox_wr_ram_a_dia_tmp[23:16], ox_wr_ram_a_dipa_tmp[2], mem[ox_wr_ram_a_addra_tmp[14:6]][16 +: 8], memp[ox_wr_ram_a_addra_tmp[14:6]][2:2]);
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[2], ox_wr_ram_a_web_tmp[2], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[3], ox_wr_ram_a_wea_tmp[3], ox_wr_ram_a_dia_tmp[31:24], ox_wr_ram_a_dipa_tmp[3], mem[ox_wr_ram_a_addra_tmp[14:6]][24 +: 8], memp[ox_wr_ram_a_addra_tmp[14:6]][3:3]);
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[3], ox_wr_ram_a_web_tmp[3], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[4], ox_wr_ram_a_wea_tmp[4], ox_wr_ram_a_dia_tmp[39:32], ox_wr_ram_a_dipa_tmp[4], mem[ox_wr_ram_a_addra_tmp[14:6]][32 +: 8], memp[ox_wr_ram_a_addra_tmp[14:6]][4:4]);
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[4], ox_wr_ram_a_web_tmp[4], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[5], ox_wr_ram_a_wea_tmp[5], ox_wr_ram_a_dia_tmp[47:40], ox_wr_ram_a_dipa_tmp[5], mem[ox_wr_ram_a_addra_tmp[14:6]][40 +: 8], memp[ox_wr_ram_a_addra_tmp[14:6]][5:5]);
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[5], ox_wr_ram_a_web_tmp[5], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[6], ox_wr_ram_a_wea_tmp[6], ox_wr_ram_a_dia_tmp[55:48], ox_wr_ram_a_dipa_tmp[6], mem[ox_wr_ram_a_addra_tmp[14:6]][48 +: 8], memp[ox_wr_ram_a_addra_tmp[14:6]][6:6]);
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[6], ox_wr_ram_a_web_tmp[6], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_a_web_tmp[7], ox_wr_ram_a_wea_tmp[7], ox_wr_ram_a_dia_tmp[63:56], ox_wr_ram_a_dipa_tmp[7], mem[ox_wr_ram_a_addra_tmp[14:6]][56 +: 8], memp[ox_wr_ram_a_addra_tmp[14:6]][7:7]);
|
||
|
if (ox_wr_ram_a_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_a_wea_tmp[7], ox_wr_ram_a_web_tmp[7], ox_wr_ram_a_addra_tmp, ox_wr_ram_a_addrb_tmp);
|
||
|
|
||
|
end // case: 64
|
||
|
|
||
|
endcase // case(wa_width)
|
||
|
|
||
|
end
|
||
|
|
||
|
endtask // task_ox_wr_ram_a
|
||
|
|
||
|
|
||
|
task task_col_wr_ram_b;
|
||
|
|
||
|
input [1:0] col_wr_ram_b_seq;
|
||
|
input [7:0] col_wr_ram_b_wea_tmp;
|
||
|
input [7:0] col_wr_ram_b_web_tmp;
|
||
|
input [63:0] col_wr_ram_b_dib_tmp;
|
||
|
input [7:0] col_wr_ram_b_dipb_tmp;
|
||
|
input [15:0] col_wr_ram_b_addra_tmp;
|
||
|
input [15:0] col_wr_ram_b_addrb_tmp;
|
||
|
|
||
|
begin
|
||
|
|
||
|
case (wb_width)
|
||
|
|
||
|
1, 2, 4 : begin
|
||
|
if (!(col_wr_ram_b_wea_tmp[0] === 1'b1 && col_wr_ram_b_web_tmp[0] === 1'b1 && wb_width > wa_width) || col_wr_ram_b_seq == 2'b10) begin
|
||
|
if (wb_width >= width)
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_dib_tmp[wb_width-1:0], 1'b0, mem[col_wr_ram_b_addrb_tmp[14:addrb_lbit_124]], junk1);
|
||
|
else
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_dib_tmp[wb_width-1:0], 1'b0, mem[col_wr_ram_b_addrb_tmp[14:addrb_bit_124+1]][(col_wr_ram_b_addrb_tmp[addrb_bit_124:addrb_lbit_124] * wb_width) +: wb_width], junk1);
|
||
|
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
end // if (wb_width <= wa_width)
|
||
|
end // case: 1, 2, 4
|
||
|
8 : begin
|
||
|
if (!(col_wr_ram_b_wea_tmp[0] === 1'b1 && col_wr_ram_b_web_tmp[0] === 1'b1 && wb_width > wa_width) || col_wr_ram_b_seq == 2'b10) begin
|
||
|
if (wb_width >= width)
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_dib_tmp[7:0], col_wr_ram_b_dipb_tmp[0], mem[col_wr_ram_b_addrb_tmp[14:3]], memp[col_wr_ram_b_addrb_tmp[14:3]]);
|
||
|
else
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_dib_tmp[7:0], col_wr_ram_b_dipb_tmp[0], mem[col_wr_ram_b_addrb_tmp[14:addrb_bit_8+1]][(col_wr_ram_b_addrb_tmp[addrb_bit_8:3] * 8) +: 8], memp[col_wr_ram_b_addrb_tmp[14:addrb_bit_8+1]][(col_wr_ram_b_addrb_tmp[addrb_bit_8:3] * 1) +: 1]);
|
||
|
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
end // if (wb_width <= wa_width)
|
||
|
end // case: 8
|
||
|
16 : if (wb_width == 16) begin
|
||
|
if (!(col_wr_ram_b_wea_tmp[0] === 1'b1 && col_wr_ram_b_web_tmp[0] === 1'b1 && wb_width > wa_width) || col_wr_ram_b_seq == 2'b10) begin
|
||
|
if (wb_width >= width)
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_dib_tmp[7:0], col_wr_ram_b_dipb_tmp[0], mem[col_wr_ram_b_addrb_tmp[14:4]][0 +: 8], memp[col_wr_ram_b_addrb_tmp[14:4]][0:0]);
|
||
|
else
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_dib_tmp[7:0], col_wr_ram_b_dipb_tmp[0], mem[col_wr_ram_b_addrb_tmp[14:addrb_bit_16+1]][(col_wr_ram_b_addrb_tmp[addrb_bit_16:4] * 16) +: 8], memp[col_wr_ram_b_addrb_tmp[14:addrb_bit_16+1]][(col_wr_ram_b_addrb_tmp[addrb_bit_16:4] * 2) +: 1]);
|
||
|
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
|
||
|
if (wb_width >= width)
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[1], col_wr_ram_b_web_tmp[1], col_wr_ram_b_dib_tmp[15:8], col_wr_ram_b_dipb_tmp[1], mem[col_wr_ram_b_addrb_tmp[14:4]][8 +: 8], memp[col_wr_ram_b_addrb_tmp[14:4]][1:1]);
|
||
|
else
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[1], col_wr_ram_b_web_tmp[1], col_wr_ram_b_dib_tmp[15:8], col_wr_ram_b_dipb_tmp[1], mem[col_wr_ram_b_addrb_tmp[14:addrb_bit_16+1]][((col_wr_ram_b_addrb_tmp[addrb_bit_16:4] * 16) + 8) +: 8], memp[col_wr_ram_b_addrb_tmp[14:addrb_bit_16+1]][((col_wr_ram_b_addrb_tmp[addrb_bit_16:4] * 2) + 1) +: 1]);
|
||
|
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[1], col_wr_ram_b_web_tmp[1], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
end // if (!(col_wr_ram_b_wea_tmp[0] === 1'b1 && col_wr_ram_b_web_tmp[0] === 1'b1 && wb_width > wa_width) || col_wr_ram_b_seq == 2'b10)
|
||
|
end // case: 16
|
||
|
32 : if (wb_width == 32) begin
|
||
|
|
||
|
if (!(col_wr_ram_b_wea_tmp[0] === 1'b1 && col_wr_ram_b_web_tmp[0] === 1'b1 && wb_width > wa_width) || col_wr_ram_b_seq == 2'b10) begin
|
||
|
|
||
|
if (wb_width >= width)
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_dib_tmp[7:0], col_wr_ram_b_dipb_tmp[0], mem[col_wr_ram_b_addrb_tmp[14:5]][0 +: 8], memp[col_wr_ram_b_addrb_tmp[14:5]][0:0]);
|
||
|
else
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_dib_tmp[7:0], col_wr_ram_b_dipb_tmp[0], mem[col_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][(col_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 32) +: 8], memp[col_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][(col_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 4) +: 1]);
|
||
|
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
if (wb_width >= width)
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[1], col_wr_ram_b_web_tmp[1], col_wr_ram_b_dib_tmp[15:8], col_wr_ram_b_dipb_tmp[1], mem[col_wr_ram_b_addrb_tmp[14:5]][8 +: 8], memp[col_wr_ram_b_addrb_tmp[14:5]][1:1]);
|
||
|
else
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[1], col_wr_ram_b_web_tmp[1], col_wr_ram_b_dib_tmp[15:8], col_wr_ram_b_dipb_tmp[1], mem[col_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((col_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 32) + 8) +: 8], memp[col_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((col_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 4) + 1) +: 1]);
|
||
|
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[1], col_wr_ram_b_web_tmp[1], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
if (wb_width >= width)
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[2], col_wr_ram_b_web_tmp[2], col_wr_ram_b_dib_tmp[23:16], col_wr_ram_b_dipb_tmp[2], mem[col_wr_ram_b_addrb_tmp[14:5]][16 +: 8], memp[col_wr_ram_b_addrb_tmp[14:5]][2:2]);
|
||
|
else
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[2], col_wr_ram_b_web_tmp[2], col_wr_ram_b_dib_tmp[23:16], col_wr_ram_b_dipb_tmp[2], mem[col_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((col_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 32) + 16) +: 8], memp[col_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((col_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 4) + 2) +: 1]);
|
||
|
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[2], col_wr_ram_b_web_tmp[2], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
if (wb_width >= width)
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[3], col_wr_ram_b_web_tmp[3], col_wr_ram_b_dib_tmp[31:24], col_wr_ram_b_dipb_tmp[3], mem[col_wr_ram_b_addrb_tmp[14:5]][24 +: 8], memp[col_wr_ram_b_addrb_tmp[14:5]][3:3]);
|
||
|
else
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[3], col_wr_ram_b_web_tmp[3], col_wr_ram_b_dib_tmp[31:24], col_wr_ram_b_dipb_tmp[3], mem[col_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((col_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 32) + 24) +: 8], memp[col_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((col_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 4) + 3) +: 1]);
|
||
|
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[3], col_wr_ram_b_web_tmp[3], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
end // if (!(col_wr_ram_b_wea_tmp[0] === 1'b1 && col_wr_ram_b_web_tmp[0] === 1'b1 && wb_width > wa_width) || col_wr_ram_b_seq == 2'b10)
|
||
|
|
||
|
end // case: 32
|
||
|
64 : if (wb_width == 64) begin
|
||
|
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_dib_tmp[7:0], col_wr_ram_b_dipb_tmp[0], mem[col_wr_ram_b_addrb_tmp[14:6]][0 +: 8], memp[col_wr_ram_b_addrb_tmp[14:6]][0:0]);
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[0], col_wr_ram_b_web_tmp[0], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[1], col_wr_ram_b_web_tmp[1], col_wr_ram_b_dib_tmp[15:8], col_wr_ram_b_dipb_tmp[1], mem[col_wr_ram_b_addrb_tmp[14:6]][8 +: 8], memp[col_wr_ram_b_addrb_tmp[14:6]][1:1]);
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[1], col_wr_ram_b_web_tmp[1], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[2], col_wr_ram_b_web_tmp[2], col_wr_ram_b_dib_tmp[23:16], col_wr_ram_b_dipb_tmp[2], mem[col_wr_ram_b_addrb_tmp[14:6]][16 +: 8], memp[col_wr_ram_b_addrb_tmp[14:6]][2:2]);
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[2], col_wr_ram_b_web_tmp[2], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[3], col_wr_ram_b_web_tmp[3], col_wr_ram_b_dib_tmp[31:24], col_wr_ram_b_dipb_tmp[3], mem[col_wr_ram_b_addrb_tmp[14:6]][24 +: 8], memp[col_wr_ram_b_addrb_tmp[14:6]][3:3]);
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[3], col_wr_ram_b_web_tmp[3], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[4], col_wr_ram_b_web_tmp[4], col_wr_ram_b_dib_tmp[39:32], col_wr_ram_b_dipb_tmp[4], mem[col_wr_ram_b_addrb_tmp[14:6]][32 +: 8], memp[col_wr_ram_b_addrb_tmp[14:6]][4:4]);
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[4], col_wr_ram_b_web_tmp[4], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[5], col_wr_ram_b_web_tmp[5], col_wr_ram_b_dib_tmp[47:40], col_wr_ram_b_dipb_tmp[5], mem[col_wr_ram_b_addrb_tmp[14:6]][40 +: 8], memp[col_wr_ram_b_addrb_tmp[14:6]][5:5]);
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[5], col_wr_ram_b_web_tmp[5], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[6], col_wr_ram_b_web_tmp[6], col_wr_ram_b_dib_tmp[55:48], col_wr_ram_b_dipb_tmp[6], mem[col_wr_ram_b_addrb_tmp[14:6]][48 +: 8], memp[col_wr_ram_b_addrb_tmp[14:6]][6:6]);
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[6], col_wr_ram_b_web_tmp[6], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_col (col_wr_ram_b_wea_tmp[7], col_wr_ram_b_web_tmp[7], col_wr_ram_b_dib_tmp[63:56], col_wr_ram_b_dipb_tmp[7], mem[col_wr_ram_b_addrb_tmp[14:6]][56 +: 8], memp[col_wr_ram_b_addrb_tmp[14:6]][7:7]);
|
||
|
if (col_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (col_wr_ram_b_wea_tmp[7], col_wr_ram_b_web_tmp[7], col_wr_ram_b_addra_tmp, col_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
end // case: 64
|
||
|
|
||
|
endcase // case(wb_width)
|
||
|
|
||
|
end
|
||
|
|
||
|
endtask // task_col_wr_ram_b
|
||
|
|
||
|
|
||
|
task task_ox_wr_ram_b;
|
||
|
|
||
|
input [1:0] ox_wr_ram_b_seq;
|
||
|
input [7:0] ox_wr_ram_b_wea_tmp;
|
||
|
input [7:0] ox_wr_ram_b_web_tmp;
|
||
|
input [63:0] ox_wr_ram_b_dib_tmp;
|
||
|
input [7:0] ox_wr_ram_b_dipb_tmp;
|
||
|
input [15:0] ox_wr_ram_b_addra_tmp;
|
||
|
input [15:0] ox_wr_ram_b_addrb_tmp;
|
||
|
|
||
|
begin
|
||
|
|
||
|
case (wb_width)
|
||
|
|
||
|
1, 2, 4 : begin
|
||
|
if (!(ox_wr_ram_b_wea_tmp[0] === 1'b1 && ox_wr_ram_b_web_tmp[0] === 1'b1 && wb_width > wa_width) || ox_wr_ram_b_seq == 2'b10) begin
|
||
|
if (wb_width >= width)
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_dib_tmp[wb_width-1:0], 1'b0, mem[ox_wr_ram_b_addrb_tmp[14:addrb_lbit_124]], junk1);
|
||
|
else
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_dib_tmp[wb_width-1:0], 1'b0, mem[ox_wr_ram_b_addrb_tmp[14:addrb_bit_124+1]][(ox_wr_ram_b_addrb_tmp[addrb_bit_124:addrb_lbit_124] * wb_width) +: wb_width], junk1);
|
||
|
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
end // if (wb_width <= wa_width)
|
||
|
end // case: 1, 2, 4
|
||
|
8 : begin
|
||
|
if (!(ox_wr_ram_b_wea_tmp[0] === 1'b1 && ox_wr_ram_b_web_tmp[0] === 1'b1 && wb_width > wa_width) || ox_wr_ram_b_seq == 2'b10) begin
|
||
|
if (wb_width >= width)
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_dib_tmp[7:0], ox_wr_ram_b_dipb_tmp[0], mem[ox_wr_ram_b_addrb_tmp[14:3]], memp[ox_wr_ram_b_addrb_tmp[14:3]]);
|
||
|
else
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_dib_tmp[7:0], ox_wr_ram_b_dipb_tmp[0], mem[ox_wr_ram_b_addrb_tmp[14:addrb_bit_8+1]][(ox_wr_ram_b_addrb_tmp[addrb_bit_8:3] * 8) +: 8], memp[ox_wr_ram_b_addrb_tmp[14:addrb_bit_8+1]][(ox_wr_ram_b_addrb_tmp[addrb_bit_8:3] * 1) +: 1]);
|
||
|
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
end // if (wb_width <= wa_width)
|
||
|
end // case: 8
|
||
|
16 : if (wb_width == 16) begin
|
||
|
if (!(ox_wr_ram_b_wea_tmp[0] === 1'b1 && ox_wr_ram_b_web_tmp[0] === 1'b1 && wb_width > wa_width) || ox_wr_ram_b_seq == 2'b10) begin
|
||
|
if (wb_width >= width)
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_dib_tmp[7:0], ox_wr_ram_b_dipb_tmp[0], mem[ox_wr_ram_b_addrb_tmp[14:4]][0 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:4]][0:0]);
|
||
|
else
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_dib_tmp[7:0], ox_wr_ram_b_dipb_tmp[0], mem[ox_wr_ram_b_addrb_tmp[14:addrb_bit_16+1]][(ox_wr_ram_b_addrb_tmp[addrb_bit_16:4] * 16) +: 8], memp[ox_wr_ram_b_addrb_tmp[14:addrb_bit_16+1]][(ox_wr_ram_b_addrb_tmp[addrb_bit_16:4] * 2) +: 1]);
|
||
|
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
|
||
|
if (wb_width >= width)
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[1], ox_wr_ram_b_web_tmp[1], ox_wr_ram_b_dib_tmp[15:8], ox_wr_ram_b_dipb_tmp[1], mem[ox_wr_ram_b_addrb_tmp[14:4]][8 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:4]][1:1]);
|
||
|
else
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[1], ox_wr_ram_b_web_tmp[1], ox_wr_ram_b_dib_tmp[15:8], ox_wr_ram_b_dipb_tmp[1], mem[ox_wr_ram_b_addrb_tmp[14:addrb_bit_16+1]][((ox_wr_ram_b_addrb_tmp[addrb_bit_16:4] * 16) + 8) +: 8], memp[ox_wr_ram_b_addrb_tmp[14:addrb_bit_16+1]][((ox_wr_ram_b_addrb_tmp[addrb_bit_16:4] * 2) + 1) +: 1]);
|
||
|
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[1], ox_wr_ram_b_web_tmp[1], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
end // if (!(ox_wr_ram_b_wea_tmp[0] === 1'b1 && ox_wr_ram_b_web_tmp[0] === 1'b1 && wb_width > wa_width) || ox_wr_ram_b_seq == 2'b10)
|
||
|
end // case: 16
|
||
|
32 : if (wb_width == 32) begin
|
||
|
|
||
|
if (!(ox_wr_ram_b_wea_tmp[0] === 1'b1 && ox_wr_ram_b_web_tmp[0] === 1'b1 && wb_width > wa_width) || ox_wr_ram_b_seq == 2'b10) begin
|
||
|
|
||
|
if (wb_width >= width)
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_dib_tmp[7:0], ox_wr_ram_b_dipb_tmp[0], mem[ox_wr_ram_b_addrb_tmp[14:5]][0 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:5]][0:0]);
|
||
|
else
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_dib_tmp[7:0], ox_wr_ram_b_dipb_tmp[0], mem[ox_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][(ox_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 32) +: 8], memp[ox_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][(ox_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 4) +: 1]);
|
||
|
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
if (wb_width >= width)
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[1], ox_wr_ram_b_web_tmp[1], ox_wr_ram_b_dib_tmp[15:8], ox_wr_ram_b_dipb_tmp[1], mem[ox_wr_ram_b_addrb_tmp[14:5]][8 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:5]][1:1]);
|
||
|
else
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[1], ox_wr_ram_b_web_tmp[1], ox_wr_ram_b_dib_tmp[15:8], ox_wr_ram_b_dipb_tmp[1], mem[ox_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((ox_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 32) + 8) +: 8], memp[ox_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((ox_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 4) + 1) +: 1]);
|
||
|
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[1], ox_wr_ram_b_web_tmp[1], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
if (wb_width >= width)
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[2], ox_wr_ram_b_web_tmp[2], ox_wr_ram_b_dib_tmp[23:16], ox_wr_ram_b_dipb_tmp[2], mem[ox_wr_ram_b_addrb_tmp[14:5]][16 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:5]][2:2]);
|
||
|
else
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[2], ox_wr_ram_b_web_tmp[2], ox_wr_ram_b_dib_tmp[23:16], ox_wr_ram_b_dipb_tmp[2], mem[ox_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((ox_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 32) + 16) +: 8], memp[ox_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((ox_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 4) + 2) +: 1]);
|
||
|
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[2], ox_wr_ram_b_web_tmp[2], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
if (wb_width >= width)
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[3], ox_wr_ram_b_web_tmp[3], ox_wr_ram_b_dib_tmp[31:24], ox_wr_ram_b_dipb_tmp[3], mem[ox_wr_ram_b_addrb_tmp[14:5]][24 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:5]][3:3]);
|
||
|
else
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[3], ox_wr_ram_b_web_tmp[3], ox_wr_ram_b_dib_tmp[31:24], ox_wr_ram_b_dipb_tmp[3], mem[ox_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((ox_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 32) + 24) +: 8], memp[ox_wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((ox_wr_ram_b_addrb_tmp[addrb_bit_32:5] * 4) + 3) +: 1]);
|
||
|
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[3], ox_wr_ram_b_web_tmp[3], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
end // if (!(ox_wr_ram_b_wea_tmp[0] === 1'b1 && ox_wr_ram_b_web_tmp[0] === 1'b1 && wb_width > wa_width) || ox_wr_ram_b_seq == 2'b10)
|
||
|
|
||
|
end // case: 32
|
||
|
64 : if (wb_width == 64) begin
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_dib_tmp[7:0], ox_wr_ram_b_dipb_tmp[0], mem[ox_wr_ram_b_addrb_tmp[14:6]][0 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:6]][0:0]);
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[0], ox_wr_ram_b_web_tmp[0], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[1], ox_wr_ram_b_web_tmp[1], ox_wr_ram_b_dib_tmp[15:8], ox_wr_ram_b_dipb_tmp[1], mem[ox_wr_ram_b_addrb_tmp[14:6]][8 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:6]][1:1]);
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[1], ox_wr_ram_b_web_tmp[1], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[2], ox_wr_ram_b_web_tmp[2], ox_wr_ram_b_dib_tmp[23:16], ox_wr_ram_b_dipb_tmp[2], mem[ox_wr_ram_b_addrb_tmp[14:6]][16 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:6]][2:2]);
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[2], ox_wr_ram_b_web_tmp[2], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[3], ox_wr_ram_b_web_tmp[3], ox_wr_ram_b_dib_tmp[31:24], ox_wr_ram_b_dipb_tmp[3], mem[ox_wr_ram_b_addrb_tmp[14:6]][24 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:6]][3:3]);
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[3], ox_wr_ram_b_web_tmp[3], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[4], ox_wr_ram_b_web_tmp[4], ox_wr_ram_b_dib_tmp[39:32], ox_wr_ram_b_dipb_tmp[4], mem[ox_wr_ram_b_addrb_tmp[14:6]][32 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:6]][4:4]);
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[4], ox_wr_ram_b_web_tmp[4], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[5], ox_wr_ram_b_web_tmp[5], ox_wr_ram_b_dib_tmp[47:40], ox_wr_ram_b_dipb_tmp[5], mem[ox_wr_ram_b_addrb_tmp[14:6]][40 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:6]][5:5]);
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[5], ox_wr_ram_b_web_tmp[5], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[6], ox_wr_ram_b_web_tmp[6], ox_wr_ram_b_dib_tmp[55:48], ox_wr_ram_b_dipb_tmp[6], mem[ox_wr_ram_b_addrb_tmp[14:6]][48 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:6]][6:6]);
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[6], ox_wr_ram_b_web_tmp[6], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
task_ram_ox (ox_wr_ram_b_wea_tmp[7], ox_wr_ram_b_web_tmp[7], ox_wr_ram_b_dib_tmp[63:56], ox_wr_ram_b_dipb_tmp[7], mem[ox_wr_ram_b_addrb_tmp[14:6]][56 +: 8], memp[ox_wr_ram_b_addrb_tmp[14:6]][7:7]);
|
||
|
if (ox_wr_ram_b_seq == 2'b00)
|
||
|
chk_for_col_msg (ox_wr_ram_b_wea_tmp[7], ox_wr_ram_b_web_tmp[7], ox_wr_ram_b_addra_tmp, ox_wr_ram_b_addrb_tmp);
|
||
|
|
||
|
end // case: 64
|
||
|
|
||
|
endcase // case(wb_width)
|
||
|
|
||
|
end
|
||
|
|
||
|
endtask // task_ox_wr_ram_b
|
||
|
|
||
|
|
||
|
task task_wr_ram_a;
|
||
|
|
||
|
input [7:0] wr_ram_a_wea_tmp;
|
||
|
input [63:0] dia_tmp;
|
||
|
input [7:0] dipa_tmp;
|
||
|
input [15:0] wr_ram_a_addra_tmp;
|
||
|
|
||
|
begin
|
||
|
|
||
|
case (wa_width)
|
||
|
|
||
|
1, 2, 4 : begin
|
||
|
|
||
|
if (wa_width >= width)
|
||
|
task_ram (wr_ram_a_wea_tmp[0], dia_tmp[wa_width-1:0], 1'b0, mem[wr_ram_a_addra_tmp[14:addra_lbit_124]], junk1);
|
||
|
else
|
||
|
task_ram (wr_ram_a_wea_tmp[0], dia_tmp[wa_width-1:0], 1'b0, mem[wr_ram_a_addra_tmp[14:addra_bit_124+1]][(wr_ram_a_addra_tmp[addra_bit_124:addra_lbit_124] * wa_width) +: wa_width], junk1);
|
||
|
|
||
|
end
|
||
|
8 : begin
|
||
|
|
||
|
if (wa_width >= width)
|
||
|
task_ram (wr_ram_a_wea_tmp[0], dia_tmp[7:0], dipa_tmp[0], mem[wr_ram_a_addra_tmp[14:3]], memp[wr_ram_a_addra_tmp[14:3]]);
|
||
|
else
|
||
|
task_ram (wr_ram_a_wea_tmp[0], dia_tmp[7:0], dipa_tmp[0], mem[wr_ram_a_addra_tmp[14:addra_bit_8+1]][(wr_ram_a_addra_tmp[addra_bit_8:3] * 8) +: 8], memp[wr_ram_a_addra_tmp[14:addra_bit_8+1]][(wr_ram_a_addra_tmp[addra_bit_8:3] * 1) +: 1]);
|
||
|
|
||
|
end
|
||
|
16 : if (wa_width == 16) begin
|
||
|
|
||
|
if (wa_width >= width) begin
|
||
|
task_ram (wr_ram_a_wea_tmp[0], dia_tmp[7:0], dipa_tmp[0], mem[wr_ram_a_addra_tmp[14:4]][0 +: 8], memp[wr_ram_a_addra_tmp[14:4]][0:0]);
|
||
|
task_ram (wr_ram_a_wea_tmp[1], dia_tmp[15:8], dipa_tmp[1], mem[wr_ram_a_addra_tmp[14:4]][8 +: 8], memp[wr_ram_a_addra_tmp[14:4]][1:1]);
|
||
|
end
|
||
|
else begin
|
||
|
task_ram (wr_ram_a_wea_tmp[0], dia_tmp[7:0], dipa_tmp[0], mem[wr_ram_a_addra_tmp[14:addra_bit_16+1]][(wr_ram_a_addra_tmp[addra_bit_16:4] * 16) +: 8], memp[wr_ram_a_addra_tmp[14:addra_bit_16+1]][(wr_ram_a_addra_tmp[addra_bit_16:4] * 2) +: 1]);
|
||
|
task_ram (wr_ram_a_wea_tmp[1], dia_tmp[15:8], dipa_tmp[1], mem[wr_ram_a_addra_tmp[14:addra_bit_16+1]][((wr_ram_a_addra_tmp[addra_bit_16:4] * 16) + 8) +: 8], memp[wr_ram_a_addra_tmp[14:addra_bit_16+1]][((wr_ram_a_addra_tmp[addra_bit_16:4] * 2) + 1) +: 1]);
|
||
|
end // else: !if(wa_width >= wb_width)
|
||
|
|
||
|
end // case: 16
|
||
|
32 : if (wa_width == 32) begin
|
||
|
|
||
|
task_ram (wr_ram_a_wea_tmp[0], dia_tmp[7:0], dipa_tmp[0], mem[wr_ram_a_addra_tmp[14:5]][0 +: 8], memp[wr_ram_a_addra_tmp[14:5]][0:0]);
|
||
|
task_ram (wr_ram_a_wea_tmp[1], dia_tmp[15:8], dipa_tmp[1], mem[wr_ram_a_addra_tmp[14:5]][8 +: 8], memp[wr_ram_a_addra_tmp[14:5]][1:1]);
|
||
|
task_ram (wr_ram_a_wea_tmp[2], dia_tmp[23:16], dipa_tmp[2], mem[wr_ram_a_addra_tmp[14:5]][16 +: 8], memp[wr_ram_a_addra_tmp[14:5]][2:2]);
|
||
|
task_ram (wr_ram_a_wea_tmp[3], dia_tmp[31:24], dipa_tmp[3], mem[wr_ram_a_addra_tmp[14:5]][24 +: 8], memp[wr_ram_a_addra_tmp[14:5]][3:3]);
|
||
|
|
||
|
end // case: 32
|
||
|
endcase // case(wa_width)
|
||
|
end
|
||
|
|
||
|
endtask // task_wr_ram_a
|
||
|
|
||
|
|
||
|
task task_wr_ram_b;
|
||
|
|
||
|
input [7:0] wr_ram_b_web_tmp;
|
||
|
input [63:0] dib_tmp;
|
||
|
input [7:0] dipb_tmp;
|
||
|
input [15:0] wr_ram_b_addrb_tmp;
|
||
|
|
||
|
begin
|
||
|
|
||
|
case (wb_width)
|
||
|
|
||
|
1, 2, 4 : begin
|
||
|
|
||
|
if (wb_width >= width)
|
||
|
task_ram (wr_ram_b_web_tmp[0], dib_tmp[wb_width-1:0], 1'b0, mem[wr_ram_b_addrb_tmp[14:addrb_lbit_124]], junk1);
|
||
|
else
|
||
|
task_ram (wr_ram_b_web_tmp[0], dib_tmp[wb_width-1:0], 1'b0, mem[wr_ram_b_addrb_tmp[14:addrb_bit_124+1]][(wr_ram_b_addrb_tmp[addrb_bit_124:addrb_lbit_124] * wb_width) +: wb_width], junk1);
|
||
|
end
|
||
|
8 : begin
|
||
|
|
||
|
if (wb_width >= width)
|
||
|
task_ram (wr_ram_b_web_tmp[0], dib_tmp[7:0], dipb_tmp[0], mem[wr_ram_b_addrb_tmp[14:3]], memp[wr_ram_b_addrb_tmp[14:3]]);
|
||
|
else
|
||
|
task_ram (wr_ram_b_web_tmp[0], dib_tmp[7:0], dipb_tmp[0], mem[wr_ram_b_addrb_tmp[14:addrb_bit_8+1]][(wr_ram_b_addrb_tmp[addrb_bit_8:3] * 8) +: 8], memp[wr_ram_b_addrb_tmp[14:addrb_bit_8+1]][(wr_ram_b_addrb_tmp[addrb_bit_8:3] * 1) +: 1]);
|
||
|
|
||
|
end
|
||
|
16 : if (wb_width == 16) begin
|
||
|
|
||
|
if (wb_width >= width) begin
|
||
|
task_ram (wr_ram_b_web_tmp[0], dib_tmp[7:0], dipb_tmp[0], mem[wr_ram_b_addrb_tmp[14:4]][0 +: 8], memp[wr_ram_b_addrb_tmp[14:4]][0:0]);
|
||
|
task_ram (wr_ram_b_web_tmp[1], dib_tmp[15:8], dipb_tmp[1], mem[wr_ram_b_addrb_tmp[14:4]][8 +: 8], memp[wr_ram_b_addrb_tmp[14:4]][1:1]);
|
||
|
end
|
||
|
else begin
|
||
|
task_ram (wr_ram_b_web_tmp[0], dib_tmp[7:0], dipb_tmp[0], mem[wr_ram_b_addrb_tmp[14:addrb_bit_16+1]][(wr_ram_b_addrb_tmp[addrb_bit_16:4] * 16) +: 8], memp[wr_ram_b_addrb_tmp[14:addrb_bit_16+1]][(wr_ram_b_addrb_tmp[addrb_bit_16:4] * 2) +: 1]);
|
||
|
task_ram (wr_ram_b_web_tmp[1], dib_tmp[15:8], dipb_tmp[1], mem[wr_ram_b_addrb_tmp[14:addrb_bit_16+1]][((wr_ram_b_addrb_tmp[addrb_bit_16:4] * 16) + 8) +: 8], memp[wr_ram_b_addrb_tmp[14:addrb_bit_16+1]][((wr_ram_b_addrb_tmp[addrb_bit_16:4] * 2) + 1) +: 1]);
|
||
|
end
|
||
|
|
||
|
end // case: 16
|
||
|
32 : if (wb_width == 32) begin
|
||
|
|
||
|
if (wb_width >= width) begin
|
||
|
task_ram (wr_ram_b_web_tmp[0], dib_tmp[7:0], dipb_tmp[0], mem[wr_ram_b_addrb_tmp[14:5]][0 +: 8], memp[wr_ram_b_addrb_tmp[14:5]][0:0]);
|
||
|
task_ram (wr_ram_b_web_tmp[1], dib_tmp[15:8], dipb_tmp[1], mem[wr_ram_b_addrb_tmp[14:5]][8 +: 8], memp[wr_ram_b_addrb_tmp[14:5]][1:1]);
|
||
|
task_ram (wr_ram_b_web_tmp[2], dib_tmp[23:16], dipb_tmp[2], mem[wr_ram_b_addrb_tmp[14:5]][16 +: 8], memp[wr_ram_b_addrb_tmp[14:5]][2:2]);
|
||
|
task_ram (wr_ram_b_web_tmp[3], dib_tmp[31:24], dipb_tmp[3], mem[wr_ram_b_addrb_tmp[14:5]][24 +: 8], memp[wr_ram_b_addrb_tmp[14:5]][3:3]);
|
||
|
end
|
||
|
else begin
|
||
|
task_ram (wr_ram_b_web_tmp[0], dib_tmp[7:0], dipb_tmp[0], mem[wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][(wr_ram_b_addrb_tmp[addrb_bit_32:5] * 32) +: 8], memp[wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][(wr_ram_b_addrb_tmp[addrb_bit_32:5] * 4) +: 1]);
|
||
|
task_ram (wr_ram_b_web_tmp[1], dib_tmp[15:8], dipb_tmp[1], mem[wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((wr_ram_b_addrb_tmp[addrb_bit_32:5] * 32) + 8) +: 8], memp[wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((wr_ram_b_addrb_tmp[addrb_bit_32:5] * 4) + 1) +: 1]);
|
||
|
task_ram (wr_ram_b_web_tmp[2], dib_tmp[23:16], dipb_tmp[2], mem[wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((wr_ram_b_addrb_tmp[addrb_bit_32:5] * 32) + 16) +: 8], memp[wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((wr_ram_b_addrb_tmp[addrb_bit_32:5] * 4) + 2) +: 1]);
|
||
|
task_ram (wr_ram_b_web_tmp[3], dib_tmp[31:24], dipb_tmp[3], mem[wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((wr_ram_b_addrb_tmp[addrb_bit_32:5] * 32) + 24) +: 8], memp[wr_ram_b_addrb_tmp[14:addrb_bit_32+1]][((wr_ram_b_addrb_tmp[addrb_bit_32:5] * 4) + 3) +: 1]);
|
||
|
end // else: !if(wb_width >= width)
|
||
|
|
||
|
end // case: 32
|
||
|
64 : if (wb_width == 64) begin // only valid with ECC single bit correction for 64 bits
|
||
|
|
||
|
task_ram (wr_ram_b_web_tmp[0], dib_tmp[7:0], dipb_tmp[0], mem[wr_ram_b_addrb_tmp[14:6]][0 +: 8], memp[wr_ram_b_addrb_tmp[14:6]][0:0]);
|
||
|
task_ram (wr_ram_b_web_tmp[1], dib_tmp[15:8], dipb_tmp[1], mem[wr_ram_b_addrb_tmp[14:6]][8 +: 8], memp[wr_ram_b_addrb_tmp[14:6]][1:1]);
|
||
|
task_ram (wr_ram_b_web_tmp[2], dib_tmp[23:16], dipb_tmp[2], mem[wr_ram_b_addrb_tmp[14:6]][16 +: 8], memp[wr_ram_b_addrb_tmp[14:6]][2:2]);
|
||
|
task_ram (wr_ram_b_web_tmp[3], dib_tmp[31:24], dipb_tmp[3], mem[wr_ram_b_addrb_tmp[14:6]][24 +: 8], memp[wr_ram_b_addrb_tmp[14:6]][3:3]);
|
||
|
task_ram (wr_ram_b_web_tmp[4], dib_tmp[39:32], dipb_tmp[4], mem[wr_ram_b_addrb_tmp[14:6]][32 +: 8], memp[wr_ram_b_addrb_tmp[14:6]][4:4]);
|
||
|
task_ram (wr_ram_b_web_tmp[5], dib_tmp[47:40], dipb_tmp[5], mem[wr_ram_b_addrb_tmp[14:6]][40 +: 8], memp[wr_ram_b_addrb_tmp[14:6]][5:5]);
|
||
|
task_ram (wr_ram_b_web_tmp[6], dib_tmp[55:48], dipb_tmp[6], mem[wr_ram_b_addrb_tmp[14:6]][48 +: 8], memp[wr_ram_b_addrb_tmp[14:6]][6:6]);
|
||
|
task_ram (wr_ram_b_web_tmp[7], dib_tmp[63:56], dipb_tmp[7], mem[wr_ram_b_addrb_tmp[14:6]][56 +: 8], memp[wr_ram_b_addrb_tmp[14:6]][7:7]);
|
||
|
|
||
|
end // case: 64
|
||
|
endcase // case(wb_width)
|
||
|
end
|
||
|
|
||
|
endtask // task_wr_ram_b
|
||
|
|
||
|
|
||
|
task task_col_rd_ram_a;
|
||
|
|
||
|
input [1:0] col_rd_ram_a_seq; // 1 is bypass
|
||
|
input [7:0] col_rd_ram_a_web_tmp;
|
||
|
input [7:0] col_rd_ram_a_wea_tmp;
|
||
|
input [15:0] col_rd_ram_a_addra_tmp;
|
||
|
inout [63:0] col_rd_ram_a_doa_tmp;
|
||
|
inout [7:0] col_rd_ram_a_dopa_tmp;
|
||
|
reg [63:0] doa_ltmp;
|
||
|
reg [7:0] dopa_ltmp;
|
||
|
|
||
|
begin
|
||
|
|
||
|
doa_ltmp= 64'b0;
|
||
|
dopa_ltmp= 8'b0;
|
||
|
|
||
|
case (ra_width)
|
||
|
1, 2, 4 : begin
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[0] === 1'b1 && col_rd_ram_a_wea_tmp[0] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[0] === 1'b1 && col_rd_ram_a_wea_tmp[0] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[0] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[0] !== 1'b1)) begin
|
||
|
if (ra_width >= width)
|
||
|
doa_ltmp = mem[col_rd_ram_a_addra_tmp[14:r_addra_lbit_124]];
|
||
|
else
|
||
|
doa_ltmp = mem[col_rd_ram_a_addra_tmp[14:r_addra_bit_124+1]][(col_rd_ram_a_addra_tmp[r_addra_bit_124:r_addra_lbit_124] * ra_width) +: ra_width];
|
||
|
task_x_buf (wr_mode_a, 3, 0, 0, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
end // case: 1, 2, 4
|
||
|
8 : begin
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[0] === 1'b1 && col_rd_ram_a_wea_tmp[0] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[0] === 1'b1 && col_rd_ram_a_wea_tmp[0] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[0] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[0] !== 1'b1)) begin
|
||
|
if (ra_width >= width) begin
|
||
|
doa_ltmp = mem[col_rd_ram_a_addra_tmp[14:3]];
|
||
|
dopa_ltmp = memp[col_rd_ram_a_addra_tmp[14:3]];
|
||
|
end
|
||
|
else begin
|
||
|
doa_ltmp = mem[col_rd_ram_a_addra_tmp[14:r_addra_bit_8+1]][(col_rd_ram_a_addra_tmp[r_addra_bit_8:3] * 8) +: 8];
|
||
|
dopa_ltmp = memp[col_rd_ram_a_addra_tmp[14:r_addra_bit_8+1]][(col_rd_ram_a_addra_tmp[r_addra_bit_8:3] * 1) +: 1];
|
||
|
end
|
||
|
|
||
|
task_x_buf (wr_mode_a, 7, 0, 0, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
|
||
|
end
|
||
|
end // case: 8
|
||
|
16 : begin
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[0] === 1'b1 && col_rd_ram_a_wea_tmp[0] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[0] === 1'b1 && col_rd_ram_a_wea_tmp[0] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[0] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[0] !== 1'b1)) begin
|
||
|
if (ra_width >= width) begin
|
||
|
doa_ltmp[7:0] = mem[col_rd_ram_a_addra_tmp[14:4]][7:0];
|
||
|
dopa_ltmp[0:0] = memp[col_rd_ram_a_addra_tmp[14:4]][0:0];
|
||
|
end
|
||
|
else begin
|
||
|
doa_ltmp[7:0] = mem[col_rd_ram_a_addra_tmp[14:r_addra_bit_16+1]][(col_rd_ram_a_addra_tmp[r_addra_bit_16:4] * 16) +: 8];
|
||
|
dopa_ltmp[0:0] = memp[col_rd_ram_a_addra_tmp[14:r_addra_bit_16+1]][(col_rd_ram_a_addra_tmp[r_addra_bit_16:4] * 2) +: 1];
|
||
|
end
|
||
|
task_x_buf (wr_mode_a, 7, 0, 0, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[1] === 1'b1 && col_rd_ram_a_wea_tmp[1] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[1] === 1'b1 && col_rd_ram_a_wea_tmp[1] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[1] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[1] !== 1'b1)) begin
|
||
|
if (ra_width >= width) begin
|
||
|
doa_ltmp[15:8] = mem[col_rd_ram_a_addra_tmp[14:4]][15:8];
|
||
|
dopa_ltmp[1:1] = memp[col_rd_ram_a_addra_tmp[14:4]][1:1];
|
||
|
end
|
||
|
else begin
|
||
|
doa_ltmp[15:8] = mem[col_rd_ram_a_addra_tmp[14:r_addra_bit_16+1]][((col_rd_ram_a_addra_tmp[r_addra_bit_16:4] * 16) + 8) +: 8];
|
||
|
dopa_ltmp[1:1] = memp[col_rd_ram_a_addra_tmp[14:r_addra_bit_16+1]][((col_rd_ram_a_addra_tmp[r_addra_bit_16:4] * 2) + 1) +: 1];
|
||
|
end
|
||
|
task_x_buf (wr_mode_a, 15, 8, 1, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
end
|
||
|
32 : begin
|
||
|
if (ra_width >= width) begin
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[0] === 1'b1 && col_rd_ram_a_wea_tmp[0] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[0] === 1'b1 && col_rd_ram_a_wea_tmp[0] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[0] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[0] !== 1'b1)) begin
|
||
|
doa_ltmp[7:0] = mem[col_rd_ram_a_addra_tmp[14:5]][7:0];
|
||
|
dopa_ltmp[0:0] = memp[col_rd_ram_a_addra_tmp[14:5]][0:0];
|
||
|
task_x_buf (wr_mode_a, 7, 0, 0, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[1] === 1'b1 && col_rd_ram_a_wea_tmp[1] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[1] === 1'b1 && col_rd_ram_a_wea_tmp[1] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[1] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[1] !== 1'b1)) begin
|
||
|
doa_ltmp[15:8] = mem[col_rd_ram_a_addra_tmp[14:5]][15:8];
|
||
|
dopa_ltmp[1:1] = memp[col_rd_ram_a_addra_tmp[14:5]][1:1];
|
||
|
task_x_buf (wr_mode_a, 15, 8, 1, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[2] === 1'b1 && col_rd_ram_a_wea_tmp[2] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[2] === 1'b1 && col_rd_ram_a_wea_tmp[2] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[2] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[2] !== 1'b1)) begin
|
||
|
doa_ltmp[23:16] = mem[col_rd_ram_a_addra_tmp[14:5]][23:16];
|
||
|
dopa_ltmp[2:2] = memp[col_rd_ram_a_addra_tmp[14:5]][2:2];
|
||
|
task_x_buf (wr_mode_a, 23, 16, 2, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[3] === 1'b1 && col_rd_ram_a_wea_tmp[3] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[3] === 1'b1 && col_rd_ram_a_wea_tmp[3] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[3] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[3] !== 1'b1)) begin
|
||
|
doa_ltmp[31:24] = mem[col_rd_ram_a_addra_tmp[14:5]][31:24];
|
||
|
dopa_ltmp[3:3] = memp[col_rd_ram_a_addra_tmp[14:5]][3:3];
|
||
|
task_x_buf (wr_mode_a, 31, 24, 3, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
end // if (ra_width >= width)
|
||
|
end
|
||
|
64 : begin
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[0] === 1'b1 && col_rd_ram_a_wea_tmp[0] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[0] === 1'b1 && col_rd_ram_a_wea_tmp[0] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[0] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[0] !== 1'b1)) begin
|
||
|
doa_ltmp[7:0] = mem[col_rd_ram_a_addra_tmp[14:6]][7:0];
|
||
|
dopa_ltmp[0:0] = memp[col_rd_ram_a_addra_tmp[14:6]][0:0];
|
||
|
task_x_buf (wr_mode_a, 7, 0, 0, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[1] === 1'b1 && col_rd_ram_a_wea_tmp[1] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[1] === 1'b1 && col_rd_ram_a_wea_tmp[1] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[1] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[1] !== 1'b1)) begin
|
||
|
doa_ltmp[15:8] = mem[col_rd_ram_a_addra_tmp[14:6]][15:8];
|
||
|
dopa_ltmp[1:1] = memp[col_rd_ram_a_addra_tmp[14:6]][1:1];
|
||
|
task_x_buf (wr_mode_a, 15, 8, 1, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[2] === 1'b1 && col_rd_ram_a_wea_tmp[2] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[2] === 1'b1 && col_rd_ram_a_wea_tmp[2] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[2] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[2] !== 1'b1)) begin
|
||
|
doa_ltmp[23:16] = mem[col_rd_ram_a_addra_tmp[14:6]][23:16];
|
||
|
dopa_ltmp[2:2] = memp[col_rd_ram_a_addra_tmp[14:6]][2:2];
|
||
|
task_x_buf (wr_mode_a, 23, 16, 2, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[3] === 1'b1 && col_rd_ram_a_wea_tmp[3] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[3] === 1'b1 && col_rd_ram_a_wea_tmp[3] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[3] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[3] !== 1'b1)) begin
|
||
|
doa_ltmp[31:24] = mem[col_rd_ram_a_addra_tmp[14:6]][31:24];
|
||
|
dopa_ltmp[3:3] = memp[col_rd_ram_a_addra_tmp[14:6]][3:3];
|
||
|
task_x_buf (wr_mode_a, 31, 24, 3, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[4] === 1'b1 && col_rd_ram_a_wea_tmp[4] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[4] === 1'b1 && col_rd_ram_a_wea_tmp[4] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[4] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[4] !== 1'b1)) begin
|
||
|
doa_ltmp[39:32] = mem[col_rd_ram_a_addra_tmp[14:6]][39:32];
|
||
|
dopa_ltmp[4:4] = memp[col_rd_ram_a_addra_tmp[14:6]][4:4];
|
||
|
task_x_buf (wr_mode_a, 39, 32, 4, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[5] === 1'b1 && col_rd_ram_a_wea_tmp[5] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[5] === 1'b1 && col_rd_ram_a_wea_tmp[5] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[5] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[5] !== 1'b1)) begin
|
||
|
doa_ltmp[47:40] = mem[col_rd_ram_a_addra_tmp[14:6]][47:40];
|
||
|
dopa_ltmp[5:5] = memp[col_rd_ram_a_addra_tmp[14:6]][5:5];
|
||
|
task_x_buf (wr_mode_a, 47, 40, 5, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[6] === 1'b1 && col_rd_ram_a_wea_tmp[6] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[6] === 1'b1 && col_rd_ram_a_wea_tmp[6] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[6] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[6] !== 1'b1)) begin
|
||
|
doa_ltmp[55:48] = mem[col_rd_ram_a_addra_tmp[14:6]][55:48];
|
||
|
dopa_ltmp[6:6] = memp[col_rd_ram_a_addra_tmp[14:6]][6:6];
|
||
|
task_x_buf (wr_mode_a, 55, 48, 6, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_a_web_tmp[7] === 1'b1 && col_rd_ram_a_wea_tmp[7] === 1'b1) || (col_rd_ram_a_seq == 2'b01 && col_rd_ram_a_web_tmp[7] === 1'b1 && col_rd_ram_a_wea_tmp[7] === 1'b0 && viol_type == 2'b10) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a != 2'b01 && wr_mode_b != 2'b01) || (col_rd_ram_a_seq == 2'b01 && wr_mode_a == 2'b01 && wr_mode_b != 2'b01 && col_rd_ram_a_web_tmp[7] === 1'b1) || (col_rd_ram_a_seq == 2'b11 && wr_mode_a == 2'b00 && col_rd_ram_a_web_tmp[7] !== 1'b1)) begin
|
||
|
doa_ltmp[63:56] = mem[col_rd_ram_a_addra_tmp[14:6]][63:56];
|
||
|
dopa_ltmp[7:7] = memp[col_rd_ram_a_addra_tmp[14:6]][7:7];
|
||
|
task_x_buf (wr_mode_a, 63, 56, 7, doa_ltmp, col_rd_ram_a_doa_tmp, dopa_ltmp, col_rd_ram_a_dopa_tmp);
|
||
|
end
|
||
|
|
||
|
end
|
||
|
endcase // case(ra_width)
|
||
|
end
|
||
|
endtask // task_col_rd_ram_a
|
||
|
|
||
|
|
||
|
task task_col_rd_ram_b;
|
||
|
|
||
|
input [1:0] col_rd_ram_b_seq; // 1 is bypass
|
||
|
input [7:0] col_rd_ram_b_wea_tmp;
|
||
|
input [7:0] col_rd_ram_b_web_tmp;
|
||
|
input [15:0] col_rd_ram_b_addrb_tmp;
|
||
|
inout [63:0] col_rd_ram_b_dob_tmp;
|
||
|
inout [7:0] col_rd_ram_b_dopb_tmp;
|
||
|
reg [63:0] col_rd_ram_b_dob_ltmp;
|
||
|
reg [7:0] col_rd_ram_b_dopb_ltmp;
|
||
|
|
||
|
begin
|
||
|
|
||
|
col_rd_ram_b_dob_ltmp= 64'b0;
|
||
|
col_rd_ram_b_dopb_ltmp= 8'b0;
|
||
|
|
||
|
case (rb_width)
|
||
|
1, 2, 4 : begin
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[0] === 1'b1 && col_rd_ram_b_wea_tmp[0] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[0] === 1'b1 && col_rd_ram_b_web_tmp[0] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[0] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[0] !== 1'b1)) begin
|
||
|
if (rb_width >= width)
|
||
|
col_rd_ram_b_dob_ltmp = mem[col_rd_ram_b_addrb_tmp[14:r_addrb_lbit_124]];
|
||
|
else
|
||
|
col_rd_ram_b_dob_ltmp = mem[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_124+1]][(col_rd_ram_b_addrb_tmp[r_addrb_bit_124:r_addrb_lbit_124] * rb_width) +: rb_width];
|
||
|
|
||
|
task_x_buf (wr_mode_b, 3, 0, 0, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
|
||
|
end
|
||
|
end // case: 1, 2, 4
|
||
|
8 : begin
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[0] === 1'b1 && col_rd_ram_b_wea_tmp[0] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[0] === 1'b1 && col_rd_ram_b_web_tmp[0] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[0] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[0] !== 1'b1)) begin
|
||
|
|
||
|
if (rb_width >= width) begin
|
||
|
col_rd_ram_b_dob_ltmp = mem[col_rd_ram_b_addrb_tmp[14:3]];
|
||
|
col_rd_ram_b_dopb_ltmp = memp[col_rd_ram_b_addrb_tmp[14:3]];
|
||
|
end
|
||
|
else begin
|
||
|
col_rd_ram_b_dob_ltmp = mem[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_8+1]][(col_rd_ram_b_addrb_tmp[r_addrb_bit_8:3] * 8) +: 8];
|
||
|
col_rd_ram_b_dopb_ltmp = memp[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_8+1]][(col_rd_ram_b_addrb_tmp[r_addrb_bit_8:3] * 1) +: 1];
|
||
|
end
|
||
|
|
||
|
task_x_buf (wr_mode_b, 7, 0, 0, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
|
||
|
end
|
||
|
end // case: 8
|
||
|
16 : begin
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[0] === 1'b1 && col_rd_ram_b_wea_tmp[0] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[0] === 1'b1 && col_rd_ram_b_web_tmp[0] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[0] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[0] !== 1'b1)) begin
|
||
|
if (rb_width >= width) begin
|
||
|
col_rd_ram_b_dob_ltmp[7:0] = mem[col_rd_ram_b_addrb_tmp[14:4]][7:0];
|
||
|
col_rd_ram_b_dopb_ltmp[0:0] = memp[col_rd_ram_b_addrb_tmp[14:4]][0:0];
|
||
|
end
|
||
|
else begin
|
||
|
col_rd_ram_b_dob_ltmp[7:0] = mem[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_16+1]][(col_rd_ram_b_addrb_tmp[r_addrb_bit_16:4] * 16) +: 8];
|
||
|
col_rd_ram_b_dopb_ltmp[0:0] = memp[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_16+1]][(col_rd_ram_b_addrb_tmp[r_addrb_bit_16:4] * 2) +: 1];
|
||
|
end
|
||
|
task_x_buf (wr_mode_b, 7, 0, 0, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[1] === 1'b1 && col_rd_ram_b_wea_tmp[1] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[1] === 1'b1 && col_rd_ram_b_web_tmp[1] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[1] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[1] !== 1'b1)) begin
|
||
|
|
||
|
if (rb_width >= width) begin
|
||
|
col_rd_ram_b_dob_ltmp[15:8] = mem[col_rd_ram_b_addrb_tmp[14:4]][15:8];
|
||
|
col_rd_ram_b_dopb_ltmp[1:1] = memp[col_rd_ram_b_addrb_tmp[14:4]][1:1];
|
||
|
end
|
||
|
else begin
|
||
|
col_rd_ram_b_dob_ltmp[15:8] = mem[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_16+1]][((col_rd_ram_b_addrb_tmp[r_addrb_bit_16:4] * 16) + 8) +: 8];
|
||
|
col_rd_ram_b_dopb_ltmp[1:1] = memp[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_16+1]][((col_rd_ram_b_addrb_tmp[r_addrb_bit_16:4] * 2) + 1) +: 1];
|
||
|
end
|
||
|
task_x_buf (wr_mode_b, 15, 8, 1, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
end
|
||
|
32 : begin
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[0] === 1'b1 && col_rd_ram_b_wea_tmp[0] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[0] === 1'b1 && col_rd_ram_b_web_tmp[0] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[0] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[0] !== 1'b1)) begin
|
||
|
if (rb_width >= width) begin
|
||
|
col_rd_ram_b_dob_ltmp[7:0] = mem[col_rd_ram_b_addrb_tmp[14:5]][7:0];
|
||
|
col_rd_ram_b_dopb_ltmp[0:0] = memp[col_rd_ram_b_addrb_tmp[14:5]][0:0];
|
||
|
end
|
||
|
else begin
|
||
|
col_rd_ram_b_dob_ltmp[7:0] = mem[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_32+1]][(col_rd_ram_b_addrb_tmp[r_addrb_bit_32:5] * 32) +: 8];
|
||
|
col_rd_ram_b_dopb_ltmp[0:0] = memp[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_32+1]][(col_rd_ram_b_addrb_tmp[r_addrb_bit_32:5] * 4) +: 1];
|
||
|
end
|
||
|
task_x_buf (wr_mode_b, 7, 0, 0, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[1] === 1'b1 && col_rd_ram_b_wea_tmp[1] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[1] === 1'b1 && col_rd_ram_b_web_tmp[1] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[1] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[1] !== 1'b1)) begin
|
||
|
if (rb_width >= width) begin
|
||
|
col_rd_ram_b_dob_ltmp[15:8] = mem[col_rd_ram_b_addrb_tmp[14:5]][15:8];
|
||
|
col_rd_ram_b_dopb_ltmp[1:1] = memp[col_rd_ram_b_addrb_tmp[14:5]][1:1];
|
||
|
end
|
||
|
else begin
|
||
|
col_rd_ram_b_dob_ltmp[15:8] = mem[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_32+1]][((col_rd_ram_b_addrb_tmp[r_addrb_bit_32:5] * 32) + 8) +: 8];
|
||
|
col_rd_ram_b_dopb_ltmp[1:1] = memp[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_32+1]][((col_rd_ram_b_addrb_tmp[r_addrb_bit_32:5] * 4) + 1) +: 1];
|
||
|
end
|
||
|
task_x_buf (wr_mode_b, 15, 8, 1, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[2] === 1'b1 && col_rd_ram_b_wea_tmp[2] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[2] === 1'b1 && col_rd_ram_b_web_tmp[2] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[2] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[2] !== 1'b1)) begin
|
||
|
if (rb_width >= width) begin
|
||
|
col_rd_ram_b_dob_ltmp[23:16] = mem[col_rd_ram_b_addrb_tmp[14:5]][23:16];
|
||
|
col_rd_ram_b_dopb_ltmp[2:2] = memp[col_rd_ram_b_addrb_tmp[14:5]][2:2];
|
||
|
end
|
||
|
else begin
|
||
|
col_rd_ram_b_dob_ltmp[23:16] = mem[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_32+1]][((col_rd_ram_b_addrb_tmp[r_addrb_bit_32:5] * 32) + 16) +: 8];
|
||
|
col_rd_ram_b_dopb_ltmp[2:2] = memp[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_32+1]][((col_rd_ram_b_addrb_tmp[r_addrb_bit_32:5] * 4) + 2) +: 1];
|
||
|
end
|
||
|
task_x_buf (wr_mode_b, 23, 16, 2, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[3] === 1'b1 && col_rd_ram_b_wea_tmp[3] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[3] === 1'b1 && col_rd_ram_b_web_tmp[3] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[3] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[3] !== 1'b1)) begin
|
||
|
if (rb_width >= width) begin
|
||
|
col_rd_ram_b_dob_ltmp[31:24] = mem[col_rd_ram_b_addrb_tmp[14:5]][31:24];
|
||
|
col_rd_ram_b_dopb_ltmp[3:3] = memp[col_rd_ram_b_addrb_tmp[14:5]][3:3];
|
||
|
end
|
||
|
else begin
|
||
|
col_rd_ram_b_dob_ltmp[31:24] = mem[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_32+1]][((col_rd_ram_b_addrb_tmp[r_addrb_bit_32:5] * 32) + 24) +: 8];
|
||
|
col_rd_ram_b_dopb_ltmp[3:3] = memp[col_rd_ram_b_addrb_tmp[14:r_addrb_bit_32+1]][((col_rd_ram_b_addrb_tmp[r_addrb_bit_32:5] * 4) + 3) +: 1];
|
||
|
end
|
||
|
task_x_buf (wr_mode_b, 31, 24, 3, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
end
|
||
|
64 : begin
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[0] === 1'b1 && col_rd_ram_b_wea_tmp[0] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[0] === 1'b1 && col_rd_ram_b_web_tmp[0] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[0] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[0] !== 1'b1)) begin
|
||
|
col_rd_ram_b_dob_ltmp[7:0] = mem[col_rd_ram_b_addrb_tmp[14:6]][7:0];
|
||
|
col_rd_ram_b_dopb_ltmp[0:0] = memp[col_rd_ram_b_addrb_tmp[14:6]][0:0];
|
||
|
task_x_buf (wr_mode_b, 7, 0, 0, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[1] === 1'b1 && col_rd_ram_b_wea_tmp[1] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[1] === 1'b1 && col_rd_ram_b_web_tmp[1] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[1] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[1] !== 1'b1)) begin
|
||
|
col_rd_ram_b_dob_ltmp[15:8] = mem[col_rd_ram_b_addrb_tmp[14:6]][15:8];
|
||
|
col_rd_ram_b_dopb_ltmp[1:1] = memp[col_rd_ram_b_addrb_tmp[14:6]][1:1];
|
||
|
task_x_buf (wr_mode_b, 15, 8, 1, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[2] === 1'b1 && col_rd_ram_b_wea_tmp[2] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[2] === 1'b1 && col_rd_ram_b_web_tmp[2] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[2] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[2] !== 1'b1)) begin
|
||
|
col_rd_ram_b_dob_ltmp[23:16] = mem[col_rd_ram_b_addrb_tmp[14:6]][23:16];
|
||
|
col_rd_ram_b_dopb_ltmp[2:2] = memp[col_rd_ram_b_addrb_tmp[14:6]][2:2];
|
||
|
task_x_buf (wr_mode_b, 23, 16, 2, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[3] === 1'b1 && col_rd_ram_b_wea_tmp[3] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[3] === 1'b1 && col_rd_ram_b_web_tmp[3] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[3] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[3] !== 1'b1)) begin
|
||
|
col_rd_ram_b_dob_ltmp[31:24] = mem[col_rd_ram_b_addrb_tmp[14:6]][31:24];
|
||
|
col_rd_ram_b_dopb_ltmp[3:3] = memp[col_rd_ram_b_addrb_tmp[14:6]][3:3];
|
||
|
task_x_buf (wr_mode_b, 31, 24, 3, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[4] === 1'b1 && col_rd_ram_b_wea_tmp[4] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[4] === 1'b1 && col_rd_ram_b_web_tmp[4] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[4] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[4] !== 1'b1)) begin
|
||
|
col_rd_ram_b_dob_ltmp[39:32] = mem[col_rd_ram_b_addrb_tmp[14:6]][39:32];
|
||
|
col_rd_ram_b_dopb_ltmp[4:4] = memp[col_rd_ram_b_addrb_tmp[14:6]][4:4];
|
||
|
task_x_buf (wr_mode_b, 39, 32, 4, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[5] === 1'b1 && col_rd_ram_b_wea_tmp[5] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[5] === 1'b1 && col_rd_ram_b_web_tmp[5] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[5] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[5] !== 1'b1)) begin
|
||
|
col_rd_ram_b_dob_ltmp[47:40] = mem[col_rd_ram_b_addrb_tmp[14:6]][47:40];
|
||
|
col_rd_ram_b_dopb_ltmp[5:5] = memp[col_rd_ram_b_addrb_tmp[14:6]][5:5];
|
||
|
task_x_buf (wr_mode_b, 47, 40, 5, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[6] === 1'b1 && col_rd_ram_b_wea_tmp[6] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[6] === 1'b1 && col_rd_ram_b_web_tmp[6] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[6] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[6] !== 1'b1)) begin
|
||
|
col_rd_ram_b_dob_ltmp[55:48] = mem[col_rd_ram_b_addrb_tmp[14:6]][55:48];
|
||
|
col_rd_ram_b_dopb_ltmp[6:6] = memp[col_rd_ram_b_addrb_tmp[14:6]][6:6];
|
||
|
task_x_buf (wr_mode_b, 55, 48, 6, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
if ((col_rd_ram_b_web_tmp[7] === 1'b1 && col_rd_ram_b_wea_tmp[7] === 1'b1) || (col_rd_ram_b_seq == 2'b01 && col_rd_ram_b_wea_tmp[7] === 1'b1 && col_rd_ram_b_web_tmp[7] === 1'b0 && viol_type == 2'b11) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b != 2'b01 && wr_mode_a != 2'b01) || (col_rd_ram_b_seq == 2'b01 && wr_mode_b == 2'b01 && wr_mode_a != 2'b01 && col_rd_ram_b_wea_tmp[7] === 1'b1) || (col_rd_ram_b_seq == 2'b11 && wr_mode_b == 2'b00 && col_rd_ram_b_wea_tmp[7] !== 1'b1)) begin
|
||
|
col_rd_ram_b_dob_ltmp[63:56] = mem[col_rd_ram_b_addrb_tmp[14:6]][63:56];
|
||
|
col_rd_ram_b_dopb_ltmp[7:7] = memp[col_rd_ram_b_addrb_tmp[14:6]][7:7];
|
||
|
task_x_buf (wr_mode_b, 63, 56, 7, col_rd_ram_b_dob_ltmp, col_rd_ram_b_dob_tmp, col_rd_ram_b_dopb_ltmp, col_rd_ram_b_dopb_tmp);
|
||
|
end
|
||
|
|
||
|
end
|
||
|
endcase // case(rb_width)
|
||
|
end
|
||
|
endtask // task_col_rd_ram_b
|
||
|
|
||
|
|
||
|
task task_rd_ram_a;
|
||
|
|
||
|
input [15:0] rd_ram_a_addra_tmp;
|
||
|
inout [63:0] doa_tmp;
|
||
|
inout [7:0] dopa_tmp;
|
||
|
|
||
|
begin
|
||
|
|
||
|
case (ra_width)
|
||
|
1, 2, 4 : begin
|
||
|
if (ra_width >= width)
|
||
|
doa_tmp = mem[rd_ram_a_addra_tmp[14:r_addra_lbit_124]];
|
||
|
|
||
|
else
|
||
|
doa_tmp = mem[rd_ram_a_addra_tmp[14:r_addra_bit_124+1]][(rd_ram_a_addra_tmp[r_addra_bit_124:r_addra_lbit_124] * ra_width) +: ra_width];
|
||
|
end
|
||
|
8 : begin
|
||
|
if (ra_width >= width) begin
|
||
|
doa_tmp = mem[rd_ram_a_addra_tmp[14:3]];
|
||
|
dopa_tmp = memp[rd_ram_a_addra_tmp[14:3]];
|
||
|
end
|
||
|
else begin
|
||
|
doa_tmp = mem[rd_ram_a_addra_tmp[14:r_addra_bit_8+1]][(rd_ram_a_addra_tmp[r_addra_bit_8:3] * 8) +: 8];
|
||
|
dopa_tmp = memp[rd_ram_a_addra_tmp[14:r_addra_bit_8+1]][(rd_ram_a_addra_tmp[r_addra_bit_8:3] * 1) +: 1];
|
||
|
end
|
||
|
end
|
||
|
16 : begin
|
||
|
if (ra_width >= width) begin
|
||
|
doa_tmp = mem[rd_ram_a_addra_tmp[14:4]];
|
||
|
dopa_tmp = memp[rd_ram_a_addra_tmp[14:4]];
|
||
|
end
|
||
|
else begin
|
||
|
doa_tmp = mem[rd_ram_a_addra_tmp[14:r_addra_bit_16+1]][(rd_ram_a_addra_tmp[r_addra_bit_16:4] * 16) +: 16];
|
||
|
dopa_tmp = memp[rd_ram_a_addra_tmp[14:r_addra_bit_16+1]][(rd_ram_a_addra_tmp[r_addra_bit_16:4] * 2) +: 2];
|
||
|
end
|
||
|
end
|
||
|
32 : begin
|
||
|
if (ra_width >= width) begin
|
||
|
doa_tmp = mem[rd_ram_a_addra_tmp[14:5]];
|
||
|
dopa_tmp = memp[rd_ram_a_addra_tmp[14:5]];
|
||
|
end
|
||
|
else begin
|
||
|
doa_tmp = mem[rd_ram_a_addra_tmp[14:r_addra_bit_32+1]][(rd_ram_a_addra_tmp[r_addra_bit_32:5] * 32) +: 32];
|
||
|
dopa_tmp = memp[rd_ram_a_addra_tmp[14:r_addra_bit_32+1]][(rd_ram_a_addra_tmp[r_addra_bit_32:5] * 4) +: 4];
|
||
|
end
|
||
|
end
|
||
|
64 : begin
|
||
|
if (ra_width >= width) begin
|
||
|
doa_tmp = mem[rd_ram_a_addra_tmp[14:6]];
|
||
|
dopa_tmp = memp[rd_ram_a_addra_tmp[14:6]];
|
||
|
end
|
||
|
end
|
||
|
endcase // case(ra_width)
|
||
|
|
||
|
end
|
||
|
endtask // task_rd_ram_a
|
||
|
|
||
|
|
||
|
task task_rd_ram_b;
|
||
|
|
||
|
input [15:0] rd_ram_b_addrb_tmp;
|
||
|
inout [31:0] dob_tmp;
|
||
|
inout [3:0] dopb_tmp;
|
||
|
|
||
|
begin
|
||
|
|
||
|
case (rb_width)
|
||
|
1, 2, 4 : begin
|
||
|
if (rb_width >= width)
|
||
|
dob_tmp = mem[rd_ram_b_addrb_tmp[14:r_addrb_lbit_124]];
|
||
|
else
|
||
|
dob_tmp = mem[rd_ram_b_addrb_tmp[14:r_addrb_bit_124+1]][(rd_ram_b_addrb_tmp[r_addrb_bit_124:r_addrb_lbit_124] * rb_width) +: rb_width];
|
||
|
end
|
||
|
8 : begin
|
||
|
if (rb_width >= width) begin
|
||
|
dob_tmp = mem[rd_ram_b_addrb_tmp[14:3]];
|
||
|
dopb_tmp = memp[rd_ram_b_addrb_tmp[14:3]];
|
||
|
end
|
||
|
else begin
|
||
|
dob_tmp = mem[rd_ram_b_addrb_tmp[14:r_addrb_bit_8+1]][(rd_ram_b_addrb_tmp[r_addrb_bit_8:3] * 8) +: 8];
|
||
|
dopb_tmp = memp[rd_ram_b_addrb_tmp[14:r_addrb_bit_8+1]][(rd_ram_b_addrb_tmp[r_addrb_bit_8:3] * 1) +: 1];
|
||
|
end
|
||
|
end
|
||
|
16 : begin
|
||
|
if (rb_width >= width) begin
|
||
|
dob_tmp = mem[rd_ram_b_addrb_tmp[14:4]];
|
||
|
dopb_tmp = memp[rd_ram_b_addrb_tmp[14:4]];
|
||
|
end
|
||
|
else begin
|
||
|
dob_tmp = mem[rd_ram_b_addrb_tmp[14:r_addrb_bit_16+1]][(rd_ram_b_addrb_tmp[r_addrb_bit_16:4] * 16) +: 16];
|
||
|
dopb_tmp = memp[rd_ram_b_addrb_tmp[14:r_addrb_bit_16+1]][(rd_ram_b_addrb_tmp[r_addrb_bit_16:4] * 2) +: 2];
|
||
|
end
|
||
|
end
|
||
|
32 : begin
|
||
|
dob_tmp = mem[rd_ram_b_addrb_tmp[14:5]];
|
||
|
dopb_tmp = memp[rd_ram_b_addrb_tmp[14:5]];
|
||
|
end
|
||
|
64 : begin
|
||
|
if (rb_width >= width) begin
|
||
|
dob_tmp = mem[rd_ram_b_addrb_tmp[14:6]];
|
||
|
dopb_tmp = memp[rd_ram_b_addrb_tmp[14:6]];
|
||
|
end
|
||
|
end
|
||
|
endcase
|
||
|
end
|
||
|
endtask // task_rd_ram_b
|
||
|
|
||
|
|
||
|
task chk_for_col_msg;
|
||
|
|
||
|
input wea_tmp;
|
||
|
input web_tmp;
|
||
|
input [15:0] addra_tmp;
|
||
|
input [15:0] addrb_tmp;
|
||
|
|
||
|
begin
|
||
|
|
||
|
if (SIM_COLLISION_CHECK == "ALL" || SIM_COLLISION_CHECK == "WARNING_ONLY")
|
||
|
|
||
|
if (wea_tmp === 1'b1 && web_tmp === 1'b1 && col_wr_wr_msg == 1) begin
|
||
|
|
||
|
if (chk_ox_msg == 1) begin
|
||
|
|
||
|
if (!(rdaddr_collision_hwconfig_int == 0 && chk_ox_same_clk == 1))
|
||
|
$display("Address Overlap Error on RAMB36E1 : %m at simulation time %.3f ns.\nA write was requested to the overlapped address simultaneously at both port A and port B of the RAM. The contents written to the RAM at address location %h (hex) of port A and address location %h (hex) of port B are unknown.", $time/1000.0, addra_tmp, addrb_tmp);
|
||
|
|
||
|
|
||
|
end
|
||
|
else
|
||
|
$display("Memory Collision Error on RAMB36E1 : %m at simulation time %.3f ns.\nA write was requested to the same address simultaneously at both port A and port B of the RAM. The contents written to the RAM at address location %h (hex) of port A and address location %h (hex) of port B are unknown.", $time/1000.0, addra_tmp, addrb_tmp);
|
||
|
|
||
|
col_wr_wr_msg = 0;
|
||
|
|
||
|
end // if (wea_tmp === 1'b1 && web_tmp === 1'b1 && col_wr_wr_msg == 1)
|
||
|
else if (wea_tmp === 1'b1 && web_tmp === 1'b0 && col_wra_rdb_msg == 1) begin
|
||
|
|
||
|
if (chk_ox_msg == 1) begin
|
||
|
|
||
|
if (!(rdaddr_collision_hwconfig_int == 0 && chk_ox_same_clk == 1))
|
||
|
$display("Address Overlap Error on RAMB36E1 : %m at simulation time %.3f ns.\nA read was performed on address %h (hex) of port B while a write was requested to the overlapped address %h (hex) of port A. The write will be unsuccessful and the contents of the RAM at both address locations of port A and B became unknown.", $time/1000.0, addrb_tmp, addra_tmp);
|
||
|
|
||
|
end
|
||
|
else begin
|
||
|
|
||
|
if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (!(chk_col_same_clk == 1 && rdaddr_collision_hwconfig_int == 0) && SIM_DEVICE == "VIRTEX6"))
|
||
|
$display("Memory Collision Error on RAMB36E1 : %m at simulation time %.3f ns.\nA read was performed on address %h (hex) of port B while a write was requested to the same address on port A. The write will be unsuccessful and the contents of the RAM at both address locations of port A and B became unknown.", $time/1000.0, addrb_tmp);
|
||
|
else if (wr_mode_a != 2'b01 || (viol_type == 2'b11 && wr_mode_a == 2'b01))
|
||
|
$display("Memory Collision Error on RAMB36E1 : %m at simulation time %.3f ns.\nA read was performed on address %h (hex) of port B while a write was requested to the same address on port A. The write will be successful however the read value on port B is unknown until the next CLKB cycle.", $time/1000.0, addrb_tmp);
|
||
|
|
||
|
end // else: !if(chk_ox_msg == 1)
|
||
|
|
||
|
col_wra_rdb_msg = 0;
|
||
|
|
||
|
end
|
||
|
else if (wea_tmp === 1'b0 && web_tmp === 1'b1 && col_wrb_rda_msg == 1) begin
|
||
|
|
||
|
if (chk_ox_msg == 1) begin
|
||
|
|
||
|
if (!(rdaddr_collision_hwconfig_int == 0 && chk_ox_same_clk == 1))
|
||
|
$display("Address Overlap Error on RAMB36E1 : %m at simulation time %.3f ns.\nA read was performed on address %h (hex) of port A while a write was requested to the overlapped address %h (hex) of port B. The write will be unsuccessful and the contents of the RAM at both address locations of port A and B became unknown.", $time/1000.0, addra_tmp, addrb_tmp);
|
||
|
|
||
|
end
|
||
|
else begin
|
||
|
|
||
|
if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (!(chk_col_same_clk == 1 && rdaddr_collision_hwconfig_int == 0) && SIM_DEVICE == "VIRTEX6"))
|
||
|
$display("Memory Collision Error on RAMB36E1 : %m at simulation time %.3f ns.\nA read was performed on address %h (hex) of port A while a write was requested to the same address on port B. The write will be unsuccessful and the contents of the RAM at both address locations of port A and B became unknown.", $time/1000.0, addrb_tmp);
|
||
|
else if (wr_mode_b != 2'b01 || (viol_type == 2'b10 && wr_mode_b == 2'b01))
|
||
|
$display("Memory Collision Error on RAMB36E1 : %m at simulation time %.3f ns.\nA read was performed on address %h (hex) of port A while a write was requested to the same address on port B. The write will be successful however the read value on port A is unknown until the next CLKA cycle.", $time/1000.0, addra_tmp);
|
||
|
|
||
|
end // else: !if(chk_ox_msg == 1)
|
||
|
|
||
|
col_wrb_rda_msg = 0;
|
||
|
|
||
|
end // if (wea_tmp === 1'b0 && web_tmp === 1'b1 && col_wrb_rda_msg == 1)
|
||
|
|
||
|
end
|
||
|
|
||
|
endtask // chk_for_col_msg
|
||
|
|
||
|
|
||
|
task task_col_ecc_read;
|
||
|
|
||
|
inout [63:0] do_tmp;
|
||
|
inout [7:0] dop_tmp;
|
||
|
input [15:0] addr_tmp;
|
||
|
|
||
|
reg [71:0] task_ecc_bit_position;
|
||
|
reg [7:0] task_dopr_ecc, task_syndrome;
|
||
|
reg [63:0] task_di_in_ecc_corrected;
|
||
|
reg [7:0] task_dip_in_ecc_corrected;
|
||
|
|
||
|
begin
|
||
|
|
||
|
if (|do_tmp === 1'bx) begin // if there is collision
|
||
|
dbiterr_out <= 1'bx;
|
||
|
sbiterr_out <= 1'bx;
|
||
|
end
|
||
|
else begin
|
||
|
|
||
|
task_dopr_ecc = fn_dip_ecc(1'b0, do_tmp, dop_tmp);
|
||
|
|
||
|
task_syndrome = task_dopr_ecc ^ dop_tmp;
|
||
|
|
||
|
if (task_syndrome !== 0) begin
|
||
|
|
||
|
if (task_syndrome[7]) begin // dectect single bit error
|
||
|
|
||
|
task_ecc_bit_position = {do_tmp[63:57], dop_tmp[6], do_tmp[56:26], dop_tmp[5], do_tmp[25:11], dop_tmp[4], do_tmp[10:4], dop_tmp[3], do_tmp[3:1], dop_tmp[2], do_tmp[0], dop_tmp[1:0], dop_tmp[7]};
|
||
|
|
||
|
|
||
|
if (task_syndrome[6:0] > 71) begin
|
||
|
$display ("DRC Error : Simulation halted due Corrupted DIP. To correct this problem, make sure that reliable data is fed to the DIP. The correct Parity must be generated by a Hamming code encoder or encoder in the Block RAM. The output from the model is unreliable if there are more than 2 bit errors. The model doesn't warn if there is sporadic input of more than 2 bit errors due to the limitation in Hamming code.");
|
||
|
$finish;
|
||
|
end
|
||
|
|
||
|
task_ecc_bit_position[task_syndrome[6:0]] = ~task_ecc_bit_position[task_syndrome[6:0]]; // correct single bit error in the output
|
||
|
|
||
|
task_di_in_ecc_corrected = {task_ecc_bit_position[71:65], task_ecc_bit_position[63:33], task_ecc_bit_position[31:17], task_ecc_bit_position[15:9], task_ecc_bit_position[7:5], task_ecc_bit_position[3]}; // correct single bit error in the memory
|
||
|
|
||
|
do_tmp = task_di_in_ecc_corrected;
|
||
|
|
||
|
task_dip_in_ecc_corrected = {task_ecc_bit_position[0], task_ecc_bit_position[64], task_ecc_bit_position[32], task_ecc_bit_position[16], task_ecc_bit_position[8], task_ecc_bit_position[4], task_ecc_bit_position[2:1]}; // correct single bit error in the parity memory
|
||
|
|
||
|
dop_tmp = task_dip_in_ecc_corrected;
|
||
|
|
||
|
dbiterr_out <= 0;
|
||
|
sbiterr_out <= 1;
|
||
|
|
||
|
end
|
||
|
else if (!task_syndrome[7]) begin // double bit error
|
||
|
sbiterr_out <= 0;
|
||
|
dbiterr_out <= 1;
|
||
|
|
||
|
end
|
||
|
end // if (task_syndrome !== 0)
|
||
|
else begin
|
||
|
dbiterr_out <= 0;
|
||
|
sbiterr_out <= 0;
|
||
|
|
||
|
end // else: !if(task_syndrome !== 0)
|
||
|
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
endtask // task_col_ecc_read
|
||
|
|
||
|
|
||
|
function [7:0] fn_dip_ecc;
|
||
|
|
||
|
input encode;
|
||
|
input [63:0] di_in;
|
||
|
input [7:0] dip_in;
|
||
|
|
||
|
begin
|
||
|
|
||
|
fn_dip_ecc[0] = di_in[0]^di_in[1]^di_in[3]^di_in[4]^di_in[6]^di_in[8]
|
||
|
^di_in[10]^di_in[11]^di_in[13]^di_in[15]^di_in[17]^di_in[19]
|
||
|
^di_in[21]^di_in[23]^di_in[25]^di_in[26]^di_in[28]
|
||
|
^di_in[30]^di_in[32]^di_in[34]^di_in[36]^di_in[38]
|
||
|
^di_in[40]^di_in[42]^di_in[44]^di_in[46]^di_in[48]
|
||
|
^di_in[50]^di_in[52]^di_in[54]^di_in[56]^di_in[57]^di_in[59]
|
||
|
^di_in[61]^di_in[63];
|
||
|
|
||
|
fn_dip_ecc[1] = di_in[0]^di_in[2]^di_in[3]^di_in[5]^di_in[6]^di_in[9]
|
||
|
^di_in[10]^di_in[12]^di_in[13]^di_in[16]^di_in[17]
|
||
|
^di_in[20]^di_in[21]^di_in[24]^di_in[25]^di_in[27]^di_in[28]
|
||
|
^di_in[31]^di_in[32]^di_in[35]^di_in[36]^di_in[39]
|
||
|
^di_in[40]^di_in[43]^di_in[44]^di_in[47]^di_in[48]
|
||
|
^di_in[51]^di_in[52]^di_in[55]^di_in[56]^di_in[58]^di_in[59]
|
||
|
^di_in[62]^di_in[63];
|
||
|
|
||
|
fn_dip_ecc[2] = di_in[1]^di_in[2]^di_in[3]^di_in[7]^di_in[8]^di_in[9]
|
||
|
^di_in[10]^di_in[14]^di_in[15]^di_in[16]^di_in[17]
|
||
|
^di_in[22]^di_in[23]^di_in[24]^di_in[25]^di_in[29]
|
||
|
^di_in[30]^di_in[31]^di_in[32]^di_in[37]^di_in[38]^di_in[39]
|
||
|
^di_in[40]^di_in[45]^di_in[46]^di_in[47]^di_in[48]
|
||
|
^di_in[53]^di_in[54]^di_in[55]^di_in[56]
|
||
|
^di_in[60]^di_in[61]^di_in[62]^di_in[63];
|
||
|
|
||
|
fn_dip_ecc[3] = di_in[4]^di_in[5]^di_in[6]^di_in[7]^di_in[8]^di_in[9]
|
||
|
^di_in[10]^di_in[18]^di_in[19]
|
||
|
^di_in[20]^di_in[21]^di_in[22]^di_in[23]^di_in[24]^di_in[25]
|
||
|
^di_in[33]^di_in[34]^di_in[35]^di_in[36]^di_in[37]^di_in[38]^di_in[39]
|
||
|
^di_in[40]^di_in[49]
|
||
|
^di_in[50]^di_in[51]^di_in[52]^di_in[53]^di_in[54]^di_in[55]^di_in[56];
|
||
|
|
||
|
fn_dip_ecc[4] = di_in[11]^di_in[12]^di_in[13]^di_in[14]^di_in[15]^di_in[16]^di_in[17]^di_in[18]^di_in[19]
|
||
|
^di_in[20]^di_in[21]^di_in[22]^di_in[23]^di_in[24]^di_in[25]
|
||
|
^di_in[41]^di_in[42]^di_in[43]^di_in[44]^di_in[45]^di_in[46]^di_in[47]^di_in[48]^di_in[49]
|
||
|
^di_in[50]^di_in[51]^di_in[52]^di_in[53]^di_in[54]^di_in[55]^di_in[56];
|
||
|
|
||
|
|
||
|
fn_dip_ecc[5] = di_in[26]^di_in[27]^di_in[28]^di_in[29]
|
||
|
^di_in[30]^di_in[31]^di_in[32]^di_in[33]^di_in[34]^di_in[35]^di_in[36]^di_in[37]^di_in[38]^di_in[39]
|
||
|
^di_in[40]^di_in[41]^di_in[42]^di_in[43]^di_in[44]^di_in[45]^di_in[46]^di_in[47]^di_in[48]^di_in[49]
|
||
|
^di_in[50]^di_in[51]^di_in[52]^di_in[53]^di_in[54]^di_in[55]^di_in[56];
|
||
|
|
||
|
fn_dip_ecc[6] = di_in[57]^di_in[58]^di_in[59]
|
||
|
^di_in[60]^di_in[61]^di_in[62]^di_in[63];
|
||
|
|
||
|
if (encode == 1'b1)
|
||
|
|
||
|
fn_dip_ecc[7] = fn_dip_ecc[0]^fn_dip_ecc[1]^fn_dip_ecc[2]^fn_dip_ecc[3]^fn_dip_ecc[4]^fn_dip_ecc[5]^fn_dip_ecc[6]
|
||
|
^di_in[0]^di_in[1]^di_in[2]^di_in[3]^di_in[4]^di_in[5]^di_in[6]^di_in[7]^di_in[8]^di_in[9]
|
||
|
^di_in[10]^di_in[11]^di_in[12]^di_in[13]^di_in[14]^di_in[15]^di_in[16]^di_in[17]^di_in[18]^di_in[19]
|
||
|
^di_in[20]^di_in[21]^di_in[22]^di_in[23]^di_in[24]^di_in[25]^di_in[26]^di_in[27]^di_in[28]^di_in[29]
|
||
|
^di_in[30]^di_in[31]^di_in[32]^di_in[33]^di_in[34]^di_in[35]^di_in[36]^di_in[37]^di_in[38]^di_in[39]
|
||
|
^di_in[40]^di_in[41]^di_in[42]^di_in[43]^di_in[44]^di_in[45]^di_in[46]^di_in[47]^di_in[48]^di_in[49]
|
||
|
^di_in[50]^di_in[51]^di_in[52]^di_in[53]^di_in[54]^di_in[55]^di_in[56]^di_in[57]^di_in[58]^di_in[59]
|
||
|
^di_in[60]^di_in[61]^di_in[62]^di_in[63];
|
||
|
else
|
||
|
fn_dip_ecc[7] = dip_in[0]^dip_in[1]^dip_in[2]^dip_in[3]^dip_in[4]^dip_in[5]^dip_in[6]
|
||
|
^di_in[0]^di_in[1]^di_in[2]^di_in[3]^di_in[4]^di_in[5]^di_in[6]^di_in[7]^di_in[8]^di_in[9]
|
||
|
^di_in[10]^di_in[11]^di_in[12]^di_in[13]^di_in[14]^di_in[15]^di_in[16]^di_in[17]^di_in[18]^di_in[19]
|
||
|
^di_in[20]^di_in[21]^di_in[22]^di_in[23]^di_in[24]^di_in[25]^di_in[26]^di_in[27]^di_in[28]^di_in[29]
|
||
|
^di_in[30]^di_in[31]^di_in[32]^di_in[33]^di_in[34]^di_in[35]^di_in[36]^di_in[37]^di_in[38]^di_in[39]
|
||
|
^di_in[40]^di_in[41]^di_in[42]^di_in[43]^di_in[44]^di_in[45]^di_in[46]^di_in[47]^di_in[48]^di_in[49]
|
||
|
^di_in[50]^di_in[51]^di_in[52]^di_in[53]^di_in[54]^di_in[55]^di_in[56]^di_in[57]^di_in[58]^di_in[59]
|
||
|
^di_in[60]^di_in[61]^di_in[62]^di_in[63];
|
||
|
|
||
|
end
|
||
|
|
||
|
endfunction // fn_dip_ecc
|
||
|
|
||
|
/******************************************** END task and function **************************************/
|
||
|
|
||
|
|
||
|
initial begin
|
||
|
|
||
|
if (INIT_FILE == "NONE") begin // memory initialization from attributes
|
||
|
|
||
|
init_mult = 256/width;
|
||
|
|
||
|
for (count = 0; count < init_mult; count = count + 1) begin
|
||
|
|
||
|
init_offset = count * width;
|
||
|
|
||
|
mem[count] = INIT_00[init_offset +:width];
|
||
|
mem[count + (init_mult * 1)] = INIT_01[init_offset +:width];
|
||
|
mem[count + (init_mult * 2)] = INIT_02[init_offset +:width];
|
||
|
mem[count + (init_mult * 3)] = INIT_03[init_offset +:width];
|
||
|
mem[count + (init_mult * 4)] = INIT_04[init_offset +:width];
|
||
|
mem[count + (init_mult * 5)] = INIT_05[init_offset +:width];
|
||
|
mem[count + (init_mult * 6)] = INIT_06[init_offset +:width];
|
||
|
mem[count + (init_mult * 7)] = INIT_07[init_offset +:width];
|
||
|
mem[count + (init_mult * 8)] = INIT_08[init_offset +:width];
|
||
|
mem[count + (init_mult * 9)] = INIT_09[init_offset +:width];
|
||
|
mem[count + (init_mult * 10)] = INIT_0A[init_offset +:width];
|
||
|
mem[count + (init_mult * 11)] = INIT_0B[init_offset +:width];
|
||
|
mem[count + (init_mult * 12)] = INIT_0C[init_offset +:width];
|
||
|
mem[count + (init_mult * 13)] = INIT_0D[init_offset +:width];
|
||
|
mem[count + (init_mult * 14)] = INIT_0E[init_offset +:width];
|
||
|
mem[count + (init_mult * 15)] = INIT_0F[init_offset +:width];
|
||
|
mem[count + (init_mult * 16)] = INIT_10[init_offset +:width];
|
||
|
mem[count + (init_mult * 17)] = INIT_11[init_offset +:width];
|
||
|
mem[count + (init_mult * 18)] = INIT_12[init_offset +:width];
|
||
|
mem[count + (init_mult * 19)] = INIT_13[init_offset +:width];
|
||
|
mem[count + (init_mult * 20)] = INIT_14[init_offset +:width];
|
||
|
mem[count + (init_mult * 21)] = INIT_15[init_offset +:width];
|
||
|
mem[count + (init_mult * 22)] = INIT_16[init_offset +:width];
|
||
|
mem[count + (init_mult * 23)] = INIT_17[init_offset +:width];
|
||
|
mem[count + (init_mult * 24)] = INIT_18[init_offset +:width];
|
||
|
mem[count + (init_mult * 25)] = INIT_19[init_offset +:width];
|
||
|
mem[count + (init_mult * 26)] = INIT_1A[init_offset +:width];
|
||
|
mem[count + (init_mult * 27)] = INIT_1B[init_offset +:width];
|
||
|
mem[count + (init_mult * 28)] = INIT_1C[init_offset +:width];
|
||
|
mem[count + (init_mult * 29)] = INIT_1D[init_offset +:width];
|
||
|
mem[count + (init_mult * 30)] = INIT_1E[init_offset +:width];
|
||
|
mem[count + (init_mult * 31)] = INIT_1F[init_offset +:width];
|
||
|
mem[count + (init_mult * 32)] = INIT_20[init_offset +:width];
|
||
|
mem[count + (init_mult * 33)] = INIT_21[init_offset +:width];
|
||
|
mem[count + (init_mult * 34)] = INIT_22[init_offset +:width];
|
||
|
mem[count + (init_mult * 35)] = INIT_23[init_offset +:width];
|
||
|
mem[count + (init_mult * 36)] = INIT_24[init_offset +:width];
|
||
|
mem[count + (init_mult * 37)] = INIT_25[init_offset +:width];
|
||
|
mem[count + (init_mult * 38)] = INIT_26[init_offset +:width];
|
||
|
mem[count + (init_mult * 39)] = INIT_27[init_offset +:width];
|
||
|
mem[count + (init_mult * 40)] = INIT_28[init_offset +:width];
|
||
|
mem[count + (init_mult * 41)] = INIT_29[init_offset +:width];
|
||
|
mem[count + (init_mult * 42)] = INIT_2A[init_offset +:width];
|
||
|
mem[count + (init_mult * 43)] = INIT_2B[init_offset +:width];
|
||
|
mem[count + (init_mult * 44)] = INIT_2C[init_offset +:width];
|
||
|
mem[count + (init_mult * 45)] = INIT_2D[init_offset +:width];
|
||
|
mem[count + (init_mult * 46)] = INIT_2E[init_offset +:width];
|
||
|
mem[count + (init_mult * 47)] = INIT_2F[init_offset +:width];
|
||
|
mem[count + (init_mult * 48)] = INIT_30[init_offset +:width];
|
||
|
mem[count + (init_mult * 49)] = INIT_31[init_offset +:width];
|
||
|
mem[count + (init_mult * 50)] = INIT_32[init_offset +:width];
|
||
|
mem[count + (init_mult * 51)] = INIT_33[init_offset +:width];
|
||
|
mem[count + (init_mult * 52)] = INIT_34[init_offset +:width];
|
||
|
mem[count + (init_mult * 53)] = INIT_35[init_offset +:width];
|
||
|
mem[count + (init_mult * 54)] = INIT_36[init_offset +:width];
|
||
|
mem[count + (init_mult * 55)] = INIT_37[init_offset +:width];
|
||
|
mem[count + (init_mult * 56)] = INIT_38[init_offset +:width];
|
||
|
mem[count + (init_mult * 57)] = INIT_39[init_offset +:width];
|
||
|
mem[count + (init_mult * 58)] = INIT_3A[init_offset +:width];
|
||
|
mem[count + (init_mult * 59)] = INIT_3B[init_offset +:width];
|
||
|
mem[count + (init_mult * 60)] = INIT_3C[init_offset +:width];
|
||
|
mem[count + (init_mult * 61)] = INIT_3D[init_offset +:width];
|
||
|
mem[count + (init_mult * 62)] = INIT_3E[init_offset +:width];
|
||
|
mem[count + (init_mult * 63)] = INIT_3F[init_offset +:width];
|
||
|
|
||
|
if (BRAM_SIZE == 36) begin
|
||
|
mem[count + (init_mult * 64)] = INIT_40[init_offset +:width];
|
||
|
mem[count + (init_mult * 65)] = INIT_41[init_offset +:width];
|
||
|
mem[count + (init_mult * 66)] = INIT_42[init_offset +:width];
|
||
|
mem[count + (init_mult * 67)] = INIT_43[init_offset +:width];
|
||
|
mem[count + (init_mult * 68)] = INIT_44[init_offset +:width];
|
||
|
mem[count + (init_mult * 69)] = INIT_45[init_offset +:width];
|
||
|
mem[count + (init_mult * 70)] = INIT_46[init_offset +:width];
|
||
|
mem[count + (init_mult * 71)] = INIT_47[init_offset +:width];
|
||
|
mem[count + (init_mult * 72)] = INIT_48[init_offset +:width];
|
||
|
mem[count + (init_mult * 73)] = INIT_49[init_offset +:width];
|
||
|
mem[count + (init_mult * 74)] = INIT_4A[init_offset +:width];
|
||
|
mem[count + (init_mult * 75)] = INIT_4B[init_offset +:width];
|
||
|
mem[count + (init_mult * 76)] = INIT_4C[init_offset +:width];
|
||
|
mem[count + (init_mult * 77)] = INIT_4D[init_offset +:width];
|
||
|
mem[count + (init_mult * 78)] = INIT_4E[init_offset +:width];
|
||
|
mem[count + (init_mult * 79)] = INIT_4F[init_offset +:width];
|
||
|
mem[count + (init_mult * 80)] = INIT_50[init_offset +:width];
|
||
|
mem[count + (init_mult * 81)] = INIT_51[init_offset +:width];
|
||
|
mem[count + (init_mult * 82)] = INIT_52[init_offset +:width];
|
||
|
mem[count + (init_mult * 83)] = INIT_53[init_offset +:width];
|
||
|
mem[count + (init_mult * 84)] = INIT_54[init_offset +:width];
|
||
|
mem[count + (init_mult * 85)] = INIT_55[init_offset +:width];
|
||
|
mem[count + (init_mult * 86)] = INIT_56[init_offset +:width];
|
||
|
mem[count + (init_mult * 87)] = INIT_57[init_offset +:width];
|
||
|
mem[count + (init_mult * 88)] = INIT_58[init_offset +:width];
|
||
|
mem[count + (init_mult * 89)] = INIT_59[init_offset +:width];
|
||
|
mem[count + (init_mult * 90)] = INIT_5A[init_offset +:width];
|
||
|
mem[count + (init_mult * 91)] = INIT_5B[init_offset +:width];
|
||
|
mem[count + (init_mult * 92)] = INIT_5C[init_offset +:width];
|
||
|
mem[count + (init_mult * 93)] = INIT_5D[init_offset +:width];
|
||
|
mem[count + (init_mult * 94)] = INIT_5E[init_offset +:width];
|
||
|
mem[count + (init_mult * 95)] = INIT_5F[init_offset +:width];
|
||
|
mem[count + (init_mult * 96)] = INIT_60[init_offset +:width];
|
||
|
mem[count + (init_mult * 97)] = INIT_61[init_offset +:width];
|
||
|
mem[count + (init_mult * 98)] = INIT_62[init_offset +:width];
|
||
|
mem[count + (init_mult * 99)] = INIT_63[init_offset +:width];
|
||
|
mem[count + (init_mult * 100)] = INIT_64[init_offset +:width];
|
||
|
mem[count + (init_mult * 101)] = INIT_65[init_offset +:width];
|
||
|
mem[count + (init_mult * 102)] = INIT_66[init_offset +:width];
|
||
|
mem[count + (init_mult * 103)] = INIT_67[init_offset +:width];
|
||
|
mem[count + (init_mult * 104)] = INIT_68[init_offset +:width];
|
||
|
mem[count + (init_mult * 105)] = INIT_69[init_offset +:width];
|
||
|
mem[count + (init_mult * 106)] = INIT_6A[init_offset +:width];
|
||
|
mem[count + (init_mult * 107)] = INIT_6B[init_offset +:width];
|
||
|
mem[count + (init_mult * 108)] = INIT_6C[init_offset +:width];
|
||
|
mem[count + (init_mult * 109)] = INIT_6D[init_offset +:width];
|
||
|
mem[count + (init_mult * 110)] = INIT_6E[init_offset +:width];
|
||
|
mem[count + (init_mult * 111)] = INIT_6F[init_offset +:width];
|
||
|
mem[count + (init_mult * 112)] = INIT_70[init_offset +:width];
|
||
|
mem[count + (init_mult * 113)] = INIT_71[init_offset +:width];
|
||
|
mem[count + (init_mult * 114)] = INIT_72[init_offset +:width];
|
||
|
mem[count + (init_mult * 115)] = INIT_73[init_offset +:width];
|
||
|
mem[count + (init_mult * 116)] = INIT_74[init_offset +:width];
|
||
|
mem[count + (init_mult * 117)] = INIT_75[init_offset +:width];
|
||
|
mem[count + (init_mult * 118)] = INIT_76[init_offset +:width];
|
||
|
mem[count + (init_mult * 119)] = INIT_77[init_offset +:width];
|
||
|
mem[count + (init_mult * 120)] = INIT_78[init_offset +:width];
|
||
|
mem[count + (init_mult * 121)] = INIT_79[init_offset +:width];
|
||
|
mem[count + (init_mult * 122)] = INIT_7A[init_offset +:width];
|
||
|
mem[count + (init_mult * 123)] = INIT_7B[init_offset +:width];
|
||
|
mem[count + (init_mult * 124)] = INIT_7C[init_offset +:width];
|
||
|
mem[count + (init_mult * 125)] = INIT_7D[init_offset +:width];
|
||
|
mem[count + (init_mult * 126)] = INIT_7E[init_offset +:width];
|
||
|
mem[count + (init_mult * 127)] = INIT_7F[init_offset +:width];
|
||
|
end // if (BRAM_SIZE == 36)
|
||
|
end // for (count = 0; count < init_mult; count = count + 1)
|
||
|
|
||
|
|
||
|
|
||
|
if (width >= 8) begin
|
||
|
|
||
|
initp_mult = 256/widthp;
|
||
|
|
||
|
for (countp = 0; countp < initp_mult; countp = countp + 1) begin
|
||
|
|
||
|
initp_offset = countp * widthp;
|
||
|
|
||
|
memp[countp] = INITP_00[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 1)] = INITP_01[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 2)] = INITP_02[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 3)] = INITP_03[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 4)] = INITP_04[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 5)] = INITP_05[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 6)] = INITP_06[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 7)] = INITP_07[initp_offset +:widthp];
|
||
|
|
||
|
if (BRAM_SIZE == 36) begin
|
||
|
memp[countp + (initp_mult * 8)] = INITP_08[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 9)] = INITP_09[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 10)] = INITP_0A[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 11)] = INITP_0B[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 12)] = INITP_0C[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 13)] = INITP_0D[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 14)] = INITP_0E[initp_offset +:widthp];
|
||
|
memp[countp + (initp_mult * 15)] = INITP_0F[initp_offset +:widthp];
|
||
|
end
|
||
|
end // for (countp = 0; countp < initp_mult; countp = countp + 1)
|
||
|
end // if (width >= 8)
|
||
|
|
||
|
end // if (INIT_FILE == "NONE")
|
||
|
|
||
|
else begin // memory initialization from memory file
|
||
|
|
||
|
for (j = 0; j < mem_depth; j = j + 1) begin
|
||
|
for (j1 = 0; j1 < widest_width; j1 = j1 + 1) begin
|
||
|
tmp_mem[j][j1] = 1'b0;
|
||
|
end
|
||
|
end
|
||
|
|
||
|
$readmemh (INIT_FILE, tmp_mem);
|
||
|
|
||
|
case (widest_width)
|
||
|
|
||
|
1, 2, 4 : for (i_mem = 0; i_mem <= mem_depth; i_mem = i_mem + 1)
|
||
|
mem[i_mem] = tmp_mem [i_mem];
|
||
|
|
||
|
9 : for (i_mem = 0; i_mem <= mem_depth; i_mem = i_mem + 1) begin
|
||
|
mem[i_mem] = tmp_mem[i_mem][0 +: 8];
|
||
|
memp[i_mem] = tmp_mem[i_mem][8 +: 1];
|
||
|
end
|
||
|
|
||
|
18 : for (i_mem = 0; i_mem <= mem_depth; i_mem = i_mem + 1) begin
|
||
|
mem[i_mem] = tmp_mem[i_mem][0 +: 16];
|
||
|
memp[i_mem] = tmp_mem[i_mem][16 +: 2];
|
||
|
end
|
||
|
|
||
|
36 : for (i_mem = 0; i_mem <= mem_depth; i_mem = i_mem + 1) begin
|
||
|
mem[i_mem] = tmp_mem[i_mem][0 +: 32];
|
||
|
memp[i_mem] = tmp_mem[i_mem][32 +: 4];
|
||
|
end
|
||
|
|
||
|
72 : for (i_mem = 0; i_mem <= mem_depth; i_mem = i_mem + 1) begin
|
||
|
mem[i_mem] = tmp_mem[i_mem][0 +: 64];
|
||
|
memp[i_mem] = tmp_mem[i_mem][64 +: 8];
|
||
|
end
|
||
|
|
||
|
endcase // case(widest_width)
|
||
|
|
||
|
end // else: !if(INIT_FILE == "NONE")
|
||
|
|
||
|
|
||
|
case (EN_ECC_WRITE)
|
||
|
"TRUE" : en_ecc_write_int = 1;
|
||
|
"FALSE" : en_ecc_write_int = 0;
|
||
|
default : begin
|
||
|
$display("Attribute Syntax Error : The attribute EN_ECC_WRITE on RAMB36E1 instance %m is set to %s. Legal values for this attribute are TRUE or FALSE.", EN_ECC_WRITE);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
endcase
|
||
|
|
||
|
|
||
|
case (EN_ECC_READ)
|
||
|
"TRUE" : en_ecc_read_int = 1;
|
||
|
"FALSE" : en_ecc_read_int = 0;
|
||
|
default : begin
|
||
|
$display("Attribute Syntax Error : The attribute EN_ECC_READ on RAMB36E1 instance %m is set to %s. Legal values for this attribute are TRUE or FALSE.", EN_ECC_READ);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
endcase
|
||
|
|
||
|
|
||
|
case (RAM_MODE)
|
||
|
"TDP" : begin
|
||
|
ram_mode_int = 1;
|
||
|
|
||
|
if (en_ecc_write_int == 1) begin
|
||
|
$display("DRC Error : The attribute EN_ECC_WRITE on RAMB36E1 instance %m is set to %s which requires RAM_MODE = SDP.", EN_ECC_WRITE);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
|
||
|
if (en_ecc_read_int == 1) begin
|
||
|
$display("DRC Error : The attribute EN_ECC_READ on RAMB36E1 instance %m is set to %s which requires RAM_MODE = SDP.", EN_ECC_READ);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
|
||
|
end // case: "TDP"
|
||
|
"SDP" : begin
|
||
|
ram_mode_int = 0;
|
||
|
|
||
|
if ((WRITE_MODE_A != WRITE_MODE_B) || WRITE_MODE_A == "NO_CHANGE" || WRITE_MODE_A == "NO_CHANGE") begin
|
||
|
|
||
|
$display("DRC Error : Both attributes WRITE_MODE_A and WRITE_MODE_B must be set to READ_FIRST or both attributes must be set to WRITE_FIRST when RAM_MODE = SDP on RAMB36E1 instance %m.");
|
||
|
|
||
|
finish_error = 1;
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
if (BRAM_SIZE == 18) begin
|
||
|
if (!(WRITE_WIDTH_B == 36 || READ_WIDTH_A == 36)) begin
|
||
|
|
||
|
$display("DRC Error : One of the attribute WRITE_WIDTH_B or READ_WIDTH_A must set to 36 when RAM_MODE = SDP.");
|
||
|
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
else begin
|
||
|
|
||
|
if (!(WRITE_WIDTH_B == 72 || READ_WIDTH_A == 72)) begin
|
||
|
$display("DRC Error : One of the attribute WRITE_WIDTH_B or READ_WIDTH_A must set to 72 when RAM_MODE = SDP.");
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end // else: !if(BRAM_SIZE == 18)
|
||
|
|
||
|
end // case: "SDP"
|
||
|
default : begin
|
||
|
$display("Attribute Syntax Error : The attribute RAM_MODE on RAMB36E1 instance %m is set to %s. Legal values for this attribute are TDP or SDP.", RAM_MODE);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
endcase
|
||
|
|
||
|
|
||
|
case (WRITE_WIDTH_A)
|
||
|
|
||
|
0, 1, 2, 4, 9, 18 : ;
|
||
|
36 : begin
|
||
|
if (BRAM_SIZE == 18 && ram_mode_int == 1) begin
|
||
|
$display("Attribute Syntax Error : The attribute WRITE_WIDTH_A on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9 or 18.", WRITE_WIDTH_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
72 : begin
|
||
|
if (BRAM_SIZE == 18) begin
|
||
|
$display("Attribute Syntax Error : The attribute WRITE_WIDTH_A on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9 or 18.", WRITE_WIDTH_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
else if (BRAM_SIZE == 36 && ram_mode_int == 1) begin
|
||
|
$display("Attribute Syntax Error : The attribute WRITE_WIDTH_A on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9, 18 or 36.", WRITE_WIDTH_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
default : begin
|
||
|
if (BRAM_SIZE == 18 && ram_mode_int == 1) begin
|
||
|
$display("Attribute Syntax Error : The attribute WRITE_WIDTH_A on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9 or 18.", WRITE_WIDTH_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
else if (BRAM_SIZE == 36 || (BRAM_SIZE == 18 && ram_mode_int == 0)) begin
|
||
|
$display("Attribute Syntax Error : The attribute WRITE_WIDTH_A on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9, 18 or 36.", WRITE_WIDTH_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
|
||
|
endcase // case(WRITE_WIDTH_A)
|
||
|
|
||
|
|
||
|
case (WRITE_WIDTH_B)
|
||
|
|
||
|
0, 1, 2, 4, 9, 18 : ;
|
||
|
36 : begin
|
||
|
if (BRAM_SIZE == 18 && ram_mode_int == 1) begin
|
||
|
$display("Attribute Syntax Error : The attribute WRITE_WIDTH_B on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9 or 18.", WRITE_WIDTH_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
72 : begin
|
||
|
if (BRAM_SIZE == 18) begin
|
||
|
$display("Attribute Syntax Error : The attribute WRITE_WIDTH_B on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9 or 18.", WRITE_WIDTH_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
else if (BRAM_SIZE == 36 && ram_mode_int == 1) begin
|
||
|
$display("Attribute Syntax Error : The attribute WRITE_WIDTH_B on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9, 18 or 36.", WRITE_WIDTH_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
default : begin
|
||
|
if (BRAM_SIZE == 18 && ram_mode_int == 1) begin
|
||
|
$display("Attribute Syntax Error : The attribute WRITE_WIDTH_B on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9 or 18.", WRITE_WIDTH_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
else if (BRAM_SIZE == 36 || (BRAM_SIZE == 18 && ram_mode_int == 0)) begin
|
||
|
$display("Attribute Syntax Error : The attribute WRITE_WIDTH_B on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9, 18 or 36.", WRITE_WIDTH_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
|
||
|
endcase // case(WRITE_WIDTH_B)
|
||
|
|
||
|
|
||
|
case (READ_WIDTH_A)
|
||
|
|
||
|
0, 1, 2, 4, 9, 18 : ;
|
||
|
36 : begin
|
||
|
if (BRAM_SIZE == 18 && ram_mode_int == 1) begin
|
||
|
$display("Attribute Syntax Error : The attribute READ_WIDTH_A on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9 or 18.", READ_WIDTH_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
72 : begin
|
||
|
if (BRAM_SIZE == 18) begin
|
||
|
$display("Attribute Syntax Error : The attribute READ_WIDTH_A on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9 or 18.", READ_WIDTH_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
else if (BRAM_SIZE == 36 && ram_mode_int == 1) begin
|
||
|
$display("Attribute Syntax Error : The attribute READ_WIDTH_A on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9, 18 or 36.", READ_WIDTH_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
default : begin
|
||
|
if (BRAM_SIZE == 18 && ram_mode_int == 1) begin
|
||
|
$display("Attribute Syntax Error : The attribute READ_WIDTH_A on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9 or 18.", READ_WIDTH_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
else if (BRAM_SIZE == 36 || (BRAM_SIZE == 18 && ram_mode_int == 0)) begin
|
||
|
$display("Attribute Syntax Error : The attribute READ_WIDTH_A on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9, 18 or 36.", READ_WIDTH_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
|
||
|
endcase // case(READ_WIDTH_A)
|
||
|
|
||
|
|
||
|
case (READ_WIDTH_B)
|
||
|
|
||
|
0, 1, 2, 4, 9, 18 : ;
|
||
|
36 : begin
|
||
|
if (BRAM_SIZE == 18 && ram_mode_int == 1) begin
|
||
|
$display("Attribute Syntax Error : The attribute READ_WIDTH_B on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9 or 18.", READ_WIDTH_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
72 : begin
|
||
|
if (BRAM_SIZE == 18) begin
|
||
|
$display("Attribute Syntax Error : The attribute READ_WIDTH_B on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9 or 18.", READ_WIDTH_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
else if (BRAM_SIZE == 36 && ram_mode_int == 1) begin
|
||
|
$display("Attribute Syntax Error : The attribute READ_WIDTH_B on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9, 18 or 36.", READ_WIDTH_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
default : begin
|
||
|
if (BRAM_SIZE == 18 && ram_mode_int == 1) begin
|
||
|
$display("Attribute Syntax Error : The attribute READ_WIDTH_B on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9 or 18.", READ_WIDTH_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
else if (BRAM_SIZE == 36 || (BRAM_SIZE == 18 && ram_mode_int == 0)) begin
|
||
|
$display("Attribute Syntax Error : The attribute READ_WIDTH_B on RAMB36E1 instance %m is set to %d. Legal values for this attribute are 0, 1, 2, 4, 9, 18 or 36.", READ_WIDTH_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
end
|
||
|
|
||
|
endcase // case(READ_WIDTH_B)
|
||
|
|
||
|
|
||
|
if ((RAM_EXTENSION_A == "LOWER" || RAM_EXTENSION_A == "UPPER") && READ_WIDTH_A != 1) begin
|
||
|
$display("Attribute Syntax Error : If attribute RAM_EXTENSION_A on RAMB36E1 instance %m is set to either LOWER or UPPER, then READ_WIDTH_A has to be set to 1.");
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
|
||
|
|
||
|
if ((RAM_EXTENSION_A == "LOWER" || RAM_EXTENSION_A == "UPPER") && WRITE_WIDTH_A != 1) begin
|
||
|
$display("Attribute Syntax Error : If attribute RAM_EXTENSION_A on RAMB36E1 instance %m is set to either LOWER or UPPER, then WRITE_WIDTH_A has to be set to 1.");
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
|
||
|
|
||
|
if ((RAM_EXTENSION_B == "LOWER" || RAM_EXTENSION_B == "UPPER") && READ_WIDTH_B != 1) begin
|
||
|
$display("Attribute Syntax Error : If attribute RAM_EXTENSION_B on RAMB36E1 instance %m is set to either LOWER or UPPER, then READ_WIDTH_B has to be set to 1.");
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
|
||
|
|
||
|
if ((RAM_EXTENSION_B == "LOWER" || RAM_EXTENSION_B == "UPPER") && WRITE_WIDTH_B != 1) begin
|
||
|
$display("Attribute Syntax Error : If attribute RAM_EXTENSION_B on RAMB36E1 instance %m is set to either LOWER or UPPER, then WRITE_WIDTH_B has to be set to 1.");
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
|
||
|
|
||
|
if (READ_WIDTH_A == 0 && READ_WIDTH_B == 0) begin
|
||
|
$display("Attribute Syntax Error : Attributes READ_WIDTH_A and READ_WIDTH_B on RAMB36E1 instance %m, both can not be 0.");
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
|
||
|
|
||
|
case (WRITE_MODE_A)
|
||
|
"WRITE_FIRST" : wr_mode_a = 2'b00;
|
||
|
"READ_FIRST" : wr_mode_a = 2'b01;
|
||
|
"NO_CHANGE" : wr_mode_a = 2'b10;
|
||
|
default : begin
|
||
|
$display("Attribute Syntax Error : The Attribute WRITE_MODE_A on RAMB36E1 instance %m is set to %s. Legal values for this attribute are WRITE_FIRST, READ_FIRST or NO_CHANGE.", WRITE_MODE_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
endcase
|
||
|
|
||
|
|
||
|
case (WRITE_MODE_B)
|
||
|
"WRITE_FIRST" : wr_mode_b = 2'b00;
|
||
|
"READ_FIRST" : wr_mode_b = 2'b01;
|
||
|
"NO_CHANGE" : wr_mode_b = 2'b10;
|
||
|
default : begin
|
||
|
$display("Attribute Syntax Error : The Attribute WRITE_MODE_B on RAMB36E1 instance %m is set to %s. Legal values for this attribute are WRITE_FIRST, READ_FIRST or NO_CHANGE.", WRITE_MODE_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
endcase
|
||
|
|
||
|
case (RAM_EXTENSION_A)
|
||
|
"UPPER" : cascade_a = 2'b11;
|
||
|
"LOWER" : cascade_a = 2'b01;
|
||
|
"NONE" : cascade_a = 2'b00;
|
||
|
default : begin
|
||
|
$display("Attribute Syntax Error : The attribute RAM_EXTENSION_A on RAMB36E1 instance %m is set to %s. Legal values for this attribute are LOWER, NONE or UPPER.", RAM_EXTENSION_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
endcase
|
||
|
|
||
|
|
||
|
case (RAM_EXTENSION_B)
|
||
|
"UPPER" : cascade_b = 2'b11;
|
||
|
"LOWER" : cascade_b = 2'b01;
|
||
|
"NONE" : cascade_b = 2'b00;
|
||
|
default : begin
|
||
|
$display("Attribute Syntax Error : The attribute RAM_EXTENSION_B on RAMB36E1 instance %m is set to %s. Legal values for this attribute are LOWER, NONE or UPPER.", RAM_EXTENSION_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
endcase
|
||
|
|
||
|
|
||
|
if ((SIM_COLLISION_CHECK != "ALL") && (SIM_COLLISION_CHECK != "NONE") && (SIM_COLLISION_CHECK != "WARNING_ONLY") && (SIM_COLLISION_CHECK != "GENERATE_X_ONLY")) begin
|
||
|
|
||
|
$display("Attribute Syntax Error : The attribute SIM_COLLISION_CHECK on RAMB36E1 instance %m is set to %s. Legal values for this attribute are ALL, NONE, WARNING_ONLY or GENERATE_X_ONLY.", SIM_COLLISION_CHECK);
|
||
|
finish_error = 1;
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
case (RSTREG_PRIORITY_A)
|
||
|
"RSTREG" : rstreg_priority_a_int = 1;
|
||
|
"REGCE" : rstreg_priority_a_int = 0;
|
||
|
default : begin
|
||
|
$display("Attribute Syntax Error : The attribute RSTREG_PRIORITY_A on RAMB36E1 instance %m is set to %s. Legal values for this attribute are RSTREG or REGCE.", RSTREG_PRIORITY_A);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
endcase
|
||
|
|
||
|
|
||
|
case (RSTREG_PRIORITY_B)
|
||
|
"RSTREG" : rstreg_priority_b_int = 1;
|
||
|
"REGCE" : rstreg_priority_b_int = 0;
|
||
|
default : begin
|
||
|
$display("Attribute Syntax Error : The attribute RSTREG_PRIORITY_B on RAMB36E1 instance %m is set to %s. Legal values for this attribute are RSTREG or REGCE.", RSTREG_PRIORITY_B);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
endcase
|
||
|
|
||
|
|
||
|
if ((en_ecc_write_int == 1 || en_ecc_read_int == 1) && (WRITE_WIDTH_B != 72 || READ_WIDTH_A != 72)) begin
|
||
|
$display("DRC Error : Attributes WRITE_WIDTH_B and READ_WIDTH_A have to be set to 72 on RAMB36E1 instance %m when either attribute EN_ECC_WRITE or EN_ECC_READ is set to TRUE.");
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
|
||
|
|
||
|
case (RDADDR_COLLISION_HWCONFIG)
|
||
|
"DELAYED_WRITE" : rdaddr_collision_hwconfig_int = 0;
|
||
|
"PERFORMANCE" : rdaddr_collision_hwconfig_int = 1;
|
||
|
default : begin
|
||
|
$display("Attribute Syntax Error : The attribute RDADDR_COLLISION_HWCONFIG on RAMB36E1 instance %m is set to %s. Legal values for this attribute are DELAYED_WRITE or PERFORMANCE.", RDADDR_COLLISION_HWCONFIG);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
endcase
|
||
|
|
||
|
|
||
|
if (!(SIM_DEVICE == "VIRTEX6" || SIM_DEVICE == "7SERIES")) begin
|
||
|
$display("Attribute Syntax Error : The Attribute SIM_DEVICE on RAMB36E1 instance %m is set to %s. Legal values for this attribute are VIRTEX6, or 7SERIES.", SIM_DEVICE);
|
||
|
finish_error = 1;
|
||
|
end
|
||
|
|
||
|
|
||
|
if (finish_error == 1)
|
||
|
$finish;
|
||
|
|
||
|
|
||
|
end // initial begin
|
||
|
|
||
|
|
||
|
// GSR
|
||
|
always @(gsr_in)
|
||
|
if (gsr_in) begin
|
||
|
|
||
|
assign doa_out = INIT_A[0 +: ra_width];
|
||
|
|
||
|
if (ra_width >= 8) begin
|
||
|
assign dopa_out = INIT_A[ra_width +: ra_widthp];
|
||
|
end
|
||
|
|
||
|
assign dob_out = INIT_B[0 +: rb_width];
|
||
|
|
||
|
if (rb_width >= 8) begin
|
||
|
assign dopb_out = INIT_B[rb_width +: rb_widthp];
|
||
|
end
|
||
|
|
||
|
assign dbiterr_out = 0;
|
||
|
assign sbiterr_out = 0;
|
||
|
assign rdaddrecc_out = 9'b0;
|
||
|
|
||
|
end
|
||
|
else begin
|
||
|
deassign doa_out;
|
||
|
deassign dopa_out;
|
||
|
deassign dob_out;
|
||
|
deassign dopb_out;
|
||
|
deassign dbiterr_out;
|
||
|
deassign sbiterr_out;
|
||
|
deassign rdaddrecc_out;
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
always @(time_clka_period or time_clkb_period) begin
|
||
|
|
||
|
if (time_clka_period != 0 && time_clkb_period != 0) begin
|
||
|
|
||
|
if (time_clka_period <= time_clkb_period) begin
|
||
|
|
||
|
if (time_clka_period <= SETUP_READ_FIRST) begin
|
||
|
time_period = time_clka_period;
|
||
|
end
|
||
|
else begin
|
||
|
time_period = SETUP_READ_FIRST;
|
||
|
end
|
||
|
|
||
|
end
|
||
|
else if (time_clkb_period <= SETUP_READ_FIRST)
|
||
|
time_period = time_clkb_period;
|
||
|
else
|
||
|
time_period = SETUP_READ_FIRST;
|
||
|
|
||
|
end
|
||
|
end
|
||
|
|
||
|
// registering signals
|
||
|
always @(posedge clka_in) begin
|
||
|
|
||
|
rising_clka = 1;
|
||
|
|
||
|
if ($time > 110000 && time_skew_a_flag == 0) begin
|
||
|
time_clka_period = $time - time_port_a;
|
||
|
time_skew_a_flag = 1;
|
||
|
end
|
||
|
|
||
|
|
||
|
if (ena_in === 1'b1) begin
|
||
|
time_port_a = $time;
|
||
|
addra_reg = addra_in;
|
||
|
wea_reg = wea_in;
|
||
|
dia_reg = dia_in;
|
||
|
dipa_reg = dipa_in;
|
||
|
ox_addra_reconstruct_reg = ox_addra_reconstruct;
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
always @(posedge clkb_in) begin
|
||
|
|
||
|
rising_clkb = 1;
|
||
|
|
||
|
if ($time > 110000 && time_skew_b_flag == 0) begin
|
||
|
time_clkb_period = $time - time_port_b;
|
||
|
time_skew_b_flag = 1;
|
||
|
end
|
||
|
|
||
|
|
||
|
if (enb_in === 1'b1) begin
|
||
|
time_port_b = $time;
|
||
|
addrb_reg = addrb_in;
|
||
|
web_reg = web_in;
|
||
|
enb_reg = enb_in;
|
||
|
dib_reg = dib_in;
|
||
|
dipb_reg = dipb_in;
|
||
|
ox_addrb_reconstruct_reg = ox_addrb_reconstruct;
|
||
|
end
|
||
|
|
||
|
end // always @ (posedge clkb_in)
|
||
|
|
||
|
|
||
|
// CLKA and CLKB
|
||
|
always @(posedge rising_clka or posedge rising_clkb) begin
|
||
|
|
||
|
// Registering addr[15] for cascade mode
|
||
|
if (rising_clka)
|
||
|
if (cascade_a[1])
|
||
|
addra_in_15_reg_bram = ~addra_in[15];
|
||
|
else
|
||
|
addra_in_15_reg_bram = addra_in[15];
|
||
|
|
||
|
if (rising_clkb)
|
||
|
if (cascade_b[1])
|
||
|
addrb_in_15_reg_bram = ~addrb_in[15];
|
||
|
else
|
||
|
addrb_in_15_reg_bram = addrb_in[15];
|
||
|
|
||
|
if ((cascade_a == 2'b00 || (addra_in_15_reg_bram == 1'b0 && cascade_a != 2'b00)) && (cascade_b == 2'b00 || (addrb_in_15_reg_bram == 1'b0 && cascade_b != 2'b00))) begin
|
||
|
|
||
|
/************************************* Collision starts *****************************************/
|
||
|
|
||
|
if (SIM_COLLISION_CHECK != "NONE") begin
|
||
|
|
||
|
if (gsr_in === 1'b0) begin
|
||
|
|
||
|
if (time_port_a > time_port_b) begin
|
||
|
|
||
|
if (time_port_a - time_port_b <= sync_clk_skew) begin
|
||
|
viol_time = 1;
|
||
|
end
|
||
|
else if (time_port_a - time_port_b <= time_period) begin
|
||
|
viol_time = 2;
|
||
|
end
|
||
|
end
|
||
|
else begin
|
||
|
|
||
|
if (time_port_b - time_port_a <= sync_clk_skew) begin
|
||
|
viol_time = 1;
|
||
|
end
|
||
|
else if (time_port_b - time_port_a <= time_period) begin
|
||
|
viol_time = 2;
|
||
|
end
|
||
|
|
||
|
end // else: !if(time_port_a > time_port_b)
|
||
|
|
||
|
|
||
|
if (ena_in === 1'b0 || enb_in === 1'b0)
|
||
|
viol_time = 0;
|
||
|
|
||
|
|
||
|
if ((WRITE_WIDTH_A <= 9 && wea_in[0] === 1'b0) || (WRITE_WIDTH_A == 18 && wea_in[1:0] === 2'b00) || ((WRITE_WIDTH_A == 36 || WRITE_WIDTH_A == 72) && wea_in[3:0] === 4'b0000))
|
||
|
if ((WRITE_WIDTH_B <= 9 && web_in[0] === 1'b0) || (WRITE_WIDTH_B == 18 && web_in[1:0] === 2'b00) || (WRITE_WIDTH_B == 36 && web_in[3:0] === 4'b0000) || (WRITE_WIDTH_B == 72 && web_in[7:0] === 8'h00))
|
||
|
viol_time = 0;
|
||
|
|
||
|
|
||
|
if (viol_time != 0) begin
|
||
|
|
||
|
if (SIM_DEVICE == "VIRTEX6") begin
|
||
|
|
||
|
// Clka and clkb rise at the same time
|
||
|
if ((rising_clka && rising_clkb) || viol_time == 1) begin
|
||
|
|
||
|
if (addra_in[15:col_addr_lsb] === addrb_in[15:col_addr_lsb]) begin
|
||
|
|
||
|
viol_type = 2'b01;
|
||
|
chk_col_same_clk = 1;
|
||
|
|
||
|
|
||
|
if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (time_port_a > time_port_b)) begin
|
||
|
doa_buf = dob_buf;
|
||
|
dopa_buf = dopb_buf;
|
||
|
end
|
||
|
else if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (time_port_b > time_port_a)) begin
|
||
|
dob_buf = doa_buf;
|
||
|
dopb_buf = dopa_buf;
|
||
|
end
|
||
|
else begin
|
||
|
task_rd_ram_a (addra_in, doa_buf, dopa_buf);
|
||
|
task_rd_ram_b (addrb_in, dob_buf, dopb_buf);
|
||
|
end
|
||
|
|
||
|
|
||
|
task_col_wr_ram_a (2'b00, web_in, wea_in, di_x, di_x[7:0], addrb_in, addra_in);
|
||
|
task_col_wr_ram_b (2'b00, wea_in, web_in, di_x, di_x[7:0], addra_in, addrb_in);
|
||
|
chk_col_same_clk = 0;
|
||
|
|
||
|
task_col_rd_ram_a (2'b01, web_in, wea_in, addra_in, doa_buf, dopa_buf);
|
||
|
task_col_rd_ram_b (2'b01, wea_in, web_in, addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
task_col_wr_ram_a (2'b10, web_in, wea_in, dia_in, dipa_in, addrb_in, addra_in);
|
||
|
|
||
|
|
||
|
dib_ecc_col = dib_in;
|
||
|
|
||
|
if (en_ecc_write_int == 1 || en_ecc_read_int == 1) begin
|
||
|
|
||
|
if (injectdbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
dib_ecc_col[62] = ~dib_ecc_col[62];
|
||
|
end
|
||
|
else if (injectsbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
end
|
||
|
|
||
|
end // if (en_ecc_write_int == 1 || en_ecc_read_int == 1)
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_write_int == 1 && enb_in === 1'b1) begin
|
||
|
|
||
|
dip_ecc_col = fn_dip_ecc(1'b1, dib_in, dipb_in);
|
||
|
eccparity_out = dip_ecc_col;
|
||
|
task_col_wr_ram_b (2'b10, wea_in, web_in, dib_ecc_col, dip_ecc_col, addra_in, addrb_in);
|
||
|
|
||
|
end
|
||
|
else
|
||
|
task_col_wr_ram_b (2'b10, wea_in, web_in, dib_ecc_col, dipb_in, addra_in, addrb_in);
|
||
|
|
||
|
|
||
|
if (wr_mode_a != 2'b01)
|
||
|
task_col_rd_ram_a (2'b11, web_in, wea_in, addra_in, doa_buf, dopa_buf);
|
||
|
if (wr_mode_b != 2'b01)
|
||
|
task_col_rd_ram_b (2'b11, wea_in, web_in, addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
|
||
|
if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && rdaddr_collision_hwconfig_int == 1) begin
|
||
|
task_col_wr_ram_a (2'b10, web_in, wea_in, di_x, di_x[7:0], addrb_in, addra_in);
|
||
|
task_col_wr_ram_b (2'b10, wea_in, web_in, di_x, di_x[7:0], addra_in, addrb_in);
|
||
|
end
|
||
|
|
||
|
if ((ram_mode_int == 0 && en_ecc_read_int == 1) && ((time_port_a > time_port_b) || (rising_clka && rising_clkb)))
|
||
|
task_col_ecc_read (doa_buf, dopa_buf, addra_in);
|
||
|
|
||
|
end // if (addra_in[15:col_addr_lsb] === addrb_in[15:col_addr_lsb])
|
||
|
else if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (ox_addra_reconstruct[15:col_addr_lsb] === ox_addrb_reconstruct[15:col_addr_lsb])) begin
|
||
|
|
||
|
viol_type = 2'b01;
|
||
|
chk_ox_msg = 1;
|
||
|
chk_ox_same_clk = 1;
|
||
|
|
||
|
if (time_port_a > time_port_b)
|
||
|
task_rd_ram_a (addra_in, doa_buf, dopa_buf);
|
||
|
else if (time_port_b > time_port_a)
|
||
|
task_rd_ram_b (addrb_in, dob_buf, dopb_buf);
|
||
|
else begin
|
||
|
task_rd_ram_a (addra_in, doa_buf, dopa_buf);
|
||
|
task_rd_ram_b (addrb_in, dob_buf, dopb_buf);
|
||
|
end
|
||
|
|
||
|
task_col_wr_ram_a (2'b00, web_in, wea_in, di_x, di_x[7:0], addrb_in, addra_in);
|
||
|
task_col_wr_ram_b (2'b00, wea_in, web_in, di_x, di_x[7:0], addra_in, addrb_in);
|
||
|
|
||
|
chk_ox_msg = 0;
|
||
|
chk_ox_same_clk = 0;
|
||
|
|
||
|
task_ox_wr_ram_a (2'b10, web_in, wea_in, dia_in, dipa_in, addrb_in, addra_in);
|
||
|
|
||
|
|
||
|
dib_ecc_col = dib_in;
|
||
|
|
||
|
if (en_ecc_write_int == 1 || en_ecc_read_int == 1) begin
|
||
|
|
||
|
if (injectdbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
dib_ecc_col[62] = ~dib_ecc_col[62];
|
||
|
end
|
||
|
else if (injectsbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
end
|
||
|
|
||
|
end // if (en_ecc_write_int == 1 || en_ecc_read_int == 1)
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_write_int == 1 && enb_in === 1'b1) begin
|
||
|
|
||
|
dip_ecc_col = fn_dip_ecc(1'b1, dib_in, dipb_in);
|
||
|
eccparity_out = dip_ecc_col;
|
||
|
task_ox_wr_ram_b (2'b10, wea_in, web_in, dib_ecc_col, dip_ecc_col, addra_in, addrb_in);
|
||
|
|
||
|
end
|
||
|
else
|
||
|
task_ox_wr_ram_b (2'b10, wea_in, web_in, dib_ecc_col, dipb_in, addra_in, addrb_in);
|
||
|
|
||
|
|
||
|
if (wr_mode_a != 2'b01)
|
||
|
task_col_rd_ram_a (2'b11, web_in, wea_in, addra_in, doa_buf, dopa_buf);
|
||
|
if (wr_mode_b != 2'b01)
|
||
|
task_col_rd_ram_b (2'b11, wea_in, web_in, addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
|
||
|
if (rdaddr_collision_hwconfig_int == 1) begin
|
||
|
task_col_wr_ram_a (2'b10, web_in, 8'hff, di_x, di_x[7:0], addrb_in, addra_in);
|
||
|
task_col_wr_ram_b (2'b10, wea_in, 8'hff, di_x, di_x[7:0], addra_in, addrb_in);
|
||
|
end
|
||
|
|
||
|
if ((ram_mode_int == 0 && en_ecc_read_int == 1) && ((time_port_a > time_port_b) || (rising_clka && rising_clkb)))
|
||
|
task_col_ecc_read (doa_buf, dopa_buf, addra_in);
|
||
|
|
||
|
end // if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (ox_addra_reconstruct[15:col_addr_lsb] === ox_addrb_reconstruct[15:col_addr_lsb]))
|
||
|
else
|
||
|
viol_time = 0;
|
||
|
|
||
|
|
||
|
end // if (rising_clka && rising_clkb)
|
||
|
// Clkb before clka
|
||
|
else if (rising_clka && !rising_clkb) begin
|
||
|
|
||
|
|
||
|
if (addra_in[15:col_addr_lsb] === addrb_reg[15:col_addr_lsb]) begin
|
||
|
|
||
|
viol_type = 2'b10;
|
||
|
|
||
|
task_rd_ram_a (addra_in, doa_buf, dopa_buf);
|
||
|
|
||
|
task_col_wr_ram_a (2'b00, web_reg, wea_in, di_x, di_x[7:0], addrb_reg, addra_in);
|
||
|
task_col_wr_ram_b (2'b00, wea_in, web_reg, di_x, di_x[7:0], addra_in, addrb_reg);
|
||
|
|
||
|
task_col_rd_ram_a (2'b01, web_reg, wea_in, addra_in, doa_buf, dopa_buf);
|
||
|
task_col_rd_ram_b (2'b01, wea_in, web_reg, addrb_reg, dob_buf, dopb_buf);
|
||
|
|
||
|
task_col_wr_ram_a (2'b10, web_reg, wea_in, dia_in, dipa_in, addrb_reg, addra_in);
|
||
|
|
||
|
|
||
|
dib_ecc_col = dib_reg;
|
||
|
|
||
|
if (en_ecc_write_int == 1 || en_ecc_read_int == 1) begin
|
||
|
|
||
|
if (injectdbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
dib_ecc_col[62] = ~dib_ecc_col[62];
|
||
|
end
|
||
|
else if (injectsbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
end
|
||
|
|
||
|
end // if (en_ecc_write_int == 1 || en_ecc_read_int == 1)
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_write_int == 1 && enb_reg === 1'b1) begin
|
||
|
|
||
|
dip_ecc_col = fn_dip_ecc(1'b1, dib_reg, dipb_reg);
|
||
|
eccparity_out = dip_ecc_col;
|
||
|
task_col_wr_ram_b (2'b10, wea_in, web_reg, dib_ecc_col, dip_ecc_col, addra_in, addrb_reg);
|
||
|
|
||
|
end
|
||
|
else
|
||
|
task_col_wr_ram_b (2'b10, wea_in, web_reg, dib_ecc_col, dipb_reg, addra_in, addrb_reg);
|
||
|
|
||
|
|
||
|
if (wr_mode_a != 2'b01)
|
||
|
task_col_rd_ram_a (2'b11, web_reg, wea_in, addra_in, doa_buf, dopa_buf);
|
||
|
if (wr_mode_b != 2'b01)
|
||
|
task_col_rd_ram_b (2'b11, wea_in, web_reg, addrb_reg, dob_buf, dopb_buf);
|
||
|
|
||
|
|
||
|
if (wr_mode_a == 2'b01 || wr_mode_b == 2'b01) begin
|
||
|
task_col_wr_ram_a (2'b10, web_reg, wea_in, di_x, di_x[7:0], addrb_reg, addra_in);
|
||
|
task_col_wr_ram_b (2'b10, wea_in, web_reg, di_x, di_x[7:0], addra_in, addrb_reg);
|
||
|
end
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_read_int == 1)
|
||
|
task_col_ecc_read (doa_buf, dopa_buf, addra_in);
|
||
|
|
||
|
end // if (addra_in[15:col_addr_lsb] === addrb_reg[15:col_addr_lsb])
|
||
|
else if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (ox_addra_reconstruct[15:col_addr_lsb] === ox_addrb_reconstruct_reg[15:col_addr_lsb])) begin
|
||
|
|
||
|
viol_type = 2'b10;
|
||
|
chk_ox_msg = 1;
|
||
|
|
||
|
task_rd_ram_a (addra_in, doa_buf, dopa_buf);
|
||
|
|
||
|
// get msg
|
||
|
task_col_wr_ram_a (2'b00, web_reg, wea_in, di_x, di_x[7:0], addrb_reg, addra_in);
|
||
|
task_col_wr_ram_b (2'b00, wea_in, web_reg, di_x, di_x[7:0], addra_in, addrb_reg);
|
||
|
chk_ox_msg = 0;
|
||
|
|
||
|
task_ox_wr_ram_a (2'b10, web_reg, wea_in, dia_in, dipa_in, addrb_reg, addra_in);
|
||
|
|
||
|
|
||
|
dib_ecc_col = dib_reg;
|
||
|
|
||
|
if (en_ecc_write_int == 1 || en_ecc_read_int == 1) begin
|
||
|
|
||
|
if (injectdbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
dib_ecc_col[62] = ~dib_ecc_col[62];
|
||
|
end
|
||
|
else if (injectsbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
end
|
||
|
|
||
|
end // if (en_ecc_write_int == 1 || en_ecc_read_int == 1)
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_write_int == 1 && enb_reg === 1'b1) begin
|
||
|
|
||
|
dip_ecc_col = fn_dip_ecc(1'b1, dib_reg, dipb_reg);
|
||
|
eccparity_out = dip_ecc_col;
|
||
|
task_ox_wr_ram_b (2'b10, wea_in, web_reg, dib_ecc_col, dip_ecc_col, addra_in, addrb_reg);
|
||
|
|
||
|
end
|
||
|
else
|
||
|
task_ox_wr_ram_b (2'b10, wea_in, web_reg, dib_ecc_col, dipb_reg, addra_in, addrb_reg);
|
||
|
|
||
|
|
||
|
if (wr_mode_a != 2'b01)
|
||
|
task_col_rd_ram_a (2'b11, web_reg, wea_in, addra_in, doa_buf, dopa_buf);
|
||
|
if (wr_mode_b != 2'b01)
|
||
|
task_col_rd_ram_b (2'b11, wea_in, web_reg, addrb_reg, dob_buf, dopb_buf);
|
||
|
|
||
|
|
||
|
task_col_wr_ram_a (2'b10, web_reg, 8'hff, di_x, di_x[7:0], addrb_reg, addra_in);
|
||
|
task_col_wr_ram_b (2'b10, wea_in, 8'hff, di_x, di_x[7:0], addra_in, addrb_reg);
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_read_int == 1)
|
||
|
task_col_ecc_read (doa_buf, dopa_buf, addra_in);
|
||
|
|
||
|
|
||
|
end // if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (ox_addra_reconstruct[15:col_addr_lsb] === ox_addrb_reconstruct_reg[15:col_addr_lsb]))
|
||
|
else
|
||
|
viol_time = 0;
|
||
|
|
||
|
|
||
|
end // if (rising_clka && !rising_clkb)
|
||
|
// Clka before clkb
|
||
|
else if (!rising_clka && rising_clkb) begin
|
||
|
|
||
|
|
||
|
if (addra_reg[15:col_addr_lsb] === addrb_in[15:col_addr_lsb]) begin
|
||
|
|
||
|
viol_type = 2'b11;
|
||
|
|
||
|
task_rd_ram_b (addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
task_col_wr_ram_a (2'b00, web_in, wea_reg, di_x, di_x[7:0], addrb_in, addra_reg);
|
||
|
task_col_wr_ram_b (2'b00, wea_reg, web_in, di_x, di_x[7:0], addra_reg, addrb_in);
|
||
|
|
||
|
task_col_rd_ram_a (2'b01, web_in, wea_reg, addra_reg, doa_buf, dopa_buf);
|
||
|
task_col_rd_ram_b (2'b01, wea_reg, web_in, addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
task_col_wr_ram_a (2'b10, web_in, wea_reg, dia_reg, dipa_reg, addrb_in, addra_reg);
|
||
|
|
||
|
|
||
|
dib_ecc_col = dib_in;
|
||
|
|
||
|
|
||
|
if (en_ecc_write_int == 1 || en_ecc_read_int == 1) begin
|
||
|
|
||
|
if (injectdbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
dib_ecc_col[62] = ~dib_ecc_col[62];
|
||
|
end
|
||
|
else if (injectsbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
end
|
||
|
|
||
|
end // if (en_ecc_write_int == 1 || en_ecc_read_int == 1)
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_write_int == 1 && enb_in === 1'b1) begin
|
||
|
|
||
|
dip_ecc_col = fn_dip_ecc(1'b1, dib_in, dipb_in);
|
||
|
eccparity_out = dip_ecc_col;
|
||
|
task_col_wr_ram_b (2'b10, wea_reg, web_in, dib_ecc_col, dip_ecc_col, addra_reg, addrb_in);
|
||
|
|
||
|
end
|
||
|
else
|
||
|
task_col_wr_ram_b (2'b10, wea_reg, web_in, dib_ecc_col, dipb_in, addra_reg, addrb_in);
|
||
|
|
||
|
|
||
|
if (wr_mode_a != 2'b01)
|
||
|
task_col_rd_ram_a (2'b11, web_in, wea_reg, addra_reg, doa_buf, dopa_buf);
|
||
|
if (wr_mode_b != 2'b01)
|
||
|
task_col_rd_ram_b (2'b11, wea_reg, web_in, addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
|
||
|
if (wr_mode_a == 2'b01 || wr_mode_b == 2'b01) begin
|
||
|
task_col_wr_ram_a (2'b10, web_in, wea_reg, di_x, di_x[7:0], addrb_in, addra_reg);
|
||
|
task_col_wr_ram_b (2'b10, wea_reg, web_in, di_x, di_x[7:0], addra_reg, addrb_in);
|
||
|
end
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_read_int == 1)
|
||
|
task_col_ecc_read (doa_buf, dopa_buf, addra_reg);
|
||
|
|
||
|
end // if (addra_reg[15:col_addr_lsb] === addrb_in[15:col_addr_lsb])
|
||
|
else if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (ox_addra_reconstruct_reg[15:col_addr_lsb] === ox_addrb_reconstruct[15:col_addr_lsb])) begin
|
||
|
|
||
|
viol_type = 2'b11;
|
||
|
chk_ox_msg = 1;
|
||
|
|
||
|
task_rd_ram_b (addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
// get msg
|
||
|
task_col_wr_ram_a (2'b00, web_in, wea_reg, di_x, di_x[7:0], addrb_in, addra_reg);
|
||
|
task_col_wr_ram_b (2'b00, wea_reg, web_in, di_x, di_x[7:0], addra_reg, addrb_in);
|
||
|
chk_ox_msg = 0;
|
||
|
|
||
|
task_ox_wr_ram_a (2'b10, web_in, wea_reg, dia_reg, dipa_reg, addrb_in, addra_reg);
|
||
|
|
||
|
|
||
|
dib_ecc_col = dib_in;
|
||
|
|
||
|
|
||
|
if (en_ecc_write_int == 1 || en_ecc_read_int == 1) begin
|
||
|
|
||
|
if (injectdbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
dib_ecc_col[62] = ~dib_ecc_col[62];
|
||
|
end
|
||
|
else if (injectsbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
end
|
||
|
|
||
|
end // if (en_ecc_write_int == 1 || en_ecc_read_int == 1)
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_write_int == 1 && enb_in === 1'b1) begin
|
||
|
|
||
|
dip_ecc_col = fn_dip_ecc(1'b1, dib_in, dipb_in);
|
||
|
eccparity_out = dip_ecc_col;
|
||
|
task_ox_wr_ram_b (2'b10, wea_reg, web_in, dib_ecc_col, dip_ecc_col, addra_reg, addrb_in);
|
||
|
|
||
|
end
|
||
|
else
|
||
|
task_ox_wr_ram_b (2'b10, wea_reg, web_in, dib_ecc_col, dipb_in, addra_reg, addrb_in);
|
||
|
|
||
|
|
||
|
if (wr_mode_a != 2'b01)
|
||
|
task_col_rd_ram_a (2'b11, web_in, wea_reg, addra_reg, doa_buf, dopa_buf);
|
||
|
if (wr_mode_b != 2'b01)
|
||
|
task_col_rd_ram_b (2'b11, wea_reg, web_in, addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
|
||
|
task_col_wr_ram_a (2'b10, web_in, 8'hff, di_x, di_x[7:0], addrb_in, addra_reg);
|
||
|
task_col_wr_ram_b (2'b10, wea_reg, 8'hff, di_x, di_x[7:0], addra_reg, addrb_in);
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_read_int == 1)
|
||
|
task_col_ecc_read (doa_buf, dopa_buf, addra_reg);
|
||
|
|
||
|
end // if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (ox_addra_reconstruct_reg[15:col_addr_lsb] === ox_addrb_reconstruct[15:col_addr_lsb]))
|
||
|
else
|
||
|
viol_time = 0;
|
||
|
|
||
|
|
||
|
end // if (!rising_clka && rising_clkb)
|
||
|
|
||
|
|
||
|
end // if (SIM_DEVICE == "VIRTEX6")
|
||
|
else begin // 7series
|
||
|
|
||
|
|
||
|
// Clka and clkb rise at the same time
|
||
|
if ((rising_clka && rising_clkb) || viol_time == 1) begin
|
||
|
|
||
|
if (addra_in[15:col_addr_lsb] === addrb_in[15:col_addr_lsb]) begin
|
||
|
|
||
|
viol_type = 2'b01;
|
||
|
chk_col_same_clk = 1;
|
||
|
|
||
|
if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (time_port_a > time_port_b)) begin
|
||
|
doa_buf = dob_buf;
|
||
|
dopa_buf = dopb_buf;
|
||
|
end
|
||
|
else if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (time_port_b > time_port_a)) begin
|
||
|
dob_buf = doa_buf;
|
||
|
dopb_buf = dopa_buf;
|
||
|
end
|
||
|
else begin
|
||
|
task_rd_ram_a (addra_in, doa_buf, dopa_buf);
|
||
|
task_rd_ram_b (addrb_in, dob_buf, dopb_buf);
|
||
|
end
|
||
|
|
||
|
|
||
|
task_col_wr_ram_a (2'b00, web_in, wea_in, di_x, di_x[7:0], addrb_in, addra_in);
|
||
|
task_col_wr_ram_b (2'b00, wea_in, web_in, di_x, di_x[7:0], addra_in, addrb_in);
|
||
|
chk_col_same_clk = 0;
|
||
|
|
||
|
task_col_rd_ram_a (2'b01, web_in, wea_in, addra_in, doa_buf, dopa_buf);
|
||
|
task_col_rd_ram_b (2'b01, wea_in, web_in, addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
task_col_wr_ram_a (2'b10, web_in, wea_in, dia_in, dipa_in, addrb_in, addra_in);
|
||
|
|
||
|
|
||
|
dib_ecc_col = dib_in;
|
||
|
|
||
|
if (en_ecc_write_int == 1 || en_ecc_read_int == 1) begin
|
||
|
|
||
|
if (injectdbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
dib_ecc_col[62] = ~dib_ecc_col[62];
|
||
|
end
|
||
|
else if (injectsbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
end
|
||
|
|
||
|
end // if (en_ecc_write_int == 1 || en_ecc_read_int == 1)
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_write_int == 1 && enb_in === 1'b1) begin
|
||
|
|
||
|
dip_ecc_col = fn_dip_ecc(1'b1, dib_in, dipb_in);
|
||
|
eccparity_out = dip_ecc_col;
|
||
|
task_col_wr_ram_b (2'b10, wea_in, web_in, dib_ecc_col, dip_ecc_col, addra_in, addrb_in);
|
||
|
|
||
|
end
|
||
|
else
|
||
|
task_col_wr_ram_b (2'b10, wea_in, web_in, dib_ecc_col, dipb_in, addra_in, addrb_in);
|
||
|
|
||
|
|
||
|
if (wr_mode_a != 2'b01)
|
||
|
task_col_rd_ram_a (2'b11, web_in, wea_in, addra_in, doa_buf, dopa_buf);
|
||
|
if (wr_mode_b != 2'b01)
|
||
|
task_col_rd_ram_b (2'b11, wea_in, web_in, addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
if ((ram_mode_int == 0 && en_ecc_read_int == 1) && ((time_port_a > time_port_b) || (rising_clka && rising_clkb)))
|
||
|
task_col_ecc_read (doa_buf, dopa_buf, addra_in);
|
||
|
|
||
|
end // if (addra_in[15:col_addr_lsb] === addrb_in[15:col_addr_lsb])
|
||
|
else if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (ox_addra_reconstruct[15:col_addr_lsb] === ox_addrb_reconstruct[15:col_addr_lsb]) && rdaddr_collision_hwconfig_int == 1) begin
|
||
|
|
||
|
$display ("Address Overlap Error on RAMB36E1 : %m at simulation time %.3f ns.\nA read/write/write was performed on address %h (hex) of port A while a write/read/write was requested to the overlapped address %h (hex) of port B with RDADDR_COLLISION_HWCONFIG set to %s and WRITE_MODE_A set %s and WRITE_MODE_B set to %s . The write will be unsuccessful and the contents of the RAM at both address locations of port A and B became unknown. To correct this issue, either evaluate changing RDADDR_COLLISION_HWCONFIG to DELAYED_WRITE, change both WITRE_MODEs to something other than READ_FIRST or control addressing to not incur address overlap.", $time/1000.0, addra_in, addrb_in, RDADDR_COLLISION_HWCONFIG, WRITE_MODE_A, WRITE_MODE_B );
|
||
|
|
||
|
$finish;
|
||
|
|
||
|
end
|
||
|
else
|
||
|
viol_time = 0;
|
||
|
|
||
|
|
||
|
end // if ((rising_clka && rising_clkb) || viol_time == 1)
|
||
|
// Clkb before clka
|
||
|
else if (rising_clka && !rising_clkb) begin
|
||
|
|
||
|
|
||
|
if (addra_in[15:col_addr_lsb] === addrb_reg[15:col_addr_lsb]) begin
|
||
|
|
||
|
viol_type = 2'b10;
|
||
|
|
||
|
task_rd_ram_a (addra_in, doa_buf, dopa_buf);
|
||
|
|
||
|
task_col_wr_ram_a (2'b00, web_reg, wea_in, di_x, di_x[7:0], addrb_reg, addra_in);
|
||
|
task_col_wr_ram_b (2'b00, wea_in, web_reg, di_x, di_x[7:0], addra_in, addrb_reg);
|
||
|
|
||
|
task_col_rd_ram_a (2'b01, web_reg, wea_in, addra_in, doa_buf, dopa_buf);
|
||
|
task_col_rd_ram_b (2'b01, wea_in, web_reg, addrb_reg, dob_buf, dopb_buf);
|
||
|
|
||
|
task_col_wr_ram_a (2'b10, web_reg, wea_in, dia_in, dipa_in, addrb_reg, addra_in);
|
||
|
|
||
|
|
||
|
dib_ecc_col = dib_reg;
|
||
|
|
||
|
if (en_ecc_write_int == 1 || en_ecc_read_int == 1) begin
|
||
|
|
||
|
if (injectdbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
dib_ecc_col[62] = ~dib_ecc_col[62];
|
||
|
end
|
||
|
else if (injectsbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
end
|
||
|
|
||
|
end // if (en_ecc_write_int == 1 || en_ecc_read_int == 1)
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_write_int == 1 && enb_reg === 1'b1) begin
|
||
|
|
||
|
dip_ecc_col = fn_dip_ecc(1'b1, dib_reg, dipb_reg);
|
||
|
eccparity_out = dip_ecc_col;
|
||
|
task_col_wr_ram_b (2'b10, wea_in, web_reg, dib_ecc_col, dip_ecc_col, addra_in, addrb_reg);
|
||
|
|
||
|
end
|
||
|
else
|
||
|
task_col_wr_ram_b (2'b10, wea_in, web_reg, dib_ecc_col, dipb_reg, addra_in, addrb_reg);
|
||
|
|
||
|
|
||
|
if (wr_mode_a != 2'b01)
|
||
|
task_col_rd_ram_a (2'b11, web_reg, wea_in, addra_in, doa_buf, dopa_buf);
|
||
|
if (wr_mode_b != 2'b01)
|
||
|
task_col_rd_ram_b (2'b11, wea_in, web_reg, addrb_reg, dob_buf, dopb_buf);
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_read_int == 1)
|
||
|
task_col_ecc_read (doa_buf, dopa_buf, addra_in);
|
||
|
|
||
|
|
||
|
end // if (addra_in[15:col_addr_lsb] === addrb_reg[15:col_addr_lsb])
|
||
|
else if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (ox_addra_reconstruct[15:col_addr_lsb] === ox_addrb_reconstruct_reg[15:col_addr_lsb]) && rdaddr_collision_hwconfig_int == 1) begin
|
||
|
|
||
|
$display ("Address Overlap Error on RAMB36E1 : %m at simulation time %.3f ns.\nA read/write/write was performed on address %h (hex) of port A while a write/read/write was requested to the overlapped address %h (hex) of port B with RDADDR_COLLISION_HWCONFIG set to %s and WRITE_MODE_A set %s and WRITE_MODE_B set to %s . The write will be unsuccessful and the contents of the RAM at both address locations of port A and B became unknown. To correct this issue, either evaluate changing RDADDR_COLLISION_HWCONFIG to DELAYED_WRITE, change both WITRE_MODEs to something other than READ_FIRST or control addressing to not incur address overlap.", $time/1000.0, addra_in, addrb_reg, RDADDR_COLLISION_HWCONFIG, WRITE_MODE_A, WRITE_MODE_B );
|
||
|
|
||
|
$finish;
|
||
|
|
||
|
end
|
||
|
else
|
||
|
viol_time = 0;
|
||
|
|
||
|
|
||
|
end // if (rising_clka && !rising_clkb)
|
||
|
// Clka before clkb
|
||
|
else if (!rising_clka && rising_clkb) begin
|
||
|
|
||
|
|
||
|
if (addra_reg[15:col_addr_lsb] === addrb_in[15:col_addr_lsb]) begin
|
||
|
|
||
|
viol_type = 2'b11;
|
||
|
|
||
|
task_rd_ram_b (addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
task_col_wr_ram_a (2'b00, web_in, wea_reg, di_x, di_x[7:0], addrb_in, addra_reg);
|
||
|
task_col_wr_ram_b (2'b00, wea_reg, web_in, di_x, di_x[7:0], addra_reg, addrb_in);
|
||
|
|
||
|
task_col_rd_ram_a (2'b01, web_in, wea_reg, addra_reg, doa_buf, dopa_buf);
|
||
|
task_col_rd_ram_b (2'b01, wea_reg, web_in, addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
task_col_wr_ram_a (2'b10, web_in, wea_reg, dia_reg, dipa_reg, addrb_in, addra_reg);
|
||
|
|
||
|
|
||
|
dib_ecc_col = dib_in;
|
||
|
|
||
|
|
||
|
if (en_ecc_write_int == 1 || en_ecc_read_int == 1) begin
|
||
|
|
||
|
if (injectdbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
dib_ecc_col[62] = ~dib_ecc_col[62];
|
||
|
end
|
||
|
else if (injectsbiterr_in === 1) begin
|
||
|
dib_ecc_col[30] = ~dib_ecc_col[30];
|
||
|
end
|
||
|
|
||
|
end // if (en_ecc_write_int == 1 || en_ecc_read_int == 1)
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_write_int == 1 && enb_in === 1'b1) begin
|
||
|
|
||
|
dip_ecc_col = fn_dip_ecc(1'b1, dib_in, dipb_in);
|
||
|
eccparity_out = dip_ecc_col;
|
||
|
task_col_wr_ram_b (2'b10, wea_reg, web_in, dib_ecc_col, dip_ecc_col, addra_reg, addrb_in);
|
||
|
|
||
|
end
|
||
|
else
|
||
|
task_col_wr_ram_b (2'b10, wea_reg, web_in, dib_ecc_col, dipb_in, addra_reg, addrb_in);
|
||
|
|
||
|
|
||
|
if (wr_mode_a != 2'b01)
|
||
|
task_col_rd_ram_a (2'b11, web_in, wea_reg, addra_reg, doa_buf, dopa_buf);
|
||
|
if (wr_mode_b != 2'b01)
|
||
|
task_col_rd_ram_b (2'b11, wea_reg, web_in, addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
|
||
|
if (ram_mode_int == 0 && en_ecc_read_int == 1)
|
||
|
task_col_ecc_read (doa_buf, dopa_buf, addra_reg);
|
||
|
|
||
|
|
||
|
end // if (addra_reg[15:col_addr_lsb] === addrb_in[15:col_addr_lsb])
|
||
|
else if ((wr_mode_a == 2'b01 || wr_mode_b == 2'b01) && (ox_addra_reconstruct_reg[15:col_addr_lsb] === ox_addrb_reconstruct[15:col_addr_lsb]) && rdaddr_collision_hwconfig_int == 1) begin
|
||
|
|
||
|
$display ("Address Overlap Error on RAMB36E1 : %m at simulation time %.3f ns.\nA read/write/write was performed on address %h (hex) of port A while a write/read/write was requested to the overlapped address %h (hex) of port B with RDADDR_COLLISION_HWCONFIG set to %s and WRITE_MODE_A set %s and WRITE_MODE_B set to %s . The write will be unsuccessful and the contents of the RAM at both address locations of port A and B became unknown. To correct this issue, either evaluate changing RDADDR_COLLISION_HWCONFIG to DELAYED_WRITE, change both WITRE_MODEs to something other than READ_FIRST or control addressing to not incur address overlap.", $time/1000.0, addra_reg, addrb_in, RDADDR_COLLISION_HWCONFIG, WRITE_MODE_A, WRITE_MODE_B );
|
||
|
|
||
|
$finish;
|
||
|
|
||
|
end
|
||
|
else
|
||
|
viol_time = 0;
|
||
|
|
||
|
|
||
|
end // if (!rising_clka && rising_clkb)
|
||
|
|
||
|
|
||
|
end // else: !if(SIM_DEVICE == "VIRTEX6")
|
||
|
|
||
|
|
||
|
|
||
|
end // if (viol_time != 0)
|
||
|
end // if (gsr_in === 1'b0)
|
||
|
|
||
|
if (SIM_COLLISION_CHECK == "WARNING_ONLY")
|
||
|
viol_time = 0;
|
||
|
|
||
|
end // if (SIM_COLLISION_CHECK != "NONE")
|
||
|
|
||
|
|
||
|
/*************************************** end collision ********************************/
|
||
|
|
||
|
end // if ((cascade_a == 2'b00 || (addra_in_15_reg_bram == 1'b0 && cascade_a != 2'b00)) && (cascade_b == 2'b00 || (addrb_in_15_reg_bram == 1'b0 && cascade_b != 2'b00)))
|
||
|
|
||
|
|
||
|
/**************************** Port A ****************************************/
|
||
|
if (rising_clka) begin
|
||
|
|
||
|
// DRC
|
||
|
if (rstrama_in === 1 && ram_mode_int == 0 && (en_ecc_write_int == 1 || en_ecc_read_int == 1))
|
||
|
$display("DRC Warning : SET/RESET (RSTRAM) is not supported in ECC mode on RAMB36E1 instance %m.");
|
||
|
|
||
|
// end DRC
|
||
|
|
||
|
|
||
|
// registering addra_in[15] the second time
|
||
|
if (regcea_in)
|
||
|
addra_in_15_reg1 = addra_in_15_reg;
|
||
|
|
||
|
|
||
|
if (ena_in && (wr_mode_a != 2'b10 || wea_in[0] == 0 || rstrama_in == 1'b1))
|
||
|
if (cascade_a[1])
|
||
|
addra_in_15_reg = ~addra_in[15];
|
||
|
else
|
||
|
addra_in_15_reg = addra_in[15];
|
||
|
|
||
|
|
||
|
if (gsr_in == 1'b0 && ena_in == 1'b1 && (cascade_a == 2'b00 || (addra_in_15_reg_bram == 1'b0 && cascade_a != 2'b00))) begin
|
||
|
|
||
|
// SRVAL
|
||
|
if (rstrama_in === 1'b1) begin
|
||
|
|
||
|
doa_buf = SRVAL_A[0 +: ra_width];
|
||
|
doa_out = SRVAL_A[0 +: ra_width];
|
||
|
|
||
|
if (ra_width >= 8) begin
|
||
|
dopa_buf = SRVAL_A[ra_width +: ra_widthp];
|
||
|
dopa_out = SRVAL_A[ra_width +: ra_widthp];
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
if (viol_time == 0) begin
|
||
|
|
||
|
// Read first
|
||
|
if (wr_mode_a == 2'b01 || (ram_mode_int == 0 && en_ecc_read_int == 1)) begin
|
||
|
task_rd_ram_a (addra_in, doa_buf, dopa_buf);
|
||
|
|
||
|
|
||
|
// ECC decode
|
||
|
if (ram_mode_int == 0 && en_ecc_read_int == 1) begin
|
||
|
|
||
|
dopr_ecc = fn_dip_ecc(1'b0, doa_buf, dopa_buf);
|
||
|
|
||
|
syndrome = dopr_ecc ^ dopa_buf;
|
||
|
|
||
|
if (syndrome !== 0) begin
|
||
|
|
||
|
if (syndrome[7]) begin // dectect single bit error
|
||
|
|
||
|
ecc_bit_position = {doa_buf[63:57], dopa_buf[6], doa_buf[56:26], dopa_buf[5], doa_buf[25:11], dopa_buf[4], doa_buf[10:4], dopa_buf[3], doa_buf[3:1], dopa_buf[2], doa_buf[0], dopa_buf[1:0], dopa_buf[7]};
|
||
|
|
||
|
if (syndrome[6:0] > 71) begin
|
||
|
$display ("DRC Error : Simulation halted due Corrupted DIP. To correct this problem, make sure that reliable data is fed to the DIP. The correct Parity must be generated by a Hamming code encoder or encoder in the Block RAM. The output from the model is unreliable if there are more than 2 bit errors. The model doesn't warn if there is sporadic input of more than 2 bit errors due to the limitation in Hamming code.");
|
||
|
$finish;
|
||
|
end
|
||
|
|
||
|
ecc_bit_position[syndrome[6:0]] = ~ecc_bit_position[syndrome[6:0]]; // correct single bit error in the output
|
||
|
|
||
|
dia_in_ecc_corrected = {ecc_bit_position[71:65], ecc_bit_position[63:33], ecc_bit_position[31:17], ecc_bit_position[15:9], ecc_bit_position[7:5], ecc_bit_position[3]}; // correct single bit error in the memory
|
||
|
|
||
|
doa_buf = dia_in_ecc_corrected;
|
||
|
|
||
|
dipa_in_ecc_corrected = {ecc_bit_position[0], ecc_bit_position[64], ecc_bit_position[32], ecc_bit_position[16], ecc_bit_position[8], ecc_bit_position[4], ecc_bit_position[2:1]}; // correct single bit error in the parity memory
|
||
|
|
||
|
dopa_buf = dipa_in_ecc_corrected;
|
||
|
|
||
|
dbiterr_out <= 0;
|
||
|
sbiterr_out <= 1;
|
||
|
|
||
|
end
|
||
|
else if (!syndrome[7]) begin // double bit error
|
||
|
sbiterr_out <= 0;
|
||
|
dbiterr_out <= 1;
|
||
|
|
||
|
end
|
||
|
end // if (syndrome !== 0)
|
||
|
else begin
|
||
|
dbiterr_out <= 0;
|
||
|
sbiterr_out <= 0;
|
||
|
|
||
|
end // else: !if(syndrome !== 0)
|
||
|
|
||
|
|
||
|
// output of rdaddrecc
|
||
|
rdaddrecc_out[8:0] <= addra_in[14:6];
|
||
|
|
||
|
end // if (ram_mode_int == 0 && en_ecc_read_int == 1)
|
||
|
end // if (wr_mode_a == 2'b01)
|
||
|
|
||
|
|
||
|
// Write
|
||
|
task_wr_ram_a (wea_in, dia_in, dipa_in, addra_in);
|
||
|
|
||
|
// Read if not read first
|
||
|
if (wr_mode_a != 2'b01 && !(ram_mode_int == 0 && en_ecc_read_int == 1))
|
||
|
task_rd_ram_a (addra_in, doa_buf, dopa_buf);
|
||
|
|
||
|
end // if (viol_time == 0)
|
||
|
|
||
|
end // if (gsr_in == 1'b0 && ena_in == 1'b1 && (cascade_a == 2'b00 || (addra_in_15_reg_bram == 1'b0 && cascade_a != 2'b00)))
|
||
|
|
||
|
end // if (rising_clka)
|
||
|
// end of port A
|
||
|
|
||
|
|
||
|
/************************************** port B ***************************************************************/
|
||
|
if (rising_clkb) begin
|
||
|
|
||
|
// DRC
|
||
|
if (rstramb_in === 1 && ram_mode_int == 0 && (en_ecc_write_int == 1 || en_ecc_read_int == 1))
|
||
|
$display("DRC Warning : SET/RESET (RSTRAM) is not supported in ECC mode on RAMB36E1 instance %m.");
|
||
|
|
||
|
if (!(en_ecc_write_int == 1 || en_ecc_read_int == 1)) begin
|
||
|
|
||
|
if (injectsbiterr_in === 1)
|
||
|
$display("DRC Warning : INJECTSBITERR is not supported when neither EN_ECC_WRITE nor EN_ECC_READ = TRUE on RAMB36E1 instance %m.");
|
||
|
|
||
|
if (injectdbiterr_in === 1)
|
||
|
$display("DRC Warning : INJECTDBITERR is not supported when neither EN_ECC_WRITE nor EN_ECC_READ = TRUE on RAMB36E1 instance %m.");
|
||
|
|
||
|
end
|
||
|
// End DRC
|
||
|
|
||
|
|
||
|
if (regceb_in)
|
||
|
addrb_in_15_reg1 = addrb_in_15_reg;
|
||
|
|
||
|
|
||
|
if (enb_in && (wr_mode_b != 2'b10 || web_in[0] == 0 || rstramb_in == 1'b1))
|
||
|
if (cascade_b[1])
|
||
|
addrb_in_15_reg = ~addrb_in[15];
|
||
|
else
|
||
|
addrb_in_15_reg = addrb_in[15];
|
||
|
|
||
|
|
||
|
if (gsr_in == 1'b0 && enb_in == 1'b1 && (cascade_b == 2'b00 || (addrb_in_15_reg_bram == 1'b0 && cascade_b != 2'b00))) begin
|
||
|
|
||
|
// SRVAL
|
||
|
if (rstramb_in === 1'b1) begin
|
||
|
|
||
|
dob_buf = SRVAL_B[0 +: rb_width];
|
||
|
dob_out = SRVAL_B[0 +: rb_width];
|
||
|
|
||
|
if (rb_width >= 8) begin
|
||
|
dopb_buf = SRVAL_B[rb_width +: rb_widthp];
|
||
|
dopb_out = SRVAL_B[rb_width +: rb_widthp];
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
if (viol_time == 0) begin
|
||
|
|
||
|
// ECC encode
|
||
|
if (ram_mode_int == 0 && en_ecc_write_int == 1) begin
|
||
|
dip_ecc = fn_dip_ecc(1'b1, dib_in, dipb_in);
|
||
|
eccparity_out = dip_ecc;
|
||
|
dipb_in_ecc = dip_ecc;
|
||
|
end
|
||
|
else
|
||
|
dipb_in_ecc = dipb_in;
|
||
|
|
||
|
|
||
|
dib_in_ecc = dib_in;
|
||
|
|
||
|
|
||
|
// injecting error
|
||
|
if (en_ecc_write_int == 1 || en_ecc_read_int == 1) begin
|
||
|
|
||
|
if (injectdbiterr_in === 1) begin // double bit
|
||
|
dib_in_ecc[30] = ~dib_in_ecc[30];
|
||
|
dib_in_ecc[62] = ~dib_in_ecc[62];
|
||
|
end
|
||
|
else if (injectsbiterr_in === 1) begin // single bit
|
||
|
dib_in_ecc[30] = ~dib_in_ecc[30];
|
||
|
end
|
||
|
|
||
|
end // if (en_ecc_write_int == 1 || en_ecc_read_int == 1)
|
||
|
|
||
|
|
||
|
// Read first
|
||
|
if (wr_mode_b == 2'b01 && rstramb_in === 1'b0)
|
||
|
task_rd_ram_b (addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
|
||
|
// Write
|
||
|
task_wr_ram_b (web_in, dib_in_ecc, dipb_in_ecc, addrb_in);
|
||
|
|
||
|
|
||
|
// Read if not read first
|
||
|
if (wr_mode_b != 2'b01 && rstramb_in === 1'b0)
|
||
|
task_rd_ram_b (addrb_in, dob_buf, dopb_buf);
|
||
|
|
||
|
end // if (viol_time == 0)
|
||
|
|
||
|
|
||
|
end // if (gsr_in == 1'b0 && enb_in == 1'b1 && (cascade_b == 2'b00 || addrb_in_15_reg_bram == 1'b0))
|
||
|
|
||
|
end // if (rising_clkb)
|
||
|
// end of port B
|
||
|
|
||
|
|
||
|
if (gsr_in == 1'b0) begin
|
||
|
|
||
|
// writing outputs of port A
|
||
|
if (ena_in && (rising_clka || viol_time != 0)) begin
|
||
|
|
||
|
if (rstrama_in === 1'b0 && (wr_mode_a != 2'b10 || (WRITE_WIDTH_A <= 9 && wea_in[0] === 1'b0) || (WRITE_WIDTH_A == 18 && wea_in[1:0] === 2'b00) || ((WRITE_WIDTH_A == 36 || WRITE_WIDTH_A == 72) && wea_in[3:0] === 4'b0000))) begin
|
||
|
|
||
|
doa_out <= doa_buf;
|
||
|
|
||
|
if (ra_width >= 8)
|
||
|
dopa_out <= dopa_buf;
|
||
|
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
// writing outputs of port B
|
||
|
if (enb_in && (rising_clkb || viol_time != 0)) begin
|
||
|
|
||
|
if (rstramb_in === 1'b0 && (wr_mode_b != 2'b10 || (WRITE_WIDTH_B <= 9 && web_in[0] === 1'b0) || (WRITE_WIDTH_B == 18 && web_in[1:0] === 2'b00) || (WRITE_WIDTH_B == 36 && web_in[3:0] === 4'b0000) || (WRITE_WIDTH_B == 72 && web_in[7:0] === 8'h00))) begin
|
||
|
|
||
|
dob_out <= dob_buf;
|
||
|
|
||
|
if (rb_width >= 8)
|
||
|
dopb_out <= dopb_buf;
|
||
|
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
end // if (gsr_in == 1'b0)
|
||
|
|
||
|
|
||
|
viol_time = 0;
|
||
|
rising_clka = 0;
|
||
|
rising_clkb = 0;
|
||
|
viol_type = 2'b00;
|
||
|
col_wr_wr_msg = 1;
|
||
|
col_wra_rdb_msg = 1;
|
||
|
col_wrb_rda_msg = 1;
|
||
|
|
||
|
end // always @ (posedge rising_clka or posedge rising_clkb)
|
||
|
|
||
|
|
||
|
// ********* Cascade Port A ********
|
||
|
always @(posedge clka_in or cascadeina_in or addra_in_15_reg or doa_out or dopa_out) begin
|
||
|
|
||
|
if (cascade_a[1] == 1'b1 && addra_in_15_reg == 1'b1) begin
|
||
|
doa_out_mux[0] = cascadeina_in;
|
||
|
end
|
||
|
else begin
|
||
|
doa_out_mux = doa_out;
|
||
|
|
||
|
if (ra_width >= 8)
|
||
|
dopa_out_mux = dopa_out;
|
||
|
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
// output register mode
|
||
|
always @(posedge clka_in or cascadeina_in or addra_in_15_reg1 or doa_outreg or dopa_outreg) begin
|
||
|
|
||
|
if (cascade_a[1] == 1'b1 && addra_in_15_reg1 == 1'b1) begin
|
||
|
doa_outreg_mux[0] = cascadeina_in;
|
||
|
end
|
||
|
else begin
|
||
|
doa_outreg_mux = doa_outreg;
|
||
|
|
||
|
if (ra_width >= 8)
|
||
|
dopa_outreg_mux = dopa_outreg;
|
||
|
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
// ********* Cascade Port B ********
|
||
|
always @(posedge clkb_in or cascadeinb_in or addrb_in_15_reg or dob_out or dopb_out) begin
|
||
|
|
||
|
if (cascade_b[1] == 1'b1 && addrb_in_15_reg == 1'b1) begin
|
||
|
dob_out_mux[0] = cascadeinb_in;
|
||
|
end
|
||
|
else begin
|
||
|
dob_out_mux = dob_out;
|
||
|
|
||
|
if (rb_width >= 8)
|
||
|
dopb_out_mux = dopb_out;
|
||
|
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
// output register mode
|
||
|
always @(posedge clkb_in or cascadeinb_in or addrb_in_15_reg1 or dob_outreg or dopb_outreg) begin
|
||
|
|
||
|
if (cascade_b[1] == 1'b1 && addrb_in_15_reg1 == 1'b1) begin
|
||
|
dob_outreg_mux[0] = cascadeinb_in;
|
||
|
end
|
||
|
else begin
|
||
|
dob_outreg_mux = dob_outreg;
|
||
|
|
||
|
if (rb_width >= 8)
|
||
|
dopb_outreg_mux = dopb_outreg;
|
||
|
|
||
|
end
|
||
|
|
||
|
end // always @ (posedge regclkb_in or cascadeinregb_in or addrb_in_15_reg1 or dob_outreg or dopb_outreg)
|
||
|
|
||
|
|
||
|
// ***** Output Registers **** Port A *****
|
||
|
always @(posedge clka_in or posedge gsr_in) begin
|
||
|
|
||
|
if (DOA_REG == 1) begin
|
||
|
|
||
|
if (gsr_in == 1'b1) begin
|
||
|
|
||
|
rdaddrecc_outreg <= 9'b0;
|
||
|
dbiterr_outreg <= 0;
|
||
|
sbiterr_outreg <= 0;
|
||
|
doa_outreg <= INIT_A[0 +: ra_width];
|
||
|
|
||
|
if (ra_width >= 8)
|
||
|
dopa_outreg <= INIT_A[ra_width +: ra_widthp];
|
||
|
|
||
|
end
|
||
|
else if (gsr_in == 1'b0) begin
|
||
|
|
||
|
if (regcea_in === 1'b1) begin
|
||
|
dbiterr_outreg <= dbiterr_out;
|
||
|
sbiterr_outreg <= sbiterr_out;
|
||
|
rdaddrecc_outreg <= rdaddrecc_out;
|
||
|
end
|
||
|
|
||
|
|
||
|
if (rstreg_priority_a_int == 0) begin // Virtex5 behavior
|
||
|
|
||
|
if (regcea_in == 1'b1) begin
|
||
|
if (rstrega_in == 1'b1) begin
|
||
|
|
||
|
doa_outreg <= SRVAL_A[0 +: ra_width];
|
||
|
|
||
|
if (ra_width >= 8)
|
||
|
dopa_outreg <= SRVAL_A[ra_width +: ra_widthp];
|
||
|
|
||
|
end
|
||
|
else if (rstrega_in == 1'b0) begin
|
||
|
|
||
|
doa_outreg <= doa_out;
|
||
|
|
||
|
if (ra_width >= 8)
|
||
|
dopa_outreg <= dopa_out;
|
||
|
|
||
|
end
|
||
|
end // if (regcea_in == 1'b1)
|
||
|
|
||
|
end // if (rstreg_priority_a_int == 1'b0)
|
||
|
else begin
|
||
|
|
||
|
if (rstrega_in == 1'b1) begin
|
||
|
|
||
|
doa_outreg <= SRVAL_A[0 +: ra_width];
|
||
|
|
||
|
if (ra_width >= 8)
|
||
|
dopa_outreg <= SRVAL_A[ra_width +: ra_widthp];
|
||
|
|
||
|
end
|
||
|
|
||
|
else if (rstrega_in == 1'b0) begin
|
||
|
|
||
|
if (regcea_in == 1'b1) begin
|
||
|
|
||
|
doa_outreg <= doa_out;
|
||
|
|
||
|
if (ra_width >= 8)
|
||
|
dopa_outreg <= dopa_out;
|
||
|
|
||
|
end
|
||
|
end
|
||
|
end // else: !if(rstreg_priority_a_int == 1'b0)
|
||
|
|
||
|
end // if (gsr_in == 1'b0)
|
||
|
|
||
|
end // if (DOA_REG == 1)
|
||
|
|
||
|
end // always @ (posedge clka_in or posedge gsr_in)
|
||
|
|
||
|
|
||
|
always @(temp_wire or doa_out_mux or dopa_out_mux or doa_outreg_mux or dopa_outreg_mux or dbiterr_out or dbiterr_outreg or sbiterr_out or sbiterr_outreg or rdaddrecc_out or rdaddrecc_outreg) begin
|
||
|
|
||
|
case (DOA_REG)
|
||
|
|
||
|
0 : begin
|
||
|
dbiterr_out_out = dbiterr_out;
|
||
|
sbiterr_out_out = sbiterr_out;
|
||
|
rdaddrecc_out_out = rdaddrecc_out;
|
||
|
doa_out_out[0 +: ra_width] = doa_out_mux[0 +: ra_width];
|
||
|
|
||
|
if (ra_width >= 8)
|
||
|
dopa_out_out[0 +: ra_widthp] = dopa_out_mux[0 +: ra_widthp];
|
||
|
|
||
|
end
|
||
|
1 : begin
|
||
|
dbiterr_out_out = dbiterr_outreg;
|
||
|
sbiterr_out_out = sbiterr_outreg;
|
||
|
doa_out_out[0 +: ra_width] = doa_outreg_mux[0 +: ra_width];
|
||
|
rdaddrecc_out_out = rdaddrecc_outreg;
|
||
|
|
||
|
if (ra_width >= 8)
|
||
|
dopa_out_out[0 +: ra_widthp] = dopa_outreg_mux[0 +: ra_widthp];
|
||
|
|
||
|
end
|
||
|
default : begin
|
||
|
$display("Attribute Syntax Error : The attribute DOA_REG on RAMB36E1 instance %m is set to %2d. Legal values for this attribute are 0 or 1.", DOA_REG);
|
||
|
$finish;
|
||
|
end
|
||
|
|
||
|
endcase
|
||
|
|
||
|
end // always @ (doa_out_mux or dopa_out_mux or doa_outreg_mux or dopa_outreg_mux or dbiterr_out or dbiterr_outreg or sbiterr_out or sbiterr_outreg)
|
||
|
|
||
|
|
||
|
// ***** Output Registers **** Port B *****
|
||
|
always @(posedge clkb_in or posedge gsr_in) begin
|
||
|
|
||
|
if (DOB_REG == 1) begin
|
||
|
|
||
|
if (gsr_in == 1'b1) begin
|
||
|
|
||
|
dob_outreg <= INIT_B[0 +: rb_width];
|
||
|
|
||
|
if (rb_width >= 8)
|
||
|
dopb_outreg <= INIT_B[rb_width +: rb_widthp];
|
||
|
|
||
|
end
|
||
|
else if (gsr_in == 1'b0) begin
|
||
|
|
||
|
if (rstreg_priority_b_int == 0) begin // Virtex5 behavior
|
||
|
|
||
|
if (regceb_in == 1'b1) begin
|
||
|
if (rstregb_in == 1'b1) begin
|
||
|
|
||
|
dob_outreg <= SRVAL_B[0 +: rb_width];
|
||
|
|
||
|
if (rb_width >= 8)
|
||
|
dopb_outreg <= SRVAL_B[rb_width +: rb_widthp];
|
||
|
|
||
|
end
|
||
|
else if (rstregb_in == 1'b0) begin
|
||
|
|
||
|
dob_outreg <= dob_out;
|
||
|
|
||
|
if (rb_width >= 8)
|
||
|
dopb_outreg <= dopb_out;
|
||
|
|
||
|
end
|
||
|
end // if (regceb_in == 1'b1)
|
||
|
|
||
|
end // if (rstreg_priority_b_int == 1'b0)
|
||
|
else begin
|
||
|
|
||
|
if (rstregb_in == 1'b1) begin
|
||
|
|
||
|
dob_outreg <= SRVAL_B[0 +: rb_width];
|
||
|
|
||
|
if (rb_width >= 8)
|
||
|
dopb_outreg <= SRVAL_B[rb_width +: rb_widthp];
|
||
|
|
||
|
end
|
||
|
|
||
|
else if (rstregb_in == 1'b0) begin
|
||
|
|
||
|
if (regceb_in == 1'b1) begin
|
||
|
|
||
|
dob_outreg <= dob_out;
|
||
|
|
||
|
if (rb_width >= 8)
|
||
|
dopb_outreg <= dopb_out;
|
||
|
|
||
|
end
|
||
|
end
|
||
|
end // else: !if(rstreg_priority_b_int == 1'b0)
|
||
|
|
||
|
end // if (gsr_in == 1'b0)
|
||
|
|
||
|
end // if (DOB_REG == 1)
|
||
|
|
||
|
end // always @ (posedge clkb_in or posedge gsr_in)
|
||
|
|
||
|
|
||
|
always @(temp_wire or dob_out_mux or dopb_out_mux or dob_outreg_mux or dopb_outreg_mux) begin
|
||
|
|
||
|
case (DOB_REG)
|
||
|
|
||
|
0 : begin
|
||
|
dob_out_out[0 +: rb_width] = dob_out_mux[0 +: rb_width];
|
||
|
|
||
|
if (rb_width >= 8)
|
||
|
dopb_out_out[0 +: rb_widthp] = dopb_out_mux[0 +: rb_widthp];
|
||
|
end
|
||
|
1 : begin
|
||
|
dob_out_out[0 +: rb_width] = dob_outreg_mux[0 +: rb_width];
|
||
|
|
||
|
if (rb_width >= 8)
|
||
|
dopb_out_out[0 +: rb_widthp] = dopb_outreg_mux[0 +: rb_widthp];
|
||
|
|
||
|
end
|
||
|
default : begin
|
||
|
$display("Attribute Syntax Error : The attribute DOB_REG on RAMB36E1 instance %m is set to %2d. Legal values for this attribute are 0 or 1.", DOB_REG);
|
||
|
$finish;
|
||
|
end
|
||
|
|
||
|
endcase
|
||
|
|
||
|
end // always @ (dob_out_mux or dopb_out_mux or dob_outreg_mux or dopb_outreg_mux)
|
||
|
|
||
|
|
||
|
endmodule // RB36_INTERNAL_VLOG
|
||
|
|
||
|
`endcelldefine
|
||
|
|
||
|
// end of RB36_INTERNAL_VLOG - Note: Not an user primitive
|