0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

奇数分频如何得到呢? 解读奇数分频和逻辑分析仪(ILA)的使用

454398 来源:CSDN博主 作者:ChuanjieZhu 2020-12-28 15:49 次阅读

前言:

偶数分频容易得到:N倍偶数分频,可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。

奇数分频如何得到呢?

第一部分 奇数分频

奇数分频方法:

N倍奇数分频,首先进行上升沿触发进行模N计数,计数到(N-1)/2时输出时钟翻转,同时进行下降沿触发的模N计数,计数到(N-1)/2时输出时钟翻转时,进行输出时钟时钟翻转。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数N分频时钟。

或者使用“相与”,方法与上相同,只是翻转的数值变为(N-2)/2。

三分频的Verilog实现:
module Divider_Multiple(
input clk_i,
input rst_n_i,
output div2_o,
output div3_o
);

reg div2_o_r;
always@(posedge clk_i or negedge rst_n_i) //二分频
begin
if(!rst_n_i)
div2_o_r else
div2_o_r end
reg [1:0] pos_cnt;
reg [1:0] neg_cnt;
always@(posedge div2_o_r or negedge rst_n_i) //上升沿计数
begin
if(!rst_n_i)
pos_cnt else if(pos_cnt==2'd2)
pos_cnt else
pos_cnt end
always@(negedge div2_o_r or negedge rst_n_i) //下降沿计数
begin
if(!rst_n_i)
neg_cnt else if(neg_cnt==2'd2)
neg_cnt else
neg_cnt end
reg div3_o_r0;
reg div3_o_r1;
always@(posedge div2_o_r or negedge rst_n_i)
begin
if(!rst_n_i)
div3_o_r0 else if(pos_cnt div3_o_r0 else
div3_o_r0 end
always@(negedge div2_o_r or negedge rst_n_i)
begin
if(!rst_n_i)
div3_o_r1 else if(neg_cnt div3_o_r1 else
div3_o_r1 end
assign div2_o=div2_o_r;
assign div3_o=div3_o_r0 | div3_o_r1; //相或
endmodule

仿真

仿真文件:
module Divider_Multiple_tb;
// Inputs
reg clk_i;
reg rst_n_i;
// Outputs
wire div2_o;
wire div3_o;
// Instantiate the Unit Under Test (UUT)
Divider_Multiple uut (
.clk_i(clk_i),
.rst_n_i(rst_n_i),
.div2_o(div2_o),
.div3_o(div3_o)
);
initial
begin
// Initialize Inputs4
clk_i = 0;
rst_n_i = 0;
// Wait 100 ns for global reset to finish
#96;
rst_n_i=1;
end
always
begin
#5 clk_i=~clk_i;
end
endmodule

vivado仿真结果:

至此,第一部分结束。

第二部分 逻辑分析仪

增加逻辑分析仪:

首先为了配合手里的zc702板子,修改了一下输入时钟;为了观察分频信号,增加了一个2Hz的信号,将其连接在led上,可以看见led闪烁。

逻辑分析仪的使用分三步走:

1. 在设计文件中,在要抓取的信号定义前添加:
(*make_debug="true"*)

2. 导入ILA的IP核:

双击添加的IP,在General Options里设置探针数(信号组数)和采样深度(利用BRAM存储的),在Probe Ports里设置信号位宽:


OK之后,点击Generate。

在IP Source里双击模板,将例化模板复制到设计文件中,填好对应的待测信号:

3. 添加约束-->生成比特文件-->下载-->添加触发信号-->抓取。

为了阅读的连贯性,贴出修改后的代码:
module Divider_Multiple(
input clk_p,
input clk_n,
input rst_n_i,
output div2_o,
output div3_o,
output div2hz_o
);

IBUFGDS IBUFGDS_inst (
.O(clk_i), // Clock buffer output
.I(clk_p), // Diff_p clock buffer input (connect directly to top-level port)
.IB(clk_n) // Diff_n clock buffer input (connect directly to top-level port)
);
(*make_debug="true"*)wire div2_o;
(*make_debug="true"*)wire div3_o;
(*make_debug="true"*)wire div2hz_o;
reg div2_o_r;
always@(posedge clk_i or negedge rst_n_i) //二分频
begin
if(rst_n_i)
div2_o_r else
div2_o_r end

reg [1:0] pos_cnt;
reg [1:0] neg_cnt;

always@(posedge div2_o_r or negedge rst_n_i) //上升沿计数
begin
if(rst_n_i)
pos_cnt else if(pos_cnt==2'd2)
pos_cnt else
pos_cnt end

always@(negedge div2_o_r or negedge rst_n_i) //下降沿计数
begin
if(rst_n_i)
neg_cnt else if(neg_cnt==2'd2)
neg_cnt else
neg_cnt end

reg div3_o_r0;
reg div3_o_r1;

always@(posedge div2_o_r or negedge rst_n_i)
begin
if(rst_n_i)
div3_o_r0 else if(pos_cnt div3_o_r0 else
div3_o_r0 end
always@(negedge div2_o_r or negedge rst_n_i)
begin
if(rst_n_i)
div3_o_r1 else if(neg_cnt div3_o_r1 else
div3_o_r1 end

reg div2hz_o_r;
reg [25:0] div2hz_cnt;
always@(posedge clk_i or negedge rst_n_i)
begin
if(rst_n_i)
div2hz_cnt else if(div2hz_cnt div2hz_cnt else
div2hz_cnt end
always@(posedge clk_i or negedge rst_n_i)
begin
if(rst_n_i)
div2hz_o_r else if(div2hz_cnt==26'd24_999999 || div2hz_cnt==26'd49_999999)
div2hz_o_r else
div2hz_o_r end

assign div2_o=div2_o_r;
assign div3_o=div3_o_r0 | div3_o_r1; //相或
assign div2hz_o=div2hz_o_r;

ila_0 ila_0_0 ( //逻辑分析仪的例化
.clk(clk_i), // input wire clk
.probe0(div2hz_o), // input wire [0:0] probe0
.probe1({div2_o,div3_o}) // input wire [3:0] probe1
);

endmodule

约束文件如下:
set_property PACKAGE_PIN D18 [get_ports {clk_p}]
set_property IOSTANDARD LVDS_25 [get_ports {clk_p}]
set_property PACKAGE_PIN C19 [get_ports {clk_n}]
set_property IOSTANDARD LVDS_25 [get_ports {clk_n}]

set_property PACKAGE_PIN G19 [get_ports {rst_n_i}]
set_property IOSTANDARD LVCMOS18 [get_ports {rst_n_i}]
#GPIO PMOD1
set_property PACKAGE_PIN E15 [get_ports {div2_o}]
set_property IOSTANDARD LVCMOS18 [get_ports {div2_o}]
set_property PACKAGE_PIN D15 [get_ports {div3_o}]
set_property IOSTANDARD LVCMOS18 [get_ports {div3_o}]
set_property PACKAGE_PIN W17 [get_ports {div2hz_o}]
set_property IOSTANDARD LVCMOS18 [get_ports {div2hz_o}]

下载到fpga之后,逻辑分析仪的界面会自动打开,各个区域的功能如下,先添加触发信号,可以右键点击添加,也可以点击window-->debug probe将信号拖拽至“触发信号”区域:

总结:

信号运算得到新的信号。没有仿真就没有发言权。

编辑:hfy


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计数器
    +关注

    关注

    32

    文章

    2121

    浏览量

    92946
  • 逻辑分析仪
    +关注

    关注

    3

    文章

    200

    浏览量

    22909
  • BRAM
    +关注

    关注

    0

    文章

    39

    浏览量

    10885
  • 复位信号
    +关注

    关注

    0

    文章

    50

    浏览量

    6169
收藏 人收藏

    评论

    相关推荐

    基于VHDL和FPGA的多种分频的实现方法

      分频器是数字系统设计中的基本电路,根据不同设计的需要,我们会遇到偶数分频奇数分频、半整数分频等,有时要求等占空比,有时要求非等占空比。在同一个设计中有
    发表于 09-03 17:04 2453次阅读
    基于VHDL和FPGA的多种<b class='flag-5'>分频</b>的实现方法

    需要讲解一个占空比50%的奇数分频器的原理

    本帖最后由 haozix521 于 2013-10-4 20:42 编辑 想做一个占空比50%的奇数分频器,但是不是很了解这其中的意思。网上的资料都是这样讲的“对于实现占空比为50%的N倍奇数分频
    发表于 10-04 20:35

    利用Verilog实现奇数分频

    ),然后再进行二分频得到得到占空比为50%的奇数分频。下面讲讲进行小数分频的设计方法第三,小
    发表于 06-14 06:30

    如何利用Verilog实现奇数分频

    ),然后再进行二分频得到得到占空比为50%的奇数分频。下面讲讲进行小数分频的设计方法第三,小
    发表于 07-09 09:11

    基于Verilog的FPGA分频设计

    给出了一种基于FPGA的分频电路的设计方法.根据FPGA器件的特点和应用范围,提出了基于Verilog的分频方法.该方法时于在FPGA硬件平台上设计常用的任意偶数分频奇数分频、半整
    发表于 11-09 09:49 355次下载
    基于Verilog的FPGA<b class='flag-5'>分频</b>设计

    此通用电路可以实现任意奇数分频电路

    最近正在准备找工作,由于是做FPGA开发,所以verilog实现技术分频电路是一道经常出现的题目,三分频,五分频电路等等;经过一下午时间总结出了一个通用电路,可以实现任意奇数分频电路。
    发表于 02-09 14:21 2587次阅读

    分频器的作用是什么 半整数分频器原理图分析

    分频器主要分为偶数分频奇数分频、半整数分频和小数分频,如果在设计过程中采用参数化设计,就可以随时改变参量以
    发表于 02-01 01:28 1.6w次阅读
    <b class='flag-5'>分频</b>器的作用是什么 半整<b class='flag-5'>数分频</b>器原理图<b class='flag-5'>分析</b>

    基于复杂可编程逻辑器件和VHDL语言实现半整数分频器的设计

    在数字系统设计中,根据不同的设计需要,经常会遇到偶数分频奇数分频、半整数分频等,有的还要求等占空比。在基于cpld(复杂可编程逻辑器件)的数字系统设计中,很容易实现由计数器或其级联构
    发表于 06-26 09:36 850次阅读
    基于复杂可编程<b class='flag-5'>逻辑</b>器件和VHDL语言实现半整<b class='flag-5'>数分频</b>器的设计

    奇数分频器的介绍和实现

    因为偶数分频器过于简单,所以我们从奇数分频器开始说起8 01 奇数分频器     假设我们要实现一个2N+1分频分频器,就需要高电平占N+
    的头像 发表于 03-12 15:44 5701次阅读
    <b class='flag-5'>奇数分频</b>器的介绍和实现

    数分频器的设计

    所谓“分频”,就是把输入信号的频率变成成倍数地低于输入频率的输出信号。数字电路中的分频器主要是分为两种:整数分频和小数分频。其中整数分频又分
    的头像 发表于 03-23 15:06 1008次阅读
    偶<b class='flag-5'>数分频</b>器的设计

    奇数分频器的设计

    上一篇文章介绍了偶分频,今天来介绍一下奇数分频器的设计。
    的头像 发表于 03-23 15:06 729次阅读
    <b class='flag-5'>奇数分频</b>器的设计

    数分频器的设计

    前面分别介绍了偶数和奇数分频(即整数分频),接下来本文介绍小数分频
    的头像 发表于 03-23 15:08 714次阅读
    小<b class='flag-5'>数分频</b>器的设计

    数分频奇数分频、半整数分频和小数分频详解

    初学 Verilog 时许多模块都是通过计数与分频完成设计,例如 PWM 脉宽调制、频率计等。而分频逻辑往往通过计数逻辑完成。本节主要对偶数分频
    的头像 发表于 03-29 11:38 3313次阅读
    偶<b class='flag-5'>数分频</b>、<b class='flag-5'>奇数分频</b>、半整<b class='flag-5'>数分频</b>和小<b class='flag-5'>数分频</b>详解

    基于Verilog的分数分频电路设计

    上一篇文章时钟分频系列——偶数分频/奇数分频/分数分频,IC君介绍了各种分频器的设计原理,其中分数分频
    的头像 发表于 04-25 14:47 1137次阅读
    基于Verilog的分<b class='flag-5'>数分频</b>电路设计

    锁相环整数分频和小数分频的区别是什么?

    锁相环整数分频和小数分频的区别是什么? 锁相环(PLL)是一种常用的电子电路,用于将输入的时钟信号与参考信号进行同步,并生成输出信号的一种技术。在PLL中,分频器模块起到关键作用,可以实现整
    的头像 发表于 01-31 15:24 584次阅读