摘要:本文通過(guò)雙向計(jì)數(shù)器的介紹,提出更具通用性的同步雙向計(jì)數(shù)器設(shè)計(jì)要求。將設(shè)計(jì)分成同步信號(hào)甄別模塊、計(jì)數(shù)模塊;在同步信號(hào)競(jìng)爭(zhēng)分析的基礎(chǔ)上,提出設(shè)計(jì)思路,實(shí)現(xiàn)了基于 Verilog HDL的同步雙向計(jì)數(shù)器設(shè)計(jì)。
關(guān)鍵詞:同步雙向計(jì)數(shù)器;狀態(tài)機(jī);競(jìng)爭(zhēng)
現(xiàn)實(shí)世界廣泛存在對(duì)同一對(duì)象實(shí)施正、反兩種不同操作的實(shí)例。如某空間的人數(shù),進(jìn)入空間操作,空間內(nèi)人數(shù)目加;走出空間操作,空間內(nèi)人數(shù)減,這類操作反應(yīng)在電路上就是雙向計(jì)數(shù)器。這種計(jì)數(shù)器有兩個(gè)計(jì)數(shù)時(shí)鐘,能在正向計(jì)數(shù)時(shí)鐘的有效沿計(jì)數(shù)增加,在逆向計(jì)數(shù)時(shí)鐘的有效沿計(jì)數(shù)減少[1]。正、反兩種操作各自發(fā)生的時(shí)間不定,同步雙向計(jì)數(shù)器可以應(yīng)對(duì)正、反兩種操作同時(shí)操作的情況,具有更加廣泛的通用性。
1 同步雙向計(jì)數(shù)器設(shè)計(jì)的構(gòu)成
將同步雙向計(jì)數(shù)器設(shè)計(jì)分成同步信號(hào)甄別模塊、計(jì)數(shù)模塊兩個(gè)主要部分。同步信號(hào)甄別模塊通過(guò)對(duì)加、減時(shí)鐘信號(hào)的甄別處理,輸出時(shí)鐘信號(hào)clk和加減標(biāo)志信號(hào) updn。updn等于 1,表示接收到加操作時(shí)鐘信號(hào);updn等于 0,表示接收到減操作時(shí)鐘信號(hào)。計(jì)數(shù)模塊接收到 clk信號(hào)時(shí),根據(jù)updn值對(duì)計(jì)數(shù)器進(jìn)行加、減操作。
同步信號(hào)甄別模塊的輸入信號(hào)由clkup、clkdown、rst和 chkclk構(gòu)成;輸出信號(hào)由 clk和 updn構(gòu)成。clkup、clkdown分別表示加、減操作時(shí)鐘信號(hào),rst是甄別模塊初始化信號(hào),chkclk是甄別模塊的工作時(shí)鐘信號(hào)。
當(dāng)clkup、clkdown同時(shí)有效時(shí),由于對(duì)一個(gè)計(jì)數(shù)器操作,如何解決針對(duì)計(jì)數(shù)器的競(jìng)爭(zhēng)操作是同步雙向計(jì)數(shù)器設(shè)計(jì)重點(diǎn)。依據(jù)解決同步競(jìng)爭(zhēng)策略不同,同步信號(hào)甄別模塊有多種實(shí)現(xiàn)方式。當(dāng) clkup、clkdown同時(shí)有效時(shí),優(yōu)先處理固定(如 clkup)操作的固定優(yōu)先級(jí)甄別策略;根據(jù)昀近時(shí)間內(nèi),兩信號(hào)操作次數(shù),優(yōu)先處理頻繁發(fā)生信號(hào)的基于統(tǒng)計(jì)優(yōu)先級(jí)甄別策略;當(dāng)clkup、clkdown同時(shí)有效時(shí),昀終對(duì)計(jì)數(shù)器實(shí)施加、減各一次,計(jì)數(shù)器值不變,同時(shí)忽略加、減操作的基于結(jié)果甄別策略等形式。本設(shè)計(jì)采用固定優(yōu)先級(jí)策略。
2 固定優(yōu)先級(jí)同步信號(hào)甄別模塊
2.1同步信號(hào)的競(jìng)爭(zhēng)分析clkup、clkdown兩個(gè)時(shí)鐘信號(hào),在下降沿進(jìn)行計(jì)數(shù)器操作。按照時(shí)間次序,clkup、clkdown兩個(gè)時(shí)鐘信號(hào)有三種情況:情況 1:兩個(gè)時(shí)鐘信號(hào)中一個(gè)下降沿后,上升沿;后另一個(gè)信號(hào)也如此,即兩信號(hào)異步。情況 2:兩個(gè)時(shí)鐘信號(hào)中一個(gè)下降沿,后另一個(gè)信號(hào)下降沿,在前一個(gè)信號(hào)輸出過(guò)程中,另一個(gè)信號(hào)失效。情況 3:兩個(gè)時(shí)鐘信號(hào)同時(shí)檢測(cè)到下降沿,處理其中一個(gè)信號(hào),另一個(gè)信號(hào)失效。情況 2、3的競(jìng)爭(zhēng)處理,是固定優(yōu)先級(jí)同步信號(hào)甄別模塊的設(shè)計(jì)核心。
2.2 固定優(yōu)先級(jí)同步信號(hào)甄別模塊設(shè)計(jì)
設(shè)計(jì)思路的核心是:通過(guò)clkup、clkdown兩時(shí)鐘的當(dāng)前狀態(tài)和前一個(gè)狀態(tài)對(duì)比檢測(cè)時(shí)鐘信號(hào)變化;在固定時(shí)間內(nèi)主動(dòng)結(jié)束輸出時(shí)鐘;在有時(shí)鐘信號(hào)變化時(shí),保留另一個(gè)時(shí)鐘信號(hào)的前一個(gè)狀態(tài),待主動(dòng)結(jié)束輸出時(shí)鐘后處理。
2.3固定優(yōu)先級(jí)的同步信號(hào)甄別模塊實(shí)現(xiàn)
模塊使用兩位寄存器變量 clknow和clkage,保存clkup、clkdown的當(dāng)前狀態(tài)和前一個(gè)狀態(tài);寄存器變量 cptyn賦值為 1,表示正在輸出時(shí)鐘信號(hào);寄存器 clk為輸出的時(shí)鐘信號(hào);兩位寄存器 cptcnt作為定時(shí)器;寄存器變量 clkdelay為 1,表示 clkdown變成下降沿;寄存器變量 clkdelay為 0,表示 clkup變成下降沿。
模塊由四部分構(gòu)成,通過(guò)clknow<={clkup,clkdn}獲取兩時(shí)鐘信號(hào)的當(dāng)前狀態(tài)。
通過(guò) case({clkago,clknow})語(yǔ)句判斷下降沿是否發(fā)生,{clkago,clknow}值等于 4'b0100和 4'b0110時(shí),說(shuō)明 clkdown產(chǎn)生下降沿。在 cptyn不為 1情況下,執(zhí)行 clk<=1'b0、cptyn<=1'b1、cptcnt<=2'b00、clkdelay<=1'b1、updn<=1'b0語(yǔ)句;開始輸出時(shí)鐘,并開啟定時(shí)器。{clkago,clknow}值等于4'b1000、4'b1001和 4'b1101時(shí),說(shuō)明 clkup產(chǎn)生下降沿;等于 4'b1100時(shí),說(shuō)明clkup、clkdn同時(shí)產(chǎn)生下降沿;模塊規(guī)定 clkup優(yōu)先級(jí)高;在 cptyn不為 1情況下,執(zhí)行clk<=1'b0、cptyn<=1'b1、cptcnt<=2'b00、clkdelay<=1'b0、updn<=1'b1。{clkago,clknow}為其他值時(shí),不執(zhí)行任何操作。
若 cptyn等于0,說(shuō)明沒(méi)有任何下降沿,執(zhí)行clkago<=clknow;否則如果 clkdelay等于 1,執(zhí)行 clkago[1]<=clknow[1];如果 clkdelay等于 0,執(zhí)行clkago[0]<=clknow[0];完成不同情況下,時(shí)鐘信號(hào)前一個(gè)狀態(tài)的保存。
若 cptyn等于 1,計(jì)數(shù)器 cptcnt值加 1,當(dāng)計(jì)數(shù)器 cptcnt值大于 2時(shí),執(zhí)行clk<=1'b1、cptyn<=0結(jié)束時(shí)鐘輸出,重新開啟兩信號(hào)的下降沿甄別。由于 cptcnt值大于 2,執(zhí)行結(jié)束時(shí)鐘輸出,本設(shè)計(jì)要求 clkup,clkdn信號(hào)低電平的持續(xù)時(shí)間至少是 chkclk信號(hào)周期的 3.5倍,否則會(huì)有信號(hào)丟失。
3 計(jì)數(shù)模塊設(shè)計(jì)
計(jì)數(shù)模塊功能單一,結(jié)構(gòu)簡(jiǎn)單。為方便觀察效果,計(jì)數(shù)值為 2位 bcd碼,計(jì)數(shù)范圍為 00至59。當(dāng) updn等于 1時(shí),時(shí)鐘有效后,計(jì)數(shù)值加一,如果計(jì)數(shù)值等于 59,加一后,變?yōu)?0。當(dāng) updn等于 0時(shí),時(shí)鐘有效后,計(jì)數(shù)值減一,如果計(jì)數(shù)值等于 00,減一后,變?yōu)?59。代碼如下:
case(qout)//qout為計(jì)數(shù)值
8'h00:if(updn==1)qout<=8'h01;else qout<=8'h59;
。。。
8'h59:if(updn==1)qout<=8'h00;else qout<=8'h58;
default:qout<=8'h00;
endcase
綜上所述,通過(guò)當(dāng)前狀態(tài)采集、當(dāng)前狀態(tài)和前一個(gè)狀態(tài)比較、前一個(gè)狀態(tài)保存、計(jì)數(shù)器調(diào)整四個(gè)部分,完成同步信號(hào)的甄別;再通過(guò)計(jì)數(shù)模塊反應(yīng)結(jié)果,圓滿實(shí)現(xiàn)同步雙向計(jì)數(shù)器設(shè)計(jì)。對(duì) clkup、clkdn信號(hào)的時(shí)間要求是本設(shè)計(jì)的不足。
參考文獻(xiàn)
[1]孫波,吳亮.用 Verilog設(shè)計(jì)實(shí)現(xiàn)異步雙向計(jì)數(shù)器[J]. 軟件導(dǎo)刊,2008年 10月.P118.
作者簡(jiǎn)介:劉景文(1968-)男,天津市人,天津?yàn)I海職業(yè)學(xué)院電子信息工程技術(shù)教研室主任,副教授,碩士。研究領(lǐng)域:嵌入式應(yīng)用、計(jì)算機(jī)視覺。