【问题标题】:Using switches to change frequency of square wave in Verilog在 Verilog 中使用开关改变方波的频率
【发布时间】:2014-03-05 14:19:33
【问题描述】:

我正在尝试使用我的basys2 板上的 8 个开关来控制方波的频率,但我的输入部分有问题,因为我不知道如何使用我收集了开关状态的寄存器的二进制值。

我知道我需要除以25000000/[input value] 才能得到计数器的正确值。我的问题是:

如何将25000000 除以其中存储有开关状态的寄存器,例如input [7:0] SW

【问题讨论】:

  • 一个简单的方法,虽然给出了不对称的输出,但它是一个计数器 - 一个带有比较和重新加载或清除的迭代加法器。

标签: verilog fpga frequency wave


【解决方案1】:

如果您可以假设您的输入始终是 2 的幂,则可以使用右移。但是如果你想要完整的 255 种可能的分辨率,你需要实现一个分隔符。

当您简单地编写 25000000/inputValue 时,一些合成工具只会合成一个除法器。对于其他一些人,您可能必须自己做。

或者,如果您不想浪费时间进行除法,您可以预先计算值并使用计数器:

case (inputValue)
  8'b0000_00010: counterMax = 25000000/2 ; //Where 25000000/2 can be calculated at compile time or by you
  8'b0000_00011: counterMax = 25000000/3 ; //Where 25000000/3 can be calculated at compile time or by you
... 
endcase

然后只数到counterMax:

always @(posedge clock)
begin
  counter <= counter + 1;
  if(counter == counterMax) begin
    out <= ~out;
    counter <= 0;
  end
end

【讨论】:

    【解决方案2】:

    您可以在每个时钟周期将计数器增加SW,而不是除以输入吗?那么如果 SW 是例如“15”,那么您的周期将减少 15 倍,但您可以避免昂贵的除法电路。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      相关资源
      最近更新 更多