Eu já fiz isso algumas vezes.
Geralmente, as ferramentas de design escolhem entre uma implementação de malha e uma fatia DSP com base nas configurações de síntese.
Por exemplo, para o Xilinx ISE, nas configurações do processo de síntese, Opções HDL, existe uma configuração "-use_dsp48" com as opções: Auto, AutoMax, Sim, Não. Como você pode imaginar, isso controla o quanto as ferramentas tentam colocar Fatias DSP. Certa vez, tive um problema em que multipliquei um número inteiro por 3, o que inferiu uma fatia do DSP - exceto que eu já estava inferindo manualmente cada fatia do DSP no chip, então o sintetizador falhou! Alterei a configuração para Não, porque já estava usando todas as fatias de DSP.
Essa é provavelmente uma boa regra geral (eu acabei de inventar): se o seu design tiver clock de menos de 50 MHz e você provavelmente usará menos de 50% das fatias DSP no chip, basta usar o operadores *, + e -. isso inferirá fatias DSP sem registros de pipeline. Isso realmente limita a velocidade máxima. (Eu não tenho ideia do que acontece quando você usa a divisão)
No entanto, se parecer que você executará as fatias mais próximas da velocidade máxima da fatia DSP (333 MHz para Spartan 6, velocidade normal). Você usará todas as fatias, deduzi-las manualmente .
Nesse caso, você tem duas opções.
Opção 1: use manualmente o modelo de instanciação DSP bruto. Opção 2: use um bloco IP do Xilinx Core Generator. (Eu usaria essa opção. Ao mesmo tempo, você aprenderá tudo sobre a geração principal, o que ajudará no futuro)
Antes de fazer qualquer um destes, leia as primeiras duas páginas do guia do usuário da fatia DSP. No caso do Spartan 6, (DSP48A1), esse seria o documento Xilinx UG389:
http://www.xilinx.com/support/documentation/user_guides/ug389.pdf
Considere a opção Gerador de núcleo primeiro. Normalmente, crio um projeto de teste no Core Generator para a parte em que estou trabalhando, onde crio qualquer número de blocos de IP apenas para aprender o sistema. Então, quando estiver pronto para adicionar um ao meu design no ISE, clique com o botão direito do mouse na Hierarquia de Design, clique em nova fonte e selecione "IP (Gerador de Núcleo e Assistente de Arquitetura)" para que eu possa editar e regenerar o bloco diretamente do meu projeto.
Na geração Core, dê uma olhada nos diferentes blocos de IP que você pode escolher - existem algumas dezenas, a maioria delas muito legais.
O Multiplier Core é o que você deve procurar primeiro. Confira todas as páginas e clique no botão de folha de dados. As partes importantes são as larguras de bits inteiros, os estágios do pipeline (latência) e quaisquer sinais de controle. Isso produz o bloco mais simples possível removendo todas as portas que você não precisa.
Quando eu estava criando um filtro IIR de 5 por 3 pedidos no ano passado, tive que usar o modelo de instanciação manual, pois estava criando uma implementação muito personalizada, com 2 fatias de DSP com freqüência 4x mais rápida que a taxa de amostragem. Foi uma dor total.