我是靠谱客的博主 等待钢笔,最近开发中收集的这篇文章主要介绍Verilog实现奇数分频,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

奇数分频:注意的在于,上升沿触发和下降沿触发,然后分别输出两个时钟,相或就可以实现了,参考https://blog.csdn.net/qq_36147669/article/details/78888409

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2019/05/28 14:25:57
// Design Name: 
// Module Name: odd
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module odd(
    input   sclk,
    input   rst_n,
    output  reg clk_out1,
    output  reg clk_out2,
    output  clk_out
    );
    
    parameter COUNT = 5;
    reg [3:0] cnt_1;
    reg [3:0] cnt_2;
    
    always @ (negedge sclk or negedge rst_n)
        if(!rst_n) begin
            clk_out1 <= 1'b0;
            cnt_1 <= 1'b0;
        end
        else begin
             if(clk_out1 == 1'b0) begin  
                if(cnt_1 == COUNT/2 )  begin  
                  clk_out1 <= ~clk_out1; 
                  cnt_1 <= 1'b0;
                end
                else
                  cnt_1 <= cnt_1 + 1;                                
             end 
            else if(clk_out1 == 1'b1) begin
                if(cnt_1 == COUNT/2 - 1) begin
                  clk_out1 <= ~clk_out1;
                  cnt_1 <= 1'b0;
                end
                else 
                    cnt_1 <= cnt_1 + 1;
                end
        end
        
    always @ (posedge sclk or negedge rst_n)
    if(!rst_n) begin
        clk_out2 <= 1'b0;
        cnt_2 <= 1'b0;
    end
    else begin
         if(clk_out2 == 1'b0) begin  
            if(cnt_2 == COUNT/2)  begin  
              clk_out2 <= ~clk_out2; 
              cnt_2 <= 1'b0;
            end
            else
              cnt_2 <= cnt_2 + 1;                                
         end 
        else if(clk_out2 == 1'b1) begin
            if(cnt_2 == COUNT/2 - 1) begin
              clk_out2 <= ~clk_out2;
              cnt_2 <= 1'b0;
            end
            else 
                cnt_2 <= cnt_2 + 1;
            end
    end
            
    assign clk_out = clk_out1 | clk_out2;       
endmodule

在这里插入图片描述
实现的是5分频

最后

以上就是等待钢笔为你收集整理的Verilog实现奇数分频的全部内容,希望文章能够帮你解决Verilog实现奇数分频所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部