多慣組脈沖輸出同步計(jì)數(shù)系統(tǒng)設(shè)計(jì)
2.2 時鐘分頻模塊設(shè)計(jì)
本系統(tǒng)采用50 MHz有源晶振,EP2C8Q208C8N內(nèi)部擁有兩個鎖相環(huán),通過倍頻使頻率達(dá)到400MHz,然后連接一個分頻模塊為狀態(tài)機(jī)提供周期為4ms的計(jì)數(shù)值鎖存信號(clk_lock)和一個狀態(tài)機(jī)跳轉(zhuǎn)觸發(fā)信號(clk_state)。
2.3 狀態(tài)機(jī)模塊設(shè)計(jì)
狀態(tài)機(jī)模塊主要包括兩個部分:數(shù)據(jù)處理部分和FIFO控制邏輯部分。
2.3.1 狀態(tài)機(jī)的數(shù)據(jù)處理部分
狀態(tài)機(jī)在計(jì)數(shù)值鎖存信號(clk_lock)上升沿到來時會鎖存計(jì)數(shù)器此刻的計(jì)數(shù)值,并在狀態(tài)機(jī)的下一個狀態(tài)將計(jì)數(shù)值存儲到data-new的寄存器型變量中并進(jìn)行求差運(yùn)算,接著將被減數(shù)與減數(shù)在下一個狀態(tài)進(jìn)行更新,最后將求出來的差值交給FIFO控制邏輯進(jìn)行發(fā)送。每個計(jì)數(shù)單元計(jì)數(shù)值求差的狀態(tài)機(jī)原理圖如圖3所示。本文引用地址:http://www.ex-cimer.com/article/189660.htm
2.3.2 狀態(tài)機(jī)的FIFO控制邏輯部分
FPGA控制邏輯的主要作用足通過其內(nèi)部的狀態(tài)機(jī)直接操作CY68013的FIFO來進(jìn)行讀寫控制。SLOE、SLRD和SLWR作為芯片的讀寫信號與使能控制信號。INPKTEND是FPGA主動命令USB芯片向上位PC發(fā)送數(shù)據(jù)的控制端(當(dāng)FIFO上的數(shù)據(jù)小于規(guī)定大小而又要強(qiáng)制上傳給PC時使用)。FD為雙向的數(shù)據(jù)傳輸接口。FLAGA、FLAGB、FLAGC、FLAGD四個標(biāo)志位能夠指示FIFO的空滿程度,為數(shù)據(jù)的連續(xù)存取提供了可靠的保證。FPGA_ADR0和FPGA ADR1用于選擇內(nèi)部4個緩沖端點(diǎn)之一。IFCLK提供時鐘信號(僅用于同步Slave FIFOs模式)。FPGA的引腳控制這些端口,達(dá)到對USB端的存儲FIFO進(jìn)行操作的目的。由于異步Slave FIFOs模式的讀寫狀態(tài)簡單,穩(wěn)定性好。本系統(tǒng)選擇異步方式來讀取FIFO。
實(shí)現(xiàn)異步Slave FIFO的寫操作的狀態(tài)機(jī)如圖7所示。其狀態(tài)轉(zhuǎn)移進(jìn)程如下:
IDLE:此狀態(tài)為空閑狀態(tài),什么也不做;當(dāng)寫事件發(fā)牛時(即CLK_LOCK的上升沿到來時),進(jìn)狀態(tài)1;
狀態(tài)1:使FIFOADR[1:0]指向IN FIFO(即就是選擇CY68013的四個大數(shù)據(jù)量FIFO中的一個,固件程序已將此FIFO配置為寫模式),進(jìn)狀態(tài)2;
狀態(tài)2:如果FIFO滿標(biāo)志為假(即FLAGC引腳為高電平時),則進(jìn)狀態(tài)3;否則在本狀態(tài)等待;
狀態(tài)3:驅(qū)動數(shù)據(jù)到數(shù)據(jù)線上,使SLWR有效(低電平),一個CLK_STATE后再無效(高電平),以使FIFO寫指針遞增,進(jìn)狀態(tài)4;
狀態(tài)4:如需傳輸更多的數(shù),返回狀態(tài)2,否則進(jìn)狀態(tài)IDLE。
狀態(tài)跳轉(zhuǎn)示意圖如圖4所示:
使用QuartusII對FIFO的控制邏輯進(jìn)行時序仿真如圖5所示。
2.4 FPGA整體模塊設(shè)計(jì)
FPGA整體模塊邏輯電路圖如圖6所示。
評論