¿Cuál es el conjunto en D FF?

Estoy tratando de implementar un contador de 3 bits usando puertas básicas (Y, O, XOR, NO, etc.) alrededor de 3 flip-flops tipo D. La entrada es una señal de incremento que, cuando se establece en 1, permitirá que el contador aumente en 1. Hay 3 salidas de conteo (0), conteo (1) y conteo (2) donde conteo (0) es el lsb .

Pero no estoy seguro de cómo puedo manejar el conjunto en chanclas tipo D. He ilustrado de la siguiente manera, pero puede encontrar que hay un puerto establecido en DFF. Entonces, ¿cómo puedo configurarlo en verilog ? No estoy seguro de si este significado se ha reiniciado. en caso afirmativo, ¿qué sucede si el conjunto es 1, lo que significa reinicio negativo? o reinicio positivo?

¿Cómo modifico la regla anterior (la entrada es una señal de incremento que, cuando se establece en 1, permitirá que el contador aumente en 1)? ¿Lo estoy interpretando bien o mal?

ACTUALIZAR:

¿Es la misma cosa?

always @ (posedge clk or negedge reset )  
if(set) 
    begin
      Q<=1'b1;  
    end

ingrese la descripción de la imagen aquí

ACTUALIZAR:

   wire q0;                                      
   wire q1;
   wire q1_i = (q0 ^ q1);                        
   wire q2;
   wire q2_i = (q2 ^ (q0 & q1));


   dar u_dar1 ( ~q0 , clk , reset_n, q0);        
   dar u_dar2 ( q1_i , clk , reset_n, q1);       
   dar u_dar3 ( q2_i , clk , reset_n, q2);       

   wire [2:0] rere = {q2,q1,q0}; 

   module dar  (
                   data  , // Data Input
                   clk    , // Clock Input
                   reset , // Reset input 
                   q         // Q output
                   );
   input data, clk, reset ;
   output q;
   reg q;
   always @ ( posedge clk or negedge reset)
           if (~reset) begin
             q <= 1'b0;
             end  else begin
               q <= data;
               end

   endmodule 
En D FF, si pones 1 en D (mientras CLK=1), entonces lo estás configurando, si pones 0 en D (mientras CLK=1), lo reinicias (claro)
@Triak Gracias Dir, lo acabo de actualizar. ¿Podrías comprobarlo? si puede ilustrarlo, modifíquelo.
@Morgan ¿Me podrías dar algún consejo?
@Carter, por alguna razón elegí el nombre 'pre_randomize' en este sitio pero soy yo morgan de SO.
@pre_randomize, señor, no sé por dónde empezar a hacer la función anterior.
Su esquema muestra las entradas SET y RESET de los flip-flops que no se utilizan. Si no los está usando, entonces no necesita describirlos en su HDL.

Respuestas (4)

El flip-flop Set-Reset no se usa a menudo, la sintaxis tiende a parecer 'incorrecta' para aquellos que no están acostumbrados a verla. En realidad, puede tener 3 señales sensibles al borde en la lista de sensibilidad: el restablecimiento bajo activo tiene prioridad.

always @(posedge clk or negedge reset or posedge set ) begin
  if (~reset) begin
    Q<=1'b0;  
  end
  else if (set) begin
    Q<=1'b1;  
  end
  else begin
    Q <= D;
  end
end

Para un contador que se incrementará en 1 cuando esté habilitado, no hay necesidad de set_reset_flip-flops.

Una versión RTL limpia podría ser simplemente:

always @(posedge clk or negedge rst_n) begin
  if (~rst_n) begin
   Q <= 'b0;
  end
  else begin
    if (increment) begin
      Q <= Q + 1'b1;
    end
  end
end

Donde incrementes una señal síncrona. Esto tiene 3 flip-flops Q que alimentan un medio sumador con un solo bit 1 como el otro operando. Solo necesitas un medio sumador para incrementar en 1.

Wow, es muy claro el conjunto
Pero. Señor, ¿debería tener que configurar el control del puerto para la inicialización? No hay restablecimiento, luego solo configuré el control para restablecer.
Incluiré esto para responder más tarde, pero por ahora; No en el tiempo 0 suponga que no hay energía al circuito. todas las señales se inicializan a medida que encendemos, tenemos un reinicio bajo activo, lo que significa que 0 (GND) pone el flip-flop en reinicio. Esto tiene prioridad y ninguna otra señal puede afectar la salida mientras el restablecimiento está activo. Para ASIC, el restablecimiento normalmente se controla desde un bloque Power on Reset que libera el restablecimiento después de 2 períodos de reloj completos, lo que garantiza que todas las demás señales se puedan inicializar correctamente antes de que se libere el restablecimiento.
Como regla, (la entrada es una señal de incremento que cuando se establece en 1 permitirá que el contador aumente en 1). ¿Debo agregar un inversor en el primer puerto?
Evitaría perder el tiempo con puertos de reinicio, lógica adicional, fallas, etc. y es posible hacer que todo no funcione. Activo bajo como lo has usado está perfectamente bien. Creo que la idea de cómo implementar el incremento estaba un poco fuera de lugar, he ampliado la respuesta.
Gracias señor, ¿mi esquema es correcto según las reglas anteriores? No estoy seguro.
a simple vista parece correcto, pero el esquema no ha conectado ninguno de los conjuntos o reinicios. Debe verificar que su medio sumador sea correcto. parece que falta una puerta AND y no veo ningún control para la función de incremento.
Señor, ¿podría señalar para ilustrar?
Un solo bit de medio sumador es 1 XOR y 1 AND. Solo tienes 2 XOR y 1 AND en el esquema. No estoy seguro de cómo implementas un sumador de 3 bits con eso. El D-Type que ha utilizado tiene 6 puertos (CLK ( >), D, Q, Q_bar, set y clr (reset)), solo ha dibujado conexiones a 4 de ellos en el esquema.
Estimado Mogan: Si puede, ¿podría dirigirse a Verilog? Es muy difícil.
@Carter Ya había actualizado la pregunta para incluir un contador incremental, vea el final de la respuesta. Si todavía está atascado, sugeriría una nueva pregunta que indique claramente el problema actual.

