集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2900|回复: 3

FPGA设计技巧之计数器

[复制链接]
fpga_feixiang 发表于 2017-9-4 12:50:20 | 显示全部楼层 |阅读模式
1. 时钟分频

      在项目中经常会遇到需要时钟分频,除了使用PLL或DLL;有时所需的分频时钟较多,不适宜采用过多的PLL或DLL,此时采用计数器即为较好的解决方案。

      下面以50 MHz的时钟分频产生1KHz的脉冲以及1Hz的时钟信号为例来进行阐述。为避免产生时钟偏移(skew),在设计时钟分频时,须使用主时钟作为节拍。

          //////////////////////////////////////////////////////////

          /***************** 50000 = 500*100 **********************/

         always @(posedge  clk_50M) begin

                if(!rst_n||cnt100 == 7'd100)        cnt100 <= 7'd0;

                else                                            cnt100 <= cnt100 + 7'd1;

         end



         always @(posedge clk_50M) begin

                 if(!rst_n||cnt500 == 10'd500)      cnt500 <= 10'd0;

                else if(cnt100 == 7'd100)              cnt500 <= cnt500 + 10'd1;

                else                                             cnt500 <= cnt500;

         end



         always @(posedge clk_50M) begin

                 if(cnt500 == 10'd500)               clk_1K <= 1;

                 else                                         clk_1K <= 0;

         end

          //////////////////////////////////////////////////////////

         /************* 50000000 = 500*100*1000 ******************/

         always @(posedge clk_50M) begin

                 if(!rst_n||cnt1K == 10'd499)       cnt1K <= 10'd0;

                 else if(clk_1K)                             cnt1K <= cnt1K + 10'd1;

                 else                                           cnt1K <= cnt1K;

         end



         always @(posedge clk_50M) begin

                 if(!rst_n)                                            clk_1Hz <= 0;

                 else if(cnt1K == 10'd249 && clk_1K)     clk_1Hz <= ~ clk_1Hz;

                 else                                                    clk_1Hz <= clk_1Hz;

         end



2. 数据通路选择

     在某些系统设计中,经常需要选择数据通路,并确定该数据通路数据的有效性。以下以4位计数器为例简要介绍。

     reg    [3:0]           cnt;

     // 0000  0001  0010  0011  0100  0101  0110  0111 ……

      always @(posedge clk) begin

             if(!rst_n)          cnt <= 4’d1;

             else                  cnt <= cnt + 4’d1;

       end

2.1  数据通路模型

      如图1所示,为4通道数据通路模型。                                                                                                图1  数据通路模型

2.2    数据通路有效

2.2.1 数据通路历经2个时钟有效

        assign  datadv = cnt[0];

        assign  datapath = cnt[2:1];

        仿真如图2所示。



                                                                                               图2  数据通路历经2个时钟周期仿真图

2.2.2  数据通路历经4个时钟有效

         assign  datadv = cnt[1]&cnt[0];

         assign  datapath = cnt[3:2];

         仿真如图3所示。



                                                                                              图3  数据通路历经4个时钟周期仿真图

标签: FPGA, 计数器, 分频, 数据通路
4798345 发表于 2017-9-6 10:49:22 | 显示全部楼层
感谢楼主辛勤分享         
mcza30 发表于 2017-9-6 15:37:55 | 显示全部楼层
谢谢楼主分享
图片没有显示
zhangyukun 发表于 2018-1-27 09:05:43 | 显示全部楼层
FPGA设计技巧之计数器
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-23 15:10 , Processed in 0.058796 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表