ID do artigo: 000083380 Tipo de conteúdo: Solução de problemas Última revisão: 15/12/2012

Os filtros FIR podem não usar os registros de entrada de blocos DSP

Ambiente

    Intel® Quartus® II Subscription Edition
BUILT IN - ARTICLE INTRO SECOND COMPONENT

Problema crítico

Descrição

Alguns filtros FIR, que o compilador FIR II produz, falham para usar todos os registros de entrada de blocoS DSP apropriados. Inquérito de tempo não analisa corretamente esses filtros FIR, e eles parecem atender ao tempo. Na realidade, o tempo nos caminhos não-registrou são não analisados e esses filtros FIR provavelmente causarão problemas relacionados ao tempo erros quando implementados no hardware. O problema afeta Stratix V, Arria V (GX e GZ) e dispositivos Cyclone V. O problema afeta Filtros FIR que:Use o modo systolicNeque um número ímpar de multiplicadoresEste problema não afeta filtros FIR que precisam de um número de Multiplicadores. Ímpar e até mesmo se referir ao número de multiplicadores físicos que implementam o filtro FIR, não o número de toques que você originalmente Especificar. Um filtro FIR com um número ainda maior de torneiras pode precisar de um ímpar número de multiplicadores físicos e vice-versa. Para determinar se meu filtro FIR é afetado, siga estas etapas:Examine o gerado Código VHDL para determinar se ele contém um multiplicador de bonecos. Um O filtro FIR systólic contém uma série de comentários CHAINMULTADDD. Se o seu filtro FIR não conter qualquer comentário semelhante ao após os comentários, seu filtro FIR não é um filtro FIR sistólico e não é afetado: --u0_m0_wo0_cma0(CHAINMULTADDD,33)@13

Se a sua FIR contiver um ou mais comentários CHAINMULTADDD, examine o código VHDL que segue cada comentário. Algumas linhas após o comentário CHAINMULTADDD, encontre um processo de chainmultadd semelhante ao o seguinte código:u0_m0_wo0_cma0_chainmultadd: PROCESS (clk, areset) INICIAR SE (areset = '1') EM SEGUIDA, u0_m0_wo0_cma0_a <= (outros => (outros => '0')); u0_m0_wo0_cma0_b <= (outros => (outros => '0')); u0_m0_wo0_cma0_c <= (outros => (outros => '0')); u0_m0_wo0_cma0_anl <= '0'; u0_m0_wo0_cma0_s <= (outros => (outros => '0')); ELSIF(clk'EVENT E CLK = '1') EM SEGUIDA, SE (d_u0_m0_wo0_compute_q_13_q = "1") ENTÃO u0_m0_wo0_cma0_a(0) <= ASSINADO(RESIZE(ASSINADO(U0_M0_WO0_WI0_DELAYR0_Q),17)); u0_m0_wo0_cma0_a(1) <= ASSINADO(RESIZE(ASSINADO(U0_M0_WO0_WI0_SPLIT1_B),17)); u0_m0_wo0_cma0_a(2) <= ASSINADO(RESIZE(ASSINADO(U0_M0_WO0_WI0_SPLIT1_C),17)); u0_m0_wo0_cma0_a(3) <= (outros => '0'); u0_m0_wo0_cma0_b(0) <= ASSINADO(RESIZE(ASSINADO(U0_M0_WO0_WI0_SPLIT4_C),17)); u0_m0_wo0_cma0_b(1) <= ASSINADO(RESIZE(ASSINADO(U0_M0_WO0_WI0_SPLIT4_B),17)); u0_m0_wo0_cma0_b(2) <= ASSINADO(RESIZE(ASSINADO(U0_M0_WO0_CMA0_MUX_2_Q),17)); u0_m0_wo0_cma0_b(3) <= (outros => '0'); u0_m0_wo0_cma0_c(0) <= NÃO ASSINADO(RESIZE(NÃO ASSINADO(U0_M0_WO0_CA2_Q),3)); u0_m0_wo0_cma0_c(1) <= NÃO ASSINADO(RESIZE(NÃO ASSINADO(U0_M0_WO0_CA2_Q),3)); u0_m0_wo0_cma0_c(2) <= NÃO ASSINADO(RESIZE(NÃO ASSINADO(U0_M0_WO0_CA2_Q),3)); u0_m0_wo0_cma0_c(3) <= (outros => '0'); u0_m0_wo0_cma0_anl <= não(u0_m0_wo0_aseq_q(0)); TERMINAR SE; SE (d_u0_m0_wo0_compute_q_14_q = "1") ENTÃO u0_m0_wo0_cma0_s(0) <= u0_m0_wo0_cma0_z(0) u0_m0_wo0_cma0_y(0); u0_m0_wo0_cma0_s(1) <= u0_m0_wo0_cma0_y(1); u0_m0_wo0_cma0_s(2) <= u0_m0_wo0_cma0_y(2); u0_m0_wo0_cma0_s(3) <= u0_m0_wo0_cma0_y(3); TERMINAR SE; TERMINAR SE; PROCESSO FINAL; As linhas em conjunto em negrito ambas as entradas do mesmo multiplicador para zero, que é um multiplicador de bonecos, e seu filtro FIR é afetado. Se nenhum dos processos chainmultadd contém um multiplicador de bonecos, sua FIR não é afetada.

Resolução

Para resolver este problema, aumente o comprimento especificado para o filtro FIR. Se você escolher o comprimento certo, a implementação não precisa de multiplicadores de bonecos. Alternativamente, edite manualmente o VHDL gerado pelo compilador FIR II para adicionar o Quartus II preserve atributo aos registros de entrada DSP. A síntese quartus II faz não remova os registros de entrada do multiplicador de bonecos e do Quartus O dispositivo de ajuste II contém todos os registros de entrada do bloco DSP corretamente. Para edite manualmente o VHDL, siga estas etapas:Encontre as declarações dos registros de entrada, que se parecem com o seguinte código: digite u0_m0_wo0_cma0_a_type matriz (0 a 3) de SIGNED(16 down to 0); Sinal u0_m0_wo0_cma0_a: u0_m0_wo0_cma0_a_type; digite u0_m0_wo0_cma0_b_type é matriz(0 a 3) de SIGNED(16 downto 0); sinal u0_m0_wo0_cma0_b : u0_m0_wo0_cma0_b_type; tipo u0_m0_wo0_cma0_c_type é array(0 a 3) de UNSIGNED(2 downto 0); sinal u0_m0_wo0_cma0_c: u0_m0_wo0_cma0_c_type;Se o filtro FIR não usa os preadders do bloco DSP, o sinal \'b\' não está presente. Adicione o seguinte código: preservação de atributos: booleano; Atributo preservação da u0_m0_wo0_cma0_a: o sinal é verdadeiro; preservação de atributos de u0_m0_wo0_cma0_b: o sinal é verdadeiro; preservação de atributos de u0_m0_wo0_cma0_c : o sinal é verdadeiro;adicione apenas o atributo preservar deve ser declarado apenas uma vez.

Este problema é corrigido no DSP Builder v13.1.

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.