Verilog多个计数器

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (137)

我有一个带有fowling输入和输出的Verilog模块

  module Foo
    #(
        parameter DATA_BITS = 32,
        parameter ENUM_BITS = 8,
        parameter LED_BITS  = 8 
    )
    (
        //Module IO declarations
        input  logic    Clk_i,
        input  logic    Reset_i,
        input  logic    NoGoodError_i,
        input  logic    EncoderSignal_i,
        input  logic    [DATA_BITS-1:0]DistanceCount_i,
        //Enable the gate 
       output logic    GateEnable_o
   )

总体设计理念如下。当我收到NoGoodError_i的上升沿时,启动一个计数器并通过EncoderSignal_i信号的上升沿计数到DistanceCount_i计数。这看起来非常简单,但是我的设计挑战变成了在我完成前一次计数之前我可以得到另一个NoGoodError_i。所以,我需要一种方法来获取行中的10个NoGoodError_i信号并启动计数器。然后在计数器到期后重复使用计数器(Rollover)。

提问于
用户回答回答于

我会采用一组计数器,每个计数器都有一个“忙”位。如果该位置位,则计数器正在运行。

接下来,您使用模数10索引设置繁忙位。

如果你要开始的计数器仍然很忙,我会设立一个flag。

reg [DATA_BITS-1:0] counter [0:9];
reg [9:0] busy;
reg [3:0] cntr_to_start;

always @(posedge Clk_i or posedge Reset_i)
begin
   if (Reset_i)
   begin
      busy <= 10'b0;
      for (i=0; i=<10; i=i+1)
         counter[i] <= 'b0;
      cntr_to_start <= 'b0;
   end
   begin

      // Run a counter if it's busy flag is set
      // At max (rollover) stop and clear the busy flag
      for (i=0; i<10; i=i+1)
      begin
         if (busy[i])
         begin
            if (counter[i]==(33'b1<<DATA_BITS)-1)
            begin
               counter[i] <= 1'b0;
               busy[i] <= 1'b0;
            end
            else
                counter[i] <= counter[i] + 1;
         end
      end

      // If no good start the next counter
      // If we have no next counter: ????
      if (NoGoodError_i)
      begin
         if (busy[cntr_to_start])
            // Houston: we have a problem!
            // More errors then we have counters
         else
         begin
            busy[cntr_to_start] <= 1'b1;
            if (cntr_to_start==9)
               cntr_to_start <= 'b0;
            else
               cntr_to_start <= cntr_to_start + 1;            
         end
   end
end

所属标签

可能回答问题的人

  • 人生的旅途

    10 粉丝484 提问5 回答
  • 无聊至极

    4 粉丝504 提问5 回答
  • 嗨喽你好

    7 粉丝480 提问4 回答
  • 富有想象力的人

    4 粉丝0 提问4 回答

扫码关注云+社区

领取腾讯云代金券