Beruflich Dokumente
Kultur Dokumente
DEPARTAMENTO DE ELECTRONICA
ELO212 Laboratorio de Sistemas Digitales
Manual de buenas prcticas de diseo utilizando el lenguaje
verilog
Profesor: Mauricio Solis Hernndez.
Este documento est dirigido a los alumnos que cursan el ramo Laboratorio de Sistemas
Digitales (ELO 212) y a cualquiera que desee programar en verilog. ara su entendimiento se
sugiere !aber tenido algo de prctica con el lengua"e.
Es muy conocido el dic!o #El papel aguanta todo$% y verilog no es la e&cepci'n% pues
muc!as veces !a ocurrido que un c'digo cumple las reglas sintcticas y de dise(o y puede ser que
!asta las simulaciones muestren el resultado esperado% pero al momento grabar la tar"eta% los
resultados no son satis)actorios. Este inconveniente causa muc!os dolores de cabe*a y el nivel de
)rustraci'n aumenta rpidamente al no entender el problema (no siempre es posible !acer debugs
on+line).
Las estrategias de dise(o que e&pondr, a continuaci'n son una recopilaci'n de ideas de los
pro)esores que dictaron el ramo en oportunidades anteriores- Leopoldo Silva% .ol)gang /reund y
mis propias investigaciones y conclusiones.
ro)esor- 0auricio Sol1s 2ernnde* 1345642513 gina 1 de 7
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
ELO212 Laboratorio de Sistemas Digitales
Recomendaciones sobre asignaciones bloqueantes y no
bloqueantes.
1. 8uando se describen circuitos digitales co!i"acio"ales se sugiere que la lista de
sensibilidad "o tenga se(ales del tipo #canto de subida$ (posedge) o #canto de ba"ada$
(negedge)% pues este tipo de se(ales solo tienen sentido a la !ora de escribir en )lip+)lops y
estos se utili*an cuando se describen circuitos secuenciales. or e"emplo si se desea describir
un circuito multiple&or% el cual es combinacional puro se sugiere utili*ar una de las
siguientes alternativas-
Es necesario destacar que% a pesar de !aber de)inido la se(al #salida$ como #reg$ no quiere
decir que se trate de una memoria (/lip+)lop)% solo se !ace por que estamos dentro de un bloque
#al9ays$
ro)esor- 0auricio Sol1s 2ernnde* 1345642513 gina 2 de 7
De este c'digo se puede desprender
una nueva buena prctica-
Es aconse"able que sie#re !aya un
caso de$ault en un bucle case
module e":51:multiple&er:51(entrada%control%salida);
input <3-5= entrada;
input <1-5= control;
output reg salida;
al9ays>(e or control)
case (control)
2?b55-entrada @ salida<5=;
2?b51-entrada @ salida<1=;
2?b15-entrada @ salida<2=;
de)ault-entrada @ salida<3=;
endcase
endmodule
module e":51:multiple&er:52(entrada%control%salida);
input <3-5= entrada;
input <1-5= control;
output reg salida;
al9ays>(entrada or control)
A)(control@@2?b55)
salida @ entrada<5=;
else i) (control@@2?b51)
salida @ entrada<1=;
else i) (control@@2?b15)
salida @ entrada<2=;
else
salida @ entrada<3=;
endmodule
De este c'digo se puede desprender
una nueva buena prctica-
Es aconse"able que para toda
sentencia #i$$ !aya un #else$
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
ELO212 Laboratorio de Sistemas Digitales
En la )igura 1 se puede ver en colores los resultados de las simulaciones para cada uno de los
c'digos anteriormente implementados. Se puede ver que en las salidas (en colores) se observa la
misma perturbaci'n que en la entrada a medida que cambia el control.
ro)esor- 0auricio Sol1s 2ernnde* 1345642513 gina 3 de 7
module e":51:multiple&er:53(entrada%control%salida);
input <3-5= entrada;
input <1-5= control;
output salida;
assign salida @ (control@@2?b55)Bentrada<5=-
(control@@2?b51)Bentrada<1=-
(control@@2?b15)Bentrada<2=-entrada<3=;
endmodule
Figura 1: Simulacin 3 maneras de implementar un multiplexor
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
ELO212 Laboratorio de Sistemas Digitales
2. 8uando se describen circuitos digitales secue"ciales se sugiere que la lista de sensibilidad
tenga solo se(ales del tipo #canto de subida$ (posedge) o #canto de ba"ada$ (negedge)% pues
son estos los eventos que gatillan la escritura en los )lip+)lops. Si bien no !ay restricciones
en cuanto al nCmero de se(ales en una lista de sensibilidad de un bloque que describe un
circuito secuencial% la e&periencia nos sugiere que no se pueden utili*ar ms de 2% aunque
e&iste un caso particular en que se pueden utili*ar 3.
El siguiente e"emplo muestra c'mo se puede !acer un contador m'dulo 12 que inicia su
cuenta en #5$% con reset y preset asincr'nico. El preset setea la cuenta en #D$.
Este peque(o e"emplo tiene muc!as sutile*as que vale la pena destacar-
1. la sentencia #i) else$ tiene una prioridad claramente establecida% es decir% en este caso el
reset del contador ocupa la primera prioridad% luego el preset y )inalmente el clocE% esto
quiere decir que mientras el reset est, en alto% ninguna otra se(al podr ser #evaluada$ y
el contador estar permanentemente en cero.
2. 8uando !ay ms de una se(al en la lista de sensibilidad (en circuitos secuenciales) solo
se debe evaluar el estado de n+1 se(ales% En este caso tenemos 3 se(ales y solo se evalCa
el estado del #rst$ y el pre% mas no el clE. FSiempre debe !acerse as1G.
3. Estamos en uno de los casos en que la lista de sensibilidad tiene 3 se(ales% pero debe
tenerse en cuenta que solo una de la se(ales cambia el estado del contador (arreglo de
)lip+)lops) en relaci'n a su estado anterior% me re)iero a la se(al clE% es decir% la se(al rst
y pre escriben un valor )i"o a los )lip+)lops% mientras que la se(al clE escribir el valor
dependiendo del estado anterior.
ro)esor- 0auricio Sol1s 2ernnde* 1345642513 gina H de 7
module e":52:contador(clE%rst%pre%s);
input clE%rst%pre;
output reg<3-5= s;
al9ays>(posedge clE or posedge pre or posedge rst)
begin
i)(rst)
s I@ H?b5555;445
else i)(pre)
s I@ H?b5115;44D
else
i)(sI11)s I@ sJ1;
else
s I@ 5;
end
endmodule
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
ELO212 Laboratorio de Sistemas Digitales
En la simulaci'n se puede ver claramente el carcter asincr'nico del reset% pues el m'dulo
no espera el canto de subida del relo" para setear en cero el contador y tambi,n se puede ver
que el preset setea el valor de contador en D sin estar sincroni*ado con el relo".
ro)esor- 0auricio Sol1s 2ernnde* 1345642513 gina 6 de 7
Figura 2: Simulacin contador Mdulo 12 con reset y preset asincrnico
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
ELO212 Laboratorio de Sistemas Digitales
1.1. Recomendaciones a la hora de disear.
Kna de las principales caracter1sticas del so)t9are de Lilin& es que tiene alrededor de D tipos
di)erentes de )lip+)lops y los administra segCn sean las especi)icaciones de nuestro c'digo. or
e"emplo !ay //s que tienen un pin !abilitador% otros que tienen reset asincr'nico% preset
asincr'nicos% etc. El que veremos con ms detalle es el )lip+)lop /D8% que tiene una entrada D% un
relo" 8LM% un clear 8LN (pone el estado en cero) y un preset NE(o set que pone el estado en 1).
Las se(ales que gatillan un cambio en el estado de un )lip+)lop tienen prioridades% siendo el 8lear o
Neset la de mayor prioridad luego la de reset y )inalmente el 8locE% pero adems en este )lip+)lop
las entradas clear y preset )uncionan por nivel% no por cantos% es decir% si se detecta un nivel alto en
el clear% por ms que el clE est, cambiando% el estado del )lip+)lop seguir en cero.
1. La recomendaci'n es utili*ar una sola se(al de relo" para describir el traspaso del valor de la
entrada del )lip+)lop (pin D) al estado de este (O)% una se(al de reset (reset asincr'nico) y en
caso de necesitarlo un preset.
2. Ksar solo se(ales sincroni*adas con el relo" interno de la /PQ.
Es muy mala prctica que en la lista de sensibilidad de un bloque al9ays !aya relo"es
(edges) que no est,n sincroni*ados con el relo" interno de la tar"eta y peor aCn utili*ar como
relo"es% se(ales provenientes de circuitos combinacionales.
8omo e"emplo se dise(ar un m'dulo que cuando se presione el bot'n L se incremente la
cuenta de un contador en 1 y si se aprieta el bot'n R se reali*ar un corrimiento !acia la
derec!a en 1.
En este caso !ay dos eventos que dependen del estado presente (el incremento y el
corrimiento)% pero solo es posible que en la lista de sensibilidad !aya una se(al que cambie
el estado dependiendo del estado presente% por lo que% tenemos un problema serio.
El primer intento es !acer caso omiso a las recomendaciones anteriores y escribir un c'digo
como el siguiente-
Este c'digo aparentemente deber1a )uncionar% es ms% las simulaciones !acen pensar que as1
ser% pero al momento de la implementaci'n no se obtendrn los resultados esperados.
ro)esor- 0auricio Sol1s 2ernnde* 1345642513 gina D de 7
module e":53:problema:botones:51(L%R%q);
input L%R;
output reg <3-5=q@H?b5555;
al9ays>(posedge L or posedge R)
begin
i)(L)
q I@ qJ1;
else
q I@ (qSS1);
end
endmodule
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
ELO212 Laboratorio de Sistemas Digitales
Otro c'digo posible podr1a ser-
pero tampoco )unciona a la !ora de implementarse y adems el compilador nos dir que es una mala
prctica utili*ar como relo" una se(al proveniente de un circuito combinacional% pues la se(al
clE:LR proviene del #or$ de dos se(ales.
La soluci'n consiste en no utili*ar ninguno de los botones como relo"% sino ms bien el relo"
interno de la tar"eta e implementar el siguiente circuito-
Este esquema muestra un multiple&or cuyo control debe ser capa* de #decidir$ si se debe
!acer la suma (canto de subida de L)% el corrimiento (canto de subida de R) o mantener el estado en
todo otro caso.
uede verse que este diagrama cumple con las sugerencias de buenos dise(os% el Cnico
inconveniente es que para que )uncione es necesario que los eventos asincr'nicos (botones) est,n
sincroni*ados antes y adems se debe reconocer el canto de subida de ellos.
ro)esor- 0auricio Sol1s 2ernnde* 1345642513 gina T de 7
module e":53:problema:botones:52(L%R%q);
input L%R;
output reg <3-5=q;
9ire clE:LR;
assign clE:LR@ LUR;
al9ays>(posedge clE:LR)
begin
i)(L)
q I@ qJ1;
else
q I@ (qSS1);
end
endmodule
Figura 3: Esquema solucin
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
ELO212 Laboratorio de Sistemas Digitales
El circuito para sincroni*ar entradas puede ser el siguiente-
Es bsicamente un circuito que tiene 3 )lip+)lops anidados y sirven para eliminar violaciones
de !old y setup.
Kn circuito para detectar un canto de subida en una se(al es el siguiente-
ro)esor- 0auricio Sol1s 2ernnde* 1345642513 gina V de 7
module e":53:problema:botones:53(clE%rst%L:edge%R:edge%q);
input clE%rst%L:edge%R:edge;
output reg <3-5=q;
al9ays>(posedge clE or posedge rst)
begin
i)(rst)
q I@ H?b5555;
else i)(L:edge) 44canto de subida de L
q I@ qJ1;
else i)(R:edge) 44canto de subida de R
q I@ (qSS1);
else q I@ q; 44mantiene el estado anterior
end
endmodule
module sync!:input(clE%rst%e%s);
input clE%rst%e;
output s;
reg )):1@1?b5%)):2@1?b5%)):3@1?b5;
al9ays>(posedge clE or posedge rst)
begin
i)(rst)
W)):1%)):2%)):3X I@ 3?b555;
else
W)):1%)):2%)):3 X I@ We%)):1%)):2X;
end
assign s@)):3;
endmodule
Figura 4: Circuito detector de cantos de
subida
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
ELO212 Laboratorio de Sistemas Digitales
El c'digo que implementa el circuito de la /igura H es-
8on estos tres m'dulo podemos dar una soluci'n robusta al problema anterior.
ro)esor- 0auricio Sol1s 2ernnde* 1345642513 gina 7 de 7
module detect:posedge(clE%rst%e%s);
input clE%rst%e;
output s;
reg )):1@1?b5%)):2@1?b5;
al9ays>(posedge clE or posedge rst)
i)(rst)
W)):1%)):2X I@ 2?b55;
else
W)):1%)):2X I@ We%)):1X;
assign s @ ()):1YY(Z)):2));
endmodule