Estoy tratando de hacer un oscilador de anillo dentro de un CPLD CoolRunner-II de Xilinx y estoy tratando de medir cuántos ciclos de oscilador de anillo caben dentro de la mitad baja del reloj externo de 10MHz. A continuación se muestra el código simple que hice con 5 inversores.
module Top(
input clk,
input trig,
output TXD
);
wire node1;
wire node2;
wire node3;
wire node4;
wire node5;
wire node6;
wire node7;
reg[31:0] counter;
reg[31:0] counterBuf;
assign node1 = ~node7;
assign node2 = ~node1;
assign node3 = ~node2;
assign node4 = ~node3;
assign node5 = ~node4;
assign node6 = ~node5;
assign node7 = ~node6;
always @(posedge node5) begin //use ring counter clock
//increase counter only during low period of clock
if(clk==0) counter = counter + 1;
else begin
counterBuf = counter;//save counter value for later use
counter = 0;//restart counter
end
end
Sin embargo, trato de leer counterBuf, siempre lee 0. Si comento "contador = 0;", counterBuf muestra algún cambio en el valor. ¿Es incorrecto el código al establecer el contador?
¿Cómo puedo implementar de otra manera usando verilog?