很久不寫東西了,因為這個空間裡似乎都是做軟體的,而我把asic/fpga認為是硬體電路。所以寫的雖然也是**,但是想的確實硬體電路。這讓我在這個軟體人員居多的空間裡顯得格格不入。
寫這個題目,其實是我有些忍不住了。這十幾年來,我面試過很多新人,也帶過很多新人,他們之中很多人的成就都已經超越了我。但是當我們偶爾回顧這個小小的跨越時鐘域的問題時,仍然有很多的困惑和不理解。
我喜歡用這個題目作為我的面試題目,因為它不是乙個簡單的題目,而是涉及到asic設計本質的題目,如果細細研究起來,還非常複雜。寫這個東西,希望所有在做asic的人,能從乙個更高的角度去審視它,並且能因此更深刻的體會做asic的嚴謹。
言歸正傳:
題目:單根訊號線,跨越時鐘域,該怎麼處理?
1。 首先給乙個最簡單的答案: 用暫存器打兩拍
這裡其實有乙個很本質的問題需要討論,就是為什麼要所存兩拍? 把這個問題插進來說說吧。所有做asic的人,都要面對兩個基本的概念:setup time 和 hold time。如果暫存器不滿足這兩個時間,將會出現亞穩態。很多新人以為亞穩態僅僅是邏輯上的障礙,其實亞穩態是實實在在的電路上的問題。
模擬電路中,三極體主要工作在其放大區間,而在數位電路卻是要工作在截至態。亞穩態非常類似模擬電路中的放大態,這個狀態將使得器件的輸出電流被放大,如果這個狀態被傳遞,那麼將導致更多的電路處在放大電路的工作狀態中,這將引起巨大的電流和功耗,甚至燒毀晶元,所以,跨時鐘域是一定會出現亞穩態的,但是我們必須要把亞穩態控制在乙個很小的範圍內。這就是為什麼要在其後面再用乙個暫存器的原因。它的功能就是把亞穩態僅僅限制在那乙個暫存器的小區域。
好了,繼續說邏輯上的事情。這個兩拍的電路很顯然,只適合訊號從低頻時鐘跨越到高頻時鐘,那麼當高頻時鐘要跨越到低頻時鐘該怎麼辦呢?
2. 高頻訊號要進入低頻時鐘域,最原始的想法就是 展寬。如果我們知道這兩個時鐘之間的頻率差別,那麼用乙個計數器去將高頻訊號做適當的展寬,使其寬度大於低頻時鐘的乙個週期,然後就可以繼續用上述的方法跨域時鐘域了。
這種方法的本質,是降低時鐘頻率,是把高頻時鐘產生的訊號先做了頻率的降低,降低到比原來的低頻時鐘還要低,因此當然就可以用第一種方法了。
那麼,如果我們不能在設計的最初就知道彼此的頻率差異,該怎麼辦呢? 通常這個問題,都會讓面試者陷入絕境。
3. 仍然是高頻時鐘域的訊號要進入低頻時鐘域,但是我們不能確切的知道兩個時鐘頻率到底差異多少,這時,我們的基本思路還是展寬,只是這個展寬要做成乙個能自動適配的功能,當然,這就需要做反饋。我是學自控的,反饋,我很熟悉。
這裡面其實是3組暫存器,reg-1和reg-2是clk-a的時鐘域,其中reg-2的功能就是要把高頻時鐘clk-a產生的訊號根據clk-b的頻率來做展寬。
reg-3和reg-4是兩個暫存器,用來把clk-a的訊號跨時鐘域到clk-b中。
reg-5和reg-6其實也是兩個暫存器,用來把clk-b時鐘域的訊號跨越到clk-a,這個訊號將作為乙個反饋訊號,來實現展寬的邏輯,實現這個邏輯的,主要是那乙個與門和乙個或門。
具體的邏輯就不說了,只說說思想:這是乙個邏輯反饋電路,和模擬電路中的電壓跟隨電路的思考方式不太一致。它的思考邏輯是,如果輸出還沒有得到邏輯1,那麼輸入的邏輯1就要保持。但是我們很容易就看出來了,這個電路僅僅可以把乙個 高電平脈衝 展寬。那麼如何將乙個低電平展寬呢?其實簡單的調整一下那個與門和或門的電路就可以了:
但是這仍然不是乙個完全意義上的跨越時鐘域的邏輯。那麼能不能做乙個完整功能的電路呢?這就要考慮如何把上述這兩種展寬邏輯融合到一起。
4. 融合這兩個電路,就必須先從原理上說清楚一件事情:低頻時鐘是無法完全去取樣高頻訊號的,這裡面一定會丟失資訊。這是無法避免的。
如果reg-2的輸出是1,那麼我認為目前正在把邏輯1展寬,如果當前reg-2的輸出是0,那麼我認為正在把邏輯0展寬。至於短時間內頻繁的出現邏輯1和邏輯0,那麼很可能會丟失某些狀態,這也是我們上面說到的,不可避免的問題。
說到這裡,是不是所有的事情都說完了呢?還沒有,至少我們的思考還不應該結束。
5.如果乙個訊號需要跨越時鐘域,但是我們不知道哪個時鐘快,哪個時鐘慢,該怎麼辦呢?
呵呵,太忙了,該開會了,誰有好辦法,不妨試試看吧。
我等著所有的奇思妙想。
跨時鐘域處理
需要做的事情 使能訊號txe to eth由時鐘122.88m時鐘輸出 另一使能訊號vde dv由25m時鐘輸出,計算兩個使能訊號之間的時間間隔,即兩個訊號上公升沿之間的時鐘計數。由於兩個訊號屬於不同的時鐘域,因此要先進行跨時鐘域處理,這裡對vde dv進行處理 在122.88m時鐘下將vde dv...
跨時鐘域處理
討論 今天華為面試題 非同步fifo讀時鐘是寫時鐘的100倍,或者寫是讀的100倍會出現什麼問題?今天華為面試題 非同步fifo讀時鐘是寫時鐘的100倍,或者寫是讀的100倍會出現什麼問題?答得 如果是瞬態資料中間有足夠間隔,則不會出現問題。如果是連續資料,則很快輸出空滿標誌位。面試官不滿意,請教下...
跨時鐘域訊號處理
一 場景描述 某訊號signal需要在不同的時鐘域進行處理,需要同步到的不同的時鐘域繼續使用。舉例說明 某定時器timer包含兩個時鐘域bus clk和tmr clk。狀態暫存器sts和控制暫存器ctrl定義如下。暫存器讀寫訪問採用bus clk時鐘,timer功能採用tmr clk時鐘,當發生溢位...