我正在尝试使用我basys2
板上的8个开关来控制方波的频率,但是我输入它的部分时遇到了问题,因为我不知道如何划分它时钟使用寄存器的二进制值,我已经收集了开关的状态。
我知道我需要划分25000000/[input value]
才能获得正确的计数器值。我的问题是:
如何将25000000
除以存储在其中的开关状态的寄存器,如input [7:0] SW
?
答案 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倍,但你避免了昂贵的分频电路。