王銘銘,卜 剛,張 龑
(南京航空航天大學,江蘇 南京 211106)
射頻識別技術(radio frequency identification,RFID)是一種利用射頻無線通信實現的非接觸的無線識別技術。伴隨著物聯網技術的迅速發展,基于ISO/IEC18000-6C協議[1]的超高頻(UHF)RFID閱讀器的研究,已經成為該領域的重點和熱點。隨著集成電路的迅速發展,SOC(system on chip)設計方法的應用也越來越廣泛。
一個SOC系統包括硬件模塊和軟件模塊[2-3]。對于SOC設計而言,其中一個最重要的方面就是軟硬件的協同設計。但是國內大多數的研究主要在軟件領域和硬件領域,針對協同仿真領域的研究較少。隨著SOC開發技術的發展,降低功耗、尺寸等關鍵因素,加快產品的研發周期,降低研發成本,逐漸成為集成電路設計的重要方向之一。
針對基于MC8051軟核的片上系統開發,文中采取軟硬件協同設計,劃分系統模塊,分成軟件和硬件進行設計,應用MC8051處理器,進行軟件開發并設計完成其基帶通信鏈路模塊,搭建整個系統并進行仿真驗證。
MC8051是Oregano Systems公司發布的一款8位微處理器,與標準的MCS-51指令集完全兼容。它是一款比較經典的8051微處理器[4],對比多款8051軟核,考慮到了VHDL語言的嚴謹性以及MC8051處理器穩定可靠的性能,又支持開源WISHBONE總線協議,故采用MC8051處理器。
MC8051具備很多優勢,用戶可以根據工程需要和實際需求,增加或者減少一些功能,通過修改其源代碼來優化參數,以適配目標系統。除了內部ROM和外部RAM可以根據工程要求及用戶需求作一定的擴展之外,串行模塊、定時器/計數器模塊、外部中斷模塊等均可進行一定的擴展。由于暫時未涉及到其他復雜的應用場景,文中僅使用默認設置。
對于搭建的閱讀器SOC系統,主要包括兩大部分,一部分是MC8051處理器,實現軟件開發、控制處理等功能,另一部分是基帶收發鏈路,主要用來傳輸符合規范的數據包以及數據傳輸速率等內容。系統實現如圖1所示。

圖1 閱讀器SOC系統結構
將MC8051處理器與自定義基帶通信鏈路模塊進行互連時,基本思路是通過總線方式,將自定義基帶通信鏈路模塊接口與WISHBONE總線[5]接口互連,將WISHBONE總線接口直接與MC8051處理器外部RAM接口互連,在邏輯上將基帶通信鏈路模塊作為處理器的外部RAM[6-7]。在軟件程序編寫時,與基帶通信鏈路模塊的數據交互亦類似與對外部RAM的讀寫操作。
Oregano Systems公司官網下載的MC8051軟核需經過一定的修改[8],才能用于本系統閱讀器及基帶的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
上述代碼中加粗部分為修改部分,系統應初始化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,分別表示基帶串行信號輸出、輸入和基帶中斷信號輸出。
另外,寄存器定義是程序設計中非常重要的部分,用以實現控制、存儲等功能,在閱讀器系統中設置了若干組特殊功能寄存器,位于基帶通信鏈路模塊數字接口部分,各寄存器詳情如表1所示。

表1 數字接口寄存器定義
其中,CONTROL寄存器用于控制基帶通信鏈路發送與接收的控制;TX_BUF寄存器共有128位,保存MC8051需要發送的數據,數據保存采用小端對齊方式,包含命令以及數據信息,在進行操作時,地址從0x01至0x10,每8位數據一組,以字節為單位;RX_BUF寄存器共有128位,保存基帶接收鏈路發送過來的數據,數據保存采用小端對齊方式,包含命令以及數據信息,與TX_BUF類似,在進行操作時,地址從0x11至0x20,其中0x11地址的字節保存該條命令信息的長度信息,以位計算;STATE寄存器用來保存基帶中斷信號,基帶通信鏈路在鏈路數據發送完成后或鏈路數據接收完成后,都會產生中斷信號,且更新該寄存器,同時會將中斷信號發送至MC8051處理器,當MC8051響應中斷后,會從該寄存器中讀取中斷狀態,以做出應答。
由第二小節得知,修改后的MC8051軟核需要將所設計的閱讀器的軟件協議部分以及硬件通信基帶鏈路實現均要設置頂層模塊。
閱讀器的系統軟件實現主要是對協議ISO/IEC 18000-6C的標準實現[9],基帶通信鏈路實現的主要是協議物理層規范,包含數據校驗及編解碼、數據包格式、數據傳輸速率等內容,最終以符合協議標準的數據格式將基帶信號輸入射頻模塊。
閱讀器軟件算法的設計思路是根據協議標準,對標簽進行發信,并對接收到的信息做出反饋,進而對標簽進行讀寫等一系列訪問操作。另外,閱讀器與標簽之間的通信需要滿足協議規定的鏈路時序要求[10-11]。
在MC8051中,該時序要求采用內部定時器實現,當超過一定時間之后,內部定時器產生中斷,閱讀器進入新的執行過程而不再等待標簽的應答。
由于閱讀器與標簽的通信是基于“半雙工”的機制,雙方是基于問答式的信息交互,即無法在接收的同時發送信息,發送鏈路或者接收鏈路同時只有一條鏈路在工作。因此,在軟件算法設計時充分考慮到這一點。當基帶通信鏈路模塊數據發送完畢時或者數據接收完畢時均會產生外部中斷,MC8051響應該中斷后,會根據當前狀態及時打開或者關閉閱讀器基帶通信鏈路的發送時鐘或者接收時鐘,調整閱讀器工作狀態,從一定程度上而言,也達到了閱讀器基帶通信鏈路低功耗的設計效果。
因此,系統共需設置兩個中斷向量,分別是外部中斷INT0,以及內部鏈路時序定時器中斷。當產生外部中斷時,flag標志位置位;初始化外部中斷時,flag標志位復位。當內部定時器產生中斷時,TimingLink標志位置位;初始化內部定時器中斷時,TimingLink標志位復位。
其中外部中斷包含兩個內容,其一為數據發送完成,其二為數據接收完成,兩者均會引起INT0產生下降沿,以觸發中斷。當然,具體是發送還是接收完成,則由閱讀器判斷,它會讀取基帶通信鏈路模塊數字接口中的外部中斷狀態寄存器STATE,以確定究竟是數據發送完成還是數據接送完成,并進入不同的處理過程。閱讀器軟件算法實現流程如圖2所示。

