王雪麗 羅文廣 覃永新
摘 要:根據(jù)多通道數(shù)據(jù)按分時方式保存于同一隨機存儲器中的不同分區(qū)空間的需求,設計了一種基于有限狀態(tài)機設計方法的存儲器分區(qū)地址產(chǎn)生電路.本文以8 Mb的SRAM為設計對象,采用有限狀態(tài)機方式對隨機存儲器的讀寫地址的產(chǎn)生進行控制.將SRAM的存儲空間劃分為320×240的4個分區(qū),每個分區(qū)空間的寫地址不是連續(xù)產(chǎn)生而是以逐行掃描方式產(chǎn)生,使得4個通道的數(shù)據(jù)能夠準確存儲于對應分區(qū)的每個存儲單元內(nèi).設計的頂層文件在QuartusⅡ軟件環(huán)境下進行編譯和時序仿真.仿真結(jié)果表明:采用有限狀態(tài)機方法設計的分區(qū)地址產(chǎn)生電路能正確地實現(xiàn)SRAM分區(qū)地址的產(chǎn)生,并具有容易拓展的優(yōu)點,為高速數(shù)據(jù)的存儲工作方法提供了新的思路.
關(guān)鍵詞:分區(qū)地址發(fā)生器;多通道數(shù)據(jù)分區(qū)存儲;有限狀態(tài)機;存儲方法;FPGA
中圖分類號:TP333 DOI:10.16375/j.cnki.cn45-1395/t.2018.04.012
0 引言
存儲器是計算機硬件系統(tǒng)的記憶設備,用來存放程序以及信息處理過程中的各種數(shù)據(jù).計算機中大部分內(nèi)存通常是由隨機存儲器RAM組成的,存儲器一般按地址訪問,給出對應地址便可對存儲單元進行讀寫操作.通常情況下,存儲器按行、列排列組成二維存儲矩陣,這種結(jié)構(gòu)形式也使得存儲器的地址總線分成行向地址線(簡稱行地址)和列向地址線(簡稱行地址)兩部分.高位字節(jié)表示列地址,低位字節(jié)表示行地址.為了滿足信息處理的高速性、實時性和準確性,數(shù)據(jù)存儲控制器的設計就極其重要[1].
數(shù)據(jù)存儲技術(shù)一般采用全息存儲、專用軟件、專用芯片或編程數(shù)據(jù)處理器壓縮存儲大量的數(shù)據(jù).FPGA芯片因其高速、低功耗和高可靠性等特點在數(shù)據(jù)存儲控制方面具有明顯優(yōu)勢,從而成為存儲控制技術(shù)中最常用的器件.國內(nèi)外一些科研機構(gòu)已經(jīng)研發(fā)出以FPGA為主控芯片的嵌入式高速數(shù)據(jù)采集及存儲系統(tǒng),其中也包含了基于FPGA的利用分布式數(shù)據(jù)庫提供數(shù)據(jù)存儲和管理、將數(shù)據(jù)分為塊狀進行存儲的系統(tǒng).該系統(tǒng)具有良好的性能,且有很大提升空間[2-3],例如:在用于多點監(jiān)控的多視頻通道合成系統(tǒng)中,需要將多個視頻通道的數(shù)據(jù)先以分區(qū)方式寫入幀緩存器,然后再逐行逐列讀出送入顯示器.寫入幀緩存器的單元地址信號,就可以利用FPGA靈活的編程方式來產(chǎn)生.本次設計中,8 Mb的幀緩存器SRAM分為4個分區(qū),對應于4個視頻數(shù)據(jù)通道,由FPGA產(chǎn)生4個通道數(shù)據(jù)的寫地址信號,能夠滿足數(shù)據(jù)處理高速性、實時性的要求.
本設計以存儲容量為8Mbit的靜態(tài)隨機存儲芯片IS61LV51216為目標對象,設計了SRAM的4分區(qū)地址發(fā)生器,該地址發(fā)生器能夠隨著時鐘驅(qū)動連續(xù)產(chǎn)生4個視頻通道數(shù)據(jù)在一塊SRAM中的寫地址信號.每個分區(qū)的容量為320×240,4個分區(qū)總?cè)萘繛?40×240,雖然不能寫滿整個存儲器空間,但是在讀出這些視頻數(shù)據(jù)時所需的讀地址信號,就可以隨時鐘信號按照加1遞增的方式來產(chǎn)生,非常便利.設計中利用Altera公司的Cyclone Ⅳ系列芯片EP4CE6F17C8為核心控制部件,采用有限狀態(tài)機的設計方法來完成設計,而且利用Verilog硬件描述語言可以使整個流程變的輕松[4].此設計方法不但提高了設計效率,而且使整個設計具有靈活、易實現(xiàn)、易擴展性的特點.
1 隨機存儲器中分區(qū)地址發(fā)生電路的設計要求
將RAM存儲陣列分為等容量的4個分區(qū)S0—S3(每個分區(qū)的容量為320×240)來存儲4個通道的視頻數(shù)據(jù)如圖1所示.每個分區(qū)中寫地址信號數(shù)據(jù)的變化規(guī)則是:首先,在分區(qū)中按照從左到右、從上至下的規(guī)則遞增,這個規(guī)則類似于逐行掃描方式.比如分區(qū)S0的寫地址陣列中,第一行共320個存儲單元的列向地址為000H,第二行的列向地址為001H,最后一行的列向地址為0EFH,每一行的行向地址是從000H—13FH.掃描到S0分區(qū)最后一個存儲單元后,跳轉(zhuǎn)到S1分區(qū)(轉(zhuǎn)折點C0的列向地址為0EFH,行向地址為13FH).在分區(qū)S1中,寫地址信號的產(chǎn)生仍然遵循逐行掃描規(guī)則,每掃描一行后,列向地址遞增1;當掃描至轉(zhuǎn)折點C1 后跳轉(zhuǎn)到S2分區(qū),以此類推,可得出分區(qū)S0、S1、S2和S3的各個存儲單元的行向和列向地址.讀取數(shù)據(jù)時,先向地址引腳提供列向地址和行向地址,指定需讀的內(nèi)存單元地址,當?shù)刂沸盘柗€(wěn)定之后,使片選信號CE低電平有效,則指定單元的數(shù)據(jù)在數(shù)據(jù)引腳上輸出.
由于這4個分區(qū)的寫地址信號是按照一定的時序來產(chǎn)生,所以使用有限狀態(tài)機的方法進行設計,將4個分區(qū)的地址產(chǎn)生作為4個狀態(tài),以是否到達轉(zhuǎn)折點為狀態(tài)轉(zhuǎn)移的條件來實現(xiàn)狀態(tài)循環(huán).在每個狀態(tài)下,每掃描完一行320個存儲單元,列向地址遞增1,當列向地址的增幅達到240,則此狀態(tài)結(jié)束進入下一個狀態(tài).
2 分區(qū)地址發(fā)生器的設計
2.1 存儲器芯片選型
IS61LV51216是ISSI公司的512K×16位的高速異步靜態(tài)RAM,采用高性能CMOS制作工藝,具有高可靠性和低功耗的優(yōu)點.芯片具有19根地址線A18—A0,16根數(shù)據(jù)線I/O15—I/O0,還具有工作使能端CE、輸出使能端OE、寫使能端WE、上個字節(jié)的控制端UB和低字節(jié)控制端LE.如果將它的19根地址線分為9位列地址線和10位行地址線,就構(gòu)成了1 024×512的二維存儲陣列.使用一片IS61LV51216來存儲一幀640×480圖像的數(shù)據(jù)是足夠的,也足夠存儲一幀由4個320×240壓縮圖像組成的拼接圖像.
2.2 存儲器內(nèi)部數(shù)據(jù)分布
根據(jù)設計要求,確定內(nèi)部數(shù)據(jù)分布,在每個狀態(tài)轉(zhuǎn)換前后行列向地址的變化情況如表1所示.
2.3 分區(qū)地址信號控制電路的實現(xiàn)框圖
本設計中選用了Alter公司研發(fā)的Cyclone IV系列的EP4CE6F17C8,此款FPGA擁有179個I/O接口,62 792個邏輯單元,392個乘法器,RAM的容量為276 480 b,內(nèi)核電壓為1.15~1.25 V,且功耗低[5].基于FPGA的SRAM分區(qū)地址發(fā)生電路的整體實現(xiàn)框圖如圖2所示.在QuartusⅡ中新建工程,設置目標芯片型號為EP4CE6F17C8、系統(tǒng)復位信號RST、時鐘驅(qū)動信號CLK(系統(tǒng)時鐘20 MHz)和來自外圍器件的16位輸入數(shù)據(jù)datain[15…0];當需要將數(shù)據(jù)datain存入SRAM時,首先設置片選信號CE和寫允許信號WB為低電平有效、OE為數(shù)據(jù)輸出允許(低電平時讀取數(shù)據(jù)信息)、高8位控制端UB和低8位控制端LB在16位寬的數(shù)據(jù)線上分開訪問高低字節(jié),隨著時鐘信號CLK的每產(chǎn)生一個地址信號,就將datain信號送至雙向數(shù)據(jù)端口dataout,存入SRAM內(nèi)部相應的分區(qū)存儲單元中.
2.4 基于有限狀態(tài)機的分區(qū)地址發(fā)生器的設計與實現(xiàn)
有限狀態(tài)機 (Finite State Machine,F(xiàn)SM) 是描述有限個狀態(tài)以及在這些狀態(tài)之間進行轉(zhuǎn)移和操作等行為的數(shù)學模型[6].它廣泛應用于自動控制系統(tǒng)、數(shù)字邏輯系統(tǒng)等領(lǐng)域,譬如PLC控制器的順序控制功能、CPU的指令執(zhí)行控制等,均是FSM的典型應用范例[7].在電子系統(tǒng)設計中,F(xiàn)SM成為有力工具.有限狀態(tài)機FSM把復雜的控制邏輯分解成有限個穩(wěn)定的狀態(tài),在每個狀態(tài)上判斷事件,變連續(xù)處理為離散處理,符合計算機工作特點;同時FSM具有有限個狀態(tài),
可以在工程上實現(xiàn)[8].在使用硬件描述語言VerilogHDL編程時,首先簡單地定義狀態(tài)變量,每個狀態(tài)均可以表達為case語句結(jié)構(gòu)中一條選擇值語句,而狀態(tài)是否轉(zhuǎn)移通過if語句判斷,從而實現(xiàn)所需功能.
本設計的程序流程圖如圖3所示.在程序中首先設置行計數(shù)器x_add和列計數(shù)器y_add,分別來計算分區(qū)中行向地址信號和列向地址信號的個數(shù).
分址電路存儲基本過程為:先設置復位信號rst、時鐘信號clk、數(shù)據(jù)流datain、行列地址和塊寫滿后的標志信號full.系統(tǒng)不復位的時候,在每個時鐘的上升沿使用case語句判斷狀態(tài)控制信號,即地址信號addout,如果不是轉(zhuǎn)折點對應的狀態(tài)控制信號,則將輸入信號datain送入SRAM的數(shù)據(jù)端dataout,同時地址信號按照圖1所描述的規(guī)則變化.例如,分區(qū)S0狀態(tài)的主要的程序語句如下:
case(state)
2[′]b00:if ((y_add==9[′]hef)&&(x_add==10[′]h13f))
begin
full<=1; state<=2[′]b01; //如果到達轉(zhuǎn)折點C0,則狀態(tài)值變?yōu)镾1
dataout<=datain;
x_add<=10[′]h140; y_add<=9[′]h000;// 寫地址變?yōu)镾1分區(qū)的起始地址
end
else begin
full<=0;
if (y_add<=9[′]hef) //如果沒有掃描到最后一行
if(x_add<10[′]h13f) //如果沒有掃描到本行的最后一個單元
begin
dataout<=datain;
x_add<=x_add+1;y_add<=y_add;//則行地址加一,列地址保持
end
else begin dataout<=datain;
x_add<=0; y_add<=y_add+1;//每行掃描完畢后,列地址加一
end
end
…
程序經(jīng)過編譯和綜合后,可以在工具Tools中看到軟件綜合后生成的狀態(tài)轉(zhuǎn)換圖,如圖4所示.
3 仿真實驗及說明
圖5是基于有限狀態(tài)機的分區(qū)地址發(fā)生器的仿真波形圖,從圖中可以看到4塊存儲塊的存儲情況,圖5(a)是分區(qū)S0地址存滿時的波形,由圖可看出分區(qū)S0最后一個數(shù)據(jù)列向地址為0EFH,行向地址為13FH,存滿之后full顯示高電平1,跳轉(zhuǎn)到分區(qū)S1時第一個數(shù)據(jù)列向地址為000H,行向地址為140H.同理,由圖5(b)—圖5(d)可看出分區(qū)S1最后一個數(shù)據(jù)列向地址為0EFH,行向地址為27FH,跳轉(zhuǎn)到分區(qū)S2時第一個數(shù)據(jù)列向地址為0F0H,行向地址為000H;分區(qū)S2最后一個數(shù)據(jù)列向地址為1DFH,行向地址為13FH,跳轉(zhuǎn)到分區(qū)S3時第一個數(shù)據(jù)列向地址為0F0H,行向地址為140H;分區(qū)S3最后一個數(shù)據(jù)列向地址為1DFH,行向地址為27FH,跳轉(zhuǎn)到分區(qū)S0時第一個數(shù)據(jù)列向地址為000H,行向地址為000H.從波形的輸出結(jié)果來看,本次設計在每個狀態(tài)轉(zhuǎn)換前后的行列向地址信號值與表1中的相符,說明本設計是符合既定要求的.
4 總結(jié)
本文主要利用有限狀態(tài)機的工作原理,將4塊存儲區(qū)的寫信號產(chǎn)生設置成4個狀態(tài),設計了一種分區(qū)地址產(chǎn)生電路,將程序綜合后的網(wǎng)表文件下載至FPGA開發(fā)板的配置芯片中進行硬件的邊界掃描測試,結(jié)果顯示輸入的數(shù)據(jù)流以塊狀的形式存儲并能準確讀出,并且輸入的數(shù)據(jù)有序的存儲,在第一塊存儲區(qū)地址沒存滿之前,數(shù)據(jù)流的地址不會流向下一存儲區(qū),這樣此分址電路有利于提高存儲器的資源占用率.
參考文獻
[1]仝欣.基于FPGA的視頻圖像處理系統(tǒng)的研究[D].西安:西安電子科技大學,2012.
[2]柯寶中.基于FPGA的乒乓式存取高速數(shù)據(jù)采集通道設計[J].廣西科技大學學報,2015,26(1):43-47.
[3]邵磊,倪明.基于FPGA的高速數(shù)據(jù)采集系統(tǒng)設計與實現(xiàn)[J].計算機工程,2011,37(19):221-223.
[4]任杰,李克儉,潘紹明,等.雙口RAM讀寫正確性自動測試的有限狀態(tài)機控制器設計方法[J].廣西科技大學學報,2015,26(4):36-38.
[5]高俊嶺,陳志飛,章佩佩.基于FPGA的實時視頻圖像采集處理系統(tǒng)設計[J].電子技術(shù)應用,2018,44(2):10-19.
[6]孫宏旭,邢薇,陶林.基于有限狀態(tài)機的模型轉(zhuǎn)換方法的研究[J].計算機技術(shù)與發(fā)展,2012,22(2):10-13.
[7]馮建文.有限狀態(tài)機在FPGA硬件實驗中的應用[J].實驗室研究與探索,2017,6(36):138-141.
[8]李云,馮永浩,孟濤.基于VHDL有限狀態(tài)機控制器的設計方法[J].微計算機信息,2010,26(13):74-75.
Design and implementation of SRAM partition address generator based on finite state machine
WANG Xueli, LUO Wenguang*, QIN Yongxin
(School of Electric and Information Engineering, Guangxi University of Science and Technology, Liuzhou 545006, China)
Abstract: To meet the needs of storing different storage spaces in random storage according to the multi-channel data, a block address circuit based on Finite state machine is designed. In this design, an 8 Mb SRAM is designed to control the reading and writing address of the random memory by using the finite state machine. We first divide the storage space of SRAM into four partitions with an area of 320 by 240. Then the address of the four block Spaces is generated from left to right, from top to bottom, and the address in the storage space of each block is generated in the same order, so that the data of the four channels can be accurately stored in each storage unit of the corresponding partition. The top of the design documents are compiled and timing simulated in the Quartus Ⅱ software environment. The simulation results show that this block address generation circuit can realize the generation of SRAM partition address correctly. It has good timeliness and expansibility, and it provides a new way of thinking for data storage.
Key words: partition address generator; multi-channel data partition storage; finite state machine; storage methods; field programmable logic array
(學科編輯:張玉鳳)