`include
. Así, si
queremos incluir el fichero SumadorAuxiliar.v
,
tecleamos:
`include "SumadorAuxiliar.v"
74181.v
contiene el
código Verilog
del ALU 74181 vista en teoría. Podéis encontrar el fichero
original en la página web del profesor
John P. Hayes,
de la Universidad de Michigan
(http://www.eecs.umich.edu/~jhayes/iscas.restore/74181.html).
Escríbase un
fichero Verilog con un módulo que realice las siguientes
operaciones usando dicha ALU:
En el caso de operaciones múltiples, se deben usar registros para almacenar los valores intermedios. Recordemos el esquema y la tabla de operaciones de este circuito integrado:
module Circuit74181 (S, A, B, M, CNb, F, X, Y, CN4b, AEB);os daréis cuenta de que las líneas de acarreo negadas son
CNb
y CN4b
, respectivamente. Las
líneas X
e Y
las podéis
dejar sin conectar.
while
),
aquí vienen algunas más:
while(
condición)
orden: ejecuta la orden mientras la
condición sea verdaderafor(
orden inicial;
condición;
orden recurrente)
orden: ejecuta la orden inicial una vez y, mientras la
condición sea verdadera, ejecuta la orden y la
orden recurrenterepeat(
n)
orden: ejecuta la orden n vecesforever
orden: ejecuta la orden para siempre
(bucle infinito)La orden que se repite (el cuerpo del bucle) puede ser
una única instrucción o un bloque encerrado entre
las órdenes begin
y end
.
integer i; $monitor("i=%d",i); // Con while i=10; while (i>0) #5 i=i-1; // Con for for (i=10; i>0; i=i-1) #5; // Con repeat i=10; repeat (10) #5 i=i-1;
$stop
y $finish
.
La diferencia está en que la primera para la simulación
pero pasa al modo de depuración, donde se puede comprobar
el valor de los registros y las señales y la segunda para
la simulación definitivamente.
Para verificar su funcionamiento correcto, es necesario comprobar
512 combinaciones posibles. En lugar de generar una tabla, realizad
la comprobación mediante Verilog: generad todas las
combinaciones posibles y, en cada combinación, mediante
if
s comprobad que las salidas son correctas. Si no
son correctas, imprimid el valor de los registros y señales
y parad la simulación.
Verilog permite modelar estos retardos de un modo muy fino: se pueden establecer valores independientes para el paso de 0 a 1, de 1 a 0 y de cualquiera a alta impedancia. En una primera aproximación, aquí consideraremos el mismo valor para todas las transiciones.
Para especificar que una puerta tiene un retardo, a
continuación del nombre del tipo de puerta, se añade
el símbolo '#
' y las unidades de
tiempo del retardo entre paréntesis. Por ejemplo:
and #(7) a1(salida, entrada1, entrada2); // AND con retardo 7
ls
cd
rm
man
cat