用verilog实现简单的分频,请高手出招。
计数器分频然后做下选择就行
。这仔细想想怎么都能写得了的吧
写一个十分频,再写一个百分频,十分频可以复用,可以写成函数或子模块,然后将输出的信号作为一个四选一的输入端就OK啦
module fre_div
(
input i_clk,
input i_rst, // active high
input [1:0] i_fre_sel, // 0 for 1hz, 1 for 10hz, others for 1khz
output o_clk
);
wire [13:0] endpoint;
assign endpoint = (i_fre_sel == 0) ? 4999 :
(i_fre_sel == 1) ? 499 : 4;
reg [13:0] count;
reg o_clk_tmp;
always @ (posedge i_clk) begin
if (i_rst) begin
count <= 0;
o_clk_tmp <= 0;
end else begin
if (count == endpoint) begin
count <= 0;
o_clk_tmp <= !o_clk_tmp;
end else begin
count <= count + 1'b1;
end
end
end
assign o_clk = o_clk_tmp;
endmodule
粗略写的 没有验证
这种分频问题稍微想想就知道了
这题,有点太单一了。
5楼的做法比较好,比多个除频然后mux好。
如果能再把sel处理一下就更好了。不然换频率的时候会有不预期的频率跑出来。
