fpga_feixiang 发表于 2017-9-4 12:50:20

FPGA设计技巧之计数器

1. 时钟分频

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

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

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

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

         always @(posedgeclk_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             cnt;

   // 00000001001000110100010101100111 ……

      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个时钟有效

      assigndatadv = cnt;

      assigndatapath = cnt;

      仿真如图2所示。



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

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

         assigndatadv = cnt&cnt;

         assigndatapath = cnt;

         仿真如图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]
查看完整版本: FPGA设计技巧之计数器