为什么要分频?由于FPGA的晶振频率都是固定值,只能产生固定频率的时序信号,但是实际工程中我们需要各种各样不同频率的信号,这时候就需要对晶振产生的频率进行分频。
可以通过计数的方式实现偶数分频。若实现N分频,当计数到N/2-1时将输出信号取反,然后将计数器重新置零即可。
verilog代码
module ace(
clk,
rst_n,
clk_out
);
input clk;
input rst_n;
output reg clk_out = 0;
parameter N = 6;
reg [3:0] cnt = 0;
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin //如果rst_n为0,复位,技数置0,输出置0
cnt <= 0;
clk_out <= 0;
end
else if(cnt == N/2 - 1) begin
cnt <= 0;
clk_out <= ~clk_out;
end
else begin
cnt <= cnt + 1;
end
end
endmodule
modelsim代码
initial
begin
clk = 0;
forever
#20clk = ~clk;
$display("Running testbench");
end
initial
begin
//rst_n = 0;
//#2000;
rst_n = 0;
#1000;
rst_n = 1;
#1000;
rst_n = 0;
#1000;
rst_n = 1;
#1000;
rst_n = 1;
#1000;
rst_n = 0;
#1000;
rst_n = 0;
#1000;
rst_n = 0;
#1000;
rst_n = 1;
#1000;
$stop;
end
Modelsim仿真结果