柯寶中 侯麗 潘紹明 蔡啟仲
摘 要:針對工業(yè)上對計數(shù)器的需求以及計數(shù)器擴展存在的問題,充分應(yīng)用FPGA的并行處理功能,提出了一種模塊內(nèi)部串行處理,各模塊間并行執(zhí)行的計數(shù)器IP核的設(shè)計方法;設(shè)計了系統(tǒng)的電路結(jié)構(gòu),指令格式,并行處理模塊電路和串行處理流程程序,研制的計數(shù)器IP核為具有多達(dá)14個16位或6個32位的計數(shù)器,能夠自動重新裝載計數(shù)參數(shù),選擇計數(shù)輸入脈沖濾波參數(shù)等功能.經(jīng)仿真驗證了研制的計數(shù)器IP核功能的正確性.
關(guān)鍵詞:FPGA;并行處理;計數(shù)器;IP核
中圖分類號:TP332 文獻(xiàn)標(biāo)志碼:A
0 引言
在大規(guī)模定時/計數(shù)控制或其他需要應(yīng)用眾多定時/計數(shù)器的8位微處理器應(yīng)用系統(tǒng)中,擴展定時器/計數(shù)器的方法有3種:一是應(yīng)用微處理器內(nèi)部有限數(shù)量的定時器/計數(shù)器,輔以軟件計數(shù)方式予以解決,但增加了計數(shù)程序的運行時間;二是采用微處理器外擴專用定時器/計數(shù)器芯片,所需的定時器/計數(shù)器越多,外擴專用定時器/計數(shù)器芯片就越多,8位微處理器應(yīng)用系統(tǒng)的電路規(guī)模就越大;三是采用不可編程的硬件定時/計數(shù),其每個定時器/計數(shù)器用獨立的硬件電路實現(xiàn);采用這種方式實現(xiàn)定時計數(shù)功能,所需的定時/計數(shù)器越多,電路規(guī)模就越大,維護(hù)工作量越大[1-5].本文應(yīng)用FPGA[6-8]的并行處理功能設(shè)計一種實現(xiàn)十余個計數(shù)器并行計數(shù)的IP核,提出模塊內(nèi)部串行處理,各模塊間并行執(zhí)行的設(shè)計方法,設(shè)計并行處理模塊電路和串行處理流程程序,滿足工業(yè)應(yīng)用系統(tǒng)對計數(shù)器的需求,提高計數(shù)器IP核的運行速率.
1 設(shè)計的基本思路
通常計數(shù)器電路的設(shè)計是對每個計數(shù)器專門設(shè)計一個加1或減1計數(shù)器,這是一般微處理器設(shè)計計數(shù)器常用的方法.而本文對每個計數(shù)器設(shè)置一個存儲單元作為計數(shù)寄存器,設(shè)計16位字長的命令字,在數(shù)據(jù)輸入輸出與命令字分解儲存控制模塊中對命令字進(jìn)行分析,輸出被選中的計數(shù)器的控制信號,并在計數(shù)處理控制模塊中設(shè)計3個并行處理的處理流程,實現(xiàn)計數(shù)脈沖輸入端口狀態(tài)的循環(huán)掃描、濾波、計數(shù)、溢出的并行處理.
計數(shù)寄存器和命令寄存器采用8位字長的寄存器,其地址編碼與計數(shù)、命令字寄存器設(shè)計如表1所示.表1中,相鄰的2個計數(shù)寄存器組成1個16位計數(shù)寄存器,2個16位計數(shù)寄存器組成1個32位的計數(shù)寄存器,能夠得到14個16位計數(shù)器或6個32位計數(shù)器.表1中還有2個16位命令寄存器.
2 命令字指令格式
16位命令字寄存器分為工作模式與濾波命令字寄存器和狀態(tài)控制命令字寄存器,其命令字指令格式如表2和表3所示.
工作模式與濾波命令字寄存器的各位定義如下:
D0D1:M1M0(工作模式).00:16位計數(shù)器;01:32位計數(shù)器;10:GATE16位計數(shù)器;11:GATE32位計數(shù)器.
D2~D5:S3~S0(計數(shù)器編號).16位計數(shù)器:0~13;32位計數(shù)器:0~5.
D6~D7:F1F0(濾波參數(shù)).00:濾波參數(shù)為1;01:濾波參數(shù)為100;10:濾波參數(shù)為1 000;11:濾波參數(shù)為10 000.
狀態(tài)控制命令字寄存器的各位定義如下:
D0:清溢出標(biāo)志,低電平有效.
D1:清當(dāng)前計數(shù)值,低電平有效.
D5~D2:S3~S0(計數(shù)器編號).16位計數(shù)器:0~13;32位計數(shù)器:0~5.
D6:保留位,用于后續(xù)的擴展.
D7:啟停位,1:啟動;0:停止.
3 計數(shù)器IP核電路設(shè)計
計數(shù)器的系統(tǒng)電路結(jié)構(gòu)如圖1所示,包括數(shù)據(jù)輸入輸出與命令字分解存儲控制模塊,計數(shù)處理控制模塊,脈沖12分頻器,輸入門控選擇控制模塊,計數(shù)器溢出控制模塊.
3.1 數(shù)據(jù)輸入輸出與命令字分解儲存控制模塊
數(shù)據(jù)輸入輸出與命令字分解存儲控制模塊的主要功能是控制數(shù)據(jù)輸入輸出和命令字分解輸出,以及輸出寫、讀等控制信號.該控制模塊將系統(tǒng)寫入的低8位命令字分解為工作模式與濾波命令和計數(shù)器編號,并發(fā)出寫信號1將工作模式與濾波命令按照計數(shù)器編號將分頻倍數(shù)編碼寫入相對應(yīng)的控制模塊.將高8位命令字分解為清溢出標(biāo)志,清當(dāng)前計數(shù)值,啟停計數(shù)器工作和計數(shù)器編號,并發(fā)出寫信號2將這些控制信號寫入相對應(yīng)的控制模塊.
如果系統(tǒng)寫信號有效,地址為某一計數(shù)器的計數(shù)寄存器,該控制模塊向計數(shù)處理控制模塊發(fā)出寫信號3,通過計數(shù)參數(shù)數(shù)據(jù)線將計數(shù)器參數(shù)寫入所對應(yīng)的計數(shù)寄存器.
如果系統(tǒng)讀信號有效,按照系統(tǒng)給定計數(shù)器的計數(shù)寄存器地址,直接讀出該計數(shù)寄存器的實時計數(shù)值,通過計數(shù)實時值數(shù)據(jù)線讀出傳輸?shù)綉?yīng)用系統(tǒng)的數(shù)據(jù)總線,16位計數(shù)器的實時計數(shù)參數(shù)需要分時2次予以讀出,32位計數(shù)器的實時計數(shù)參數(shù)需要分時4次予以讀出.在8位微處理器應(yīng)用系統(tǒng)輸出的復(fù)位信號作用下,停止所有計數(shù)器的計數(shù)操作.
3.2 計數(shù)處理控制模塊
計數(shù)處理控制模塊包括雙端口存儲器,計數(shù)控制操作模塊.計數(shù)處理控制模塊是整個計數(shù)器IP核的核心控制模塊.
3.2.1 雙端口寄存器模塊 計數(shù)處理控制模塊內(nèi)部包括5個雙端口寄存器模塊,分別為8位計數(shù)參數(shù)模塊,8位計數(shù)實時參數(shù)寄存器模塊,4位工作模式分頻倍數(shù)編碼寄存器模塊,3位狀態(tài)控制雙端口寄存器模塊,4位計數(shù)濾波參數(shù)移位寄存器模塊.其中4位工作模式分頻倍數(shù)編碼雙端口存儲器,3位狀態(tài)控制雙端口存儲器均采用順序存取.由于計數(shù)器的初值可能是16/32位,則8位計數(shù)參數(shù)雙端口存儲器和8位計數(shù)實時參數(shù)雙端口存儲器采用的是8位的存儲單元,16位的數(shù)據(jù)將順序存在相連的兩個地址內(nèi),32位的則存在相連的4個地址內(nèi).4位計數(shù)濾波參數(shù)移位存儲器主要是檢測外部計數(shù)源的下降沿.
3.2.2 計數(shù)控制操作模塊 計數(shù)控制操作模塊按照模塊內(nèi)部串行處理,各模塊間并行執(zhí)行的設(shè)計思路,設(shè)計并行處理模塊和串行處理流程程序.該模塊包括了3個處理流程:計數(shù)器指令分析處理流程,濾波檢測處理流程,計數(shù)器加1與溢出流程.控制器對每個計數(shù)器的操作分為:讀取數(shù)據(jù),數(shù)據(jù)操作和數(shù)據(jù)存儲[9].
計數(shù)器指令分析處理流程:一個濾波基準(zhǔn)時鐘脈沖周期完成計數(shù)器的一次分析處理,判斷該計數(shù)器是否啟動,其主要過程是當(dāng)指令寫入后,計數(shù)器指令分析處理模塊開始執(zhí)行指令分析操作,先通過讀取判斷計數(shù)器j是否超出計數(shù)器的個數(shù)(當(dāng)設(shè)置為32位計數(shù)器時j最大為5,當(dāng)設(shè)置為16位計數(shù)器時j最大為13,所以取j最大為13),一個時鐘后從雙端口存儲器中讀取該計數(shù)器的信息,2個時鐘之后開始對計數(shù)器的信息進(jìn)行判斷,根據(jù)不同的指令信息確定該計數(shù)器是否啟動完成,操作完成后設(shè)置該計數(shù)器的啟動標(biāo)志位,并將計數(shù)器編號加1循環(huán)判斷下個計數(shù)器是否啟動,其流程圖如圖2所示.
濾波檢測模塊的功能是檢測外部計數(shù)信號是否產(chǎn)生下降沿.當(dāng)計數(shù)器的啟動標(biāo)志位為1時,根據(jù)計數(shù)器設(shè)置的濾波參數(shù)值對外部計數(shù)源進(jìn)行采樣檢測,當(dāng)檢測到1100時,設(shè)置計數(shù)器的加1標(biāo)志位為1,其流程圖如圖3所示.
計數(shù)器加1與溢出模塊主要是實現(xiàn)是否加1的過程,通過計數(shù)器加1標(biāo)志來判斷.當(dāng)加1標(biāo)志為1時,該計數(shù)器加1,清加1標(biāo)志;然后判斷計數(shù)器是否溢出,如果溢出則設(shè)置溢出標(biāo)志位為1,自動重新裝載初值,重新判斷計數(shù)器加1標(biāo)志;如果沒溢出則設(shè)置計數(shù)器溢出標(biāo)志為0時,返回重新判斷計數(shù)器加1標(biāo)志,其流程圖如圖4所示.
根據(jù)上面對于各個模塊流程圖的分析理解可以計算出1個計數(shù)器完成一次計算需要的周期為15個時鐘,則完成一次所有計數(shù)器的操作需要的掃描周期為T=15*14*(1 / T系統(tǒng) ),所以當(dāng)系統(tǒng)時鐘為48 MHz時,對應(yīng)該計數(shù)器的計數(shù)最高頻率為228.57 kHz.
3.3 輸入門控選擇控制模塊
輸入門控選擇控制模塊主要功能是使計數(shù)器不僅可以通過軟件編程控制計數(shù)器運行,還可以通過門控信息實現(xiàn)外部信號對計數(shù)器運行的控制.
4 通信協(xié)議
應(yīng)用FPGA設(shè)計的計數(shù)器IP核與微處理器的總線連接,每個計數(shù)器輸入的計數(shù)脈沖來自于IP核的計數(shù)脈沖輸入端口,其IP核的封裝如圖5所示.
計數(shù)器與8位微處理器的接口采用了8位并行數(shù)據(jù)通信方式.端口包括8位的DB數(shù)據(jù)線,5位的AB地址線,CS片選信號線,CLK時鐘輸入信號線,WR寫控制線,RD讀控制線,RST復(fù)位信號線.其中數(shù)據(jù)線采用了三態(tài)門實現(xiàn)雙向I/O口.計數(shù)器與微處理之間的通信時序如圖6所示,片選信號CS為低,當(dāng)WR信號有效時,進(jìn)行寫操作;片選信號CS為低,當(dāng)RD信號有效時,進(jìn)行讀操作;每個數(shù)據(jù)和指令寫入或讀出都只維持一個系統(tǒng)時鐘.
5 仿真與驗證
通過modelsim軟件進(jìn)行仿真,編寫一個testbench.v文件用于模擬實際處理發(fā)送指令的操作.在仿真的過程中可以觀察各個模塊內(nèi)部數(shù)據(jù)的變化.測試的方法:通過編程仿真外部的輸入信號啟動計數(shù)器,并測試計數(shù)器是否在規(guī)定的時間內(nèi)執(zhí)行相應(yīng)的操作.
1) 順序向FPGA寫入2個計數(shù)器的指令和計數(shù)初值.
根據(jù)寫入的指令和地址可以確定計數(shù)器的工作模式、工作狀態(tài)、濾波參數(shù).
如圖7(a)所示:首先寫入第一個計數(shù)器的指令為8'b10000000,8'b10000001,計數(shù)初值為16'b11111111_11111110,即設(shè)置計數(shù)器0的工作模式是16位的無門控計數(shù),工作狀態(tài)是啟動該計數(shù)器,清溢出標(biāo)志,濾波參數(shù)為1 000.
如圖7(b)所示:接下來順序?qū)懭氲诙€計數(shù)器的指令8'b11001101,8'b10001100,計數(shù)初值32'b01000011_01000011_00000101_00000001,即設(shè)置計數(shù)器3的工作模式是無門控32位計數(shù),工作狀態(tài)是啟動該計數(shù)器,濾波參數(shù)為10 000.
2) 設(shè)置外部計數(shù)源信號.
如圖8所示:設(shè)置計數(shù)器0的外部計數(shù)源c0產(chǎn)生了3個計數(shù)信號,計數(shù)器3的外部計數(shù)源c3產(chǎn)生了2個計數(shù)信號.
3) 對啟動的計數(shù)器在外部計數(shù)信號不再發(fā)出后,讀出2個計數(shù)器的當(dāng)前值.
如圖9(a)所示:計數(shù)器0的當(dāng)前值為16'b11111111_11111110,根據(jù)計數(shù)器0外部計數(shù)信號為3個,由于計數(shù)器0的初值16'b11111111_1111110,當(dāng)檢測外部計數(shù)信號下降沿后計數(shù)器加1,計數(shù)值滿溢出標(biāo)志tf0為1,由于計數(shù)器具有自動裝載初值的功能則計數(shù)器0的當(dāng)前值變成16'b11111111_11111110.由圖8可知,在計數(shù)信號下降沿到達(dá)后,tf0產(chǎn)生一個脈沖信號.
如圖9(b)所示:計數(shù)器3的當(dāng)前值為32'b01000011_01000011_00000101_00000011.根據(jù)圖8所示計數(shù)器3的外部計數(shù)信號為2個,可以知道計數(shù)器3的計數(shù)結(jié)果正確,由于計數(shù)結(jié)果未超出上限值則計數(shù)結(jié)果未溢出,由此可以看出計數(shù)器0與計數(shù)器3可以同時對各自外部計數(shù)信號進(jìn)行計數(shù).
6 結(jié)論
本文以FPGA為平臺研制了一種與8位微處理器應(yīng)用系統(tǒng)連接的計數(shù)器IP核,提出了模塊內(nèi)部串行處理,各模塊間并行執(zhí)行的設(shè)計思路,設(shè)計了計數(shù)器的指令格式和命令字地址編碼.這不僅能夠?qū)崿F(xiàn)計數(shù)、自動重新裝載、溢出等功能,而且可以利用命令字地址編碼來實現(xiàn)地址映射存儲器存儲計數(shù)器的相關(guān)操作,使得計數(shù)器的操作更簡單,從而達(dá)到設(shè)計要求.該設(shè)計克服了已有計數(shù)方式存在的不足,使得IP核與微處理器應(yīng)用系統(tǒng)連接,編程控制便利,適合計數(shù)器計數(shù)與計數(shù)控制系統(tǒng)需求.
參考文獻(xiàn)
[1] 薛迎春. 基于FPGA的8051IP核的設(shè)計與驗證研究[D].蘇州:蘇州大學(xué),2010.
[2] 劉鳳新,潘小莉. 基于VHDL的定時/計數(shù)芯片的設(shè)計[J].微計算機應(yīng)用,2004,25(1):122-125.
[3] 閆永志,劉偉,何方. 基于FPGA的可編程定時器/計數(shù)器8253的設(shè)計與實現(xiàn)[J].電子設(shè)計應(yīng)用, 2004(2):26-28.
[4] 柯寶中,侯麗,蔡啟仲,等. 一種與8位微處理器應(yīng)用系統(tǒng)連接的計數(shù)器IP核:L201520463374.7[P].2015-11-18.
[5] 余玲. 基于FPGA的可重構(gòu)定時器IP核設(shè)計[J].輕工科技, 2015,31(7):86-88.
[6] 李克儉,付杰,蔡啟仲,等. 基于FPGA的串行定時器設(shè)計[J].廣西工學(xué)院學(xué)報,2012,23(3):61-65.
[7] 周曙光,李克儉,蔡啟仲,等. 基于FPGA的PLC并行數(shù)據(jù)輸出控制器設(shè)計[J].廣西工學(xué)院學(xué)報,2013,24(1):14-18.
[8] 任杰,李克儉,潘紹明,等. 雙口RAM讀寫正確性自動測試的有限狀態(tài)機控制器設(shè)計方法[J].廣西科技大學(xué)學(xué)報,2015,
26(4):36-41.
[9] 張煒,李克儉,蔡啟仲,等. 基于FPGA的PLC并行定時器的設(shè)計[J].計算機工程與設(shè)計,2013,34(4):1244-1249.
Abstract: To meet the demand of counters and solve the problem of their extension in industry, this design uses the parallel processing function of FPGA to propose a design of the counter IP core which features the module internal serial processing and each module parallel executing. We design the circuit configuration of the system, instruction format, parallel processing module circuit and serial processing procedures. The IP core includes 14 16-bit or 6 32-bit counters. When the count value of each counter overflows, the counter will reload the count parameter automatically, and choose pulse filtering parameter by programming. The simulation results show the correctness of the IP core functions.
Key words: FPGA; parallel processing; counter; IP core
(學(xué)科編輯:黎 婭)