栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【Verilog实战】占空比可调的整数奇偶分频器设计与功能验证(附源码)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Verilog实战】占空比可调的整数奇偶分频器设计与功能验证(附源码)


虚拟机:VMware -14.0.0.24051
环 境:ubuntu 18.04.1
脚 本:makefile(点击直达)
应用工具:vcs 和 verdi


文章目录
  • 一、Demand
  • 二、Timeing
  • 三、Design and Functional Verification
  • (1)RTL
  • (2)Test Bench
  • 四、Result
  • (1)8分频(50%,#(8,4))
  • (2)3分频(50%,#(3,3))


一、Demand

  模块可实现2—15倍任意数分频,分频后所得时钟占空比为可整数周期调整。
  偶分频以FDC = 8分频为例(FDC分频系数),采用时钟上升沿计数,则最大计数值为8(0~8,计数器需要4位,0代表目前没有时钟沿来临,8表达已经有8个时钟沿来临),可调的占空比为1/8x100%,2/8x100%…;
  奇分频采用双沿检测,以FDC = 3分频为例,则最大计数值为6,可调的占空比为1/6,2/6…。


二、Timeing


三、Design and Functional Verification (1)RTL
//-- modified by xlinxdu, 2022/04/26
module div
#(
  parameter FDC     = 10,
  parameter TOG_CNT = 5
)(
  input      clk    ,
  input      rst_n  ,
  output reg clk_div
);
  
reg [3:0] cnt;
reg [4:0] cnt_odd;

always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        cnt <= 4'b0;
    end
    else if((FDC%2 == 0) && (cnt < FDC))begin
        cnt <= cnt + 1'b1;
    end
    else if(FDC%2 == 0) begin
        cnt <= 4'b1;
    end
end

always @(*) begin
    if((FDC%2 == 0)  && (cnt <= TOG_CNT))begin
        clk_div = 1'b1;
    end
    else if((FDC%2 == 0) && (cnt > TOG_CNT))begin
        clk_div = 1'b0;
    end
end

always @(posedge clk or negedge clk or negedge rst_n)begin
    if(!rst_n)begin
        cnt_odd <= 5'b0;
    end
    else if((FDC%2 ) && (cnt_odd < 2*FDC))begin
        cnt_odd <= cnt_odd + 1'b1;
    end
    else if(FDC%2 ) begin
        cnt_odd <= 5'b1;
    end
end

always @(*) begin
    if((FDC%2) && (cnt_odd <= TOG_CNT))begin
        clk_div = 1'b1;
    end
    else if((FDC%2) && (cnt_odd > TOG_CNT))begin
        clk_div = 1'b0;
    end
end

endmodule
(2)Test Bench
//-- modified by xlinxdu, 2022/04/26
`timescale 1ns/1ns
module tb_div;
 
    reg clk;
    reg rst_n;
    wire clk_div;

initial begin
        clk   = 0;
        rst_n = 1;
 
        #10 rst_n = 0;
        #10 rst_n = 1;

end

always #100 clk = ~clk;

div #(8,4) tb_div (
                    .clk(clk), 
                    .rst_n(rst_n), 
                    .clk_div(clk_div)
                   );

initial begin
  $fsdbDumpfile("div.fsdb");
  $fsdbDumpvars              ;
  $fsdbDumpMDA               ;
  #10000 $finish             ;
end 
 
      
endmodule
四、Result

  下面的测试以8分频,50%占空比;3分频,50%占空比为例。通过测试用例传递参数改变分频系数和占空比。

(1)8分频(50%,#(8,4))

(2)3分频(50%,#(3,3))

  • 结果:测试波形与时序一样,数据通路正确,功能验证通过。

注意:注意奇分频时,占空比传递值的计算。


作者:xlinxdu
版权:本文是作者原创,版权归作者所有。
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/834865.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号