>> Tecnologia eletrônica >  >> Áudio pessoal >> Gravadores de voz digital

Como você escreve código Verilog para codificador de cabine modificado?

```verilog
módulo modificado_booth_encoder (
entrada [3:0] multiplicando, // multiplicando de 4 bits
multiplicador de entrada [3:0], // multiplicador de 4 bits
saída [7:0] produto // produto de 8 bits
);

//Registros internos para produtos parciais
reg [7:0] produto_parcial [0:3];

// Inicializando produtos parciais com 0
início inicial
produto_parcial[0] <=0;
produto_parcial[1] <=0;
produto_parcial[2] <=0;
produto_parcial[3] <=0;
fim

//Lógica de codificação de booth
sempre @(*) começa
// Itera através de cada bit do multiplicador
para (inteiro i =0; i <4; i =i + 1) começar
// Verifica padrões de codificação de boot
caso ({multiplicador[i], multiplicador[i-1]})
2'b00:início
produto_parcial[i] <=produto_parcial[i];
fim
2'b01:começar
produto_parcial[i] <=produto_parcial[i] + multiplicando;
fim
2'b10:começar
produto_parcial[i] <=produto_parcial[i] - multiplicando;
fim
2'b11:começar
produto_parcial[i] <=produto_parcial[i];
fim
padrão:começar
produto_parcial[i] <=produto_parcial[i];
fim
final
fim
fim

//Calcula o produto final
atribuir produto =produto_parcial[0] + (produto_parcial[1] <<1) + (produto_parcial[2] <<2) + (produto_parcial[3] <<3);

módulo final
```

Explicação:

1. Entradas e Saídas:
- `multiplicando`:entrada de 4 bits representando o multiplicando.
- `multiplicador`:entrada de 4 bits representando o multiplicador.
- `produto`:saída de 8 bits representando o produto do multiplicando e do multiplicador.

2. Registros Internos:
- `partial_product`:Um array de 4 registros, cada um armazenando um produto parcial. Esses registros serão atualizados com base na codificação Booth.

3. Inicialização:
- O bloco inicial define todos os registros parciais do produto como 0 no início.

4. Lógica de codificação de cabine:
- O bloco `always @(*)` implementa o algoritmo de codificação Booth.
- Itera através de cada bit do multiplicador (de MSB para LSB).
- Para cada bit, verifica o bit atual e o bit anterior para determinar o padrão de codificação Booth.
- Com base no padrão, realiza a operação adequada no produto parcial:
- 00: Nenhuma operação (o produto parcial permanece inalterado).
- 01: Adicione o multiplicando ao produto parcial.
- 10: Subtraia o multiplicando do produto parcial.
- 11: Nenhuma operação (o produto parcial permanece inalterado).

5. Cálculo do produto final:
- A instrução `assign` calcula o produto final adicionando os produtos parciais deslocados.
- Cada produto parcial é deslocado para a esquerda pela posição do bit correspondente.

Como funciona o código:

O algoritmo de codificação Booth modificado substitui o processo de multiplicação por uma série de adições e subtrações baseadas nos padrões do multiplicador. Ao inspecionar pares de bits consecutivos no multiplicador, podemos realizar a multiplicação com eficiência.

Exemplo:

Suponha `multiplicando =5` (binário:`0101`) e `multiplicador =3` (binário:`0011`).

1. Iteração 1: `multiplicador[3:2] =00` - Sem operação.
2. Iteração 2: `multiplicador[2:1] =01` - Adicione `multiplicando` a `produto_parcial[1]`.
3. Iteração 3: `multiplicador[1:0] =11` - Sem operação.

Após o loop teremos:

- `produto_parcial[0] =0`
- `produto_parcial[1] =5`
- `produto_parcial[2] =0`
- `produto_parcial[3] =0`

Finalmente, `produto =0 + (5 <<1) + (0 <<2) + (0 <<3) =10` (binário:`1010`), que é o produto correto de 5 e 3.