ID do artigo: 000080467 Tipo de conteúdo: Solução de problemas Última revisão: 03/04/2019

Por que meu atributo RAM "no_rw_check" é ignorado no software Intel® Quartus® Prime versão 16.0 em diante?

Ambiente

    Intel® Quartus® Prime Pro Edition
    Intel® Quartus® Prime Standard Edition
BUILT IN - ARTICLE INTRO SECOND COMPONENT
Descrição

Devido a um problema no software Intel® Quartus® Prime versão 16.0 e posterior, você pode ver que o atributo de "no_rw_check" é ignorado se você declarar a saída da RAM a um sinal intermediário em vez da porta de saída. Este problema não ocorre no software Intel Quartus Prime versão 15.1 e anterior.

Se você tiver um projeto migrado para a versão do software Intel Quartus Prime 16.0 e mais recente, verifique o relatório sob análise e síntese de configurações > LPM_Parameter -> RAM. Certifique-se de que o parâmetro READ_DURING_WRITE_MODE_MIXED_PORTS tenha um valor de DON'T CARE se o atributo "no_rw_check" for usado.

Exemplo abaixo mostra o código do atributo 'no_rw_check' detectado no software Intel Quartus Prime versão 16.0 em diante:

Ieee BIBLIOTECA;

USE IEEE.STD_LOGIC_1164.ALL;

RAM ENTIDADE É

PORTA (

clock: in STD_LOGIC;

dados: EM STD_LOGIC_VECTOR (2 DOWNTO 0);

write_address: NO INTERVALO INTEIRO DE 0 a 31;

read_address: NO INTERVALO INTEIRO DE 0 a 31;

nós: em STD_LOGIC;

q: OUT STD_LOGIC_VECTOR (2 DOWNTO 0)

);

RAM END;

RTL ARQUITETURA DE RAM É

TIPO MEM É ARRAY(0 A 31) DE STD_LOGIC_VECTOR(2 DOWNTO 0);

SINAL ram_block: MEM;

RAMSTYLE ATTRIBUTE: string;

RAMSTYLE ATRIBUTO de ram_block: o sinal é "no_rw_check";

SINAL read_address_reg: FAIXA DE INTEIROS DE 0 a 31;

SINAL q_reg: STD_LOGIC_VECTOR (2 DOWNTO 0);

COMEÇAR

PROCESSO (clock)

COMEÇAR

IF (clock'event and clock = '1') ENTÃO

SE (nós = '1') ENTÃO

ram_block(write_address) <= dados;

TERMINAR SE;

read_address_reg <= read_address;

TERMINAR SE;

código de ponta do atributo no_rw_check não detectado na versão 16.0 do software Prime Intel Quartus versão 16.0

------------------------------------------------------------------------------------

IF (clock'event and clock = '1') ENTÃO

q_reg <= ram_block(read_address_reg);

TERMINAR SE;

q <= q_reg;

------------------------------------------------------------------------------------

PROCESSO FINAL;

RTL END;

Resolução

Para resolver este problema, ligue a lógica de adicionar pass-through para RAMs inferidos no

Configurações de > -> do compilador -> configurações avançadas (síntese)

Ou

Declare o sinal de saída da RAM como porta de saída sem usar sinal intermediário, substituindo o código de ponta acima pelo código abaixo:

------------------------------------------------------------------------------------

IF (clock'event and clock = '1') ENTÃO

q <= ram_block(read_address_reg);

TERMINAR SE;

------------------------------------------------------------------------------------

Este problema está programado para ser corrigido em uma versão futura 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 governará e será a controle. Exibir a versão em inglês desta página.