ID do artigo: 000074042 Tipo de conteúdo: Solução de problemas Última revisão: 08/10/2019

Por que o comportamento de simulação de função está incorreto quando há várias RAM: 2 portas Intel FPGA IPs?

Ambiente

    Intel® Quartus® Prime Pro Edition
    RAM 2-PORT Intel® FPGA IP
BUILT IN - ARTICLE INTRO SECOND COMPONENT
Descrição

Devido a um problema no software Intel® Quartus® Prime Pro Edition versão 19.1, o comportamento de simulação de função pode estar incorreto quando seu projeto contém vários IPs de porta RAM-2 que permitem "Emular o modo de clock duplo TDP" e executar o script de simulação gerado automaticamente. Os múltiplos IPs de RAM dcfifo_in e dcfifo_out submodules com o mesmo nome do módulo. Mas os arquivos de dcfifo_in e dcfifo_out ip insistem em diferentes submodules. No script de simulação, todos os dcfifo_in, dcfifo_out e seus arquivos submodules de diferentes IPs de RAM são compilados na mesma biblioteca de simulação. Portanto, os arquivos mais recentes dcfifo_in e dcfifo_out sobregrava os arquivos anteriores. Todos os IPs de RAM usam os mesmos módulos dcfifo_in e dcfifo_out e levam ao comportamento incorreto de simulação.

Resolução

Para resolver este problema, modifique o script de simulação na ferramenta sim/comum/_files.tcl para criar bibliotecas diferentes para diferentes IPs de RAM e compilar instâncias dcfifo_in e dcfifo_out em diferentes bibliotecas correspondentemente.

  • Roteiro original:

proc get_design_libraries {} {
definir bibliotecas [criar o dict]
bibliotecas de conjunto de fifo_191 1
bibliotecas de conjunto de ram_2port_191 1
bibliotecas de conjunto de dct dpram32x512 1
bibliotecas de conjunto de dct dpram16x1024 1
devolução $libraries}

proc get_design_files {USER_DEFINED_COMPILE_OPTIONS USER_DEFINED_VERILOG_COMPILE_OPTIONS USER_DEFINED_VHDL_COMPILE_OPTIONS QSYS_SIMDIR} {
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram32x512/dpram32x512/ram_2port_191/sim/dcfifo_in.v"]"\" -trabalho ram_2port_191"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram32x512/dpram32x512/ram_2port_191/sim/dcfifo_out.v"]"\" -trabalho ram_2port_191"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram32x512/dpram32x512/ram_2port_191/sim/dpram32x512_ram_2port_191_6nqqinq.v"]\" -trabalho ram_2port_191"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram32x512/dpram32x512/ram_2port_191/sim/tdp_dpram32x512_ram_2port_191_6nqqinq.v"]"\" -trabalho ram_2port_191"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram16x1024/dpram16x1024/ram_2port_191/sim/dcfifo_in.v"]\" -trabalho ram_2port_191"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram16x1024/dpram16x1024/ram_2port_191/sim/dcfifo_out.v"]\" -trabalho ram_2port_191"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram16x1024/dpram16x1024/ram_2port_191/sim/dpram16x1024_ram_2port_191_u7jjoxa.v"]\" -trabalho ram_2port_191"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram16x1024/dpram16x1024/ram_2port_191/sim/tdp_dpram16x1024_ram_2port_191_u7jjoxa.v"]\" -trabalho ram_2port_191"
devolver $design_files
}

  • Script modificado:

proc get_design_libraries {} {
bibliotecas definidas [dict create] conjunto de dct bibliotecas fifo_191 1
bibliotecas de conjunto de ram_2port_191_0 1
bibliotecas de conjunto de ram_2port_191_1 1
 
bibliotecas de conjunto de dct dpram32x512 1
bibliotecas de conjunto de dct dpram16x1024 1
devolução $libraries}

proc get_design_files {USER_DEFINED_COMPILE_OPTIONS USER_DEFINED_VERILOG_COMPILE_OPTIONS USER_DEFINED_VHDL_COMPILE_OPTIONS QSYS_SIMDIR} {
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram32x512/dpram32x512/ram_2port_191/sim/dcfifo_in.v"]\" -trabalho ram_2port_191_1"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram32x512/dpram32x512/ram_2port_191/sim/dcfifo_out.v"]\" -work ram_2port_191_1"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram32x512/dpram32x512/ram_2port_191/sim/dpram32x512_ram_2port_191_6nqqinq.v".\" -trabalho ram_2port_191_1"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram32x512/dpram32x512/ram_2port_191/sim/tdp_dpram32x512_ram_2port_191_6nqqinq.v"]"\" -trabalho ram_2port_191_1"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram16x1024/dpram16x1024/ram_2port_191/sim/dcfifo_in.v"]\" -trabalho ram_2port_191_0"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram16x1024/dpram16x1024/ram_2port_191/sim/dcfifo_out.v"]\" -trabalho ram_2port_191_0"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram16x1024/dpram16x1024/ram_2port_191/sim/dpram16x1024_ram_2port_191_u7jjoxa.v"]\" -trabalho ram_2port_191_0"
lappend design_files "vlog $USER_DEFINED_VERILOG_COMPILE_OPTIONS $USER_DEFINED_COMPILE_OPTIONS \"[normalize_path "$QSYS_SIMDIR/dpram16x1024/dpram16x1024/ram_2port_191/sim/tdp_dpram16x1024_ram_2port_191_u7jjoxa.v"]"\" -trabalho ram_2port_191_0"
devolver $design_files}

Este problema é corrigido a partir da versão 19.3 do software Intel® Quartus® Prime Pro Edition.

Produtos relacionados

Este artigo aplica-se a 1 produtos

Dispositivos programáveis Intel®

1

O conteúdo desta página é uma combinação de tradução humana e por computador do conteúdo original em inglês. Este conteúdo é fornecido para sua conveniência e apenas para informação geral, e não deve ser considerado completo ou exato. Se houver alguma contradição entre a versão em inglês desta página e a tradução, a versão em inglês prevalecerá e será a determinante. Exibir a versão em inglês desta página.