SET fuerza la salida (Q) alta y la salida inversa baja. CLR "borra" el flip-flop, lo que significa que la salida se fuerza a nivel bajo y la salida inversa a nivel alto. Las entradas SET y CLR son asíncronas con el reloj, lo que significa que funcionan en cualquier momento, no solo en el borde del reloj como lo hace la entrada D.

Gracias señor, entonces, ¿es esto lo mismo que sigue? siempre @(posedge clk o negedge reset_n) { if(!reset_n) {D=<=0)?
Como dijiste, si set = 1 entonces Q es 0, set = 0 entonces Q es 1. Y si CLR = 0 entonces Q es 1, CLR = 1 entonces Q es 0. entonces es esta la misma función entre CLR y set ?
@Carter: No, cuando SET es alto, Q se fuerza alto.
Gracias, pero ¿cómo puedo inicializar el circuito anterior?
¿Cuál es el valor de salida del primer flip-flop? mientras cronometraba.

Set y clear son asincrónicos en un D-flipflop. Anulan las entradas de las compuertas de salida interconectadas, por lo que dependiendo de si usa compuertas NAND o NOR, usted establece AND u OR y Clr con las entradas de estas compuertas.

Gracias señor, ¿quiso decir que no necesito reiniciar? Pero, ¿cómo manejo el conjunto de esta manera? La entrada es una señal de incremento que, cuando se establece en 1, permitirá que el contador aumente en 1. La regla es necesaria para controlar la señal establecida.
No necesita el reinicio, y tampoco necesita establecer, para que funcione un D-flipflop. En las versiones discretas, cuando están disponibles, generalmente están activas y bajas, y luego las conecta a Vcc si no las necesita.
Pero, ¿cómo puedo establecer en 1? ¿Debería necesitar algo más para hacer como esto? (La entrada es una señal de incremento que, cuando se establece en 1, permitirá que el contador aumente en 1) ? Quiero decir que no hay ningún valor inicial.

Algunos flip flops solo pueden cambiar de estado cuando la entrada del reloj cambia de estado. Algunos cambian de estado en respuesta a una entrada de reloj, pero tienen una entrada adicional, llamada "restablecimiento asíncrono", que puede obligarlos a bajar independientemente de lo que esté haciendo el reloj. Algunos tienen una entrada, llamada "conjunto asíncrono", que puede obligarlos a subir sin importar lo que esté haciendo el reloj.

En un fracaso con capacidades genuinas de configuración/reinicio asíncrono, la activación de la entrada de "establecimiento asíncrono" cuando el pin de "reinicio asíncrono" impulsará incondicionalmente la salida a un nivel alto, independientemente de lo que el reloj esté haciendo o haya hecho anteriormente (incluso si se produce un problema técnico en el reloj). había dejado la salida en un estado metaestable ["confundido"]). Del mismo modo, conducir el "restablecimiento asíncrono" hará que la salida sea incondicionalmente baja. Es importante destacar que, en los casos en los que tener una entrada cambia limpiamente antes que la otra produciría la misma salida que si cambiara limpiamente después, hacer que cambien simultáneamente producirá el mismo resultado, y la salida nunca cambiará de estado, ni siquiera momentáneamente , excepto en los casos en que es especificado para hacerlo.

Es posible usar flip flops "simples" o flip flops de reinicio asíncrono junto con lógica combinatoria para "sintetizar" un flip flop de ajuste y reinicio asíncrono cuya descripción de comportamiento VHDL o Verilog coincidirá con la de uno real, pero asíncrono sintético Las chanclas set-reset casi siempre difieren de las reales en formas que pueden ser importantes, pero que esos lenguajes realmente no pueden expresar. Por ejemplo, en el siguiente circuito (la mitad derecha representa el flip flop de ajuste/reinicio asíncrono sintetizado, y la mitad izquierda puede generar señales de prueba en la simulación)

esquemático

simular este circuito : esquema creado con CircuitLab

la salida solo cambiará en respuesta a un estímulo de entrada adecuado (haciendo clic en el esquema y seleccionando "simular/análisis transitorio" debería generar un gráfico de tiempo), pero se observará que hay tres flip flops que cambiarán de estado en respuesta a un estímulo de entrada que debería hacer que la salida cambie de estado, pero la llegada simultánea de dos señales que deberían hacer que la salida cambie de estado puede, de hecho, hacer que el estado de la salida cambie de estado dos veces rápidamente (regresando erróneamente a su estado anterior).