<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > 【從零開(kāi)始走進(jìn)FPGA】對立統一——異步時(shí)鐘同步化

【從零開(kāi)始走進(jìn)FPGA】對立統一——異步時(shí)鐘同步化

作者: 時(shí)間:2015-02-06 來(lái)源:網(wǎng)絡(luò ) 收藏

  一、什么是對立統一

本文引用地址:http://dyxdggzs.com/article/269614.htm

  什么是CEO,就是首席執行官,是在一個(gè)企業(yè)中負責日常經(jīng)營(yíng)管理的最高級管理人員,又稱(chēng)作行政總裁,或最高執行長(cháng)或大班。

  那么,在系統,需不需要一個(gè)最高級別的執行官,來(lái)管理所有進(jìn)程呢?為了系統的有序性,不至于凌亂、崩潰,答案必然是肯定的。

  誰(shuí)都知道,內部時(shí)序邏輯的工作,是通過(guò)時(shí)鐘的配合來(lái)完成任務(wù)的。那么當系統中有的時(shí)候,怎么辦?每一個(gè)系統必須有一個(gè)最高級別的時(shí)鐘,執行力最強;同時(shí)它擔任著(zhù)管理的任務(wù),其它想讓手下執行任務(wù),必須告訴執行官,然后執行官去分配任務(wù)。所以,一切行動(dòng),都必須通過(guò)首席執行官的允許,才能進(jìn)行;不然,沒(méi)門(mén)。首席執行官具有最高支配權。它們之間的關(guān)系如下圖所示:


wps_clip_image-29006


  因此,對于工程中出現的異步時(shí)鐘,與最高時(shí)鐘是對立關(guān)系,但這個(gè)CEO的地位決定了只有他說(shuō)了算,不然就會(huì )“叛亂”,因此要把那些異步時(shí)鐘統一管理,這就是所謂的“對立統一”。

  二、異步時(shí)鐘同步化

  1. 異步時(shí)鐘種類(lèi)

  異步時(shí)鐘有很種類(lèi),如下是幾種項目中常常出現的情況

  (1)系統異步復位信號

  (2)由其它處理器輸入的時(shí)鐘

  (3)內部組合邏輯產(chǎn)生的時(shí)鐘

  當然也并非所有異步時(shí)鐘都要同步化,必須高速ADC,DAC芯片往往有個(gè)時(shí)鐘輸入端,這時(shí)保證該芯片與該部分邏輯電路同步,可以專(zhuān)門(mén)供給一個(gè)晶振,來(lái)達到更好的效果;同時(shí)也不是最高時(shí)鐘以外的時(shí)鐘都要同步化,由PLL產(chǎn)生的不同的時(shí)鐘,本身就是同步的,可以不處理。

  當然在可靠性要求不高的時(shí)候,異步復位這些信號也可以不處理,只是,養成良好的習慣,永遠不會(huì )錯。

  2. 異步時(shí)鐘解決方案

  對于時(shí)鐘的同步,采用的方法都差不多。Bingo在特權的《深入淺出玩轉》中得到啟發(fā),相應的簡(jiǎn)單的描述一下幾種關(guān)于異步復位信號的同步化。

  (1)異步復位信號的同步化

  此部分其實(shí)很簡(jiǎn)單,應用了上述邊沿檢測的部分思維,用最高時(shí)鐘打慢幾拍,便實(shí)現了與最高時(shí)鐘的同步。此處不再用Block來(lái)累贅的描述,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協(xié)作時(shí)異步復位信號同步化

  相對于上述異步復位信號同步化方法的擴展,分析存在PLL環(huán)情況下的對信號的處理。如下verilog代碼所示,先用晶振輸入時(shí)鐘對異步復位信號進(jìn)行同步化,最后通過(guò)與PLL輸出信號locked與前面產(chǎn)生的同步復位信號與操作,得到最后的系統復位信號。

  具體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)外輸入異步信號同步化

  當外面輸入異步時(shí)鐘或者異步信號的時(shí)鐘,一律轉換為使能時(shí)鐘。此方法與前一張接關(guān)于邊沿檢測的講述一樣,此處不做累贅講解。

  (4)系統同步信號最優(yōu)化設計方案

  當FPGA剛上電的短暫時(shí)間內,所有邏輯塊上電,多多少少需要一定的時(shí)間(盡管非常短暫)。在一般時(shí)序要求不高的項目中,似乎可以忽略不計。但對于是需要求非常嚴格的操作,這幾十ns或者ms上電時(shí),FPGA內部是相當不穩定的。因此,在同步異步信號的同時(shí),先將整個(gè)系統工作延時(shí)一定時(shí)間,將會(huì )在一定程度上得到更穩定的運行結果。同時(shí),處理后FPGA內部真正開(kāi)始工作實(shí)在系統上電穩定后進(jìn)行的,因此相應邏輯時(shí)序等,更穩定準確。

  以下是Bingo在實(shí)際項目中遇到的問(wèn)題的解決方案。經(jīng)過(guò)對系統進(jìn)行100ms延時(shí)的處理后,本來(lái)容易出錯的系統,在沒(méi)出現過(guò)異常。

  具體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
樹(shù)莓派文章專(zhuān)題:樹(shù)莓派是什么?你不知道樹(shù)莓派的知識和應用

fpga相關(guān)文章:fpga是什么


晶振相關(guān)文章:晶振原理


關(guān)鍵詞: FPGA 異步時(shí)鐘

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>