Verilog:检查信号是否有100个活动时间?

时间:2014-12-17 18:23:13

标签: verilog hdl

我有一个输入和一个输出。如果输入为100个标记有效(100个周期),我想将输出转为1。

module check_100(
   input wire clock,
   input wire reset,
   input wire in_a,
   output reg out_a);  

reg[10:0] counter;  

always @(posedge clock) begin
    counter <= counter + 1;
    if(in_a && (counter == 100)) begin
        out_a <= 1;
    end
end

但它似乎无法正常工作。 这是一个检查信号是否为100个刻度/周期有效的好方法吗?

谢谢! :)

1 个答案:

答案 0 :(得分:0)

一种方法是在count == 100时使用连续赋值来设置输出。当输入变低时,计数器复位。当它达到100时保持计数值。

module check_100(
   input wire clock,
   input wire reset,
   input wire in_a,
   output wire out_a
);  

reg [10:0] counter;  

assign out_a = counter == 100;

always @(posedge clock) begin
    if (reset) begin
        counter <= 0;
    end else if (!in_a) begin
        counter <= 0;
    end else if (counter < 100) begin
        counter <= counter + 1;
    end
end

endmodule