一種基于寄存器的多位寬數(shù)據(jù)跨時(shí)鐘域訪問(wèn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于集成電路設(shè)計(jì)技術(shù),涉及一種基于寄存器的多位寬數(shù)據(jù)跨時(shí)鐘域訪問(wèn)方法,特別是時(shí)鐘頻率差距大,可靠性要求高的情況下。
【背景技術(shù)】
[0002]隨著集成電路規(guī)模的不斷擴(kuò)大,一個(gè)完整的電路中往往包含多個(gè)時(shí)鐘,時(shí)鐘的不匹配經(jīng)常需要經(jīng)過(guò)跨時(shí)鐘域處理,稍有不慎便會(huì)造成訪問(wèn)出錯(cuò)或異常。
[0003]針對(duì)集成電路設(shè)計(jì)中經(jīng)常遇到的多位寬的異步信號(hào)的跨時(shí)鐘域交互,目前主要通過(guò)對(duì)控制信號(hào)同步的方法進(jìn)行多位寬的數(shù)據(jù)同步,該方法需要額外的控制信號(hào)的同步,并需要長(zhǎng)時(shí)間占用主設(shè)備,對(duì)于多主操作的情況也不適用,避免異步信號(hào)交互,特別是時(shí)鐘跨度大的異步信號(hào)交互引起的訪問(wèn)錯(cuò)誤或異常,提高數(shù)據(jù)訪問(wèn)的可靠性極為重要。
【發(fā)明內(nèi)容】
[0004]為了解決【背景技術(shù)】中提及的問(wèn)題,本發(fā)明提供了一種基于寄存器的多位寬數(shù)據(jù)跨時(shí)鐘域訪問(wèn)方法,定義中間寄存器,即使時(shí)鐘跨度大或多主操作的情況下也能正常進(jìn)行多位寬異步信號(hào)之間的數(shù)據(jù)交互,避免訪問(wèn)錯(cuò)誤或異常,具有高可靠性。
[0005]本發(fā)明的技術(shù)方案是:
[0006]—種基于寄存器的多位寬數(shù)據(jù)跨時(shí)鐘域訪問(wèn)方法,其特殊之處在于,不同時(shí)鐘域的主設(shè)備和從設(shè)備通過(guò)訪問(wèn)寄存器A和寄存器B進(jìn)行數(shù)據(jù)交互,定義從設(shè)備地址位寬為X,從設(shè)備數(shù)據(jù)位寬為y,寄存器A的位寬大于等于x+1;寄存器B的位寬大于等于y+Ι;定義寄存器A的控制位表示從設(shè)備是否正在被訪問(wèn);寄存器B的控制位表示寄存器B中數(shù)據(jù)位是否有效;
[0007]包括以下步驟:
[0008]步驟I):主設(shè)備讀寄存器A,若寄存器A控制位為零即空閑狀態(tài),則進(jìn)入步驟2,若寄存器A控制位為IS卩占用狀態(tài),則繼續(xù)步驟I;
[0009]步驟2):主設(shè)備寫(xiě)寄存器A,其中,控制位寫(xiě)I,選擇X位寫(xiě)入從設(shè)備地址;
[0010]步驟3):判斷主設(shè)備對(duì)從設(shè)備的操作狀態(tài):
[0011 ]如果是主設(shè)備對(duì)從設(shè)備是寫(xiě)操作,則進(jìn)入步驟4);
[0012]如果是主設(shè)備對(duì)從設(shè)備是讀操作,則進(jìn)入步驟5);
[0013]步驟4):主設(shè)備寫(xiě)寄存器B,選擇y位寫(xiě)入與步驟2中從設(shè)備地址對(duì)應(yīng)的數(shù)據(jù),寫(xiě)操作結(jié)束;
[0014]步驟5):主設(shè)備讀寄存器B:
[0015]當(dāng)寄存器B控制位為O時(shí),繼續(xù)讀寄存器B;
[0016]當(dāng)寄存器B控制位為I時(shí),選擇y位即為步驟2對(duì)應(yīng)從設(shè)備地址的數(shù)據(jù),讀操作結(jié)束。
[0017]上述控制位為最高位,選擇X位為低X位,選擇y位為低y位。
[0018]上述控制位為最低位,選擇X位為高X位,選擇y位為高y位。
[0019]步驟4)主設(shè)備對(duì)寄存器B寫(xiě)操作具體為:
[0020]寫(xiě)開(kāi)始信號(hào)wr_sta位于主設(shè)備時(shí)鐘域,通過(guò)兩級(jí)時(shí)鐘鎖存轉(zhuǎn)換到從設(shè)備時(shí)鐘域,從設(shè)備收到寫(xiě)開(kāi)始信號(hào)后鎖存需要寫(xiě)入的從設(shè)備的地址和數(shù)據(jù),同時(shí)產(chǎn)生寫(xiě)響應(yīng)信號(hào)wr_sta_ack,寫(xiě)響應(yīng)信號(hào)Wr_Sta_ack經(jīng)過(guò)兩級(jí)同步后反饋到主設(shè)備時(shí)鐘域后撤銷(xiāo)寫(xiě)開(kāi)始信號(hào)wr_sta;
[0021]從設(shè)備收到寫(xiě)數(shù)據(jù)的下一個(gè)從設(shè)備時(shí)鐘周期向主設(shè)備發(fā)送從設(shè)備寫(xiě)完成信號(hào)sub_wr_rdy,從設(shè)備寫(xiě)完成信號(hào)sub_wr_rdy經(jīng)同步產(chǎn)生主設(shè)備時(shí)鐘域的主設(shè)備寫(xiě)完成信號(hào)Wr_rdy,主設(shè)備寫(xiě)完成信號(hào)Wr_rdy為一個(gè)主設(shè)備的時(shí)鐘周期,主設(shè)備收到主設(shè)備寫(xiě)完成信號(hào)Wr_rdy信號(hào)后,從設(shè)備撤銷(xiāo)從設(shè)備寫(xiě)完成信號(hào)sub_wr_rdy,同時(shí)將寄存器A最高位置零,表示跨時(shí)鐘域?qū)懖僮鹘Y(jié)束。
[0022]步驟5主設(shè)備發(fā)起對(duì)寄存器B的讀操作具體為:
[0023]主設(shè)備第一次發(fā)起對(duì)寄存器B的讀操作即表示對(duì)從設(shè)備的讀開(kāi)始;
[0024]讀開(kāi)始信號(hào)rd_sta位于主設(shè)備時(shí)鐘域,通過(guò)兩級(jí)時(shí)鐘鎖存轉(zhuǎn)換到從設(shè)備時(shí)鐘域,從設(shè)備收到讀開(kāi)始信號(hào)rd_sta后,一方面鎖存需讀取的從設(shè)備的數(shù)據(jù)地址,并產(chǎn)生讀響應(yīng)信號(hào)rd_sta_ack,讀響應(yīng)信號(hào)rd_sta_ack經(jīng)過(guò)兩級(jí)同步后反饋到主設(shè)備后撤銷(xiāo)讀開(kāi)始信號(hào)rd_sta;另一方面從設(shè)備輸出數(shù)據(jù)rd_data,同時(shí)輸出數(shù)據(jù)有效信號(hào),數(shù)據(jù)有效信號(hào)同步到主設(shè)備時(shí)鐘域后為主設(shè)備數(shù)據(jù)有效信號(hào)cfg_rdvld,并在主設(shè)備數(shù)據(jù)有效信號(hào)cfg_rdVld有效時(shí)將輸出數(shù)據(jù)rd_data按低位對(duì)齊賦值給寄存器B,主設(shè)備數(shù)據(jù)有效信號(hào)cfg_rdvld為寄存器B的最高位,此時(shí),寄存器B最高位為I,低y位為需要讀取的從設(shè)備的值;
[0025]主設(shè)備讀取寄存器B中的數(shù)據(jù)位,并發(fā)送讀完成信號(hào)rd_rdy,在讀完成信號(hào)rd_rdy和數(shù)據(jù)有效信號(hào)cfg_rdvld同時(shí)有效的下一個(gè)主設(shè)備時(shí)鐘周期將寄存器A最高位置零,表示跨時(shí)鐘域讀操作結(jié)束。
[0026]本發(fā)明所具有的有益效果:
[0027]1、本發(fā)明提供的一種基于寄存器的多位寬數(shù)據(jù)跨時(shí)鐘域訪問(wèn)方法,避免多位寬異步信號(hào)特別是時(shí)鐘頻率相差大的跨時(shí)鐘域操作不當(dāng)出現(xiàn)訪問(wèn)錯(cuò)誤或異常,通過(guò)控制位保證數(shù)據(jù)的正確性,具有高可靠性。
[0028]2、不同時(shí)鐘域的主設(shè)備和從設(shè)備通過(guò)訪問(wèn)寄存器A和寄存器B來(lái)進(jìn)行跨時(shí)鐘域的數(shù)據(jù)傳遞,包括在寄存器A和寄存器B中設(shè)置控制位和數(shù)據(jù)位,通過(guò)寄存器A中的控制位有效判斷從設(shè)備是否空閑,可方便應(yīng)用于多主操作的系統(tǒng)中;在主設(shè)備讀取從設(shè)備數(shù)據(jù)時(shí),通過(guò)寄存器B中的控制位判斷數(shù)據(jù)位是否有效,主設(shè)備未讀響應(yīng)前寄存器中的控制位和數(shù)據(jù)一直保持有效,主設(shè)備可以在空閑的情況下隨時(shí)獲取從設(shè)備的數(shù)據(jù),避免了對(duì)主設(shè)備資源的占用。
【附圖說(shuō)明】
[0029]圖1是本發(fā)明的一種基于寄存器的多位寬數(shù)據(jù)跨時(shí)鐘域訪問(wèn)方法。
【具體實(shí)施方式】
[0030]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步詳細(xì)描述。
[0031]針對(duì)本發(fā)明涉及的一種基于寄存器的多位寬數(shù)據(jù)跨時(shí)鐘域訪問(wèn)方法,本文給出了其應(yīng)用在不同時(shí)鐘域下主設(shè)備(寄存器訪問(wèn)總線)訪問(wèn)從設(shè)備(子模塊)寄存器上,如圖1所示,定義寄存器A和寄存器B,寄存器A與寄存器B屬于寄存器訪問(wèn)總線時(shí)鐘域(PLB總線時(shí)鐘135MHz),子模塊寄存器屬于子模塊時(shí)鐘域(音頻編解碼模塊12.288MHz),寄存器A和寄存器B作為入口地址,寄存器訪問(wèn)總線通過(guò)訪問(wèn)寄存器A和寄存器B來(lái)配置或獲取子模塊寄存器的值,包括以下步驟(假設(shè)子模塊的寄存器地址位寬為X,寄存器數(shù)據(jù)位寬為y):
[0032]步驟I:寄存器訪問(wèn)總線讀寄存器A,若寄存器A最高位為零,則進(jìn)入步驟2,若寄存器A最高位為I,則繼續(xù)步驟I;
[0033]步驟2:寄存器訪問(wèn)總線寫(xiě)寄存器A,其中,最高位寫(xiě)I,低X位寫(xiě)入待讀寫(xiě)的子模塊寄存器地址,如果是寫(xiě)子模塊寄存器,則進(jìn)入步驟3,如果是讀子模塊寄存器,則進(jìn)入步驟4;
[0034]步驟3:寄存器訪問(wèn)總線寫(xiě)寄存器B,低y位寫(xiě)入與步驟2中子模塊寄存器地址對(duì)應(yīng)的寄存器的值;
[0035]步驟4:寄存器訪問(wèn)總線反復(fù)讀寄存器B,當(dāng)寄存器B最高位為I時(shí),低y為即為步驟2對(duì)應(yīng)的子模塊寄存器的值。
[0036]本發(fā)明提供的一種基于寄存器的多位寬數(shù)據(jù)跨時(shí)鐘域訪問(wèn)方法應(yīng)用在不同時(shí)鐘域的進(jìn)行寄存器訪問(wèn)上,定義寄存器訪問(wèn)總線時(shí)鐘域下的寄存器A和寄存器B,寄存器訪問(wèn)總線通過(guò)對(duì)寄存器A和寄存器B的讀寫(xiě)操作,完成對(duì)子模塊寄存器的讀寫(xiě)。為了防止跨時(shí)鐘域時(shí)信號(hào)或數(shù)據(jù)