一看就会的奇偶分频电路
目錄
前言
題目
二分頻電路
第一步:畫波形圖
第二步:寫狀態(tài)機(jī)
三分頻電路——1/3占空比
第一步:畫波形圖
第二步:寫狀態(tài)機(jī)
三分頻電路——1/2占空比
第一步:畫波形圖
第二步:寫狀態(tài)機(jī)
4/5/6/7...分頻電路
第一步:畫波形圖
總結(jié)
前言
最近又到了招聘季,招聘就離不開筆試面試,而在筆試面試過程中經(jīng)常出現(xiàn)的一道題就是寫出分頻電路的verilog代碼(以及電路圖?),因此在這篇文章里,我們使用一個(gè)公式將所有分頻電路套進(jìn)去,以便于在考場(chǎng)上和仿真工具中輕松實(shí)現(xiàn)分頻電路。
題目
實(shí)現(xiàn)2/3/4/5分頻電路,給出一個(gè)模板:
module clk_div(reset,clk_in,clk_out) input reset ; input clk_in ; output clk_out ;//#功能實(shí)現(xiàn)模塊endmodule二分頻電路
第一步:畫波形圖
分頻電路是將原始信號(hào)頻率分成頻率更小的衍生信號(hào),信號(hào)頻率變?yōu)槎种?#xff0c;也就意味著周期變?yōu)?倍,因此直接將原本的2個(gè)周期所占用的時(shí)間現(xiàn)在變?yōu)橐粋€(gè)周期,即可以生成一個(gè)二分頻的信號(hào)。之所以采用波形圖是因?yàn)椴ㄐ螆D的直觀性便于理解和思考,相對(duì)于抽象的代碼和難以理解的電路圖來說。
第二步:寫狀態(tài)機(jī)
按照三段式狀態(tài)機(jī)的標(biāo)準(zhǔn)寫法(以往文章有過介紹),寫一個(gè)序列發(fā)生器,產(chǎn)生我們想要的信號(hào)。在二分頻電路里,我們實(shí)際上是想實(shí)現(xiàn)重復(fù)的01信號(hào)的產(chǎn)生,這就是最簡單的序列發(fā)生器。
//#功能實(shí)現(xiàn)模塊 //三段式狀態(tài)機(jī)//狀態(tài)聲明 parameter s0 = 0 ; parameter s1 = 1 ;reg cs,ns always@(posedge clk_in) beginif (reset)cs <= s0;elsecs <= ns; end//狀態(tài)改變 always@(*) begincase(cs)s0: ns = s1 ;s1: ns = s0 ; end//輸出 always@(*) begincase(cs)s0: clk_out = 0 ;s1: clk_out = 1 ; end在二分頻電路中產(chǎn)生的是循環(huán)的01信號(hào),所以狀態(tài)機(jī)只需要2個(gè)狀態(tài)。二分頻電路就這樣產(chǎn)生了,接下來看三分頻。
三分頻電路——1/3占空比
第一步:畫波形圖
如上圖所示,三分頻電路即就是將原始clk信號(hào)三個(gè)周期的時(shí)間,變?yōu)樾滦盘?hào)clk_out_3的一個(gè)周期。我們常見的周期信號(hào)都是占空比1/2的信號(hào),但是在上圖中我們可以看到三分頻電路可以分為兩種,一種就是1/2占空比(1.5,1.5?),而另一種就是1/3占空比的三分頻信號(hào)(001,010,100)。按照本文的公式,后者這種規(guī)則的循環(huán)序列信號(hào)很容易產(chǎn)生。由易向難,我們先看1/3占空比的三分頻電路。
第二步:寫狀態(tài)機(jī)
//#功能實(shí)現(xiàn)模塊 //三段式狀態(tài)機(jī)//狀態(tài)聲明 parameter s0 = 0 ; parameter s1 = 1 ; parameter s2 = 2 ;reg [1:0]cs,nsalways@(posedge clk_in) beginif (reset)cs <= s0;elsecs <= ns; end//狀態(tài)改變 always@(*) begincase(cs)s0: ns = s1 ;s1: ns = s2 ;s2: ns = s0 ; end//輸出 always@(*) begincase(cs)s0: clk_out = 0 ;s1: clk_out = 0 ;s2: clk_out = 1 ; end要實(shí)現(xiàn)三分頻電路,那么要產(chǎn)生的序列就是001或者010或100,此時(shí)狀態(tài)機(jī)有三個(gè)狀態(tài),所以需要2位寄存器。簡單的1/3占空比三分頻電路實(shí)現(xiàn)后,現(xiàn)在來看1/2占空比的三分頻電路。
三分頻電路——1/2占空比
第一步:畫波形圖
如上圖所示,clk_out_3_2即為上面的1/3占空比電路,而現(xiàn)在我們要生成1/2占空比的三分頻電路clk_out_3,那么我們就需要在下降沿控制原始信號(hào)。但是我們無法使用下降沿和上升沿同時(shí)去控制一根信號(hào),所以我們可以使用clk_in的下降沿產(chǎn)生一個(gè)010序列信號(hào)clk_out_3_1。接下來將clk_out_3_1和clk_out_3_2信號(hào)進(jìn)行或[ | ]操作,即可得到1/2占空比的3分頻信號(hào)clk_out_3。
第二步:寫狀態(tài)機(jī)
//#功能實(shí)現(xiàn)模塊 //三段式狀態(tài)機(jī) //上升沿觸發(fā) //狀態(tài)聲明 parameter s0 = 0 ; parameter s1 = 1 ; parameter s2 = 2 ;reg [1:0]cs,nsalways@(posedge clk_in) beginif (reset)cs <= s0;elsecs <= ns; end//狀態(tài)改變 always@(*) begincase(cs)s0: ns = s1 ;s1: ns = s2 ;s2: ns = s0 ; end//輸出 always@(*) begincase(cs)s0: clk_out_1 = 0 ;s1: clk_out_1 = 0 ;s2: clk_out_1 = 1 ; end//三段式狀態(tài)機(jī) //下降沿觸發(fā) //狀態(tài)聲明 reg [1:0]cts,ntsalways@(negedge clk_in) beginif (reset)cts <= s0;elsects <= nts; end//狀態(tài)改變 always@(*) begincase(cts)s0: nts = s1 ;s1: nts = s2 ;s2: nts = s0 ; end//輸出 always@(*) begincase(cts)s0: clk_out_2 = 0 ;s1: clk_out_2 = 1 ;s2: clk_out_2 = 0 ; end//final out clk_out = clk_out_1 | clk_out_2 ;4/5/6/7...分頻電路
根據(jù)上面的模式,我們想實(shí)現(xiàn)一個(gè)任意分頻任意占空比的分頻電路已經(jīng)不是難事了,只要畫出波形圖,仔細(xì)分析想要實(shí)現(xiàn)的功能,然后剩下的就只是套用公式了。
第一步:畫波形圖
四分頻電路波形圖如下,用2分頻電路再2分頻即可得到,只需要再次例化二分頻電路模塊,不用修改模塊內(nèi)部代碼即可實(shí)現(xiàn)。亦可直接用原始信號(hào)寫一個(gè)具有4種狀態(tài)的狀態(tài)機(jī),實(shí)現(xiàn)0011序列發(fā)生器。當(dāng)然如果需要實(shí)現(xiàn)什么1/4占空比,3/8占空比,那也是被這套公式所支持的。
如下圖所示,5分頻電路其實(shí)就是3分頻電路的擴(kuò)展。使用上升沿實(shí)現(xiàn)00011的序列發(fā)生器,再使用下降沿實(shí)現(xiàn)00110的序列發(fā)生器,最后將產(chǎn)生的兩個(gè)2/5占空比的5分頻電路或起來,即可得到1/2占空比的5分頻信號(hào)clk_out_5。奇分頻電路的實(shí)現(xiàn)最重要的一點(diǎn)就是使用下降沿觸發(fā)來實(shí)現(xiàn)那0.5,將多出來的這個(gè)1分成2個(gè)0.5給高電平和低電平。
總結(jié)
總的來說,實(shí)現(xiàn)奇偶分頻電路,只需要套用上述公式,即可輕松得到任意分頻任意占空比的分頻信號(hào)。
最后再次總結(jié)一下公式:
1.畫波形圖 :偶數(shù)分頻只需要數(shù)好周期數(shù),即可找到中間點(diǎn)。而奇數(shù)分頻可以先實(shí)現(xiàn)簡單的接近中點(diǎn)的分頻,例如1/3(1.5/3)占空比分頻,2/5(2.5/5)占空比分頻等等,然后將這個(gè)接近1/2占空比的信號(hào)利用下降沿平移半個(gè)原始信號(hào)的周期,即可出現(xiàn)那缺少的0.5,最后再通過或[ | ]得到最終的1/2占空比的信號(hào)。
2.寫狀態(tài)機(jī):使用狀態(tài)機(jī)實(shí)現(xiàn)序列發(fā)生器,通過觀察波形圖得到想要的是什么序列,然后依據(jù)本文中的代碼示例狀態(tài)機(jī)的格式和寫法進(jìn)行擴(kuò)展,主要是狀態(tài)機(jī)的狀態(tài)個(gè)數(shù)。
希望這篇文章能夠讓你對(duì)奇偶分頻增加更多的了解,歡迎指出錯(cuò)誤和互相交流。
總結(jié)
以上是生活随笔為你收集整理的一看就会的奇偶分频电路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ## stm32F1 VL53L0X例程
- 下一篇: 机器视觉(十):印刷体字符识别