ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Diseny Digital

kekakeku16 de Octubre de 2013

5.888 Palabras (24 Páginas)213 Visitas

Página 1 de 24

AperB

Aquest mòdul realitza el producte entre les dues entrades que són dos busos de 4 bits en BCD (A[3..0] i B[3..0]) i a la sortida tenim el resultat d’aquesta multiplicación en un bus de 8 bits en BCD de 4 bits (AperB[7..0]). Per arribar al resultat final, hem convertit la sortida del mòdul MULT8x8 que està en binari natural de 8 bits a BCD de 4 bits, fent-la passar per un mòdul on servint-nos d’un codi VHDL, la hem transformat.

A continuació veiem l’esquemàtic del mòdul:

Finalment la seva simulació és la següent:

Submòduls del mòdul AperB

- 4Bto8B

El mòdul 4Bto8B transforma el bus de 4 bits en BCD de l’entrada A[3..0] a un bus de 8 bits en BCD que veiem a la sortida B[7..0].

Per fer-ho només cal afegir un bus de 4 ‘0’ com a bits de més pes sigui quin sigui el valor de l’entrada.

Aquest és el seu esquemàtic:

- B_toBCD

El mòdul B_toBCD transforma l’entrada B[7..0] que està en binari natural en un bus de 8 bits en BCD de 4 bits. Els quatre bits de més pes corresponen al primer dígit decimal del producte i els quatre bits de menys pes al segon dígit.

Per fer aquest mòdul hem emparat el següent en VHDL:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY B_toBCD IS PORT (

B : IN STD_LOGIC_VECTOR(7 downto 0);

BCD : OUT STD_LOGIC_VECTOR(7 downto 0));

END B_toBCD;

ARCHITECTURE taula_veritat OF B_toBCD IS

BEGIN

with B SELECT BCD <=

"10000001" WHEN "01010001", -- 81

"01110010" WHEN "01001000", -- 72

"01100100" WHEN "01000000", -- 64

"01100011" WHEN "00111111", -- 63

"01010110" WHEN "00111000", -- 56

"01010100" WHEN "00110110", -- 54

"01001001" WHEN "00110001", -- 49

"01001000" WHEN "00110000", -- 48

"01000101" WHEN "00101101", -- 45

"01000010" WHEN "00101010", -- 42

"01000000" WHEN "00101000", -- 40

"00110110" WHEN "00100100", -- 36

"00110101" WHEN "00100011", -- 35

"00110010" WHEN "00100000", -- 32

"00110000" WHEN "00011110", -- 30

"00101000" WHEN "00011100", -- 28

"00100111" WHEN "00011011", -- 27

"00100101" WHEN "00011001", -- 25

"00100100" WHEN "00011000", -- 24

"00100001" WHEN "00010101", -- 21

"00100000" WHEN "00010100", -- 20

"00011000" WHEN "00010010", -- 18

"00010110" WHEN "00010000", -- 16

"00010101" WHEN "00001111", -- 15

"00010100" WHEN "00001110", -- 14

"00010010" WHEN "00001100", -- 12

"00010000" WHEN "00001010", -- 10

"00001001" WHEN "00001001", -- 9

"00001000" WHEN "00001000", -- 8

"00000111" WHEN "00000111", -- 7

"00000110" WHEN "00000110", -- 6

"00000101" WHEN "00000101", -- 5

"00000100" WHEN "00000100", -- 4

"00000011" WHEN "00000011", -- 3

"00000010" WHEN "00000010", -- 2

"00000001" WHEN "00000001", -- 1

"00000000" WHEN "00000000", -- 0

"--------" WHEN OTHERS;

END taula_veritat;

SEL

El mòdul SEL veu a la sortida res[7..0], la entrada AxB[7..0], quan a l’entrada show hi tenim un ‘1’, i veurem VCC quan show sigui ‘0’. VCC és un bus de 8 ‘1’. Per implementar aquest funcionament ens hem valgut del mòdul Mux_2B8_to_1B8 per tal de decidir si hi tindrem una o altra entrada en funció del selector que en el nostre cas és show.

A continuació veiem la simulació que hem realitzat del mòdul:

Keygroup

