接到PNB 總線控制器的數(shù)據(jù)輸出端,對數(shù)據(jù)的有選擇性地輸出1或弱〇 ;在數(shù)據(jù)輸出階段,獲得總線 使用權(quán)的PNB總線控制器將總線驅(qū)動器的輸出使能置高,由PNB總線控制器控制數(shù)據(jù)總線 輸出為1或〇 ;仲裁失敗的由PNB總線控制器將關(guān)閉總線輸出使能,并轉(zhuǎn)入PNB總線的監(jiān)聽 狀態(tài)。
[0100] 所述PNB總線綜合利用總線請求信號PNB_REQ、分組軟件優(yōu)先權(quán)和控制器的設(shè)備 優(yōu)先權(quán)作為仲裁判據(jù),總線仲裁和分組傳送機(jī)制分述如下:
[0101] 5. L軟件優(yōu)先權(quán)
[0102] 所述PNB總線采用基于優(yōu)先權(quán)的報文分組傳送,傳送時控制器會優(yōu)先搜索本地高 優(yōu)先權(quán)的數(shù)據(jù)分組,總線競爭時,高優(yōu)先權(quán)的分組勝出。軟件優(yōu)先權(quán)由MCU軟件在創(chuàng)立數(shù)據(jù) 分組時指定并寫入發(fā)送描述符的指定字段,總線仲裁第一階段為軟件優(yōu)先權(quán)的競爭,軟件 優(yōu)先權(quán)控制字(以下簡稱PNB_PRI)的計算方法如下式:
[0103] PNB_PRI = I << pri (式中:"〈〈"表示向左移位)
[0104] 5. 2.設(shè)備優(yōu)先權(quán)
[0105] 所述PNB總線的每個控制器都對應(yīng)一個唯一地址識別碼(以下簡稱AID),控制器 按下式構(gòu)建設(shè)備優(yōu)先權(quán)控制字(以下簡稱PNB_PID),該控制字同時也成為分組接收時的目 標(biāo)識別控制字:
[0106] PNB_PID = I << AID(式中:"〈〈"表示向左移位)
[0107] PNB_PID在總線仲裁的第二階段由控制器送上總線,在設(shè)備優(yōu)先權(quán)競爭階段勝出 總線控制器可以啟動后續(xù)的數(shù)據(jù)發(fā)送。
[0108] 5.3.分組目標(biāo)尋址
[0109] 所述PNB總線上數(shù)據(jù)分組的目標(biāo)尋址采用位尋址方式,當(dāng)接收的數(shù)據(jù)分組的目標(biāo) 控制字(以下簡稱PNB_DID)和設(shè)備優(yōu)先權(quán)控制字PNB_PID邏輯與的結(jié)果為PNB_PID時,表 明該數(shù)據(jù)分組應(yīng)該被接收,否則控制器拒收該分組。
[0110] PNB_DID&PNB_PID = PNB_PID
[0111] 當(dāng)上述的邏輯表達(dá)式為真時,分組被接收否則拒絕接收,如此一來,發(fā)送方總線驅(qū) 動程序通過合理配置PNB_DID,能夠?qū)崿F(xiàn)精確目標(biāo)尋址,實現(xiàn)數(shù)據(jù)分組的單播、精確組播和 廣播傳送。
[0112] 5. 4.總線仲裁
[0113] 本發(fā)明所述PNB總線采用共享總線方式,總線上的任何控制器在數(shù)據(jù)發(fā)送之前都 要進(jìn)行總線申請,在多個控制器同時申請總線的情況下只有仲裁勝出的控制器可以發(fā)送數(shù) 據(jù),總線仲裁過程如下:
[0114] (1),有數(shù)據(jù)分組待發(fā)送的PNB總線控制器控制器選擇當(dāng)前最高優(yōu)先級分組,并讀 取發(fā)送描述符,提取數(shù)據(jù)分組的軟件優(yōu)先級pri和目標(biāo)控制字PNB_DID ;
[0115] (2),檢查PNB總線控制器的輸入信號PNB_BREQ_IN,若為1表示總線忙轉(zhuǎn)步驟(1) 繼續(xù)等待;否則,置PNB總線控制器的輸出信號PNB_BREQ_0UT和使能信號PNB_BREQ_0E為 1后,轉(zhuǎn)到(3)進(jìn)行分組的軟件優(yōu)先權(quán)仲裁;
[0116] (3),PNB總線控制器根據(jù)數(shù)據(jù)分組的軟件優(yōu)級pri,并按下面方法PNB總線提交按 公式(1)計算出的軟件優(yōu)先權(quán)控制字PNB_PRI,
[0117] PNB_data_out〈 = PNB_PRI (式中:〈=表示信號賦值)
[0118] PNB_data_oe〈 = PNB_PRI (式中:〈=表示信號賦值)
[0119] 其中,PNB_data_out為PNB總線數(shù)據(jù)輸出、PNB_data_oe為PNB總線輸出使能控制 信號;
[0120] (4),PNB總線控制器讀取PNB總線的PNB總線數(shù)據(jù)輸入PNB_data_in的值,并檢查 回讀數(shù)據(jù),若PNB_data_in中某位被置1且其位序比發(fā)送分組的軟件優(yōu)先級pri高,則清零 輸出信號PNB_BREQ_0UT和使能信號PNB_BREQ_0E,撤銷PNB總線申請,轉(zhuǎn)到⑴繼續(xù)等待; 否則轉(zhuǎn)(5)進(jìn)行設(shè)備優(yōu)先權(quán)仲裁;
[0121] (5),PNB總線控制器向PNB總線提交設(shè)備優(yōu)先權(quán)控制字(PNB_PID,按公式2計 算),
[0122] PNB_data_out〈 = PNB_PID (式中:〈=表示信號賦值)
[0123] PNB_data_oe〈 = PNB_PID (式中:〈=表示信號賦值)
[0124] 上面公式中,PNB_data_out為PNB總線數(shù)據(jù)輸出、PNB_data_oe為PNB總線輸出使 能控制;
[0125] (6),PNB總線控制器讀取PNB總線的PNB總線數(shù)據(jù)輸入PNB_data_in值,并檢查回 讀數(shù)據(jù),若PNB_data_in中某一位被置1且該位的位序比控制器地址識別碼AID高,則清零 輸出信號PNB_BREQ_0UT和使能信號PNB_BREQ_0E,撤銷PNB總線申請,轉(zhuǎn)到⑴繼續(xù)等待; 否則轉(zhuǎn)到(7)準(zhǔn)備輸出隨路時鐘;
[0126] (7),仲裁成功的PNB總線控制器保持輸出信號PNB_BREQ_0UT和使能信號PNB_ BREQ_0E為1,隨后置位隨路時鐘信號PNB_CLK_0E,并輸出隨路時鐘準(zhǔn)備發(fā)送數(shù)據(jù)。
[0127] 5.5.總線數(shù)據(jù)發(fā)送
[0128] 所述PNB總線實現(xiàn)方法中總線的發(fā)送爭用由狀態(tài)機(jī)實現(xiàn),總線仲裁階段勝出的控 制器可以發(fā)送數(shù)據(jù)分組,下面結(jié)合附圖3總線控制器主接口狀態(tài)變迀圖來說明數(shù)據(jù)分組發(fā) 送過程:
[0129] Master_Idle狀態(tài):總線空閑,總線控制器按從高到低的順序檢查個發(fā)送優(yōu)先級 隊列,若有待發(fā)送數(shù)據(jù)分組則轉(zhuǎn)Master_BREQ狀態(tài);
[0130] Master_BREQ狀態(tài):總線狀態(tài)檢查,檢查總線狀態(tài),若PNB_BREQ_IN = 0則轉(zhuǎn) Master_PRI狀態(tài)進(jìn)行軟件優(yōu)先權(quán)競爭,否則轉(zhuǎn)Master_Fail仲裁失敗;
[0131] Master_PRI狀態(tài):軟件優(yōu)先權(quán)競爭,控制器向總線提交數(shù)據(jù)分組的軟件優(yōu)先權(quán) 控制字PNB_PRI進(jìn)行軟件優(yōu)先權(quán)總線爭用,若競爭失敗轉(zhuǎn)Master_Fail繼續(xù)等待,否則轉(zhuǎn) Master_PID進(jìn)行設(shè)備優(yōu)先權(quán)競爭;
[0132] Master_PID狀態(tài):設(shè)備優(yōu)先權(quán)競爭,控制器向總線提交設(shè)備優(yōu)先權(quán)控制字PNB_ PID進(jìn)行總線爭用,若競爭失敗轉(zhuǎn)Master_Fail繼續(xù)等待,否則轉(zhuǎn)Master_CLK準(zhǔn)備隨路時鐘 輸出;
[0133] Master_CLK狀態(tài):隨路時鐘輸出,控制器輸出隨路時鐘,在等待總線時鐘穩(wěn)定后 轉(zhuǎn)Master_Trans進(jìn)行數(shù)據(jù)傳輸;
[0134] MasterJrans狀態(tài):數(shù)據(jù)傳輸狀態(tài),根據(jù)發(fā)送描述指示發(fā)送分組數(shù)據(jù),發(fā)送完成 后轉(zhuǎn)Master_Fin狀態(tài),若待發(fā)分組為單播則控制器在發(fā)送過程中檢查信號PNB_TRDY_IN, 若該信號為〇表示目標(biāo)空間不足或目標(biāo)不存在,則放棄本次傳送并轉(zhuǎn)Master_Fail釋放總 線;
[0135] Master_Fin狀態(tài):分組發(fā)送結(jié)束,控制器將關(guān)閉隨路時鐘和釋放數(shù)據(jù)總線,更 新發(fā)送隊列的描述符讀指針,更新狀態(tài)寄存器,并根據(jù)需要觸發(fā)MCU發(fā)送中斷,之后轉(zhuǎn) Master_Idle等待新的分組傳送;
[0136] Master_Fail狀態(tài):總線仲裁失敗,控制器將關(guān)閉所有輸出以釋放數(shù)據(jù)總線,同時 給出PNB_RE = 1即允許接收模塊接收來自總線上其他控制的數(shù)據(jù)分組,之后轉(zhuǎn)Master_ Idle等待總線空閑;
[0137] 5. 6.總線數(shù)據(jù)接收
[0138] 所述PNB總線控制器通過從接口(接收模塊)監(jiān)視總線,一旦發(fā)現(xiàn)總線的幀同步 信號FS被置位即啟動接收狀態(tài)機(jī)對總線上的數(shù)據(jù)進(jìn)行目標(biāo)地址識別,地址識別通過的數(shù) 據(jù)分組將被從接口的狀態(tài)機(jī)接收并寫入內(nèi)部緩存,作為可選控制項,可通過來自發(fā)送模塊 的接收使能信號PNB_RE來控制接收模塊是否接收自己發(fā)送數(shù)據(jù)。下面結(jié)合附圖4的從接 口狀態(tài)變迀圖來說明數(shù)據(jù)接收過程:
[0139] Slave_Idle狀態(tài):空閑狀態(tài),狀態(tài)機(jī)在幀同步信號FS的上升沿轉(zhuǎn)入Slave_Filter 狀態(tài);
[0140] Slave_Filter狀態(tài):分組過濾,狀態(tài)機(jī)對當(dāng)前數(shù)據(jù)分組的目標(biāo)地址、優(yōu)先級、傳送 模式、分組長度進(jìn)行識別,識別不通過則放棄該分組,否則進(jìn)入Slave_Spa Ce狀態(tài);
[0141] Slave_Space狀態(tài):接收緩沖檢查,狀態(tài)機(jī)根據(jù)數(shù)據(jù)分組分組描述符中的優(yōu)先級 去檢查對應(yīng)接收優(yōu)先級隊列,如果接收隊列空間不足則放棄該分組轉(zhuǎn)入Sla Ve_Idle狀態(tài), 否則進(jìn)入Slave_RCV狀態(tài)進(jìn)行數(shù)據(jù)接收,同時置位硬件流量握手控制信號如下:
[0142] PNB_TRDY_0UT〈 = 1 (式中:〃〈=〃表示信號賦值)
[0143] PNB_TRDY_0E〈 = 1 (式中:〃〈=〃表示信號賦值)
[0144] Slave_RCV狀態(tài):數(shù)據(jù)接收,狀態(tài)機(jī)接收數(shù)據(jù)分組到指定的優(yōu)先級隊列,同時計算 幀校驗,若該分組為存儲映像模式,狀態(tài)機(jī)還將識別數(shù)據(jù)分組的目標(biāo)寫入地址。當(dāng)FS的下 降沿到達(dá)時狀態(tài)機(jī)停止接收數(shù)據(jù)轉(zhuǎn)入Slave_FCS狀態(tài);
[0145] Slave_FCS狀態(tài):幀校驗,狀態(tài)機(jī)將讀取本地校驗計算結(jié)果和數(shù)據(jù)分組中的幀校 驗,若校驗失敗,則該分組被丟棄在置位相應(yīng)狀態(tài)位后轉(zhuǎn)入Sla Ve_Idle,否則檢查分組模 式,若當(dāng)前分組為流模式傳輸隨后轉(zhuǎn)入Slave_FIN狀態(tài),若為存儲映像模式則轉(zhuǎn)入Slave_ MConfig 狀態(tài);
[0146] Slave_MConfig狀態(tài):轉(zhuǎn)存參數(shù)配置,狀態(tài)機(jī)根據(jù)數(shù)據(jù)分組中的目標(biāo)地址和數(shù)據(jù) 長度等數(shù)據(jù)對配置本地化寫入?yún)?shù),然后轉(zhuǎn)Sla Ve_MTranS進(jìn)行本地化轉(zhuǎn)存;
[0147] Slave_MTrans狀態(tài):數(shù)據(jù)轉(zhuǎn)存,狀態(tài)機(jī)進(jìn)行存儲映像模式下數(shù)據(jù)分組本地化轉(zhuǎn) 存;
[0148] Slave_FIN狀態(tài):接收事務(wù)結(jié)束,狀態(tài)機(jī)更新接收隊列寫指針和接收狀態(tài)寄存器 并根據(jù)需要觸發(fā)接收中斷,之后轉(zhuǎn)入Sla Ve_Idle狀態(tài)等待新的數(shù)據(jù)分組,同時清零硬件流 量握手控制信號如下:
[0149] PNB_TRDY_0UT〈 = 0 (式中:〃〈=〃表示信號賦值)
[0150] PNB_TRDY_0E〈 = 0 (式中:〃〈=〃表示信號賦值)
[0151] 5.7.總線時序
[0152] 所述總線實現(xiàn)方法在不同總線階段,對總線驅(qū)動器的控制方法有所不同,附圖5 展示了一種極端情況,總線上的所有控制器在同一時刻申請總線傳送且待傳送的數(shù)據(jù)分組 的優(yōu)先級相同,各控制器首先將BREQ_0E置高,進(jìn)行總線請求,與此同時將自己的數(shù)據(jù)發(fā)分 組優(yōu)先級PRI送上數(shù)據(jù)總線,在PRI的仲裁階段沒有競爭出結(jié)果,隨后各控制器又將自己的 設(shè)備優(yōu)先權(quán)PID送上總線,由于各控制器的PID各不相同,最后控制器0勝出,其余競爭失 敗的控制器隨后將自己的BREQ_0E置低同時關(guān)閉數(shù)據(jù)總線的輸出使能,轉(zhuǎn)而監(jiān)視總線FS_ IN的狀態(tài)為數(shù)據(jù)接收做準(zhǔn)備。
[0153] 附圖5中競爭成功的控制器0保持BREQ_0E為高,同時置位CLK_0E輸出隨路時鐘, 待總線時鐘穩(wěn)定后,置位FS_OE和FS_OUT,隨后進(jìn)入數(shù)據(jù)傳送階段。整個數(shù)據(jù)傳送結(jié)束后, 控制器O先清零FS_OUT,并保持隨路時鐘輸出3~5個總線時鐘保證接收方能夠提交數(shù)據(jù), 隨后清零BREQ_OUT、BREQ_OE、DATA_OE和CLK_OE,總線進(jìn)入空閑狀態(tài),等待新一輪的競爭和 分