圖2 閱讀器軟件算法流程
閱讀器基帶通信鏈路模塊負責實現硬件部分,基帶收發鏈路模塊設計方案是上行鏈路為發送鏈路,按照協議要求生成一定格式的串行碼流,下行鏈路為接收鏈路,實現數據的串行接收[12-13]。模塊通過數字接口與MC8051處理器進行通信,實現協議處理;通過串行I/O口TX及RX實現與外界信息的交互[14-15]。
閱讀器數字基帶發送鏈路具體設計如圖3所示,圖中顯示了閱讀器數字基帶發送鏈路的頂層模塊設計結構。閱讀器的發送鏈路主要包括七個模塊,分別為CLK模塊、CNT_R模塊、P2S模塊、CRC_Gen[16]模塊、異步FIFO模塊、PIE_Encode模塊[17]以及Preamble_R模塊,其中CLK模塊是把系統時鐘進行分頻,產生碼率時鐘以及PIE編碼時鐘。數據并行輸入CNT_R模塊,然后可以得出是否為Query命令的標志位query_flag;并行輸入的命令或者數據轉換為串行數據,將轉換的數據進行CRC校驗,生成校驗碼;由于校驗、編碼的時鐘頻率不同,所以采用異步FIFO模塊,進行數據的緩存;對FIFO中緩存的數據進行PIE編碼,在編碼結束后,基于query_flag標志位選擇同步碼,最終串行輸出,完成基帶發送數據的處理。

閱讀器數字基帶接收鏈路具體設計如圖4所示,圖中顯示了閱讀器數字基帶接收鏈路的頂層模塊設計結構。閱讀器接收鏈路主要由四個模塊組成,分別為Head_Check_R模塊、Decode模塊、CRC16_Check模塊和S2P模塊。接收數據通過Head_Check_R模塊檢測同步碼,然后對檢測完同步碼的數據進行FM0或Miller副載波調制編碼信號的解碼操作,完成解碼后,對數據進行CRC解除校驗,然后將串行命令或數據轉為并行數據,供MC8051處理器調用,從而完成硬件部分的基帶鏈路接收。
圖3 閱讀器數字基帶發送鏈路

圖4 閱讀器數字基帶接收鏈路
在系統包含的所有模塊中,每個模塊通過仿真驗證,才能在整個系統中進行仿真,以確保每個模塊的功能正確性以及系統仿真的可靠性。
系統的軟件開發在Keil軟件中進行,當完成編譯之后,生成.hex格式文件,但該文件尚無法在軟核上運行,需要通過hex2dua工具將其轉換為.dua格式,并分別替換ROM文件。.dua文件中所保存的即為MC8051軟核運行所需的機器碼,在啟動仿真時,MC8051會自動從中讀取程序并執行[18]。
應用MC8051處理器的SOC系統進行軟硬件協同驗證,將驗證過的基帶鏈路與修改后的軟核進行系統上的驗證。如圖5所示,系統通過軟硬件驗證,得到正確的發送編碼。圖中所示的十六進制的CA數據是發送數據成功的驗證。

圖5 閱讀器SOC系統軟硬件仿真驗證
利用開源處理器MC8051軟核,根據協議要求,設計閱讀器軟件算法,結合自定義基帶通信鏈路模塊,通過WISHBONE總線協議實現兩者互連,搭建起系統硬件架構。驗證軟硬件協同,經過系統仿真,實現閱讀器的編碼發送操作,完成了系統軟硬件的仿真驗證。對于采用MC8051軟核應用于SOC系統的方法,普遍適用于系統的設計,并可以根據實際需要結合處理器設計匹配整個系統。