Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Laboratorio No1 - Diseño Digital PDF
Laboratorio No1 - Diseño Digital PDF
FACULTADDEINGENIERAELECTRNICA
ESCUELADEINGENIERAELECTRNICA
DISEODIGITAL
LABORATORIONo1
USODELESTILO:
1. FLUJODEDATOSDELVHDL
2. DESCRIPCINFUNCIONALDELVERILOGHDL
PARAELDISEODECIRCUITOSCOMBINACIONALES
Profesor:Ing.AlfredoGranadosLy.
UNMSMFIEE 1
ESTILOFLUJODEDATOSPARAELDISEODECIRCUITOSCOMBINACIONALES
Esteestilosecaracterizaporutilizarlasasignacionesconcurrentesaseales(ACS).
Tenemos3tiposdeACS:
ACSnica
ACScondicional
ACSselectiva
Estas sentencias terminan asignando un valor a una seal despus de evaluar toda una
expresin,estaevaluacinserealizacuandoocurreuneventoenunadelassealesquese
encuentranaladerechadelsmbolodeasignacinaseal(<=).
Sintaxis:
seal<=expresin
enlaexpresinpuedenaparecervalores,seales,operadoreslgicosoaritmticos.
Veamosalgunosejemplos:
enable<=1
z<=aandborc
f<=p1+p2
temp<=var1&var2
y<=10101
Sintaxis:
seal<=expresin1whencondicin1elseexpresin2
LasintaxisdelaACScondicionalensuformagenerales:
seal<=expresin1whencondicin1else
expresin2whencondicin2else
expresin3whencondicin3else
........
expresinNwhencondicinNelseexpresinM
UNMSMFIEE 2
En la declaracin anterior se nota que hay una prioridad en la asignacin a seal, por
ejemplo para que la seal tome el resultado de la expresin3 debe cumplirse que la
condicin1 y condicin2 sean falsas y la condicin3 sea verdadera. La prioridad la tiene la
condicin1, si esta no se cumple se pasa a evaluar la condicin2, si esta no se cumple se
pasa a evaluar la condicin3 y as sucesivamente se evalan todas las condiciones hasta
quecumplaalgunadeellas.
Veamosalgunosejemplos:
compuertaAND:
C<=AwhenB=1else0
multiplexorde2a1:
Z<=AwhenSEL=0elseB
enelsiguientecircuito:
F<= AwhenZ=1else
BwhenY=1else
CwhenX=1else0
decodificador de3a8
UNMSMFIEE 3
ENTRADA<=C&B&A
TEMPORAL<=11111110whenENTRADA=000else
11111101whenENTRADA=001else
11111011whenENTRADA=010else
11110111whenENTRADA=011else
11101111whenENTRADA=100else
11011111whenENTRADA=101else
10111111whenENTRADA=110else01111111
Y<=TEMPORALwhenENA=1else11111111
withexpresinselectseal <=expresin1whenvalor1,
expresin2whenvalor2,
expresin3whenvalor3,
............
expresinNwhenvalorN
Esta sentencia requiere que se especifique todos los posibles valores que puede tomar la
expresin a evaluar, por lo que generalmente la sentencia se escribe de la siguiente
manera:
withexpresinselectseal<=expresin1whenvalor1,
expresin2whenvalor2,
expresin3whenvalor3,
............
expresinNwhenothers
Conlapalabraothersseestcubriendoelrestodevaloresquenohansidoespecificados
enlasentencia.Veamosalgunosejemplos:
UNMSMFIEE 4
compuertaAND:
withAselectC<= Bwhen1
0when0
AsumimosqueAslopuedetomarlosvaloresde0y1(tipobit)
multiplexorde2a1:
withSELselectZ<=Awhen0,
Bwhenothers
AsumimosqueSELpuedetomarotrosvaloresapartede0y1(tipostd_logic).
Decoderde2a4:
withEselectY<= 1110when00,
1101when01,
1011when10
0111whenothers
UNMSMFIEE 5
CIRCUITOSAIMPLEMENTARENCLASEDELABORATORIO
Decodificadorde3a8conhabilitador(VHDL).
libraryIEEE
useIEEE.STD_LOGIC_1164.ALL
useIEEE.STD_LOGIC_ARITH.ALL
useIEEE.STD_LOGIC_UNSIGNED.ALL
entityDEC3A8_ENAis
Port(A:instd_logic
B:instd_logic
C:instd_logic
ENA:instd_logic
Y:outstd_logic_vector(7downto0))
endDEC3A8_ENA
architectureBehavioralofDEC3A8_ENAis
signalENTRADA:std_logic_vector(2downto0)
signalSALIDAS:std_logic_vector(7downto0)
begin
ENTRADA<=C&B&A
withENTRADAselectSALIDAS<= "00000001"when"000",
"00000010"when"001",
"00000100"when"010",
"00001000"when"011",
"00010000"when"100",
"00100000"when"101",
"01000000"when"110",
"10000000"whenothers
Y<=SALIDASwhenENA='1'else(others=>'0')
endBehavioral
Decodificadorde3a8conhabilitador(VerilogHDL).
moduleDEC3A8_ENAVLOG(a,b,c,ena,Y)
inputa,b,c,ena
output[7:0]Y
reg[7:0]salidas
UNMSMFIEE 6
always@({c,b,a})
case({c,b,a})
3'b000:salidas=8'b00000001
3'b001:salidas=8'b00000010
3'b010:salidas=8'b00000100
3'b011:salidas=8'b00001000
3'b100:salidas=8'b00010000
3'b101:salidas=8'b00100000
3'b110:salidas=8'b01000000
default:salidas=8'b10000000
endcase
assignY=ena?salidas:8'b00000000
endmodule
ALUde8bitsenVHDL.
libraryIEEE
useIEEE.STD_LOGIC_1164.ALL
useIEEE.STD_LOGIC_ARITH.ALL
useIEEE.STD_LOGIC_UNSIGNED.ALL
entityALU_8BITSis
Port(A,B:instd_logic_vector(7downto0)
OPER:instd_logic_vector(2downto0)
Z:outstd_logic_vector(7downto0))
endALU_8BITS
architectureBehavioralofALU_8BITSis
begin
withOPERselectZ<=A+B when"000",
AB when"001",
A+1 when"010",
A1 when"011",
AandB when"100",
AorB when"101",
AxorB when"110",
notA whenothers
endBehavioral
UNMSMFIEE 7
ALUde8bitsenVerilogHDL.
moduleALU_8BITSVLOG(a,b,oper,z)
input[7:0]a,b
input[2:0]oper
output[7:0]z
reg[7:0]z
always@(oper)
case(oper)
3'b000:z=a+b
3'b001:z=ab
3'b010:z=a+1
3'b011:z=a1
3'b100:z=a&b
3'b101:z=a|b
3'b110:z=a^b
default:z=~a
endcase
endmodule
Registroconcargaydesplazamientode1bitenVHDL.
libraryIEEE
useIEEE.STD_LOGIC_1164.ALL
useIEEE.STD_LOGIC_ARITH.ALL
useIEEE.STD_LOGIC_UNSIGNED.ALL
entityLOAD_SHIFTis
Port(DATA:instd_logic_vector(7downto0)
SEL:instd_logic_vector(1downto0)
Q:bufferstd_logic_vector(7downto0))
endLOAD_SHIFT
UNMSMFIEE 8
architectureBehavioralofLOAD_SHIFTis
begin
withSELselectQ<=DATA when"00",
DATA(6downto0)&'0' when"01",
'0'&DATA(7downto1) when"10",
Q whenothers
endBehavioral
Registroconcargaydesplazamientode1bitenVerilogHDL
moduleLOAD_SHIFTVLOG(DATA,SEL,Q)
input[7:0]DATA
input[1:0]SEL
output[7:0]Q
assignQ=(SEL==0)?DATA:
(SEL==1)?DATA<<1:
(SEL==2)?DATA>>1:Q
endmodule
Conversordenmerobinariode4bitsaBCDenVHDL.
libraryIEEE
useIEEE.STD_LOGIC_1164.ALL
useIEEE.STD_LOGIC_ARITH.ALL
useIEEE.STD_LOGIC_UNSIGNED.ALL
entitybinario_bcdis
Port(DATA:instd_logic_vector(3downto0)
BCD0:outstd_logic_vector(3downto0)
BCD1:outstd_logic)
endbinario_bcd
architectureBehavioralofbinario_bcdis
signalTEMP:std_logic_vector(4downto0)
UNMSMFIEE 9
begin
TEMP<='0'&DATAwhenDATA<10else
"10000"whenDATA=10else
"10001"whenDATA=11else
"10010"whenDATA=12else
"10011"whenDATA=13else
"10100"whenDATA=14else"10101"
BCD1<=TEMP(4)
BCD0<=TEMP(3downto0)
endBehavioral
Conversordenmerobinariode4bitsaBCDenVerilogHDL
(ResolverenClase)
Decodificadora7segmentosdetiponodocomnenVHDL.
libraryIEEE
useIEEE.STD_LOGIC_1164.ALL
useIEEE.STD_LOGIC_ARITH.ALL
useIEEE.STD_LOGIC_UNSIGNED.ALL
entityDEC7SEGis
Port(DATA:instd_logic_vector(3downto0)
DISPLAY:outstd_logic_vector(6downto0))
endDEC7SEG
architectureBehavioralofDEC7SEGis
begin
gfedcba
WITHDATASELECTDISPLAY<= "1000000"WHEN"0000",
"1111001"WHEN"0001",
"0100100"WHEN"0010",
"0110000"WHEN"0011",
"0011001"WHEN"0100",
"0010010"WHEN"0101",
"0000011"WHEN"0110",
"1111000"WHEN"0111",
"0000000"WHEN"1000",
"0011000"WHEN"1001",
"1111111"WHENOTHERS
endBehavioral
Decodificadora7segmentosdetiponodocomnenVerilogHDL.
(ResolverenClase)
UNMSMFIEE 10
Detectordeparidadimpardeunnmerode8bitsenVHDL.
libraryIEEE
useIEEE.STD_LOGIC_1164.ALL
useIEEE.STD_LOGIC_ARITH.ALL
useIEEE.STD_LOGIC_UNSIGNED.ALL
entityDET_IMPARis
Port(DATA:instd_logic_vector(7downto0)
Z:outstd_logic)
endDET_IMPAR
architectureBehavioralofDET_IMPARis
begin
Z<=DATA(7)xorDATA(6)xor
DATA(5)xorDATA(4)xor
DATA(3)xorDATA(2)xor
DATA(1)xorDATA(0)
endBehavioral
Detectordeparidadimpardeunnmerode8bitsenVerilogHDL.
(ResolverenClase)
Comparadorde4bitsenVHDL
libraryIEEE
useIEEE.STD_LOGIC_1164.ALL
useIEEE.STD_LOGIC_ARITH.ALL
useIEEE.STD_LOGIC_UNSIGNED.ALL
entitycomparadoris
Port(A:instd_logic_vector(3downto0)
B:instd_logic_vector(3downto0)
IGU:outstd_logic
MAY:outstd_logic
MEN:outstd_logic)
endcomparador
architectureBehavioralofcomparadoris
begin
IGU<='1'whenA=Belse'0'
MAY<='1'whenA>Belse'0'
MEN<='1'whenA<Belse'0'
endBehavioral
Comparadorde4bitsenVerilogHDL
(ResolverenClase)
UNMSMFIEE 11
PararesolverfueradeclaseenVHDLyVerilogHDL:
1. Implementarunacompuertadetipotresestadosde8bits.
2. Implementaruncircuitodetectordelosnmerosprimosde4bits
3. Implementaruncomparadorde2nmerosde8bitsconsigno(mayor,menoro
igual).
4. .Implementaruncodificadorde4bitsaBCDconindicadordedatovlido.
UNMSMFIEE 12