Algunas preguntas acerca de RTL Design y VHDL

0

Tengo algunas preguntas casi sin correlación, por lo que las voy a endurecer, espero que puedan ayudarme:

1) Estoy estudiando Diseño RTL, y la pregunta es a nivel de la ruta de datos, unidad aritmética ecc. No entiendo por qué y cómo se puede usar una palanca de cambios para realizar la operación de multiplicación y división. Por ejemplo, si alguien me pregunta "¿cuántos sumadores (o desplazadores) se necesitan para hacer una multiplicación entre un operando compuesto por X bits", cuál es el método que debo aplicar para responder esta pregunta? Otra pregunta. En un libro he leído que la operación A + B = K, en la que la salida es 1 si la suma de A y B es igual a K, 0, de lo contrario, se puede realizar evaluando el Carry esperado y el Carry obtenido por suma. No entendí este concepto, ¿me puede explicar?

2) VHDL. Esta pregunta es simple, creo. En todos los ejemplos de los libros, cuando está presente un flip-flop, el flanco ascendente del reloj se maneja de esta manera: proceso (clk), y luego para expalin el flanco ascendente hay una línea "if (clk'event & amp ; clk = 1) ". La pregunta si: ¿por qué "clk'event" es necesario? La señal clk está dentro del proceso, por lo que vamos dentro del proceso cada vez que el reloj cambia de estado, no es suficiente para evaluar solo si el reloj es igual a 1, porque el evento clk es siempre cierto?

Gracias

    
pregunta Daniele

1 respuesta

3

Para la parte (2): si la lista de sensibilidad de un proceso contiene otras señales, y hay actividad en esas señales mientras clk = '1' , entonces el proceso funcionará varias veces por ciclo de reloj. Si es un contador, eso sería malo ...

Peor aún, la síntesis ignoraría los eventos adicionales (porque no hay una función de hardware para implementarlos), por lo que la simulación y el sintetizador se comportarían de manera diferente.

Por cierto, if(clk'event & clk = 1) ha estado obsoleto por más de 20 años; por lo que sus materiales de enseñanza son muy obsoletos. Como dice @Paebbels, usa if rising_edge(clk) en su lugar.

La parte (1) no es ni una pregunta VHDL ni una pregunta RTL sino una aritmética básica: la búsqueda de "multiplicación por turno y suma" debería generar más información de la que nunca deseará.

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas