您的位置 首页 主动

【从零开始走进FPGA】对立统一——异步时钟同步化

一、什么是对立统一什么是CEO,就是首席执行官,是在一个企业中负责日常经营管理的最高级管理人员,又称作行政总裁,或最高执行长或大班。那么,在FPGA系统,需不需要一个最高级别的执行

  一、什么是敌对统一

  什么是CEO,便是首席执行官,是在一个企业中担任日常经营办理的第一流办理人员,又称作行政总裁,或最高执行长或大班。

  那么,在FPGA体系,需不需求一个第一流其他执行官,来办理全部进程呢?为了体系的有序性,不至于杂乱、溃散,答案必定是必定的。

  谁都知道,FPGA内部时序逻辑的作业,是通过时钟的合作来完成使命的。那么当体系中有异步时钟的时分,怎么办?每一个体系有必要有一个第一流其他时钟,执行力最强;一起它担任着办理异步时钟的使命,其它异步时钟想让手下执行使命,有必要告知执行官,然后执行官去分配使命。所以,全部举动,都有必要通过首席执行官的答应,才干进行;否则,没门。首席执行官具有最高支配权。它们之间的联系如下图所示:

wps_clip_image-29006

  因而,关于工程中呈现的异步时钟,与最高时钟是敌对联系,但这个CEO的位置决议了只要他说了算,否则就会“暴乱”,因而要把那些异步时钟统一办理,这便是所谓的“敌对统一”。

  二、异步时钟同步化

  1. 异步时钟品种

  异步时钟有很品种,如下是几种项目中常常呈现的状况

  (1)体系异步复位信号

  (2)由其它处理器输入的时钟

  (3)内部组合逻辑发生的时钟

  当然也并非全部异步时钟都要同步化,有必要高速ADC,DAC芯片往往有个时钟输入端,这时确保该芯片与该部分逻辑电路同步,能够专门供应一个晶振,来到达更好的作用;一起也不是最高时钟以外的时钟都要同步化,由PLL发生的不同的时钟,自身便是同步的,能够不处理。

  当然在牢靠性要求不高的时分,异步复位这些信号也能够不处理,仅仅,养成杰出的习气,永久不会错。

  2. 异步时钟解决方案

  关于时钟的同步,选用的办法都差不多。Bingo在特权的《浅显易懂玩转FPGA》中得到启示,相应的简略的描绘一下几种关于异步复位信号的同步化。

  (1)异步复位信号的同步化

  此部分其实很简略,使用了上述边缘检测的部分思想,用最高时钟打慢几拍,便完成了与最高时钟的同步。此处不再用Block来负担的描绘,verilog规划代码如下所示:

  /*****************************************************

  * Module Name : synchronism_design.v

  * Engineer : Crazy Bingo

  * Target Device : EP2C8Q208C8

  * Tool versions : Quartus II 11.0

  * Create Date : 2011-6-25

  * Revision : v1.0

  * Description :

  *****************************************************/

  module synchronism_design

  (

  input clk,

  input rst_n,

  output sys_rst_n

  );

  //——————————————

  //rst_n synchronism, is controlled by the input clk

  reg rst_nr1, rst_nr2;

  always @(posedge clk or negedge rst_n)

  begin

  if(!rst_n)

  begin

  rst_nr1 <= 1'b0;

  rst_nr2 <= 1'b0;

  end

  else

  begin

  rst_nr1 <= 1'b1;

  rst_nr2 <= rst_nr1;

  end

  end

  assign sys_rst_n = rst_nr2; //active low

  endmodule

  Quartus II RTL图如下:

wps_clip_image-27334

  (2)PLL协作时异步复位信号同步化

  相关于上述异步复位信号同步化办法的扩展,剖析存在PLL环状况下的对信号的处理。如下verilog代码所示,先用晶振输入时钟对异步复位信号进行同步化,最终通过与PLL输出信号locked与前面发生的同步复位信号与操作,得到最终的体系复位信号。

  详细Verilog代码如下所示:

  /*****************************************************

  * Module Name : synchronism_pll_design.v

  * Engineer : Crazy Bingo

  * Target Device : EP2C8Q208C8

  * Tool versions : Quartus II 11.0

  * Create Date : 2011-6-25

  * Revision : v1.0

  * Description :

  *****************************************************/

  module synchronism_pll_design

  (

  input clk, //50MHz

  input rst_n, //global reset

  output sys_rst_n, //system reset

  output clk_c0 //50MHz

  );

  //———————————————-

  //rst_n synchronism, is controlled by the input clk

  wire pll_rst;

  reg rst_nr1,rst_nr2;

  always @(posedge clk or negedge rst_n)

  begin

  if(!rst_n)

  begin

  rst_nr1 <= 1'b0;

  rst_nr2 <= 1'b0;

  end

  else

  begin

  rst_nr1 <= 1'b1;

  rst_nr2 <= rst_nr1;

  end

  end

  assign pll_rst = ~rst_nr2; //active High

  //———————————————-

  //sys_rst_n synchronism, is control by the highest output clk

  wire locked;

  wire sysrst_nr0 = rst_nr2 & locked;

  reg sysrst_nr1, sysrst_nr2;

  always @(posedge clk_c0 or negedge sysrst_nr0)

  begin

  if(!sysrst_nr0)

  begin

  sysrst_nr1 <= 1'b0;

  sysrst_nr2 <= 1'b0;

  end

  else

  begin

  sysrst_nr1 <= 1'b1;

  sysrst_nr2 <= sysrst_nr1;

  end

  end

  assign sys_rst_n = sysrst_nr2; //active Low

  //———————————————-

  //Component instantiation

  pll pll

  (

  .areset (pll_rst),

  .inclk0 (clk),

  .c0 (clk_c0),

  .locked (locked)

  );

  endmodule

  Quartus II RTL图如下所示:

wps_clip_image-13125

  (3)外输入异步信号同步化

  当外面输入异步时钟或许异步信号的时钟,一概转换为使能时钟。此办法与前一张接关于边缘检测的叙述相同,此处不做负担解说。

  (4)体系同步信号最优化规划方案

  当FPGA刚上电的时刻短时刻内,全部逻辑块上电,多多少少需求必定的时刻(虽然十分时刻短)。在一般时序要求不高的项目中,好像能够忽略不计。但关所以需求求十分严厉的操作,这几十ns或许ms上电时,FPGA内部是适当不安稳的。因而,在同步异步信号的一起,先将整个体系作业延时必定时刻,将会在必定程度上得到更安稳的运转成果。一起,处理后FPGA内部真实开端作业真实体系上电安稳后进行的,因而相应逻辑时序等,更安稳精确。

  以下是Bingo在实践项目中遇到的问题的解决方案。通过对体系进行100ms延时的处理后,原本简单犯错的体系,在没呈现过反常。

  详细verilog代码如下所示:

  /***************************************************

  * Module Name : synchronism_pll_delay_design.v

  * Engineer : Crazy Bingo

  * Target Device : EP2C8Q208C8

  * Tool versions : Quartus II 11.0

  * Create Date : 2011-6-25

  * Revision : v1.0

  * Description :

  ****************************************************/

  module synchronism_pll_delay_design

  (

  input clk, //50MHz

  input rst_n, //global reset

  output sys_rst_n, //system reset

  output clk_c0 //50MHz

  );

  //———————————————-

  //rst_n synchronism, is controlled by the input clk

  reg rst_nr1,rst_nr2;

  always @(posedge clk or negedge rst_n)

  begin

  if(!rst_n)

  begin

  rst_nr1 <= 1'b0;

  rst_nr2 <= 1'b0;

  end

  else

  begin

  rst_nr1 <= 1'b1;

  rst_nr2 <= rst_nr1;

  end

  end

  //———————————-

  //component instantiation for system_delay

  wire delay_ok;

  system_delay system_delay_inst

  (

  .clk (clk),

  .delay_ok (delay_ok)

  );

  wire pll_rst = ~rst_nr2 & ~delay_ok; //active High

  //———————————————-

  //Component instantiation

  pll pll

  (

  .areset (pll_rst),

  .inclk0 (clk),

  .c0 (clk_c0),

  .locked (locked)

  );

  //———————————————-

  //sys_rst_n synchronism, is control by the highest output clk

  wire locked;

  wire sysrst_nr0 = rst_nr2 & locked & delay_ok;

  reg sysrst_nr1, sysrst_nr2;

  always @(posedge clk_c0 or negedge sysrst_nr0)

  begin

  if(!sysrst_nr0)

  begin

  sysrst_nr1 <= 1'b0;

  sysrst_nr2 <= 1'b0;

  end

  else

  begin

  sysrst_nr1 <= 1'b1;

  sysrst_nr2 <= sysrst_nr1;

  end

  end

  assign sys_rst_n = sysrst_nr2; //active Low

  endmodule

  //################################################//

  //################################################//

  module system_delay

  (

  input clk, //50MHz

  output delay_ok

  );

  //——————————————

  // Delay 100ms for steady state

  reg [22:0] cnt;

  always@(posedge clk)

  begin

  if(cnt < 23'd50_00000) //100ms

  cnt <= cnt + 1'b1;

  else

  cnt <= cnt;

  end

  //——————————————

  //sys_rst_n synchronism

  assign delay_ok = (cnt == 23'd50_00000)? 1'b1 : 1'b0;

  endmodule

  Quartus II RTL图如下所示:

wps_clip_image-25286
树莓派文章专题:树莓派是什么?你不知道树莓派的常识和使用

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/116974.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部