Kritisches Problem
Für DDR2- und DDR3-Schnittstellen, die auf Arria V oder Cyclone abzielen V-Geräte mit dem Parameter Enable Hard External Memory Interface (Hard External Memory Interface aktivieren ) Eingeschaltet und mehrere Port-Front-End-Breiten wie in den folgenden gezeigt Tabelle, ein Korrekturfaktor erforderlich ist.
Dieses Problem kann dazu führen, dass Ihr Design in der Simulation fehlschlägt. Das Das Problem betrifft DDR2- und DDR3-Schnittstellen, die auf den harten Speicher ausgerichtet sind Schnittstellenressourcen auf Arria V oder Cyclone V-Geräte. Dieses Problem wird in einer zukünftigen Version behoben des DDR2- und DDR3-SDRAM-Controllers mit UniPHY.
Gesamtbreite der Speicherschnittstelle
Breite der Front-End-Schnittstelle mit mehreren Ports | Korrektur erforderlich |
8
32
-1
8
64
-2
8
128
-3
8
256
-4
16
64
-1
16
128
-2
16
256
-3
32
32
1
32
128
-1
32
256
-2
40
160
-1
40
320
-2
Die Problemumgehung für dieses Problem lautet:
- Öffnen Sie die Datei
altera_mem_if_hard_memory_controller_top(arriav/cyclonev).sv
in einem Texteditor. - In
altera_mem_if_hard_memory_controller_top(arriav/cyclonev).sv
, Fügen Sie die folgenden Zeilen hinzu nach// New parameters for HMC
:
parameter AVL_ADDR_WIDTH_PORT_0 = AVL_ADDR_WIDTH ;
parameter AVL_ADDR_WIDTH_PORT_1 = AVL_ADDR_WIDTH ;
parameter AVL_ADDR_WIDTH_PORT_2 = AVL_ADDR_WIDTH ;
parameter AVL_ADDR_WIDTH_PORT_3 = AVL_ADDR_WIDTH ;
parameter AVL_ADDR_WIDTH_PORT_4 = AVL_ADDR_WIDTH ;
parameter AVL_ADDR_WIDTH_PORT_5 = AVL_ADDR_WIDTH ;
- In
altera_mem_if_hard_memory_controller_top(arriav/cyclonev).sv
, ersetzenAVL_ADDR_WIDTH
durch das jeweiligeAVL_ADDR_WIDTH_PORT_#
, Zum Beispiel:
Ersetzen input [AVL_ADDR_WIDTH - 1 : 0] avl_addr_0;
Mit
input [AVL_ADDR_WIDTH_PORT_0 - 1 : 0] avl_addr_0;
- In
altera_mem_if_hard_memory_controller_top(arriav/cyclonev).sv
, Kommentieren Sie die Zeilen vonassign i_avst_cmd_data_0 = i_avst_cmd_data_g[0];
Bis
assign avl_size_g[5] = avl_size_5;
- In
altera_mem_if_hard_memory_controller_top(arriav/cyclonev).sv
, Fügen Sie die folgenden Zeilen unmittelbar nach dem oben genannten Abschnitt hinzu:
assign i_avst_cmd_data_0 = {{42-AVL_SIZE_WIDTH-34{1\'b0}},avl_size_0,{34-AVL_ADDR_WIDTH_PORT_0-2{1\'b0}},avl_addr_0,avl_write_req_0,avl_read_req_0};
assign i_avst_cmd_data_1 = {{42-AVL_SIZE_WIDTH-34{1\'b0}},avl_size_1,{34-AVL_ADDR_WIDTH_PORT_1-2{1\'b0}},avl_addr_1,avl_write_req_1,avl_read_req_1};
assign i_avst_cmd_data_2 = {{42-AVL_SIZE_WIDTH-34{1\'b0}},avl_size_2,{34-AVL_ADDR_WIDTH_PORT_2-2{1\'b0}},avl_addr_2,avl_write_req_2,avl_read_req_2};
assign i_avst_cmd_data_3 = {{42-AVL_SIZE_WIDTH-34{1\'b0}},avl_size_3,{34-AVL_ADDR_WIDTH_PORT_3-2{1\'b0}},avl_addr_3,avl_write_req_3,avl_read_req_3};
assign i_avst_cmd_data_4 = {{42-AVL_SIZE_WIDTH-34{1\'b0}},avl_size_4,{34-AVL_ADDR_WIDTH_PORT_4-2{1\'b0}},avl_addr_4,avl_write_req_4,avl_read_req_4};
assign i_avst_cmd_data_5 = {{42-AVL_SIZE_WIDTH-34{1\'b0}},avl_size_5,{34-AVL_ADDR_WIDTH_PORT_5-2{1\'b0}},avl_addr_5,avl_write_req_5,avl_read_req_5};
- In
altera_mem_if_hard_memory_controller_top(arriav/cyclonev).sv
, kommentieren Sie die folgende Zeile:
i_avst_cmd_data_g[port_i] = {avl_size_g[port_i],{34-AVL_ADDR_WIDTH-2{1\'b0}},avl_addr_g[port_i],avl_write_req_g[port_i],avl_read_req_g[port_i]};
- In allen Wrappern, die die
altera_mem_if_hard_memory_controller_top(arriav/cyclonev).sv
, Aktualisieren Sie die Busbreite für jedenavl_addr_
als Folgt:
Replace input wire [21:0] avl_addr_0, // .address
Mit
input wire [21:0] avl_addr_0,
// .address