El mòdul Keygroup ens indica quin tipus d’entrada li hem introduït en funció de l’entrada key. Quan key és ‘0’ les tres sortides (bcd, ast i alm) són ‘0’, key indica si s’està introduint o no algun valor. Quan keycode[3..0] està entre ‘0000’ i ‘1001’ la sortida bcd serà ‘1’ i la resta ‘0’, quan keycode[3..0] sigui ‘1110’ la sortida ast serà ‘1’ i la resta ‘0’ i quan keycode[3..0] sigui ‘1111’ la sortida alm serà ‘1’ i la resta ‘0’. Per la resta de possibles valors de keycode[3..0] les tres sortides valdran ‘0’.

TdV del mòdul Keycode

Key Keycode[3..0] bcd ast alm

0 ---- 0 0 0

1 0000 1 0 0

1 0001 1 0 0

1 0010 1 0 0

1 0011 1 0 0

1 0100 1 0 0

1 0101 1 0 0

1 0110 1 0 0

1 0111 1 0 0

1 1000 1 0 0

1 1001 1 0 0

1 1010 0 0 0

1 1011 0 0 0

1 1100 0 0 0

1 1101 0 0 0

1 1110 0 1 0

1 1111 0 0 1

A partir d’aquesta taula de veritat, hem dibuixat un mapa de Karnaugh de la sortida bcd, i hem trobat els minterms de les tres sortides (la alm i ast ja els tenim directes). Després hem dissenyat amb portes lògiques el circuit resultant amb les entrades i sortides. L’esquemàtic resultant és el següent :

A continuació tenim la simulació d’aquest mòdul:

REG

El mòdul reg és un registre síncron de 4 bits. La funció que realitza aquest mòdul és guardar els valors introduïts. Sempre es guarden únicament els dos últims valors BCD introduïts. Quan el valor de l’entrada intro és ‘1’ en OpA[3..0] si introdueix el valor introduït des del teclat i en OpB[3..0] si introdueixel valor que hi havia a OpA[3..0]. Pel contrari, quan intro és ‘0’, els valors de OpA i OpB no varien. Tot això sempre que el clk realitzi un flanc de pujada.

L’entrada nrst és el reset dels biestables utilitzats, quan nrst és ‘0’ totes les sortides es posen a ‘0’.

La següent imatge mostra l’esquemàtic d’aquest bloc:

Gràcies a la simulació realitzada, podem comprovar que funciona adequadament:

Control

El mòdul control és una màquina d’estats síncrona en carregada de controlar tots els mòduls que formen el bloc ppal.

L’entrada clk és un rellotge de sincronització, l’entrada nrst és el reset del mòdul (posa a ‘0’ totes les sortides) i les entrades bcd, ast i alm, indiquen quin tipus d’entrada tenim al teclat, si és que en tenim alguna.

La sortida st[1..0] ens mostra quin és l’estat actual del sistema (st[1..0]=‘10’ correspon a l’estat stop_show i st[1..0]=‘01’ correspon a l’estat intro_data), la sortida intro controla quan s’ha de guardar als registres els valors introduïts i la sortida show controla quan s’ha de visualitzar el resultat i quan no.

El codi VHDL realitzat per implementar el mòdul control és el següent:

library ieee;

use ieee.std_logic_1164.all;

entity control is

port( clk, nrst, bcd, ast, alm : in std_logic;

intro, show : out std_logic;

st : out std_logic_vector(1 downto 0) );

end control;

architecture arq of control is

type machine is (stop_show, intro_data);

signal state : machine;

begin

process(clk, nrst)

begin

if nrst='0' then state <= stop_show;

elsif (clk'event and clk='1') then

case state is

when stop_show => if ast = '1' then state <= intro_data; end if;

when intro_data => if ast = '1' or alm='1' then state <= stop_show; end if;

end case;

end if;

end process;

with state select st <= "01" when stop_show, "10" when intro_data;

intro <= '1' when state=intro_data and bcd='1' else '0';

show <= '1' when state=stop_show else '0';

end arq;

A l’hora de realitzar la simulació, hem introduït uns valors de les entrades corresponents a una possible introducció de valors a través del teclat. Hem simulat que primer s’introdueix un número, a continuació

...

Descargar como (para miembros actualizados) txt (35 Kb)
Leer 23 páginas más »
Disponible sólo en Clubensayos.com