Kako se piše Verilog kod za modificirani enkoder kabine?
modul modificirani_koder_kabine (
ulaz [3:0] množenik, // 4-bitni množenik
ulazni [3:0] množitelj, // 4-bitni množitelj
izlaz [7:0] proizvod // 8-bitni proizvod
);
// Interni registri za djelomične proizvode
reg [7:0] djelomični_proizvod [0:3];
// Inicijaliziranje djelomičnih proizvoda na 0
početni početak
djelomični_proizvod[0] <=0;
djelomični_proizvod[1] <=0;
djelomični_proizvod[2] <=0;
djelomični_proizvod[3] <=0;
kraj
// Logika kodiranja kabine
uvijek @(*) počinje
// Iteracija kroz svaki bit množitelja
za (cijeli broj i =0; i <4; i =i + 1) početak
// Provjerite obrasce kodiranja kabine
slučaj ({množitelj[i], množitelj[i-1]})
2'b00:početak
djelomični_proizvod[i] <=djelomični_proizvod[i];
kraj
2'b01:početak
djelomični_proizvod[i] <=djelomični_proizvod[i] + množenik;
kraj
2'b10:početak
djelomični_proizvod[i] <=djelomični_proizvod[i] - množenik;
kraj
2'b11:početak
djelomični_proizvod[i] <=djelomični_proizvod[i];
kraj
zadano:početak
djelomični_proizvod[i] <=djelomični_proizvod[i];
kraj
završni slučaj
kraj
kraj
// Izračunajte konačni proizvod
dodijeli proizvod =djelomični_proizvod[0] + (djelomični_proizvod[1] <<1) + (djelomični_proizvod[2] <<2) + (djelomični_proizvod[3] <<3);
krajnji modul
```
Objašnjenje:
1. Ulazi i izlazi:
- `množenik`:4-bitni unos koji predstavlja množenik.
- `multiplier`:4-bitni unos koji predstavlja množitelj.
- `proizvod`:8-bitni izlaz koji predstavlja umnožak množenika i množitelja.
2. Interni registri:
- `partial_product`:Niz od 4 registra, od kojih svaki pohranjuje djelomični umnožak. Ovi registri će se ažurirati na temelju Booth kodiranja.
3. Inicijalizacija:
- Početni blok postavlja sve djelomične registre proizvoda na 0 na početku.
4. Logika kodiranja kabine:
- Blok `always @(*)` implementira Boothov algoritam kodiranja.
- Iterira kroz svaki bit množitelja (od MSB do LSB).
- Za svaki bit, provjerava trenutni bit i prethodni bit kako bi odredio Boothov uzorak kodiranja.
- Na temelju uzorka izvodi odgovarajuću operaciju na djelomičnom proizvodu:
- 00: Nema operacije (djelomični proizvod ostaje nepromijenjen).
- 01: Dodajte množenik djelomičnom umnošku.
- 10: Oduzmite množenik od djelomičnog umnoška.
- 11: Nema operacije (djelomični proizvod ostaje nepromijenjen).
5. Izračun konačnog proizvoda:
- Naredba `assign` izračunava konačni proizvod dodavanjem pomaknutih djelomičnih proizvoda.
- Svaki djelomični umnožak pomaknut je ulijevo za odgovarajuću poziciju bita.
Kako kod funkcionira:
Modificirani Boothov algoritam kodiranja zamjenjuje proces množenja nizom zbrajanja i oduzimanja na temelju uzoraka u množitelju. Provjerom parova uzastopnih bitova u množitelju, možemo učinkovito izvesti množenje.
Primjer:
Pretpostavimo da je `množnik =5` (binarno:`0101`) i `množnik =3` (binarno:`0011`).
1. Iteracija 1: `multiplier[3:2] =00` - Nema operacije.
2. Iteracija 2: `množnik[2:1] =01` - Dodajte `množenik` u `djelomični_proizvod[1]`.
3. Iteracija 3: `multiplier[1:0] =11` - Nema operacije.
Nakon petlje, imat ćemo:
- `djelomični_proizvod[0] =0`
- `djelomični_proizvod[1] =5`
- `djelomični_proizvod[2] =0`
- `djelomični_proizvod[3] =0`
Konačno, `proizvod =0 + (5 <<1) + (0 <<2) + (0 <<3) =10` (binarno:`1010`), što je točan umnožak 5 i 3.