1- // Amazon FPGA Hardware Development Kit
2- //
3- // Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4- //
5- // Licensed under the Amazon Software License (the "License"). You may not use
6- // this file except in compliance with the License. A copy of the License is
7- // located at
8- //
9- // http://aws.amazon.com/asl/
10- //
11- // or in the "license" file accompanying this file. This file is distributed on
12- // an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or
13- // implied. See the License for the specific language governing permissions and
14- // limitations under the License.
15-
161// import uvm_pkg::*;
172
183// typedef enum bit {SIDE_B, SIDE_A} components_side_e;
4+ import arch_package :: * ;
195`timescale 1ps / 1ps
206module ddr4_rank # (
217 parameter MC_DQ_WIDTH = 16 , // Memory DQ bus width
@@ -33,7 +19,8 @@ module ddr4_rank #(
3319 parameter MEM_PART_WIDTH = " x4" , // Single Device width
3420 // Shows which SDRAMs are connected to side A(first half) and side B(second half) of RCD.
3521 parameter DDR_SIM_MODEL = " MICRON" , // "MICRON" or "DENALI" memory model
36- parameter DM_DBI = " " // Disables dm_dbi_n if set to NONE
22+ parameter DM_DBI = " " , // Disables dm_dbi_n if set to NONE
23+ parameter UTYPE_density CONFIGURED_DENSITY = _4G
3724 )
3825 (
3926 // side A of the RCD
@@ -74,12 +61,12 @@ module ddr4_rank #(
7461
7562 genvar device_x; // used in for loop in generate block (shows number of current device)
7663 genvar device_y; // used in for loop in generate block (shows number of current device)
64+
7765
7866 // Local parameters
7967 localparam DRAM_WIDTH = (MEM_PART_WIDTH == " x4" ) ? 4 :
8068 (MEM_PART_WIDTH == " x8" ) ? 8 :
8169 16 ;
82-
8370 localparam SDRAM_ADDR_BITS = 18 - MC_ABITS ; // Redundants Address bits to SDRAM devices
8471 localparam DQ_PER_DEVICE = (MEM_PART_WIDTH == " x4" ) ? 4 : // DQ per Device is 4-bits
8572 (MEM_PART_WIDTH == " x8" ) ? 8 : // DQ per Device is 8-bits
@@ -247,7 +234,8 @@ module ddr4_rank #(
247234 iDDR4.BA <= # (fbt_delay[device_x]) qb_ba; // input [MAX_BANK_BITS-1:0]
248235 // The RCD output inversion to side B address signal invert qb_addr[13]=1'b1.
249236 // This is issue because the address to SDRAM will be out of bounds (max range is addr[13:0]='h1FFF), to resolve this issue we set qb_addr[13] to 1'b0.
250- iDDR4.ADDR <= # (fbt_delay[device_x]) ddr4_model_qb_addr[13 : 0 ]; // input [13:0]
237+ // iDDR4.ADDR <= #(fbt_delay[device_x]) {1'b0, ddr4_model_qb_addr[12:0]}; // input [13:0]
238+ iDDR4.ADDR <= # (fbt_delay[device_x]) ddr4_model_qb_addr[13 : 0 ]; // input [13:0]
251239 iDDR4.ADDR_17 <= # (fbt_delay[device_x]) ddr4_model_qb_addr[17 ]; // input
252240 end // block: always_block_fbt_delays_side_b
253241 end // block: add_fbt_delays_side_b
@@ -277,7 +265,8 @@ module ddr4_rank #(
277265 iDDR4.BA <= qb_ba; // input [MAX_BANK_BITS-1:0]
278266 // The RCD output inversion to side B address signal invert qb_addr[13]=1'b1.
279267 // This is issue because the address to SDRAM will be out of bounds (max range is addr[13:0]='h1FFF), to resolve this issue we set qb_addr[13] to 1'b0.
280- iDDR4.ADDR <= ddr4_model_qb_addr[13 : 0 ]; // input [13:0]
268+ // iDDR4.ADDR <= {1'b0, ddr4_model_qb_addr[12:0]}; // input [13:0]
269+ iDDR4.ADDR <= ddr4_model_qb_addr[13 : 0 ]; // input [13:0]
281270 iDDR4.ADDR_17 <= ddr4_model_qb_addr[17 ]; // input
282271 end // block: always_block_without_fbt_delays_side_b
283272 end // block: without_fbt_delays_side_b
@@ -323,7 +312,8 @@ module ddr4_rank #(
323312 `ifdef THREE_DS
324313 .CONFIGURED_RANKS (4 ),
325314 `endif
326- .CONFIGURED_DENSITY (_8G),.CONFIGURED_DQ_BITS (DRAM_WIDTH )
315+ .CONFIGURED_DQ_BITS (DRAM_WIDTH ),
316+ .CONFIGURED_DENSITY (CONFIGURED_DENSITY )
327317 ) u_ddr4_model (
328318 .model_enable (), // inout
329319 .iDDR4 (iDDR4)
0 commit comments