張先波 奧托尼克斯電子(嘉興)有限公司
基于ARM內(nèi)核的計(jì)時(shí)器設(shè)計(jì)
張先波 奧托尼克斯電子(嘉興)有限公司
本設(shè)計(jì)所涉及的是一款計(jì)時(shí)器產(chǎn)品,其基于ARM內(nèi)核,構(gòu)建了計(jì)時(shí)器共用一個(gè)端口讀寫控制器與FPGA中央控制器進(jìn)行數(shù)據(jù)通信。計(jì)時(shí)器內(nèi)部工作是相互獨(dú)立的,通過使用地址映射存儲(chǔ)器使得計(jì)時(shí)器的指令執(zhí)行更加高效;本設(shè)計(jì)還對(duì)中央控制器與計(jì)時(shí)器的通信時(shí)序和通信格式進(jìn)行了優(yōu)化,便于中央控制器對(duì)計(jì)時(shí)器的控制與測(cè)試。
ARM內(nèi)核 計(jì)時(shí)器 讀寫時(shí)序
ARM內(nèi)部資源包括內(nèi)部繼電器、專用繼電器、數(shù)據(jù)存儲(chǔ)區(qū)、計(jì)時(shí)器、保持繼電器等。中央控制器主要用以完成對(duì)雙口RAM內(nèi)部ARM寫入的數(shù)據(jù)進(jìn)行讀出、處理、整理和寫入操作。多操作位邏輯運(yùn)算控制模塊主要用以實(shí)現(xiàn)邏輯運(yùn)算指令。輸入存儲(chǔ)與讀取控制模塊主要用以讀取外部開關(guān)量的狀態(tài)信息。數(shù)據(jù)輸出控制模塊主要用以將程序執(zhí)行結(jié)果處理后驅(qū)動(dòng)外部負(fù)載。
基于FPGA的可重構(gòu)技術(shù),就是利用FPGA可以多次重復(fù)編程配置的特點(diǎn),通過分時(shí)復(fù)用的方式利用FPGA內(nèi)部的邏輯資源,使在時(shí)間上離散的邏輯電路功能模塊能在同一FPGA中順序?qū)崿F(xiàn)的技術(shù)。
設(shè)計(jì)的計(jì)時(shí)器為可重構(gòu)的設(shè)計(jì),最多可設(shè)計(jì)有256個(gè)計(jì)時(shí)器,235個(gè)內(nèi)部計(jì)數(shù)器。可以根據(jù)具體工程應(yīng)用來設(shè)計(jì)其內(nèi)部計(jì)時(shí)器的數(shù)量,以達(dá)到FPGA資源的靈活配置。
計(jì)時(shí)器通過總線的形式與FPGA中央控制器進(jìn)行數(shù)據(jù)的交互,它們的工作是相互獨(dú)立的,能并行地工作,相互之間不影響。它們使用相同結(jié)構(gòu)和功能的端口讀寫控制器與中央控制器進(jìn)行數(shù)據(jù)交互,在相同的時(shí)刻只能有一個(gè)模塊占用總線與中央控制器進(jìn)行通信。計(jì)時(shí)器與FPGA通信框圖如圖1所示。
圖1 計(jì)時(shí)器與FPGA通信框圖
端口讀寫控制器主要實(shí)現(xiàn)與中央控制器的接口,計(jì)時(shí)器根據(jù)讀寫時(shí)序,通過端口讀寫控制器實(shí)現(xiàn)與中央控制器的數(shù)據(jù)交換。RST復(fù)位線使用低電平復(fù)位;ADDRC是模塊地址線;RDC和WRC為低電平使能;ASK(1/2)與ANS(1/2)線均為低電平有效。讀寫控制模塊通過判斷RDC和WRC以及ADDRC的狀態(tài),控制組合邏輯三態(tài)門構(gòu)成的32位雙向I/O口DATAC進(jìn)行數(shù)據(jù)的輸入或輸出。端口讀寫控制器的32位指令緩存可以存儲(chǔ)一條指令,由29位data_in線輸出對(duì)D28-D0即指令數(shù)據(jù),由3位code-in線輸出D31-D29即指令類型。CE指令執(zhí)行標(biāo)志線。當(dāng)存儲(chǔ)有指令時(shí),置BUSY(1/2)線和CE線為低電平。
圖2 端口讀寫控制器結(jié)構(gòu)圖
由ARM與FPGA協(xié)同構(gòu)建的PLC控制系統(tǒng),ARM作為PLC主控制器通過數(shù)據(jù)總線、地址總線、控制總線向FPGA發(fā)送指令命令,F(xiàn)PGA接收到ARM的指令命令之后,通過FPGA中央控制器與計(jì)數(shù)器進(jìn)行通信。
3.1 計(jì)時(shí)器設(shè)計(jì)
計(jì)時(shí)器總體結(jié)構(gòu)圖設(shè)計(jì)如圖3所示,其中主要包含以下模塊:端口讀寫控制器,計(jì)時(shí)器地址映射存儲(chǔ)器,計(jì)時(shí)器存儲(chǔ)器,計(jì)時(shí)器指令執(zhí)行器,計(jì)時(shí)器控制器,1kHz脈沖生成器。
圖3 計(jì)時(shí)器總體結(jié)構(gòu)圖
3.1.1 計(jì)時(shí)器地址映射存儲(chǔ)器
計(jì)時(shí)器當(dāng)前值和設(shè)定值在相應(yīng)存儲(chǔ)器中的存儲(chǔ)位置與計(jì)時(shí)器本身的編號(hào)對(duì)應(yīng)。當(dāng)進(jìn)行計(jì)時(shí)器操作或者進(jìn)行計(jì)時(shí)器結(jié)果上傳操作時(shí),只需要從計(jì)時(shí)器地址映射存儲(chǔ)器中的第一個(gè)地址開始順序讀取被使用的計(jì)時(shí)器的編號(hào),以此編號(hào)為地址,便可以迅速地在定時(shí)存儲(chǔ)器中找到使用了的計(jì)時(shí)器的相關(guān)數(shù)據(jù)進(jìn)行操作,達(dá)到了提高系統(tǒng)執(zhí)行效率的目的。
計(jì)時(shí)器地址映射存儲(chǔ)器的封裝如圖4所示。RWCLK為讀寫時(shí)鐘輸入端口,讀與寫共用一個(gè)時(shí)鐘;RESET為復(fù)位信號(hào)輸入端口;WEN為寫使能信號(hào)輸入端口;REN為讀使能信號(hào)輸入端口;WADDR為寫入地址輸入端口;RADDR為讀出地址輸入端口;WD為寫入數(shù)據(jù)輸入端口;RD為讀出數(shù)據(jù)輸出端口。計(jì)時(shí)器地址映射存儲(chǔ)器使用Libero8.3IDE提供的雙端口存儲(chǔ)器IP核生成。
圖4 計(jì)時(shí)器地址映射存儲(chǔ)器封裝圖
3.1.2 計(jì)時(shí)器控制器
當(dāng)1kHz脈沖上升沿到來時(shí)定時(shí)控制器將會(huì)啟動(dòng),當(dāng)指令寫入標(biāo)志CE為高電平即計(jì)時(shí)器內(nèi)沒有指令且定時(shí)操作結(jié)束標(biāo)志寄存器K1為0時(shí),定時(shí)控制器將會(huì)執(zhí)行定時(shí)操作。先通過從地址映射存儲(chǔ)器中讀取被使用了的計(jì)時(shí)器的編號(hào);兩個(gè)時(shí)鐘周期后,從定時(shí)存儲(chǔ)器中讀取出的計(jì)時(shí)器的信息;第3個(gè)時(shí)鐘周期后,對(duì)計(jì)時(shí)器的定時(shí)數(shù)據(jù)進(jìn)行判斷。操作完畢后將相關(guān)信息寫入定時(shí)存儲(chǔ)器。計(jì)時(shí)器控制器程序流程圖如圖5所示。
圖5 計(jì)時(shí)器控制器程序流程圖
本文對(duì)ARM的計(jì)時(shí)器設(shè)計(jì)進(jìn)行了闡述,并對(duì)設(shè)計(jì)所使用的軟件和硬件平臺(tái)及編程語言進(jìn)行了說明。同時(shí)對(duì)端口讀寫控制器及中央控制器與定時(shí)和計(jì)數(shù)控制模塊的時(shí)序進(jìn)行了設(shè)計(jì),可以根據(jù)需要來增減計(jì)時(shí)器的數(shù)量和種類。