Pokud jde o 16-bitový násobič

S

sishir

Guest
Hi Group,

Mohl by mi někdo říct, kde bych mohla získat 16-bitový násobič kódu ve VHDL.i 'v hledal po celé síti, včetně kódu google hledat, ale nakonec hledání kódu, který používá v-postavené bloky.

Nádrží v předstihu,
Sishir

 
Níže je 8-bitový posun a přidat násobitel kódu ve VHDL.
u pocínovat brát jako referenční a designu 16-bit multiplier.

Kód:

-------------------------------------------------- -------------------------

- Multiplikátor

-------------------------------------------------- -------------------------

jednotka se množí

port (zatížení, hodiny: v bit;

Input1, Input2: v bit_vector (7 downto 0);

produkt: z bit_vector (15 downto 0);

output_valid: out bit);

konec množit;

--

jednotka výbava je

port :) v bit_vector (7 downto 0);

b: v bit_vector (7 downto 0);

IS: v bit;

y: out bit_vector (7 downto 0);

co: out bit);

konec sčítačka;

--

jednotka je D_latch

port (din: v bit_vector (7 downto 0);

dout: out bit_vector (7 downto 0);

povolit: V bit);

konec D_latch;

--

-------------------------------------------------- -------------------------

- Jednoduché Ripple zmije

-------------------------------------------------- -------------------------

architektura logika výbava je

CW signál, cx: bit_vector (7 downto 0);

začít

CW (0) <= ci;

cw (7 downto 1) <= cx (6 downto 0);

cx <= (a b) nebo (a CW) nebo (b a CW);

s <= a xor b xor cw;

co <= cx (7);

konci logiky;

--

-------------------------------------------------- -------------------------

- Rising Edge spuštěna závora

--

- DŮLEŽITÉ UPOZORNĚNÍ ** **

- Uvědomte si, že 'w <=' a 'qb <=' řádků se zpožděním (po 3 NS).

- Protože tyto dva řádky jsou vzájemné spojení (w s a z, s dout qb),

- Musíte se přinutit, aby se určité zpoždění, aby se zabránilo simulátor

- Rušení.
Jestliže tak neučiníte, bude 'vším' simulátor zamknout a sám

- Budete muset vynutit (jako Control-C), aby zrušil.

--

-------------------------------------------------- -------------------------

architektura okraj D_latch je

signál x, y, z, w, qb, e: bit_vector (7 downto 0);

začít

E <= 255 kdy umožnit, jinak je 0, - vektor h (at) ck

x <= din nand y;

y <= e nand (ne w);

z <= nand e w;

w <= z x nand po 3ns, -, aby se zabránilo přetížení simulátor

dout <= z nand qb;

qb <= y nand dout po 3ns, - stejné

konec hrany;

--

-------------------------------------------------- --------------------

- Multiplikační Unsigned pomocí hrany spuštěny závory

-------------------------------------------------- --------------------

architektura závora je násobit

signálu mux1, mux2, mux3, mux4: bit_vector (7 downto 0);

signálu, adder_out: bit_vector (7 downto 0);

signálu Accum: bit_vector (15 downto 0);

signálu carry_out: bit;label L1, L2, L3, L4;složka přidat

port (arg1, arg2: v bitvec;

c_in: in bit;

Výsledek: z bitvec;

c_out: out bit);

konec složky;

pro L4: přidat použití jednotka výbavu (logika);složka závora

port (xin: v bitvec; xout: out bitvec, aby: v bit);

konec složky;

pro L1, L2, L3: zámek použití jednotka D_latch (okraj);začít

--

- Synchronní zatížení čistí výsledek a inicializuje systém.

- Použití: s nízkým hodiny: nastavení vstupů, vysoká zátěž

- 010 hodin

- Nízká zátěž

- 010 po dobu osmi hodin se počítá, nebo do výstupu platná

--

- Řízení: Počet posunutím 8 bitů.

- Shift se západkou a mux v začarovaném kruhu.

--

mux1 (7 downto 0) <= "11111111", když zatížení

else "0" & kontrola (7 downto 1);

l1: zámek port map (mux1, kontrola, hodiny);

output_valid <= not (kontrola (0));

--

