Kako napišete kodo Verilog za spremenjen kodirnik kabine?
modul modified_booth_encoder (
vnos [3:0] množitelj, // 4-bitni množitelj
vnos [3:0] množitelj, // 4-bitni množitelj
izhod [7:0] izdelek // 8-bitni izdelek
);
// Interni registri za delne izdelke
reg [7:0] delni_produkt [0:3];
// Inicializacija delnih produktov na 0
začetni začetek
delni_produkt[0] <=0;
delni_produkt[1] <=0;
delni_produkt[2] <=0;
delni_produkt[3] <=0;
konec
// Logika kodiranja kabine
vedno se začne @(*).
// Iteracija skozi vsak bit množitelja
za (celo število i =0; i <4; i =i + 1) začetek
// Preverite vzorce kodiranja kabine
case ({množitelj[i], množitelj[i-1]})
2'b00:začetek
delni_izdelek[i] <=delni_izdelek[i];
konec
2'b01:začetek
delni_produkt[i] <=delni_produkt[i] + množenec;
konec
2'b10:začetek
delni_produkt[i] <=delni_produkt[i] - množenec;
konec
2'b11:začetek
delni_izdelek[i] <=delni_izdelek[i];
konec
privzeto:začetek
delni_izdelek[i] <=delni_izdelek[i];
konec
končni primer
konec
konec
// Izračunajte končni izdelek
dodeli izdelek =delni_izdelek[0] + (delni_izdelek[1] <<1) + (delni_izdelek[2] <<2) + (delni_izdelek[3] <<3);
končni modul
```
Razlaga:
1. Vhodi in izhodi:
- `množenik`:4-bitni vnos, ki predstavlja množitelj.
- `multiplier`:4-bitni vhod, ki predstavlja množitelj.
- `produkt`:8-bitni izhod, ki predstavlja zmnožek množitelja in množitelja.
2. Notranji registri:
- `delni_produkt`:Niz 4 registrov, od katerih vsak hrani delni produkt. Ti registri bodo posodobljeni glede na kodiranje Booth.
3. Inicializacija:
- Začetni blok nastavi vse delne registre izdelkov na 0 na začetku.
4. Logika kodiranja Booth:
- Blok `vedno @(*)` implementira Boothov algoritem kodiranja.
- Ponavlja vsak bit množitelja (od MSB do LSB).
- Za vsak bit preveri trenutni bit in prejšnji bit, da določi Boothov vzorec kodiranja.
- Na podlagi vzorca izvede ustrezno operacijo na delnem izdelku:
- 00: Brez operacije (delni izdelek ostane nespremenjen).
- 01: Delnemu zmnožku dodajte množitelj.
- 10: Odštejte množitelj od delnega produkta.
- 11: Brez operacije (delni izdelek ostane nespremenjen).
5. Izračun končnega izdelka:
- Izjava `assign` izračuna končni produkt z dodajanjem premaknjenih delnih produktov.
- Vsak delni produkt je premaknjen levo za svoj ustrezni bitni položaj.
Kako koda deluje:
Spremenjen Boothov algoritem kodiranja nadomešča postopek množenja z vrsto seštevanj in odštevanj na podlagi vzorcev v množitelju. S pregledovanjem parov zaporednih bitov v množilniku lahko učinkovito izvedemo množenje.
Primer:
Recimo, da je `množenec =5` (binarno:`0101`) in `množitelj =3` (binarno:`0011`).
1. 1. ponovitev: `multiplier[3:2] =00` - Brez operacije.
2. 2. ponovitev: `množitelj [2:1] =01` – Dodajte `množenec` v `delni_zmnožek[1]`.
3. Ponovitev 3: `množitelj [1:0] =11` - Brez operacije.
Po zanki bomo imeli:
- `delni_produkt[0] =0`
- `delni_produkt[1] =5`
- `delni_produkt[2] =0`
- `delni_produkt[3] =0`
Končno, `produkt =0 + (5 <<1) + (0 <<2) + (0 <<3) =10` (binarno:`1010`), kar je pravilen zmnožek 5 in 3.