微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 用verilog实现简单的分频,请高手出招。

用verilog实现简单的分频,请高手出招。

时间:10-02 整理:3721RD 点击:
利用外界一个10khz的输入,要分频成1hz,10hz,1khz,通过外部的2个频率选择信号sele—freq 【1:0】来选择选用那个频率输出。请给出详细的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处理一下就更好了。不然换频率的时候会有不预期的频率跑出来。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top