1. 程式人生 > >微控制器時鐘的解析

微控制器時鐘的解析

時鐘週期

       時鐘週期也稱為振盪週期,定義為時鐘脈衝的倒數(時鐘週期就是微控制器外接晶振的倒數,例如12M的晶振,它的時鐘週期就是1/12us),是計算機中的最基本的、最小的時間單位。

       在一個時鐘週期內,CPU僅完成一個最基本的動作。時鐘脈衝是計算機的基本工作脈衝,控制著計算機的工作節奏。時鐘頻率越高,工作速度就越快。

       8051微控制器把一個時鐘週期定義為一個節拍(用P表示),二個節拍定義為一個狀態週期(用S表示)。

機器週期

       計算機中,常把一條指令的執行過程劃分為若干個階段,每一個階段完成一項工作。每一項工作稱為一個基本操作,完成一個基本操作所需要的時間稱為機器週期。8051系列微控制器的一個機器週期由6個S週期(狀態週期)組成。 一個S週期=2個節拍(P),所以8051微控制器的一個機器週期=6個狀態週期=12個時鐘週期。

       例如外接24M晶振的微控制器,他的一個機器週期=12/24M 秒;

指令週期

    執行一條指令所需要的時間,一般由若干個機器週期組成。指令不同,所需的機器週期也不同。

CPU 週期訊號、節拍週期訊號、節拍脈衝訊號三者之間的關係是什麼?

      一小塊石英晶體加電後產生壓電反應,在固定頻率振動,產生出電壓按照固定週期變化的脈衝訊號。這個高頻率的訊號通向分頻器(frequency divider),轉化為比較低頻的訊號。

 以上圖為例,分頻器分出來的訊號有四個頻率。題目中所說 CPU週期訊號、節拍週期訊號、節拍脈衝訊號本質上都是時鐘脈衝的不同分頻,主要區別在於用途上。

     通常來說,CPU 週期訊號最“慢”,它決定 CPU 所處的狀態。CPU 執行一條指令的週期叫做指令週期(instruction cycle),指令週期可以劃分為 fetch、decode、和 execute 三個部分,所以也叫 fetch-decode-execute cycle。假設上圖與 QD 頻率相同的訊號有三個,QD1、QD2、QD3,它們分別依次處於高電位,那麼就可以用它們來控制 CPU 處於 fetch、decode、還是 execute 狀態,這就是 CPU 週期訊號。

     節拍週期訊號是控制訊號,調整電路的功能。比如,現在 CPU 處於 fetch 狀態,仍舊以上圖為例,假設 QC 這個比 QD “快”的訊號有 QC1、QC2、QC3……QCi 個,分別對應電路的不同功能(比如,應該將從記憶體中取來的數字作為指令解釋,還是送給暫存器存起來),誰處於高電位,CPU 就能執行誰決定的功能。

      節拍脈衝訊號則是觸發訊號,決定電路的實際工作起點。以上圖的 QB 為例,假設 QD1 決定 CPU 處於 fetch 階段,QC1 決定 CPU 的功能是去記憶體取一個數字,那麼 QB 的上升沿會觸發整個電路切實地執行這個功能。

      可以這樣類比:

      某診所週一二三門診,週四五看複診病人,週六日不辦公

——對應三個 CPU 週期

      診所星期一二三 8:00 開始門診,12:00 午休,13:00 繼續門診,17:00 關門

——對應節拍週期

      某個病人星期二 9:00 去看了病

——對應脈衝訊號

    (注意上面的說法極度簡化,實際的實現要複雜很多,比如振動源不一定是石英,每個 CPU 週期未必等長,CPU 也並不是在某一時刻只能處於單獨一種週期狀態裡(詳見 pipelining),乃至週期層級也未必就是三層等等。)