1. 程式人生 > >一些時序計算題

一些時序計算題

最近在持續筆試中,今天見的題感覺難度又上升了,因此需要計算一下。首先來看一下題目。

已知:

輸入延時:T(in_delay)=1ns

Inverter的延時:T(inv_max)=1ns  T(inv_min)=0.5ns

Buffer的延時:T(buf_max)=2ns  T(buf_min)=1ns

NAND2的延時:T(nan_max)=1.8ns  T(nan_min)=0.9ns

NOR2的延時:T(nor_max)=2ns  T(nor_min)=1ns

 

D 觸發器的傳輸時間:T(cq_max)=4ns  T(cq_min)=1ns

建立時間:T(setup)=3ns  保持時間:T(hold)=1ns

求解:

1.電路是否有時鐘違例?如果有該如何修改?

2.電路的最高時鐘頻率是多少

 

解答:

解答這個題啊,我認為我們不需要關注裡面都是什麼器件,主要關注裡面的延時就可以了,因此先標註延時資訊在上面。

1.解決第一問先要明確一個問題,可能時鐘違例有哪個呢?

在這個時序電路里無非就是建立時間違例和保持時間違例兩種,而建立時間裕量中是包含時鐘的,因此我們可以斷定此時不會是建立時間違例因為時鐘週期還不確定。因此如果有違例一定是保持時間違例。

那麼兩個觸發器F1和F2哪個的保持時間違例了呢?此時我們需要用公式進行分析了,保持時間裕量的公式計算如下:

hold time stack = Tcq+Tcom-△T-Thold

如果以F2為計算物件,那麼Tcq為F1的,Tcom為F1、F2之間的,△T為F2的時鐘偏移減去F1的,Thold為F2的。

那麼我們來計算下F1的最小保持時間裕量:

hold time stack(F1) = (Tcq+Tcom)min-(△T)max-Thold=0.9+1-(2)-1=-1.1ns

可以看到F1的保持時間已經違例。

那麼再計算下F2的最小保持時間裕量:

hold time stack(F2) = (Tcq+Tcom)min-(△T)max-Thold=0.5+1-(-1)-1=1.5ns

不錯在違例情況。

因此可以得出結論:F1的保持時間違例。

 

那麼如何修改呢?增加F1-NAND2-F2之間的延時就可以了。因此可以在F1-NAND2-F2之間加入兩個反相器和一個延時Buffer,使得

hold time stack(F1) = (Tcq+Tcom)min-(△T)max-Thold=(0.9+1+1)+1-(4-2)-1=0.9ns

則不再有F1的保持時間違例問題。那麼在解決第二問時候我就預設為已經改了,當然對最後的結果沒有影響。

 

2.要計算最快時鐘頻率當然要先找關鍵路徑。

首先看下下面這條看上去比較長的路徑:

先看下計算時鐘週期的公式,當然是需要計算所能達到的最窄的時鐘週期,這樣才能有最高頻率:

T >= Tsetup+(Tcq+Tcom)max-△T

那麼在這個題裡

(Tcom)max=2+1.8+2+2=7.8ns

(Tcq)max=1ns //由於資料來自於輸入端,其實是沒有這個值的,不過因為輸入資料延時1ns因此就取其為1ns

Tsetup=3ns

(△T)min=1-0=1

因此我們得到:T >= 3+1+7.8-1=10.8ns

 

不過這也不一定是關鍵路徑,那麼我們再看下另外一條比較長的路徑:

這條路徑裡的時序資訊是怎樣的呢?

(Tcom)max=2+1=3ns
(Tcq)max=4ns
Tsetup=3ns
(△T)min=-2ns(注意是用F2的時鐘偏移減去F1的)
因此我們得到:T >= 3+4+3-(-2)=12ns

哇塞原來這才是關鍵路徑,果然眼睛是會騙人的,因此我們計算最高頻率:

那麼意味著fmax=1/Tmin=1/12ns=83.3MHz

 

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/moon9999/article/details/78024858