之前遇到时钟需要分频的时候,直接用计数器和源时钟产生,然后把这个分频时钟的上升沿作为敏感事件去写了,今天看了特权同学的书,也自己在网上看了看,这样做是不好的,降低了系统的可靠性,在实际工程中我们应该避免这中写法。采用时钟使能的方式,这样整个工程都是单一时钟电路,也利于分析维护。
建议的写法如下:
module pro(
input clk,
input rst_n
);
reg[2:0] count;
wire clk_en;
reg a;
reg b;
always @ (posedge clk or negedge rst_n) begin
if(!rst_n)
count <= 'd0;
else if(count > 3'd5)
count <= 'd0;
else
count <= count + 1'b1;
end
assign clk_en = (count == 3'd5);//只拉高一个时钟周期
always @ (posedge clk or negedge rst_n) begin
if(!rst_n) begin
a <= 1'b0;
b <= 1'b0;
end
else if(clk_en) begin //分频时钟作使能信号使用
a <= ~b;
b <= ~a;
end
end
endmodule