1.二分频

首先要明白,二分频分的是输入时钟的频率,即CLK的频率。

思路:在每次CLK的上升沿或者下降沿让输出Q翻转不就完成频率的二分了吗?

代码:

module div_2 (q,clk,reset); //   输出q,输入时钟CLK,同步复位信号RESET.
    output q;
    input reset;
    input clk;
    reg q;
    always @ (posedge clk or posedge reset)
    if (reset)
      q<=1'b0; // 复位置零
      else
      q<=~q; // 否则q信号翻转
endmodule

测试代码:

module test;
    reg clk;
    reg reset;
    div_2 d2 (q,clk,reset);// 调用我们设计的功能模块div_2
    always #20 clk=~clk;// 产生周期为40个时间单位的时钟脉冲信号

// initial块只执行一次,此处让CLK的起始电平为低,RESET为高
    initial    
    begin
        clk=1'b0;
        reset=1'b1;
        #24 reset =1'b0;
    end
endmodule

下面我们来看一下MODELSIM的仿真波形,是不是输出Q的频率变成CLK的一半了呢?

2.三分频

此处给的不是50%占空比的三分频,稍后给出。

思路:设置一个计数器,让计数器计数到适当的值得时候输出q翻转就行了。

代码:

module div_3 (q,clk,reset);
    output q;
    input reset;
    input clk;
    reg q;
    reg [1:0] count;   // 设了一个2位的计数器可以从00计数到11;
    always @ (posedge clk or posedge reset)   // 同步复位,上升沿有效
    if (reset)                           // 复位
    begin
      q<=1'b0;
      count<=2'b00;
end
      else if(count==0)                // 第一个CLK上升沿来的时候q翻转一次计数器加一;
        begin
         q<=~q;
         count<=count+1'b1;
        end
        else if(count==2)              //第3个CLK上升沿来的时候输出q翻转一次计数器归零;
        begin
            q=~q;
            count<=2'b00;
        end
        else                                 //   第二个CLK上升沿来的时候q不动作,计数器加一。   
        begin
        count<=count+1'b1;
        end
      endmodule

测试代码:

// 和以上2分频的一样的测试代码,就是调用功能模块的名字不同,这很好理解,就是你给的任意的CLK的

//频率我都可以三分频才对的

module test;
    reg clk;
    reg reset;
    div_3 d3 (q,clk,reset);
    always #20 clk=~clk;
    initial
    begin
        clk=1'b0;
        reset=1'b1;
        #24 reset =1'b0;
    end
endmodule

看一下波形,是不是原来的三个周期变成一个周期啦??也就是频率三分了

3.三分频    (占空比1/2)

思路:

占空比为50%的三分频稍微麻烦一些,其实就是两个占空比都为1/3的q1和q2相或得到占空比为50%的三分频输出q,只是这两个q1和q2分别是在时钟的上升沿和下降沿翻转而已。

代码:

module div_3 (q,clk,reset);
    output q;
    input reset;
    input clk;
    
    reg q1,q2;                // 内部寄存器变量,分别是两个占空比为1/3的分频;
    reg [1:0] count1,count2;
    assign q=q1|q2;     //   两个相或才是我们要得到的输出q
    always @ (posedge clk or posedge reset) //上升沿生成的三分频q1;
    if (reset)
    begin
      q1<=1'b0;
      count1<=2'b00;
end
      else if(count1==0)
        begin
         q1<=~q1;
         count1<=count1+1'b1;
        end
        else if(count1==1)
        begin
            q1=~q1;
           count1<=count1+1'b1;
        end
            else 
            begin
                count1<=2'b00;
            end
       
       
        always @ (negedge clk or posedge reset)     //下降沿生成的三分频信号q2, 该代码原

//                    理和q1产生原理一致
    if (reset)
    begin
      q2<=1'b0;
      count2<=2'b00;
