第八章 對立統一——非同步時鐘同步化

來源:互聯網
上載者:User
一、什麼是對立統一

什麼是CEO,就是首席執行官,是在一個企業中負責日常經營管理的最進階管理員,又稱作行政總裁,或最高執行長或大班。

那麼,在FPGA系統,需不需要一個最進階別的執行官,來管理所有進程呢?為了系統的有序性,不至於淩亂、崩潰,答案必然是肯定的。

誰都知道,FPGA內部時序邏輯的工作,是通過時鐘的配合來完成任務的。那麼當系統中有非同步時鐘的時候,怎麼辦?每一個系統必須有一個最進階別的時鐘,執行力最強;同時它擔任著管理非同步時鐘的任務,其它非同步時鐘想讓手下執行任務,必須告訴執行官,然後執行官去分配任務。所以,一切行動,都必須通過首席執行官的允許,才能進行;不然,沒門。首席執行官具有最高支配權。它們之間的關係如所示:

因此,對於工程中出現的非同步時鐘,與最高時鐘是對立關係,但這個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圖如下:

(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圖如下所示:

(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圖如下所示:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.