Contador ascendente de 0-9
Supongamos que tenemos 4-bit async. contador que cuenta hasta 0 - > 15
Unaformadelimitarestecontadorseríasimularel1111
bitpatterensiemprequelasalidaactualseaiguala9
Enotraspalabras,cuandolasalidaesiguala91001
,necesitamosalternarOUT[3]ynoalternarOUT[1]elsiguienteciclodereloj,porloqueterminamoscon0000
SuponiendoqueesteesnuestromodeloTflip-flopenverilog
moduleTFF(CLK,T,OUT);inputCLK,T;outputregOUT=0;always@(posedgeCLK)beginif(T)OUT<=~OUT;elseOUT<=OUT;endendmodule//TFF
Yhemosconstruidoalgúncircuitológicocombinatorioqueverificalasalidadelcontador.Siesiguala9,seasegurarádealternarFUERA[3]ydenodesactivar[1]elsiguienteciclodereloj
moduleNINE_YET(IN,OUT);input[3:0]IN;outputreg[1:0]OUT;always@(*)beginif(IN==9)OUT<=2'b01;//Q[3]shouldbetoggledthenextcycle,Q[2]shouldnotelseOUT<={~IN[2],~IN[0]};//justpassQ'ofTff[2]andTff[0]endendmodule//NINE_YET
Yesteeselmódulosuperiordondetodoestáconectado
moduleTOP(CLK,OUT);inputCLK;output[3:0]OUT;wire[1:0]nine_yet_op;NINE_YETm(OUT,nine_yet_op);TFFQ0(CLK,1'b1,OUT[0]);TFFQ1(nine_yet_op[0],1'b1,OUT[1]);TFFQ2(~OUT[1],1'b1,OUT[2]);TFFQ3(nine_yet_op[1],1'b1,OUT[3]);endmodule//TOP
Estaeslamismaconexiónqueelcontadordeconteoascendentequecuentadesde0->15perolaúnicadiferenciaesquelasentradasCLKdelos4ºy2ºflipflopsestánconectadasalcircuitocombinatorioqueverificasilasalidaes9ono
Yesteeselresultado
No sé por qué inicialmente la salida de flip flops está configurada en 1111
creo que me estoy perdiendo algo en mi banco de pruebas, pero espero que tengas la idea
- Construye un contador normal abajo
- Comience a insertar algún circuito combinatorio que alterne el flip-flop [s] correcto en el siguiente ciclo una vez que se detecte el patrón de bits requerido