ETSISTUPM
Dpto.deIng.TelemticayElectrnica
DiseoDigital2
Bloquetemtico1
BT1_A1_P4
Diseojerrquico
Tcnicasdesimulacinyverificacinde
circuitoscomplejos
Tcnicasdesimulacinyverificacindecircuitoscomplejos
EnlarealizacindeTestBenchs VHDLsuelenutilizarseconstruccionesdellenguaje
queraravezseempleanparaconstruirmodelossintetizablesdecircuitos
Ficheros
FuncionesyProcedimientosdefinidosporelusuario
SentenciasASSERT
Sirvenpara:
Ladefinicindeestmulos:
Ficherosparalalecturadeestmulosgeneradosautomticamente.
Procedimientosyfuncionesparaelmodeladodealtoniveldelentornodefuncionamientoreal
delcircuitoyparalamodularizacin delaasignacindeestmulosenprocesos
Laverificacinautomticadelosresultadosdelassimulaciones
Escrituraderesultadossobreficherospara,posteriormente,procesarlos.
Autoverificacin entestbench mediantesentenciasASSERT
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_2
ObjetosVHDL
Aunobjetoslo puedenasignrselevaloresdel
tiposobreelqueestdefinido
variable flag1, flag2 : bit;
variable flag3 : std_ulogic;
flag1 := '0'; -- Asignacin vlida
flag1 := 'U'; -- Invlida: el caracter 'U' no pertenece
-- al tipo BIT
flag1 := 0; -- Invalida: se le asigna un valor entero
flag1 := flag2; -- Vlida: variables del mismo tipo
flag1 := flag3; -- Invlida: variables de distinto tipo
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_3
ObjetosVHDL
Paraasignarvaloresavariables seusaelsmbolo:=
Paraasignarvaloresaseales seusaelsmbolo<=
Lassentenciasdeasignacindevaloraunavariableseejecutansecuencialmente
(comoenotroslenguajesdeprogramacin)ynodeformaparalela.
Esdecir,sienelsiguienteextractodecdigos_a = 0000ys_b =1111antesde
laejecucindelproceso.Unavezfinalizadalaejecucins_a tomarelvalor
1010,mientrasques_b tomarelvalorpreviodes_a,esdecir,0000.
signal s_a,s_b :std_logic_vector(3 downto 0);
process (clk)
variable var :std_logic_vector(3 downto 0);
begin
if clkevent andclk =1then
var :=1010;
s_a <=var;
s_b <=s_a;
end if;
end process;
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_4
ObjetosVHDL
Parapoderasignaraunobjetovaloresdeuntipo
distinto,puedenusarsefuncionesdeconversin
variable flag : bit;
signal nodo : std_ulogic;
nodo <= To_StdULogic(flag);
flag := To_bit(nodo, '0');
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_5
Subprogramas:FuncionesyProcedimientos
Las funciones VHDL:
no son sentencias
devuelven un valor
dentro de ellas, no puede asignarse valor a seales o incluirse sentencias WAIT.
Los procedimientos VHDL:
son sentencias
pueden ejecutarse secuencial o concurrentemente
pueden incluir sentencias WAIT y asignar valores a seales
Declaracin de funciones y procedimientos
Puede realizarse en cualquier zona declarativa: Declaracin de Paquete, Zona de
declaracin de un Cuerpo de Arquitectura o de un proceso
Definicin de funciones y procedimientos
La definicin del procedimiento puede realizarse por separado o en la propia
declaracin
Cuando la funcin se declara en una Declaracin de Paquete, la definicin se
realiza en el Cuerpo del Paquete
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_6
SintaxisdelaDeclaracindefuncionesyprocedimientos
FUNCTION NOMBRE(LISTA_DE_ARGUMENTOS)RETURN TIPO_DE_DATOS;
PROCEDURENOMBRE(LISTA_DE_ARGUMENTOS);
Lalistadeargumentoseselconjuntodeparmetrosquedevuelveosepasan
alsubprograma:
Enlasfuncionestodoslosargumentossondeentrada
Enlosprocedimientos,losparmetrospuedenser:deentrada(IN),desalida
(OUT)ybidireccionales(INOUT)
Losargumentospuedensercualquiertipodeobjeto
Enladeclaracindeunargumentopuedeomitirseladireccinyeltipode
objeto;entalcaso:
Seconsiderarpordefectoqueesunargumentodeentrada
SiseomiteeltipodeobjetoseconsiderarqueesunaCONSTANTE,sies
unargumentodeentrada,yunaVARIABLE,siesdesalidaobidireccional
LasfuncionesdevuelvenunvalordelTIPODEDATOSindicadoensu
declaracin
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_7
Ejemplosdedeclaracindefuncionesyprocedimientos
function retardo_en_tclk (constant retardo, tclk: intime)return time;
function dentro_de_rango (signal a: instd_logic_vector;
constant sup,inf: integer)return boolean;
procedure tecleo (signal ena_cmd: out std_logic;
signal cmd_tecla: out std_logic_vector(3 downto 0);
signal clk: instd_logic;
constant tecla: instd_logic_vector(3 downto 0));
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_8
SintaxisdelaDefinicindefuncionesyprocedimientos
FUNCTION/PROCEDURENOMBRE(LISTA_DE_ARGUMENTOS)[RETURN]IS
ZONADEDECLARACIN
BEGIN
ALGORITMODEPROCESAMIENTOSECUENCIAL
ENDFUNCTION/PROCEDURE;
Enlazonadedeclaracindelsubprogramapuedendeclararseconstantes,
variables,tiposdedatose,incluso,otrossubprogramas
Todaslasdeclaracionessonlocales
Elalgoritmopuedeconstruirseconsentenciasdeejecucinsecuencial
Enlosprocedimientospuedenrealizarseasignacionesdevaloraseal;en
lasfuncionesnosepuede
Lasfuncionesdebendevolverunvalor,deltipodedatosindicadoensu
declaracin,utilizandounasentenciaRETURN
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_9
Ejemplodedefinicindefunciones
function hora_to_natural (hora: std_logic_vector(23 downto 0)) return natural is
variable resultado: natural := 0;
begin
resultado := 10*conv_integer(hora(23 downto 20));
resultado := resultado + conv_integer(hora(19 downto 16));
resultado := resultado * 3600;
resultado := resultado + 600*conv_integer(hora(15 downto 12));
resultado := resultado + 60*conv_integer(hora(11 downto 8));
resultado := resultado + 10*conv_integer(hora(7 downto 4));
resultado := resultado + conv_integer(hora(3 downto 0));
return resultado;
end function;
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_10
Ejemplodedefinicindeprocedimientos
procedure tecleo(signal ena_cmd: out std_logic;
signal cmd_tecla: out std_logic_vector(3 downto 0);
signal clk: in std_logic;
constant tecla: in std_logic_vector(3 downto 0)) is
begin
wait until clk'event and clk = '1';
ena_cmd <= '1';
cmd_tecla <= tecla;
wait until clk'event and clk = '1';
ena_cmd <= '0';
wait until clk'event and clk = '1';
end procedure;
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_11
Sintaxisdelassentenciasdefuncionesyprocedimientos
NOMBRE(PROCEDURE) (LISTA_DE_ASOCIACIN);
OBJETO<=NOMBRE(FUNCIN) (LISTA_DE_ASOCIACIN);
Lalistadeasociacinpuedeconstruirsemedianteconexinexplcitaopor
posicin
Siseomitealgnparmetro,esobligatorioqueenladeclaracindel
subprogramatengaasignadounvalorpordefecto
Losprocedimientospuedenejecutarsesecuencialoconcurrentementesi
algunodesusparmetrosdeentradaesunaseal
Unafuncinpuedeestarenlapartederechaasignacin deuna
sentenciaconcurrentesialgunodesusparmetrosdeentradaesuna
seal
EJEMPLO: tecleo (ena_cmd, cmd_tecla, clk, X"F");
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_12
PaquetesVHDL:conceptos(I)
Cumplenfuncionesequivalentesalasdelaslibrerasenloslenguajesde
programacindealtonivel
Contienen,fundamentalmente,tiposdedatosyoperadoresdefinidospor
elusuario,subprogramasycomponentes
Seconstruyencondosunidadesdellenguaje:
LaDeclaracindePaquete,queeslavistapblicadelPaquete
ElCuerpodepaquete,quecontieneladefinicindelosoperadoresy
subprogramasqueaparecenenlaDeclaracindelPaquete
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_13
PaquetesVHDL:conceptos(II)
LoselementosdeclaradosenunPaquetepuedenser
utilizadosenotrasunidadesVHDLhaciendousode
clusulasdevisibilidad
Pblico
Paquete Descripcin VHDL
Cuerpo de Paquete Clusulas de visibilidad:
library
use
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_14
PaquetesVHDL:sintaxis
package {nombre del paquete} is
{zona de declaracin}
end {nombre del paquete};
package body {nombre del paquete} is
{zona de declaracin}
end {nombre del paquete};
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_15
PaquetesVHDL:ejemplo
DECLARACINDEPAQUETE
PROTOTIPO(DECLARACIN)DE
UNAFUNCIN(CALC_LOG)
QUEREALIZAUNCLCULO
MATEMTICO
SIELPAQUETEEST
ALMACENADOENLAMISMA
LIBRERAQUELASUNIDADES
DEDISEOQUELOUSAN(EN
LALIBRERAWORK),PUEDE
OBTENERSEVISIBILIDADSOBRE
LSINDECLARARLALIBRERA:
USEWORK.AUXILIAR.ALL;
CUERPODEPAQUETE
SENTENCIARETURN
DEFINICIN DE LA FUNCIN
INDICA EL VALOR CALC_LOG
QUE DEVUELVE LA
FUNCIN
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_16
SentenciaASSERT
Las sentencias ASSERT sirven para comprobar el cumplimiento de condiciones durante la
ejecucin de una simulacin
Las condiciones deben formularse como expresiones evaluables a un valor booleano
Cuando la expresin es FALSE se reporta por consola un mensaje, acompaado por una
indicacin de la importancia del suceso un valor del tipo predefinido SEVERITY_LEVEL
Sintaxis:
ASSERT Condicin Lgica
REPORT String
SEVERITY Valor SEVERITY_LEVEL
Los valores del tipo SEVERITY_LEVEL son NOTE, WARNING, ERROR y FAILURE
La sentencia se puede ejecutar secuencial o concurrentemente si en la expresin de la
condicin lgica hay seales
Ejemplo
ASSERT minutos_T1(3 downto 0) =minutos(3 downto 0) 1
REPORT Errorenelincrementodeunidadesdeminuto
SEVERITYERROR;
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_17
Atributos
Los atributos en VHDL proporcionan informacin adicional sobre el
elemento del lenguaje sobre el cual son aplicados
Pueden ser de diferentes tipos: valores, tipos, rangos, funciones o
seales.
Pueden aplicarse a distintos elementos del lenguaje: tipos de datos,
objetos, etc.
Sintaxis para hacer referencia a un atributo:
<identificador_elemento><identificador_atributo>
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_18
Atributosaplicablesa lasseales
SEVENT
DevuelveunTRUEsiocurriuneventoenSdurante
elactualdelta,delocontrariodevuelveFALSE.
SACTIVE
DevuelveunTRUEsiocurriunatransicinenS
duranteelactualdelta,delocontrariodevuelveFALSE.
SLAST_EVENT
Retornaeltiempotranscurridodesdelatransicin
previadelasealS.
SLAST_VALUE
RetornaelvalorpreviodeSantesdelltimoevento.
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_19
Cdigodeautoverificacin:concepto
TESTBENCH
GENERADORDEESTIMULOS DUT:RELOJPROGRAMABLE
CLK CLK MODO
nRST nRST SEGUNDOS[7:0]
TIC_1S TIC_1S MINUTOS[7:0]
ENA_CMD ENA_CMD HORAS[7:0]
PULSO_LARGO PULSO_LARGO AM_PM
CMD_TECLA[3:0] CMD_TECLA[3:0] INFO[3:0]
ESTIMULOS RESPUESTAS
CODIGODEAUTOVERIFICACIN
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_20
Cdigodeautoverificacin:ejemplo
Verificacindelcomandodepasaramododeprogramacindereloj
process(clk, nRst)
variable cmd_tecla_T1: std_logic_vector(3 downto 0);
variable ena_assert: boolean := false;
variable ena_cmd_T1: std_logic;
variable info_T1: std_logic_vector(2 downto 0);
begin
if nRst'event and nRst = '0'then
ena_assert := false;
elsif nRst'event and nRst = '1'and nRst'last_value = '0'then
ena_assert := true;
elsif clk'event and clk = '1'and ena_assert then
if ena_cmd_T1 = '1'and cmd_tecla_T1 = X"A" and info_T1 = 0 then
assert info = 1
report "Error:ignoradocomandodepasoamododeprogramacin"
severity error;
end if;
cmd_tecla_T1 := cmd_tecla;
ena_cmd_T1 := ena_cmd;
info_T1 := info;
end if;
end process;
DiseoDigital2.Dpto.deIngenieraTelemticayElectrnica(ETSISTUPM) BT1_A1_P4_21