- Akumulátor je sepsána ve dvou sekcích 8 bitů na modularitu.

- Zmije výstup dat (včetně provedení), je hned posunul

- Na své cestě zpět do akumulátoru.
Posuneme Input2 (uloženy v

- Nízká polovina akumulátoru), ve stejnou dobu.
Všechno

- Se odehrává na náběžnou hranu na hodiny.

--

mux2 <= 0 při zatížení

else carry_out & adder_out (7 downto 1);

L2: zámek port map (mux2, Accum (15 downto 8), clock);

--

mux3 <= Input2 při zatížení

else adder_out (0) & Accum (7 downto 1);

L3: zámek port map (mux3, Accum (7 downto 0), clock);

--

- Potřebujeme jen 8 bitů zmije na vysoké pořadí bitů akumulátoru

- A Input1.
Mux 4 je místo, kde jsme se rozhodli přidat, nebo ne přidávat,

- Kopii Input1.
Provozujeme přes výbavu a posun v každém případě.

- Note, nejsme pomocí nést do zmije.

--

mux4 <= Input1 když Accum (0) jinak 0;

L4: přidat port map (mux4, Accum (15 downto 8), "0", adder_out, carry_out);

--

výrobku <= Accum když output_valid else 0;

konec západky;

-------------------------------------------------- --------------------

- Nepodepsané multiplikátor pomocí stráže

-------------------------------------------------- --------------------

architektura stráž je násobit

signálu mux4: bit_vector (7 downto 0);

signálu, cont_buf: bit_vector (7 downto 0);

signálu adder_out: bit_vector (7 downto 0);

signálu Accum, accum_buf: bit_vector (15 downto 0);

signálu carry_out: bit;label L4;

složka přidat

port (arg1, arg2: v bitvec;

c_in: in bit;

Výsledek: z bitvec;

c_out: out bit);

konec složky;

pro L4: přidat použití jednotka výbavu (logika);

--

začít

- Synchronní zatížení.
Hodiny s 010.

- Single hodiny: jeden blok circuts pro každou fázi hodiny.

- Master-Slave provoz zajišťuje žádné podmínky závodu.

--

blok (hodiny)

začít

ovládání <= hlídané "11111111", když zatížení

else "0" & cont_buf (7 downto 1);

Accum <= hlídané "00000000" & Input2 při zatížení

else accum_buf;

konec bloku;

--

bloku (ne hodiny)

začít

cont_buf <= hlídané kontroly;

accum_buf <= hlídané carry_out & adder_out & Accum (7 downto 1);

konec bloku;

--

output_valid <= not (cont_buf (0));

--

mux4 <= Input1 když Accum (0) jinak 0;

L4: přidat port map (mux4, Accum (15 downto 8), "0", adder_out, carry_out);

--

bloku (output_valid)

začít

výrobku <= hlídané Accum;

konec bloku;

--

konec krytem;

-------------------------------------------------- --------------------

- Multiplikační Unsigned pomocí procesu výpis

-------------------------------------------------- --------------------

architektura je beh na násobit

signal mux: bit_vector (7 downto 0);

signálu, adder_out: bit_vector (7 downto 0);

signálu Accum: bit_vector (15 downto 0);

signálu carry_out: bit;

label l;

složka přidat

port (arg1, arg2: v bit_vector (7 downto 0);

c_in: in bit;

Výsledek: z bit_vector (7 downto 0);

c_out: out bit);

konec složky;

pro l: přidat použití jednotka výbavu (logika);

začít

Proces (hodiny)

začít

Pokud pak clock'rising

Pokud zatížení pak

ovládání (7 downto 0) <= "11111111";

Accum (15 downto 0) <= "00000000" & Input2;

jiné

ovládání (7 downto 0) <= "0" & kontrola (7 downto 1);

Accum (15 downto 0) <= carry_out & & adder_out

Accum (7 downto 1);

end if;

end if;

end process;

mux <= Input1 když Accum (0) jinak 0;l: přidat port map (MUX, Accum (15 downto 8), "0",

adder_out, carry_out);output_valid <= not (kontrola (0));

výrobku <= Accum když output_valid else 0;

konec beh;
 

Welcome to EDABoard.com

Sponsor

Back
Top