王銘銘,卜 剛,張 龑
(南京航空航天大學,江蘇 南京 211106)
射頻識別技術(radio frequency identification,RFID)是一種利用射頻無線通信實現(xiàn)的非接觸的無線識別技術。伴隨著物聯(lián)網(wǎng)技術的迅速發(fā)展,基于ISO/IEC18000-6C協(xié)議[1]的超高頻(UHF)RFID閱讀器的研究,已經(jīng)成為該領域的重點和熱點。隨著集成電路的迅速發(fā)展,SOC(system on chip)設計方法的應用也越來越廣泛。
一個SOC系統(tǒng)包括硬件模塊和軟件模塊[2-3]。對于SOC設計而言,其中一個最重要的方面就是軟硬件的協(xié)同設計。但是國內大多數(shù)的研究主要在軟件領域和硬件領域,針對協(xié)同仿真領域的研究較少。隨著SOC開發(fā)技術的發(fā)展,降低功耗、尺寸等關鍵因素,加快產(chǎn)品的研發(fā)周期,降低研發(fā)成本,逐漸成為集成電路設計的重要方向之一。
針對基于MC8051軟核的片上系統(tǒng)開發(fā),文中采取軟硬件協(xié)同設計,劃分系統(tǒng)模塊,分成軟件和硬件進行設計,應用MC8051處理器,進行軟件開發(fā)并設計完成其基帶通信鏈路模塊,搭建整個系統(tǒng)并進行仿真驗證。
MC8051是Oregano Systems公司發(fā)布的一款8位微處理器,與標準的MCS-51指令集完全兼容。它是一款比較經(jīng)典的8051微處理器[4],對比多款8051軟核,考慮到了VHDL語言的嚴謹性以及MC8051處理器穩(wěn)定可靠的性能,又支持開源WISHBONE總線協(xié)議,故采用MC8051處理器。
MC8051具備很多優(yōu)勢,用戶可以根據(jù)工程需要和實際需求,增加或者減少一些功能,通過修改其源代碼來優(yōu)化參數(shù),以適配目標系統(tǒng)。除了內部ROM和外部RAM可以根據(jù)工程要求及用戶需求作一定的擴展之外,串行模塊、定時器/計數(shù)器模塊、外部中斷模塊等均可進行一定的擴展。由于暫時未涉及到其他復雜的應用場景,文中僅使用默認設置。
對于搭建的閱讀器SOC系統(tǒng),主要包括兩大部分,一部分是MC8051處理器,實現(xiàn)軟件開發(fā)、控制處理等功能,另一部分是基帶收發(fā)鏈路,主要用來傳輸符合規(guī)范的數(shù)據(jù)包以及數(shù)據(jù)傳輸速率等內容。系統(tǒng)實現(xiàn)如圖1所示。
圖1 閱讀器SOC系統(tǒng)結構
將MC8051處理器與自定義基帶通信鏈路模塊進行互連時,基本思路是通過總線方式,將自定義基帶通信鏈路模塊接口與WISHBONE總線[5]接口互連,將WISHBONE總線接口直接與MC8051處理器外部RAM接口互連,在邏輯上將基帶通信鏈路模塊作為處理器的外部RAM[6-7]。在軟件程序編寫時,與基帶通信鏈路模塊的數(shù)據(jù)交互亦類似與對外部RAM的讀寫操作。
Oregano Systems公司官網(wǎng)下載的MC8051軟核需經(jīng)過一定的修改[8],才能用于本系統(tǒng)閱讀器及基帶的SOC設計。在mc8051_p包文件中作相應修改,刪除原有mc8051_ramx模塊聲明,保留mc8051_rom模塊聲明,增加wb_reader_soc、reader_top模塊聲明。
值得注意的是,在增加上述模塊聲明后,需在工程中增加上述模塊對應的RTL文件。另外需要修改mc8051_rom及mc8051_t_rom文件,使其能正確讀取.dua文件以初始化ROM。
entity mc8051_rom
generic(c_init_file:string:=“mc8051_rom.dua”);
port( clk :instd_logic; --clock signal
reset :instd_logic; --reset signal
rom_data_o :instd_logic_vector(15 downto 0); --data output
rom_data_i :instd_logic_vector(15 downto 0)); --adress
end mc8051_rom
上述代碼中加粗部分為修改部分,系統(tǒng)應初始化ROM。因此,閱讀器ROM讀取文件名為mc8051_rom.dua,同時,也需要修改對應的結構體以及配置文件。
修改mc8051_top文件,在原有的mc8051_top頂層模塊中增加兩個信號tx_data以及data_rx,并刪除int0_i信號,由于基帶通信鏈路中斷信號int_bb直接與MC8051處理器int0_i信號互連,因此在頂層模塊信號列表中刪除這兩個信號。
將基帶通信鏈路模塊作為RAMX模塊與MC8051 RAMX接口通過WISHBOEN總線互連,如圖1所示。需要在原來的MC8051頂層模塊基礎上額外增加三個接口信號:tx_end、data_rx、int_bb,分別表示基帶串行信號輸出、輸入和基帶中斷信號輸出。
另外,寄存器定義是程序設計中非常重要的部分,用以實現(xiàn)控制、存儲等功能,在閱讀器系統(tǒng)中設置了若干組特殊功能寄存器,位于基帶通信鏈路模塊數(shù)字接口部分,各寄存器詳情如表1所示。
表1 數(shù)字接口寄存器定義
其中,CONTROL寄存器用于控制基帶通信鏈路發(fā)送與接收的控制;TX_BUF寄存器共有128位,保存MC8051需要發(fā)送的數(shù)據(jù),數(shù)據(jù)保存采用小端對齊方式,包含命令以及數(shù)據(jù)信息,在進行操作時,地址從0x01至0x10,每8位數(shù)據(jù)一組,以字節(jié)為單位;RX_BUF寄存器共有128位,保存基帶接收鏈路發(fā)送過來的數(shù)據(jù),數(shù)據(jù)保存采用小端對齊方式,包含命令以及數(shù)據(jù)信息,與TX_BUF類似,在進行操作時,地址從0x11至0x20,其中0x11地址的字節(jié)保存該條命令信息的長度信息,以位計算;STATE寄存器用來保存基帶中斷信號,基帶通信鏈路在鏈路數(shù)據(jù)發(fā)送完成后或鏈路數(shù)據(jù)接收完成后,都會產(chǎn)生中斷信號,且更新該寄存器,同時會將中斷信號發(fā)送至MC8051處理器,當MC8051響應中斷后,會從該寄存器中讀取中斷狀態(tài),以做出應答。
由第二小節(jié)得知,修改后的MC8051軟核需要將所設計的閱讀器的軟件協(xié)議部分以及硬件通信基帶鏈路實現(xiàn)均要設置頂層模塊。
閱讀器的系統(tǒng)軟件實現(xiàn)主要是對協(xié)議ISO/IEC 18000-6C的標準實現(xiàn)[9],基帶通信鏈路實現(xiàn)的主要是協(xié)議物理層規(guī)范,包含數(shù)據(jù)校驗及編解碼、數(shù)據(jù)包格式、數(shù)據(jù)傳輸速率等內容,最終以符合協(xié)議標準的數(shù)據(jù)格式將基帶信號輸入射頻模塊。
閱讀器軟件算法的設計思路是根據(jù)協(xié)議標準,對標簽進行發(fā)信,并對接收到的信息做出反饋,進而對標簽進行讀寫等一系列訪問操作。另外,閱讀器與標簽之間的通信需要滿足協(xié)議規(guī)定的鏈路時序要求[10-11]。
在MC8051中,該時序要求采用內部定時器實現(xiàn),當超過一定時間之后,內部定時器產(chǎn)生中斷,閱讀器進入新的執(zhí)行過程而不再等待標簽的應答。
由于閱讀器與標簽的通信是基于“半雙工”的機制,雙方是基于問答式的信息交互,即無法在接收的同時發(fā)送信息,發(fā)送鏈路或者接收鏈路同時只有一條鏈路在工作。因此,在軟件算法設計時充分考慮到這一點。當基帶通信鏈路模塊數(shù)據(jù)發(fā)送完畢時或者數(shù)據(jù)接收完畢時均會產(chǎn)生外部中斷,MC8051響應該中斷后,會根據(jù)當前狀態(tài)及時打開或者關閉閱讀器基帶通信鏈路的發(fā)送時鐘或者接收時鐘,調整閱讀器工作狀態(tài),從一定程度上而言,也達到了閱讀器基帶通信鏈路低功耗的設計效果。
因此,系統(tǒng)共需設置兩個中斷向量,分別是外部中斷INT0,以及內部鏈路時序定時器中斷。當產(chǎn)生外部中斷時,flag標志位置位;初始化外部中斷時,flag標志位復位。當內部定時器產(chǎn)生中斷時,TimingLink標志位置位;初始化內部定時器中斷時,TimingLink標志位復位。
其中外部中斷包含兩個內容,其一為數(shù)據(jù)發(fā)送完成,其二為數(shù)據(jù)接收完成,兩者均會引起INT0產(chǎn)生下降沿,以觸發(fā)中斷。當然,具體是發(fā)送還是接收完成,則由閱讀器判斷,它會讀取基帶通信鏈路模塊數(shù)字接口中的外部中斷狀態(tài)寄存器STATE,以確定究竟是數(shù)據(jù)發(fā)送完成還是數(shù)據(jù)接送完成,并進入不同的處理過程。閱讀器軟件算法實現(xiàn)流程如圖2所示。
圖2 閱讀器軟件算法流程
閱讀器基帶通信鏈路模塊負責實現(xiàn)硬件部分,基帶收發(fā)鏈路模塊設計方案是上行鏈路為發(fā)送鏈路,按照協(xié)議要求生成一定格式的串行碼流,下行鏈路為接收鏈路,實現(xiàn)數(shù)據(jù)的串行接收[12-13]。模塊通過數(shù)字接口與MC8051處理器進行通信,實現(xiàn)協(xié)議處理;通過串行I/O口TX及RX實現(xiàn)與外界信息的交互[14-15]。
閱讀器數(shù)字基帶發(fā)送鏈路具體設計如圖3所示,圖中顯示了閱讀器數(shù)字基帶發(fā)送鏈路的頂層模塊設計結構。閱讀器的發(fā)送鏈路主要包括七個模塊,分別為CLK模塊、CNT_R模塊、P2S模塊、CRC_Gen[16]模塊、異步FIFO模塊、PIE_Encode模塊[17]以及Preamble_R模塊,其中CLK模塊是把系統(tǒng)時鐘進行分頻,產(chǎn)生碼率時鐘以及PIE編碼時鐘。數(shù)據(jù)并行輸入CNT_R模塊,然后可以得出是否為Query命令的標志位query_flag;并行輸入的命令或者數(shù)據(jù)轉換為串行數(shù)據(jù),將轉換的數(shù)據(jù)進行CRC校驗,生成校驗碼;由于校驗、編碼的時鐘頻率不同,所以采用異步FIFO模塊,進行數(shù)據(jù)的緩存;對FIFO中緩存的數(shù)據(jù)進行PIE編碼,在編碼結束后,基于query_flag標志位選擇同步碼,最終串行輸出,完成基帶發(fā)送數(shù)據(jù)的處理。
閱讀器數(shù)字基帶接收鏈路具體設計如圖4所示,圖中顯示了閱讀器數(shù)字基帶接收鏈路的頂層模塊設計結構。閱讀器接收鏈路主要由四個模塊組成,分別為Head_Check_R模塊、Decode模塊、CRC16_Check模塊和S2P模塊。接收數(shù)據(jù)通過Head_Check_R模塊檢測同步碼,然后對檢測完同步碼的數(shù)據(jù)進行FM0或Miller副載波調制編碼信號的解碼操作,完成解碼后,對數(shù)據(jù)進行CRC解除校驗,然后將串行命令或數(shù)據(jù)轉為并行數(shù)據(jù),供MC8051處理器調用,從而完成硬件部分的基帶鏈路接收。
圖3 閱讀器數(shù)字基帶發(fā)送鏈路
圖4 閱讀器數(shù)字基帶接收鏈路
在系統(tǒng)包含的所有模塊中,每個模塊通過仿真驗證,才能在整個系統(tǒng)中進行仿真,以確保每個模塊的功能正確性以及系統(tǒng)仿真的可靠性。
系統(tǒng)的軟件開發(fā)在Keil軟件中進行,當完成編譯之后,生成.hex格式文件,但該文件尚無法在軟核上運行,需要通過hex2dua工具將其轉換為.dua格式,并分別替換ROM文件。.dua文件中所保存的即為MC8051軟核運行所需的機器碼,在啟動仿真時,MC8051會自動從中讀取程序并執(zhí)行[18]。
應用MC8051處理器的SOC系統(tǒng)進行軟硬件協(xié)同驗證,將驗證過的基帶鏈路與修改后的軟核進行系統(tǒng)上的驗證。如圖5所示,系統(tǒng)通過軟硬件驗證,得到正確的發(fā)送編碼。圖中所示的十六進制的CA數(shù)據(jù)是發(fā)送數(shù)據(jù)成功的驗證。
圖5 閱讀器SOC系統(tǒng)軟硬件仿真驗證
利用開源處理器MC8051軟核,根據(jù)協(xié)議要求,設計閱讀器軟件算法,結合自定義基帶通信鏈路模塊,通過WISHBONE總線協(xié)議實現(xiàn)兩者互連,搭建起系統(tǒng)硬件架構。驗證軟硬件協(xié)同,經(jīng)過系統(tǒng)仿真,實現(xiàn)閱讀器的編碼發(fā)送操作,完成了系統(tǒng)軟硬件的仿真驗證。對于采用MC8051軟核應用于SOC系統(tǒng)的方法,普遍適用于系統(tǒng)的設計,并可以根據(jù)實際需要結合處理器設計匹配整個系統(tǒng)。