使用开关在Verilog中改变方波的频率

时间:2014-02-08 00:20:34

标签: verilog fpga frequency wave

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

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

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

2 个答案:

答案 0 :(得分:0)

如果你可以假设你的输入总是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

答案 1 :(得分:0)

您可以在每个时钟周期增加计数器SW,而不是按输入分频吗?然后,如果SW是例如'15',那么你的周期减少了15倍,但你避免了昂贵的分频电路。