Verilog 分频器设计--clk触发和使能信号触发

在数字电路中,使用 Verilog 生成不同频率的时钟和占空比是较为常见的一种设计,主要分为偶数分频,奇数分频,也可以任意进行分频和占空比的配置;(以下皆为占空比50%)

这次我分享的是由clk触发分频信号 和 由使能信号触发分频信号的两种方法

1.100MHz分出50Hz的verilog代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/03/03 15:25:26
// Design Name: 
// Module Name: test
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//
module tese_all(
     input            clk,
     input            rst,
     output  reg      cnt
    );

reg[27:0] tmp;
always @ (posedge clk or negedge rst)
begin
     if(!rst)begin
            tmp <= 0;
            cnt <= 0;
        end
     else  if(tmp == 28'd499999)
        begin
            tmp <= 28'd0;
            cnt <= ~cnt;
        end
     else
        tmp <= tmp + 1'b1;
end

endmodule

仿真测试图像如下可见:

2.由PPS触发的分频信号verilog代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/03/03 15:25:26
// Design Name: 
// Module Name: tese_all
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module tese_all(
     input            clk,
     input            rst,
     input            i_gps_pps,
     output           Yfreq,
     output           Nfreq1,
     output           Nfreq2
    );

 /Trigger generation/
reg         pps_flag;
reg[15:0]   time_cnt;
reg         led_reg;
reg         i_gps_pps_1;
reg         gps_pps_flag;
 

 always@(posedge clk or negedge rst)
begin
    if(!rst)
             i_gps_pps_1 <= 0;
    else if(i_gps_pps)begin
             i_gps_pps_1   <= i_gps_pps;
           end
    else
             i_gps_pps_1 <= 0;
end

 always@(posedge clk or negedge rst)
begin
    if(!rst)
             pps_flag <= 0;
    else if (!i_gps_pps_1 && i_gps_pps)
             pps_flag <= 1;    
    else
             pps_flag <= 0;
end
always@(posedge clk or negedge rst)
begin
    if(!rst)
             gps_pps_flag <= 0;
    else if (!i_gps_pps_1 && i_gps_pps)
             gps_pps_flag <= 1;    
    else
             gps_pps_flag <= gps_pps_flag;
end

/*------ Trigger generation-----------------*/

always @ (posedge clk or negedge rst)
    begin
        if(!rst)
             time_cnt<=0;
        else if (gps_pps_flag)begin
                if (pps_flag == 'b0)
                   begin
                  if (time_cnt =='d5000)
                       time_cnt<=0;
                  else
                       time_cnt<=time_cnt+1'b1;
                    end
                 else if (pps_flag == 'b1)
                       time_cnt<=0;
               end
         
    end

always @ (posedge clk or negedge rst)
    begin
        if(!rst)
            led_reg<=0;
        else if(time_cnt=='d5000)
               led_reg<=~led_reg;
        else
            led_reg<=led_reg;
    end
assign  Yfreq  =  led_reg;

endmodule

仿真测试图像如下所示:

注意!!!每天一个小知识: 1PPS:秒脉冲;英文全称:Pulse Per Second ;PPS(one pulse per second)信号是GPS北斗时钟服务器向用户提供的时间基准信号,一秒钟一个脉冲。1PPS信号的主要指标包括上升沿宽度、下降沿宽度、脉冲宽度、脉冲幅度。时钟模块上的GPS接收机负责接收GPS天线传输的射频信号,然后进行变频解调等信号处理,向基站提供1pps信号,进行同步。 GPS使用原子钟(原子钟,是一种计时装置,精度可以达到每2000万年才误差1秒)

这次的分享到这里over了,备忘录+1,希望看到这篇的朋友们少吃盐多运动多吃芹菜哈哈哈哈哈哈哈!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值