Hogyan írhat Verilog kódot a módosított fülkekódolóhoz?
moduled_booth_encoder (
bemenet [3:0] szorzó, // 4 bites szorzó
bemeneti [3:0] szorzó, // 4 bites szorzó
output [7:0] termék // 8 bites termék
);
// Résztermékek belső regiszterei
reg [7:0] részleges_termék [0:3];
// Résztermékek inicializálása 0-ra
kezdeti kezdés
részleges_termék[0] <=0;
részleges_termék[1] <=0;
részleges_termék[2] <=0;
részleges_termék[3] <=0;
vége
// Booth kódolási logika
mindig a @(*) kezdődik
// Iteráció a szorzó minden bitjén keresztül
mert (i egész szám =0; i <4; i =i + 1) kezdődik
// Booth kódolási minták ellenőrzése
eset ({szorzó[i], szorzó[i-1]})
2'b00:kezdődik
részleges_termék[i] <=részleges_termék[i];
vége
2'b01:kezdődik
részleges_termék[i] <=részleges_termék[i] + szorzó;
vége
2'b10:kezdődik
részleges_termék[i] <=részleges_termék[i] - szorzó;
vége
2'b11:kezdődik
részleges_termék[i] <=részleges_termék[i];
vége
alapértelmezett:kezdődik
részleges_termék[i] <=részleges_termék[i];
vége
végügy
vége
vége
// A végtermék kiszámítása
termék hozzárendelése =részleges_termék[0] + (résztermék[1] <<1) + (résztermék[2] <<2) + (résztermék[3] <<3);
végmodul
```
Magyarázat:
1. Bemenetek és kimenetek:
- "multiplicand":a szorzót képviselő 4 bites bemenet.
- "szorzó":a szorzót képviselő 4 bites bemenet.
- "termék":8 bites kimenet, amely a szorzó és a szorzó szorzatát képviseli.
2. Belső nyilvántartások:
- "részleges_termék":4 regiszterből álló tömb, amelyek mindegyike egy részterméket tárol. Ezeket a regisztereket a Booth kódolás alapján frissítjük.
3. Inicializálás:
- A kezdeti blokk az összes résztermékregisztert 0-ra állítja az elején.
4. Booth kódolási logika:
- Az "always @(*)" blokk a Booth kódolási algoritmust valósítja meg.
- Iterál a szorzó minden bitjén (MSB-től LSB-ig).
- Minden bitnél ellenőrzi az aktuális bitet és az előző bitet, hogy meghatározza a Booth kódolási mintát.
- A minta alapján elvégzi a megfelelő műveletet a részterméken:
- 00: Nem működik (a résztermék változatlan marad).
- 01: Adja hozzá a szorzót a részszorzathoz.
- 10: Vonja ki a szorzót a részszorzatból.
- 11: Nem működik (a résztermék változatlan marad).
5. Végső termék számítása:
- A "hozzárendelés" utasítás az eltolt résztermékek hozzáadásával számítja ki a végterméket.
- Minden részszorzat balra tolódik el a megfelelő bitpozícióval.
A kód működése:
A módosított Booth-kódolási algoritmus a szorzási folyamatot a szorzóban lévő mintákon alapuló összeadások és kivonások sorozatával helyettesíti. A szorzóban egymást követő bitpárok vizsgálatával hatékonyan tudjuk végrehajtani a szorzást.
Példa:
Tegyük fel, hogy "szorzószám =5" (bináris:"0101") és "szorzó =3" (bináris:"0011").
1. 1. iteráció: `szorzó[3:2] =00` – Nincs művelet.
2. 2. iteráció: `multiplier[2:1] =01` – `multiplicand` hozzáadása a `partial_product[1]`-hez.
3. 3. iteráció: `szorzó[1:0] =11` – Nincs művelet.
A ciklus után a következők lesznek:
- "részleges_termék[0] =0".
- "részleges_termék[1] =5".
- "részleges_termék[2] =0".
- "részleges_termék[3] =0".
Végül a "termék =0 + (5 <<1) + (0 <<2) + (0 <<3) =10" (bináris:"1010"), amely 5 és 3 helyes szorzata.