精华内容
下载资源
问答
  • 分频电路Verilog设计

    千次阅读 2019-09-27 13:33:37
    2分频电路设计 `timescale 1ns/10ps module div_2(clk,rst,out); input clk,rst; output out; reg q; always@(posedge clk or negedge rst) if(!rst) q<=1'b0; else q<=~q; assign out=q...

    2分频电路设计

    `timescale 1ns/10ps
    module div_2(clk,rst,out);
    input clk,rst;
    output out;
    
    reg q;
    always@(posedge clk or negedge rst)
        if(!rst)
            q<=1'b0;
        else
            q<=~q;
    assign out=q;
    endmodule

    测试程序:

    module div_2_tb();
    reg clk,rst;
    wire out;
    div_2 wt (.clk(clk), .rst(rst), .out(out));
    
    initial
    begin
      rst <= 0;
      #20 rst <= 1;
      #100000 rst <= 0;
    end
    
    initial 
    begin
      clk = 0;
    end
    
    always
      begin
        #10 clk = ~clk;
      end
      
    endmodule
    

     

     

     

     

    展开全文
  • 给出了一种奇数分频电路设计方法,采用verilog HDL描述。修改代码中参数可以进行任意奇数分频,包含了设计文档和源代码。
  • Verilog hdl来实现d触发器2分频程序源码,有相关程序、原理图、仿真图,大家可做参考。
  • 分频电路verilog实现

    2021-04-21 16:57:38
    偶数2分频 由偶数二分频波形可知,每次在时钟的上升沿,寄存器的状态进行翻转,就能得到二分频后的时钟。 代码如下: module div2_clk ( input clk, input rst, output clk_div ); reg clk_div_r; assign clk_...

    偶数2分频

     由偶数二分频波形可知,每次在时钟的上升沿,输出寄存器的状态进行翻转,就能得到二分频后的时钟。
    

    2分频波形
    代码如下:

    module div2_clk
    (
    input       clk,
    input       rst,
    
    output      clk_div
        );
    
    reg                          clk_div_r;
    assign                       clk_div     =   clk_div_r;
    
    always@(posedge clk)
    begin
        if(rst)
            begin
                clk_div_r   <=  1'b0;
            end
        else
            begin
                clk_div_r   <=  ~clk_div_r   ;
            end
    end
    
    endmodule
    

    二分频电路如下:
    二分频电路

    偶数N分频

    方法:用模为N/2的计数器实现占空比为50%的偶数N分频时钟信号,计数器为N/2 - 1时,输出时钟寄存器状态翻转。

    代码如下(div_coe代表分频数):

    module even_div
    #(parameter div_coe =   2)
    (
    input       clk,
    input       rst,
    
    output      clk_div
        );
    
    localparam                   div_even    =    div_coe>>1;   
    reg                         clk_div_r;
    reg   [div_even-1:0]        cnt;
    assign                       clk_div     =   clk_div_r;
    
    always@(posedge clk)
    begin
        if(rst)
            begin
                clk_div_r   <=  1'b0;
                cnt         <=  0;
            end
        else if(cnt ==  div_even - 1)
            begin   
                clk_div_r   <=  ~clk_div_r;
                cnt         <=  0;
            end
        else
            begin
                cnt         <=  cnt + 1;
            end
    end
    
    endmodule
    

    测试代码如下:

    module tset_clk_div#(parameter div_coe = 6)( );
    
    reg     clk;
    reg     rst;
    wire    clk_div;
    
    initial
    begin
        clk = 0;
        rst = 0;
        #50
        rst = 1;
        #25
        rst = 0;
    end
    always #5 clk = ~clk;
    
     even_div
     #div_coe
     U0
    (
    .clk(clk),
    .rst(rst),
    
    .clk_div(clk_div)
       );   
    
    endmodule
    
    

    6分频仿真波形为:
    6分频仿真波形
    N分频电路如下:
    N分频电路

    奇数N分频,要求分频后时钟占空比为50%

    以3分频为例,在时钟clk的作用下,先产生占空比为1/3的时钟clk_div_r;然后时钟clk取反,得到时钟clk_n,在clk_n的作用下,产生占空比为1/3的时钟clk_div_r1;clk_div_r与clk_div_r1只差半个时钟周期,二者相或运算得到占空比为50%的三分频时钟。
    3分频波形

    总结产生时钟占空比为50%的奇数N分频时钟方法:
    1、在时钟clk的作用下,计数器cnt在(N-1)/2以及N-1状态时,时钟寄存器clk_div_r进行状态翻转,得到占空比为[(N-1)/2]/N的分频时钟;
    2、在取反后的时钟clk_n的作用下,计数器cnt1在(N-1)/2以及N-1状态时,时钟寄存器clk_div_r1进行状态翻转,得到占空比为[(N-1)/2]/N的分频时钟;
    3、clk_div_r与clk_div_r1相或,得到占空比为50%的奇数N分频时钟

    代码如下(div_coe代表分频数):

    module odd_div
    #(parameter div_coe =   3)
    (
    input       clk,
    input       rst,
    
    output      clk_div
        );
    
    localparam                   div_odd     =    (div_coe - 1)>>1;   
    reg                         clk_div_r;
    reg   [div_coe-1:0]         cnt;
    reg                         clk_div_r1;
    reg   [div_coe-1:0]         cnt1;
    wire                        clk_n;
    assign                       clk_n  =   ~clk;
    assign                       clk_div     =   clk_div_r || clk_div_r1;
    
    always@(posedge clk)
    begin
        if(rst)
            begin
                cnt         <=  0;
            end
        else if(cnt ==  div_coe - 1)
            begin
                cnt         <=  0;
            end
        else
            begin
                cnt         <=  cnt + 1;
            end  
    end
    
    always@(posedge clk_n)
    begin
        if(rst)
            begin
                cnt1         <=  0;
            end
        else if(cnt1 ==  div_coe - 1)
            begin
                cnt1         <=  0;
            end
        else
            begin
                cnt1         <=  cnt1 + 1;
            end  
    end
    
    always@(posedge clk)
    begin
        if(rst)
            begin
                clk_div_r   <=  1'b0;
            end
        else if(cnt ==  div_odd)
            begin
                clk_div_r   <=  ~clk_div_r;
            end
        else if(cnt == div_coe - 1)
            begin
                clk_div_r   <=  ~clk_div_r;
            end
    end
    
    always@(posedge clk_n)
    begin
        if(rst)
            begin
                clk_div_r1   <=  1'b0;
            end
        else if(cnt1 ==  div_odd)
            begin
                clk_div_r1   <=  ~clk_div_r1;
            end
            else if(cnt1 == div_coe - 1)
                begin
                    clk_div_r1   <=  ~clk_div_r1;
                end
    end
    
    endmodule
    

    需要注意的是:上述奇偶分频实现的时钟一般只用于应付面试。

    展开全文
  • verilog 实现2分频电路,资源利用少,执行效率高
  • 本文档主要解说:从计数器到分频电路Verilog HDL),包括积偶分频。
  • 2.5分频 verilog

    2013-11-23 00:03:39
    2.5分频 verilog ,保证正确,附上仿真激励文件!
  • Verilog分频电路设计

    2021-01-14 22:00:49
    Verilog分频电路设计 一. 一个数字系统中往往需要多种频率的时钟脉冲作为驱动源,这样就需要对FPGA的系统时钟(频率较高)进行分频。比如在进行流水灯、数码管动态扫描设计时不能直接使用系统时钟(太快而肉眼无法...

    Verilog之分频电路设计

    一.
    一个数字系统中往往需要多种频率的时钟脉冲作为驱动源,这样就需要对FPGA的系统时钟(频率较高)进行分频。比如在进行流水灯、数码管动态扫描设计时不能直接使用系统时钟(太快而肉眼无法识别),或者需要进行通信时,由于通信速度不能太高(由不同的标准限定),这样就需要对系统时钟分频以得到较低频率的时钟。
    分频器主要分为偶数分频、奇数分频,如果在设计过程中采用参数化设计,就可以随时改变参量以得到不同的分频需要。
    在对时钟要求不是很严格的FPGA系统中,分频通常都是通过计数器的循环计数来实现的。


    偶数分频(2N)

    偶数分频更为简单,很容易用模为N的计数器实现50%占空比的时钟信号,即每次计数满(计到N/2-1)时输出时钟信号翻转。

    奇数分频(2N+1)

    奇数分频的难点就在于对50%占空比的处理,其核心思想就在于要学会利用寄存器的不同捕获边沿进行分频操作。

    将得到的上升沿触发计数的奇数分频输出信号CLK1,和得到的下降沿触发计数的相同(时钟翻转值相同)奇数分频输出信号CLK2,最后将CLK1和CLK2相或之后输出,就可以得到占空比为50%的奇数分频器。

    假设奇数分频的值为2N+1,为了实现占空比为50%的奇数分频,需要用到一个计数器和2路分频信号,第1路根据计数器的值在上升沿分频,即分别在计数器走到N-1和2N时,进行时钟信号的反转;而第2路则根据计数器的值在下降沿分频,同样是在计数器走到N-1和2N时,进行时钟信号反转。因为,一个时钟的上升沿和下降沿之间的时间差正好是50%的时钟周期,所以将两路信号进行或逻辑运算,就可以实现50%占空比的奇数分频。
    在这里插入图片描述


    //奇数分频的verilog设计实例
    module Div_three(    
        input       clk,
        input       rst_n,
        output      div_three    //以三分频来设计
    );
    
    reg     [1:0]   cnt;    //分频计数器,因为是三分频,两位00,01,10,就能表示十进制的计数0,1,2
    reg             div_clk1; //上升沿分频
    reg             div_clk2;  //下降沿分频
    always @(posedge clk or negedge rst_n)begin
        if(rst_n == 1'b0)begin   //实现复位清零    
            cnt <= 0;     
        end
        else if(cnt == 2)   //如果计数满了,则清零,没满则进行自加1的操作,实现分频计数
            cnt <= 0;
        else begin
            cnt <= cnt + 1;
        end
    end
    
    //上升沿分频
    always @(posedge clk or negedge rst_n)begin
        if(rst_n == 1'b0)begin
            div_clk1 <= 0;
        end
        else if(cnt == 0)begin   //在cnt==0时对信号进行翻转
            div_clk1 <= ~div_clk1;
        end
        else 
            div_clk1 <= div_clk1;
    end
    
    //下降沿分频
    always @(negedge clk or negedge rst_n)begin
        if(rst_n == 1'b0)begin
            div_clk2 <= 0;
        end 
        else if(cnt == 2)begin   //在cnt==2时对信号进行翻转
            div_clk2 <= ~div_clk2;
        end
        else 
            div_clk2 <= div_clk2;
    end
    //两部分的上升下降沿相或,刚好是0到2,实现三分频
    assign  div_three = div_clk2 ^ div_clk1; //上升沿与下降沿分频信号,相或输出最终 50% 占空比时钟,用或逻辑来实现奇数分频的技术
    
    endmodule 
    
    展开全文
  • 分频电路-verilog

    千次阅读 2017-05-20 17:05:59
    1. 2分频module div_2(clk,rst,out); input clk,rst; output out;reg q; always@(posedge clk or negedge rst) if(!rst) q; else q~q; assign out=q; endmodule2. 偶数分频module div_8 (c

    1. 2分频

    module div_2(clk,rst,out);
    input clk,rst;
    output out;
    
    reg q;
    always@(posedge clk or negedge rst)
        if(!rst)
            q<=1'b0;
        else
            q<=~q;
    assign out=q;
    endmodule

    2. 偶数分频

    module div_8 (clk,rst,out);
    
    input clk,rst;
    output out;
    reg out;
    reg [2:0]cnt;
    
    always@(posedge clk or negedge rst)
        if(!rst)
            begin
                out<=1'b0;
                cnt<=3'b0;
            end
        else if(cnt==3'b3)    // 3=8/2-1
            begin
                cnt<=3'b0;
                out<=~out;
            end
        else
            cnt<=cnt+1'b1;
    endmodule

    3. 奇数分频

    module div_even (clk,rst,out);
    
    input clk,rst;
    output out;
    reg out1,out2;
    reg [2:0]cnt1;
    reg [2:0]cnt2;
    
    always@(posedge clk or negedge rst)
        if(!rst)
            begin
                out1<=1'b0;
                cnt1<=3'b0;
            end
        else if(cnt1==3'b2)  //(5-1)/2
                out1<=~out1;
        else if(cnt1==3'b4)  //5-1
            begin
                cnt1<=3'b0;
                out1<=~out1;
            end
        else
            cnt1<=cnt1+1'b1;
    always@(negedge clk or negedge rst)
        if(!rst)
            begin
                out2<=1'b0;
                cnt2<=3'b0;
            end
        else if(cnt2==3'b2)  //(5-1)/2
                out2<=~out2;
        else if(cnt2==3'b4)
            begin
                cnt2<=3'b0;
                out2<=~out2;
            end
        else
            cnt2<=cnt2+1'b1;
    assign out=out1|out2;
    
    endmodule

    4. PWM(频率,占空比可调)

    module pwm (clk,rst,f,p,out);
    
    input clk,rst;
    input [7:0] f,p;
    output out;
    reg out;
    reg [7:0]cnt;
    
    always@(posedge clk or negedge rst)
        if(!rst)
            begin
                cnt<=8'b0;
            end
        else if(cnt>=8'd200)//根据f增量大小,注意溢出
            begin
                cnt<=8'b0;
            end
        else
            cnt<=cnt+f;
    
    assgin out=(cnt>p)?1:0;
    
    endmodule
    展开全文
  • 分频verilog源代码

    2014-05-28 22:10:03
    分频源代码,可以确认过在quartus上直接使用,本人已经
  • 基于Verilog设计七分频等奇数分频程序,EDA课程作业和考试基本用到,可以学习Verilog其他的分频程序
  • 任意分频verilog 语言实现(占空比50%) 1. 偶数倍(2N)分频 2. 奇数倍(2N+1)分频 3. N-0.5 倍分频 4. 任意整数带小数分频
  •  任意分频电路,相信很多人都听说过这个专业名词,好多视频上都说不建议使用计数器产生的分频时钟。其实在FPGA领域当中,由寄存器分频产生的时钟还有一个学名叫做,行波时钟。是由时序逻辑产生比如A寄存器的...
  • Verilog设计(二):分频电路设计

    万次阅读 多人点赞 2019-06-04 10:55:02
    分频器是FPGA中常用的设计之一,在FPGA设计中担任重要的角色(时钟对于FPGA电路系统的重要性不言而喻!)。尽管大多数设计中会广泛采用厂家集成的锁相环PLL资源进行分频,倍频和相移(每个厂商Xilinx/Alter等其开发...
  • verilog实现N分频电路

    千次阅读 2019-09-24 10:30:30
    verilog实现N分频电路: module divn ( input clk, input rst_n, output o_clk ); parameter WIDTH = 3; parameter N = 6; reg [WIDTH-1:0] cnt_p; reg [WIDTH-1:0] cnt_n; reg clk_p; reg clk_n; assign o_clk = (N...
  • 虽然在实际工程中要产生分频时钟一般采用FPGA的时钟管理器来进行分频、倍频,通过设置一下IP核中的参数即可,这样做有很多别的方法(例如:直接用Verilog HDL设计分频电路)达不到的效果,产生时钟的质量也更好,...
  • 转载:用Verilog语言实现3分频电路

    千次阅读 2018-08-24 21:38:25
    转载:用Verilog语言实现3分频电路 转自:http://www.elecfans.com/dianzichangshi/200708215525.html 推荐:...
  • 实现3分频verilog程序

    2012-07-16 10:02:24
    本程序用verilog实现3分频电路,只需要修改其中分频数值,就可以实现任意奇数分频电路
  • 基于verilog的5分频电路设计
  • Verilog语言写五分频电路,占空比为50%:module div_5 ( clkin,rst,clkout ); input clkin,rst; output clkout; reg [2:0] step1, step2; always @(posedge clkin ) if(!rst) step1; else begin ...
  • 奇数、偶数分频非常常用,但是有些时候我们必须使用小数的分频,如何做到?该文章详细讲述了此方法。
  • verilog分频电路

    2020-07-20 13:47:12
    分频电路: module div2( input clk, input rst_n, output reg clk_o ); always@(posedge clk or negedge rst_n) begin if(rst_n) clk_o <= 1’b0; else clk_o <= ~clk; end endmodule 八分频电路: module ...
  • Verilog实现2分频实例

    2021-01-14 22:36:50
    1.1 Verilog实现2分频实例 1.1.1 本节目录 1)本节目录; 2)本节引言; 3)FPGA简介; 4)Verilog实现2分频实例; 5)结束语。 1.1.2 本节引言 “不积跬步,无以至千里;不积小流,无以成江海。就是说:不...
  • verilog--偶数分频

    千次阅读 2020-07-04 21:58:58
    偶数分频,M = 时钟输入频率/时钟输出频率,N = M/2 如输入时钟为50M,输出时钟为5M,则M=10,N=5。 因此只需将counter以clk为时钟驱动计数,当counter = (N-1)时,clk_out翻转进行了。 module fen( input clk...
  • 编写VerilogHDL程序,实现如下功能: 输入时钟信号和复位/信号,实现4分频/5分频,占空比为1:1.   二、设计思路 1.偶数分频 假设为N分频,计数到N/2-1时,时钟翻转、计数清零,如此循环就可以得到N(偶)分频   2....
  • Verilog代码实现1.5分频

    2020-11-21 23:34:23
    这里的N.5是N.5分频的意思。 首先一个计数器counter不能同时记同一个clk的上升沿和下降沿,所以得要两个counter,两个计数器分别记clk的上升沿,下降沿。 计数周期是多少?N.5分频,那么计数周期就是2N.5。 每一个...
  • 目录 1.偶数分频 2.奇数分频 3.半整数分频 ...Verilog:N为偶数,使用一个计数器循环0-(N-1)进行计数,在N/2-1与N-1分别将输出取反,即完成了N分频。 若果采用D触发器画出分频器,单个D触发器的反...
  • Verilog实现奇数分频

    千次阅读 2019-05-28 22:30:18
    奇数分频:注意的在于,上升沿触发和下降沿触发,然后分别输出两个时钟,相或就可以实现了,参考https://blog.csdn.net/qq_36147669/article/details/78888409 `timescale 1ns / 1ps //////////////////////////////...
  • Verilog奇数分频(个人总结)  奇数分频器跟偶数分频器一样,当计数器的值等于分频系数(加1或者减1)的一半或等于分频系数时,时钟信号翻转。奇数分频器分频原理如下图:  上图的分频系数是3,用一个计数器在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,860
精华内容 744
关键字:

分频电路verilog