?

基于Verilog HDL 的同步雙向計數器設計

2020-11-16 22:34劉景文
關鍵詞:競爭

摘要:本文通過雙向計數器的介紹,提出更具通用性的同步雙向計數器設計要求。將設計分成同步信號甄別模塊、計數模塊;在同步信號競爭分析的基礎上,提出設計思路,實現了基于 Verilog HDL的同步雙向計數器設計。

關鍵詞:同步雙向計數器;狀態機;競爭

現實世界廣泛存在對同一對象實施正、反兩種不同操作的實例。如某空間的人數,進入空間操作,空間內人數目加;走出空間操作,空間內人數減,這類操作反應在電路上就是雙向計數器。這種計數器有兩個計數時鐘,能在正向計數時鐘的有效沿計數增加,在逆向計數時鐘的有效沿計數減少[1]。正、反兩種操作各自發生的時間不定,同步雙向計數器可以應對正、反兩種操作同時操作的情況,具有更加廣泛的通用性。

1 同步雙向計數器設計的構成

將同步雙向計數器設計分成同步信號甄別模塊、計數模塊兩個主要部分。同步信號甄別模塊通過對加、減時鐘信號的甄別處理,輸出時鐘信號clk和加減標志信號 updn。updn等于 1,表示接收到加操作時鐘信號;updn等于 0,表示接收到減操作時鐘信號。計數模塊接收到 clk信號時,根據updn值對計數器進行加、減操作。

同步信號甄別模塊的輸入信號由clkup、clkdown、rst和 chkclk構成;輸出信號由 clk和 updn構成。clkup、clkdown分別表示加、減操作時鐘信號,rst是甄別模塊初始化信號,chkclk是甄別模塊的工作時鐘信號。

當clkup、clkdown同時有效時,由于對一個計數器操作,如何解決針對計數器的競爭操作是同步雙向計數器設計重點。依據解決同步競爭策略不同,同步信號甄別模塊有多種實現方式。當 clkup、clkdown同時有效時,優先處理固定(如 clkup)操作的固定優先級甄別策略;根據昀近時間內,兩信號操作次數,優先處理頻繁發生信號的基于統計優先級甄別策略;當clkup、clkdown同時有效時,昀終對計數器實施加、減各一次,計數器值不變,同時忽略加、減操作的基于結果甄別策略等形式。本設計采用固定優先級策略。

2 固定優先級同步信號甄別模塊

2.1同步信號的競爭分析clkup、clkdown兩個時鐘信號,在下降沿進行計數器操作。按照時間次序,clkup、clkdown兩個時鐘信號有三種情況:情況 1:兩個時鐘信號中一個下降沿后,上升沿;后另一個信號也如此,即兩信號異步。情況 2:兩個時鐘信號中一個下降沿,后另一個信號下降沿,在前一個信號輸出過程中,另一個信號失效。情況 3:兩個時鐘信號同時檢測到下降沿,處理其中一個信號,另一個信號失效。情況 2、3的競爭處理,是固定優先級同步信號甄別模塊的設計核心。

2.2 固定優先級同步信號甄別模塊設計

設計思路的核心是:通過clkup、clkdown兩時鐘的當前狀態和前一個狀態對比檢測時鐘信號變化;在固定時間內主動結束輸出時鐘;在有時鐘信號變化時,保留另一個時鐘信號的前一個狀態,待主動結束輸出時鐘后處理。

2.3固定優先級的同步信號甄別模塊實現

模塊使用兩位寄存器變量 clknow和clkage,保存clkup、clkdown的當前狀態和前一個狀態;寄存器變量 cptyn賦值為 1,表示正在輸出時鐘信號;寄存器 clk為輸出的時鐘信號;兩位寄存器 cptcnt作為定時器;寄存器變量 clkdelay為 1,表示 clkdown變成下降沿;寄存器變量 clkdelay為 0,表示 clkup變成下降沿。

模塊由四部分構成,通過clknow<={clkup,clkdn}獲取兩時鐘信號的當前狀態。

通過 case({clkago,clknow})語句判斷下降沿是否發生,{clkago,clknow}值等于 4'b0100和 4'b0110時,說明 clkdown產生下降沿。在 cptyn不為 1情況下,執行 clk<=1'b0、cptyn<=1'b1、cptcnt<=2'b00、clkdelay<=1'b1、updn<=1'b0語句;開始輸出時鐘,并開啟定時器。{clkago,clknow}值等于4'b1000、4'b1001和 4'b1101時,說明 clkup產生下降沿;等于 4'b1100時,說明clkup、clkdn同時產生下降沿;模塊規定 clkup優先級高;在 cptyn不為 1情況下,執行clk<=1'b0、cptyn<=1'b1、cptcnt<=2'b00、clkdelay<=1'b0、updn<=1'b1。{clkago,clknow}為其他值時,不執行任何操作。

若 cptyn等于0,說明沒有任何下降沿,執行clkago<=clknow;否則如果 clkdelay等于 1,執行 clkago[1]<=clknow[1];如果 clkdelay等于 0,執行clkago[0]<=clknow[0];完成不同情況下,時鐘信號前一個狀態的保存。

若 cptyn等于 1,計數器 cptcnt值加 1,當計數器 cptcnt值大于 2時,執行clk<=1'b1、cptyn<=0結束時鐘輸出,重新開啟兩信號的下降沿甄別。由于 cptcnt值大于 2,執行結束時鐘輸出,本設計要求 clkup,clkdn信號低電平的持續時間至少是 chkclk信號周期的 3.5倍,否則會有信號丟失。

3 計數模塊設計

計數模塊功能單一,結構簡單。為方便觀察效果,計數值為 2位 bcd碼,計數范圍為 00至59。當 updn等于 1時,時鐘有效后,計數值加一,如果計數值等于 59,加一后,變為00。當 updn等于 0時,時鐘有效后,計數值減一,如果計數值等于 00,減一后,變為 59。代碼如下:

case(qout)//qout為計數值

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

綜上所述,通過當前狀態采集、當前狀態和前一個狀態比較、前一個狀態保存、計數器調整四個部分,完成同步信號的甄別;再通過計數模塊反應結果,圓滿實現同步雙向計數器設計。對 clkup、clkdn信號的時間要求是本設計的不足。

參考文獻

[1]孫波,吳亮.用 Verilog設計實現異步雙向計數器[J]. 軟件導刊,2008年 10月.P118.

作者簡介:劉景文(1968-)男,天津市人,天津濱海職業學院電子信息工程技術教研室主任,副教授,碩士。研究領域:嵌入式應用、計算機視覺。

猜你喜歡
競爭
競爭的合適位置
競爭、行為和腦
如何對孩子進行競爭教育
漫畫哲理
感謝競爭
新加坡競爭委員會公布一系列修訂版競爭指南
如何平衡友誼與學業競爭的關系?
讓競爭與你同行
正確面對競爭
合理競爭,積極合作,保持共贏
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合