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’.