Download - Departamento de Tecnología Electrónica

Document related concepts
no text concepts found
Transcript
Herramientas de Diseño Electrónico
5º Curso de I.A.E.I.
Departamento de Tecnología Electrónica
Universidad de Valladolid
PRÁCTICA Nº 2
Multiplicador 12x12 para números positivos
Objetivos:
En esta Práctica se pretende aplicar la metodología de diseño de circuitos
algorítmicos a un circuito ‘RTL’ y familiarizarse con ella, introduciendo cambios.
También se evalúa la herramienta gratuita WebPack 8.1 de Xilinx para la síntesis e
implementación de circuitos.
Realización de la Práctica:
a) Entrar en el sistema con el nombre “hde”, clave “hde04xpr” y dominio “DTE3”.
Copiar sobre el directorio privado (por ejemplo, Z:\Cdem110\) el contendido de
‘Z:\Originales\Practica2’ y verificar que los ficheros copiados no están protegidos
contra escritura, pues en otro caso no se podrá trabajar con ellos.
b) Crear y/o editar el fichero fuente “Mult12a.v” para que tenga el siguiente
contenido:
// Multiplica dos números positivos de 12 bits
module Mult12a (Clk, Reset, Empezar, InA, InB, P, Fin, Preparado);
input
input
input [11:0]
output [23:0]
output
output
Clk, Reset;
Empezar;
InA, InB;
P;
Fin;
Preparado;
// Sincronismo y puesta a ‘cero’
// Valida las entradas y solicita el inicio
// Entradas de datos (positivos de 12 bits)
// Salida de datos (el producto, de 24 bits)
// Valida la salida e indica la finalización
// Indica que puede recibir una orden de empezar
reg
Estado;
parameter Inicio = 1’b0, Bucle = 1’b1;
reg [11:0] A;
reg [23:0] B, P;
reg [3:0] J;
reg
Fin;
always @ (posedge Clk or posedge Reset)
begin
if (Reset) begin
Estado <= Inicio;
A <= 0; B <= 0; P <= 0; J <= 0; Fin <= 0;
end else case (Estado)
Inicio:
begin
Fin <= 0;
if (Empezar) begin
A <= InA;
B <= {12’h000, InB};
P <= 0;
Herramientas de Diseño Electrónico
5º Curso de I.A.E.I.
Departamento de Tecnología Electrónica
Universidad de Valladolid
J <= 0;
Estado <= Bucle;
end
end
Bucle:
begin
if (A[0])
P <= P + B;
B <= (B << 1);
A <= (A >> 1);
J <= J + 1;
if (J == 11) begin
Fin <= 1’b1;
Estado <= Inicio;
end
end
default: Estado <= Inicio;
endcase
end // always
assign Preparado = (Estado == Inicio) ? 1’b1 : 1’b0;
endmodule /// Mult12a
c) Crear y/o editar el fichero macro “Mult12a.do” para que tenga el siguiente
contenido (obsérvese el formato de los números en hexadecimal y también el uso de
la orden “examine”):
echo “Simulacion de Mult12a - 2003/05/08”
restart -force
view wave
delete wave -r *
radix hexadecimal
add wave Clk
add wave Reset
add wave InA
add wave InB
add wave Empezar
add wave P
add wave Fin
add wave Preparado
add wave Estado
add wave A
add wave B
add wave J
-- Inicializacion
force Clk
force Reset
force Empezar
force InA
force InB
run 400ns
1
1
0
0
0
0ns, 0 40ns -repeat 100ns
15ns, 0 215ns
0ns
0ns
0ns
Herramientas de Diseño Electrónico
5º Curso de I.A.E.I.
Departamento de Tecnología Electrónica
Universidad de Valladolid
-- Calcula 0x53A (1.338) x 0xDB1 (3.505) = 0x478F1A (4.689.690)
force InA
force InB
force Empezar
force InA
force InB
force Empezar
run 100ns
run 1200ns
16#53A 15ns
16#DB1 15ns
1
15ns
0
115ns
0
115ns
0
115ns
run 50ns
echo "$now ns: J is '[examine -u J]' vs '12'."
echo "$now ns: P is '0x[examine -hex P]' vs '0x478f1a'."
run 50ns
run 200ns
echo “Fin de la prueba”
d) A continuación, entrar en el programa ModelSim para simular en modo HDL
el circuito. Crear para ello el directorio y el proyecto correspondiente (File − New −
Project…). Luego se debe añadir el fichero “.v” al proyecto, compilarlo (Compile −
Compile All), y cargar el diseño en el simulador (Simulate − Start Simulation…; elegid
el módulo en la categoría “work”), antes de ejecutar la macro (Tools − Execute
Macro … fichero “.do”).
Pregunta 1: ¿Qué mensaje emite el simulador para indicar que la simulación ha sido
correcta? ¿Qué línea del fichero .do ordena la emisión de ese mensaje?
Pregunta 2: ¿A que velocidad (multiplicaciones por segundo) es capaz de operar el
circuito propuesto si la frecuencia de reloj es de 10 MHz? ¿Y si es de 50 MHz?
Herramientas de Diseño Electrónico
5º Curso de I.A.E.I.
Departamento de Tecnología Electrónica
Universidad de Valladolid
e) Salir del simulador y entrar en el programa WebPack 8.1 (el icono se llama
Xilinx Project Navigator), que permite sintetizar e implementar el circuito sobre una
FPGA o CPLD de Xilinx. Abrir un nuevo proyecto (File − New Project...) en un
directorio del disco E: (esto es importante: por el motivo que sea, esta herramienta
no puede escribir sobre el disco de red Z:, nótese que la figura es incorrecta), por
ejemplo en “E:\hde\CdemXXX\Practica2” y escribir el nombre del proyecto “Mult12a”.
Elegir también las demás opciones mostradas en la figura.
A continuación, añadir al proyecto de WebPack el fichero fuente del diseño (se
puede emplear el menú “Add Source”). Editarlo si se desea (con doble-click sobre el
nombre del módulo).
Las ventanas de la izquierda muestran los comandos disponibles (con dobleclick) y los fichero sobre los que se pueden aplicar (seleccionándolos).
Herramientas de Diseño Electrónico
5º Curso de I.A.E.I.
Departamento de Tecnología Electrónica
Universidad de Valladolid
f) Sintetizar el circuito activando el comando “Synthesize” y visualizar su informe
(a través de Detailed Reports − Synthesis Report).
Pregunta 3: ¿Cuántos DFF se han inferido del fichero verilog? ¿cuántos sumadores
y de qué tipo? ¿es razonable?
Responder a la respuesta anterior modificando las propiedades de la síntesis
(usando el botón derecho del ratón sobre la orden Synthesize XST), y eligiendo otras
preferencias para mejorar el resultado: optimización por área o velocidad, nivel de
esfuerzo en el cálculo, etc.
g) Ejecutar el comando “View RTL Schematic” disponible bajo el comando
“Synthesis XST”. Localizar el DFF del estado.
Pregunta 4: ¿Cómo se genera la señal ‘Preparado’ a partir del estado del módulo?
h) Implementar el circuito hasta el nivel ‘Place & Route’ y visualizar su informe.
Pregunta 5: ¿Cuántos SLICES se han necesitado? ¿cuántas LUT4?
DFF? ¿cuántos pines de E/S? ¿es razonable?
¿cuántos
Modificar las propiedades del rutado, por ejemplo el nivel de esfuerzo, el mapeo
de registros sobre bloques de entrada/salida, etc, y volver a implementar el circuito,
observando si se producen diferencias.
i) Para evaluar el comportamiento dinámico del circuito (su frecuencia máxima
de funcionamiento) hay que añadir restriccionres: se usa la orden “User Constraints
− Create Timing Constraints” para especificar, por ejemplo, un reloj de 20 ns (50
MHz) en la señal ‘Clk’. Después se puede volver a implementar el circuito para
incorporar las nuevas especificaciones y ver los resultados.
Pregunta 6: Después de efectuar un análisis temporal estático (Text-based PostPlace&Route Static Timing Report), ¿cuál es la frecuencia máxima a la que puede
operar el circuito en una SpartanII-5 de Xilinx?
j) Modificar el fichero fuente (“.v”) tratando de optimizar el diseño. Por ejemplo,
en el estado ‘Inicio’ los registros ‘P’ y ‘J’ se ponen a ‘cero’ sólo si está activada la
señal ‘Empezar’, pero el circuito también sería operativo si la inicialización de ‘P’ y ‘J’
se hace en dicho estado con independencia del valor de la señal de comienzo.
Revisar en cada caso los informes señalados en las preguntas 2 a 6.
k) Después de haber realizado los cambios, y visto que el diseño se sintetiza e
implementa correctamente, volver a entrar en el simulador para verificar que sigue
funcionando como se espera.
l) En función del tiempo disponible, modificar el diseño para que admita números
negativos. Primero probar que ‘B’ pueda ser positivo y negativo, y luego tratar de
hacerlo con ‘A’.