end
      else if(count2==0)
        begin
         q2<=~q2;
         count2<=count2+1'b1;
        end
        else if(count2==1'b1)
        begin
            q2=~q2;
            count2<=count2+1'b1;
        end
            else 
            begin
                count2<=2'b00;
            end
      
      endmodule

测试代码:

module test; // 与以上各测试代码一致
    reg clk;
    reg reset;
    div_3 d3 (q,clk,reset);
    always #20 clk=~clk;
    initial
    begin
        clk=1'b0;
        reset=1'b1;
        #24 reset =1'b0;
    end
endmodule

我们来看一下q的波形,是不是占空比为50%的三分频输出呢?

好了,知道了这两个分频,我想你应该可以推理出其它的奇偶分频代码了,当然,大于2的偶分频代码需要有一个count来计数,在适当的时候翻转就行,其实分频代码从某种程度上来说就是计数器的适当输出而已。

clk_sys为输入时钟,rst为复位信号,clk_out为输出分频时钟,div_num为分频数目。多少分频就把div_num赋多少值。
module clk_div(clk_sys, rst, clk_out,div_num);  
input clk_sys;
input rst;  
input [4:0] div_num;  
output clk_out;  
reg clk_out; 
reg [3:0] baud_count;  
always @(posedge clk_sys) begin  
if (rst) begin  
baud_count<=0; clk_out<=0;  
end  
else begin  
if (baud_count==(div_num/2)-1) begin  
baud_count<=0; clk_out<=~clk_out;  
end  
else begin  
baud_count<=baud_count+1; clk_uart<= clk_out;  
end  
end endendmodule

verilog二分频代码verilog三分频代码相关推荐

  1. 数字IC秋招手撕代码(二)50%占空比的三分频

    数字IC秋招手撕代码(二)50%占空比的三分频 题目 设计思路 与逻辑分频 代码 或逻辑分频 代码 异或逻辑分频 代码 题目 用verilog实现三分频电路,要求输出50%占空比 设计思路 如果不限制 ...

  2. python代码重构技巧_Python代码重构

    代码重构是一件很是辛苦却很是有意义的事情,代码重构的缘由在于:django 一.代码过于冗余.沉余架构 二.代码过于耦合函数 三.代码过于复杂学习 四.接口调用超出三层优化 此次重构主要在于架构问题, ...

  3. 【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真(三分频,五分频,奇数分频及特殊占空比)

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  4. verilog奇数分频,三分频实例

    verilog奇数分频,三分频实例 目的:输入一个时钟信号,输出占空比为50%的三分频. 首先得到一个占空比为1/3的分频时钟,然后将输入信号取反,得到一个移相180度的占空比为1/3的分频时钟,将两 ...

  5. (86)Verilog HDL:三分频设计

    (86)Verilog HDL:三分频设计 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL:三分频设计 5)结语 1.2 FPGA简介 FPGA( ...

  6. verilog实现奇数分频--以三分频为例

    工程文件 module aa( input rst_n,input clk,output clko); reg [1:0] cnt;reg clk1,clk2;always@(posedge clk ...

  7. verilog写的三分频

    笔试的时候有一道题目要求设计三分频电路,晕,想了半天想不出来,回到宿舍里才动手写了出来,如下: 其实3分频电路有很多种方法,这里选用其中一种:先求出两个占空比为1/3的频率波形,注意分别为上升沿触发和 ...

  8. IC面试常考题 Verilog三分频电路设计(占空比50%,三分之一,三分之二)

    实现三分频电路最简单的是: 利用计数器实现. 时序图分析(本人比较懒,平常科研忙,所以直接手画时序图了,懒得用软件画了): 直接上图分析:利用计数器每隔三个周期信号翻转一次,同时在不同的计数下翻转得到 ...

  9. 题目:用Verilog实现三分频电路,要求输出50%占空比。

    题目:用Verilog实现三分频电路,要求输出50%占空比. module Div_three(input clk,input rst_n,output div_three ); reg [1:0] ...

最新文章

  1. Java动态追踪技术探究
  2. SAP Spartacus 4.0 deprecation 之一 - i18next-xhr-backend
  3. bbs php redis,LAMP+redis搭建discuz论坛
  4. python string模块template_Python标准库笔记(1) — string模块
  5. java 分布式同步_Java Web分布式集群搭建(三)——Session同步
  6. leecode-3无重复字符串的最长子字符串C版-滑动窗口
  7. coursera 视频总是缓冲或者无法观看,有什么方法解决?
  8. 从代码到300优质客户,用户画像在销售的实战应用
  9. TwinCAT 3 file记录日志txt文件程序
  10. 学习笔记:弱监督学习-valse青年会议
  11. After Effect CC 2019插件
  12. 浅谈中国古代服饰纹样中礼制精神的体现
  13. Numpy一维array转置
  14. 蓝牙通信工作流程讲解
  15. 交换机 tagged 与 untagged 的关系
  16. Linux系统访问Windows(本机)的Navicat数据库
  17. spring boot微服务项目搭建
  18. 数据结构实验——顺序表操作
  19. 11 java 王少飞-Java语言的主要特性分析
  20. 用HOSTS文件屏蔽网站

热门文章

  1. A律十三折线法G711编解码介绍
  2. Spectral matting
  3. TOP 1比不加TOP慢的疑惑
  4. 看我使用Python秒变高级程序员
  5. Android底层和中间层共同学习系列之android键盘映射
  6. 巧用天翼云盘备份云主机数据
  7. 项目管理/互联网/软件全套文档、产品文档、技术文档、测试文档、运维文档、项目文档
  8. 拆解了20个企业微信社群的我, 发现【社群营销】最好的方法应该是这样!
  9. 数字手写识别——Java实现KNN算法
  10. 图像去燥:NLM、BM3D