2015-10-19 87 views
1

我想了解通過指令及其與每個振盪器週期的關係所需的步驟。 PIC18F4321的數據表似乎將此過程分爲兩個基本步驟:取指和執行。但在說明哪一步屬於哪個振盪器週期時,似乎並不一致。例如,它說:指令週期(PIC18)

在內部,程序計數器每增加一個Q1;在Q4期間,指令從程序存儲器中取出並鎖存到指令寄存器(IR)的 中。

這聽起來很奇怪,因爲它沒有提到Q2和Q3。從這一點來看,我幾乎會認爲提取需要1個振盪週期,因爲它發生在第4季度。但是,僅僅閱讀遠一點,它說:

取指令和執行在 一個取指需要一個指令週期,例如是以流水線方式進行,而譯碼和執行 採取另一種指令週期。但是,由於流水線化,每個指令在一個週期內有效地執行。

所以,現在它告訴我,提取Q1到Q4。基於此,我假設如果不是流水線操作,指令將需要2個指令週期才能完成,因爲完全指令週期是單獨讀取的。但我明白在實踐中流水線會使它看起來只需要1個指令週期來完成指令。

還是得遠一點,我相信這是最令人困惑的部分,它說:

在執行週期,所取指令鎖存到循環 指令寄存器(IR) Q1。這個指令然後在Q2,Q3和Q4週期內解碼並執行 。數據存儲器是在Q2(操作數讀取)期間讀取的並且在Q4 (目標寫入)期間讀取的 。

在此基礎上,我看過其他來源,好像是分執行部分爲解碼,讀取,處理和寫入(它混淆了我,因爲它使用的是執行的時候,我不認爲這是實際上是指「獲取和執行」的執行部分)。

1)現在,它們每個都做什麼?當它說讀寫會在第二季度/第四季度發生的時候非常清楚。所以Q3應該在處理?

2)什麼是解碼振盪器週期?

3)如果您在第4季度獲取了相同的指令時,爲什麼您必須在Q1中再次將指令鎖存到IR?

+0

什麼是「Q1/Q2/Q3/Q4」?那些時鐘週期的名稱是?甚至沒有鏈接到您引用的數據表。聽起來它可能是一個4或5階段的流水線,除非很明顯指令有單週期延遲。 (作爲依賴鏈的一部分的有效延遲比在更復雜的CPU上的完整流水線長度短得多。分支誤預測懲罰顯示分支指令執行階段之前的流水線長度。) –

+0

對不起,我認爲說明微控制器的名字就足夠了:http://ww1.microchip.com/downloads/en/DeviceDoc/39689b.pdf。是的,他們是時鐘週期的名稱。從數據表中,時鐘輸入被分爲4個非重疊時鐘(Q1到Q4,相當於1個指令週期) – somename

+0

我通常不寫PIC的asm,並且不確定谷歌會找到合適的數據表。但是好的,所以Q1到Q4是一個時鐘週期的四分之一。在我看來,有些語言指的是整個輸入時鐘,而其他語言則指的是四倍頻時鐘的週期。 –

回答

0

免責聲明:我從來沒有寫過PIC ASM代碼,更不用說做PIC的任何性能分析了。我大多知道更強大的CPU,比如x86,讀http://agner.org/optimize/,以及http://realworldtech.com/。這個答案只是基於您在問題中提供的手冊片段,因爲它們對我來說確實有意義。 我可能完全誤解了一些東西


所以在外部時鐘而言,這是一個2循環管線(讀取|執行),在運行核心四泵浦時鐘。執行階段被細分爲4個流水線階段。有點像Pentium4有雙重執行單元(即一個使用更快時鐘的流水線階段)。


  1. 聽起來好像是的,指令執行中發生了第三季度。

2)什麼是解碼的振盪器週期?

我不明白這個問題。它使用未乘的時鐘在每個輸入時鐘上解碼一條指令。

3)你爲什麼要鎖住指令,在第一季度再次IR如果你 只是做了,在第四季度,當你取這個相同的指令?

聽起來PC在Q1中增加了,所以在指令執行期間它指向下一條指令。在Q4中,下一條指令完成被提取到IR中準備執行下一個週期。這是指令數據本身(即PC指向的內容)。我不確定這部分,但這是有道理的。

相關問題