最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

數(shù)字IC手撕代碼-分頻器(任意偶數(shù)分頻)

2022-02-23 16:31 作者:不吃蔥的酸菜魚(yú)  | 我要投稿

????????大家好我是酸菜魚(yú),這個(gè)系列著重講解數(shù)字ic或FPGA實(shí)習(xí)面試及秋招面試的高頻手撕代碼題 。

往期題目:

數(shù)字IC手撕代碼-序列檢測(cè)(狀態(tài)機(jī)寫(xiě)法) - 嗶哩嗶哩 (bilibili.com)

數(shù)字IC手撕代碼-序列檢測(cè)(移位寄存器寫(xiě)法) - 嗶哩嗶哩 (bilibili.com)

? ? ? ? 什么是分頻

????????分頻就是生成一個(gè)新時(shí)鐘,該新時(shí)鐘的頻率是原有時(shí)鐘頻率的整數(shù)分之一倍,新周期是原有周期的整數(shù)倍。

????????再簡(jiǎn)單來(lái)說(shuō),讓你手撕一個(gè)四分頻電路,就是寫(xiě)代碼生成一個(gè)周期是原來(lái)四倍的時(shí)鐘,如果手撕一個(gè)三分頻電路,就是寫(xiě)代碼生成一個(gè)周期是原來(lái)三倍的時(shí)鐘。

四分頻波形

????? ? 如上圖所示,就是一個(gè)四分頻電路的波形,四分頻后,新的clk_out的頻率是原來(lái)的1/4,也即周期是原來(lái)的4倍,從圖中可以看到,clk每過(guò)4個(gè)周期,clk_out過(guò)1個(gè)周期。

????????同理三分頻也一樣,但是奇數(shù)分頻會(huì)比偶數(shù)分頻復(fù)雜一些,在奇數(shù)分頻部分會(huì)講。

? ? ??偶數(shù)分頻

????????我們先來(lái)講偶數(shù)分頻。逐步加大難度,先說(shuō)二分頻,怎么實(shí)現(xiàn)二分頻呢?

????????????答:檢測(cè)參考時(shí)鐘,每一個(gè)上升沿到來(lái)時(shí),新的時(shí)鐘翻轉(zhuǎn)一次。即:

always @ (posedge clk or negedge?rstn)
? ? ??if (!rstn)
? ? ? ? ? clk_out?<= 1'b0; ????????? // 復(fù)位置零
????? else
? ? ? ? ? clk_out <= !clk_out; ????// 否則q信號(hào)翻轉(zhuǎn)

二分頻波形

? ? ? ? 搞定!從圖中可以看到,clk_out每過(guò)兩個(gè)clk時(shí)鐘上升沿就flip-flop一次,這樣一個(gè)clk_out的周期就是clk周期的兩倍,也即實(shí)現(xiàn)了二分頻。

????????那如果是任意偶數(shù)分頻呢,這就得數(shù)經(jīng)過(guò)了多少上升沿,如果是四分頻,那就每過(guò)兩個(gè)時(shí)鐘上升沿(兩周期),新信號(hào)flip-flop一次,flip-flop兩次為新信號(hào)的一個(gè)周期,即是周期是原時(shí)鐘的四倍。同理,8分頻就是每數(shù)4個(gè)上升沿,flip-flop一次,以此類(lèi)推,可以實(shí)現(xiàn)任意偶數(shù)分頻了。

????????下面拿8分頻舉例,貼出所有代碼以及testbench。

代碼:

八分頻代碼

testbench:

八分頻 testbench

????得到的八分頻的波形如下:

八分頻波形

????????從波形我們可以看到,clk每過(guò)4個(gè)時(shí)鐘上升沿,clk_out 翻轉(zhuǎn)一次,和設(shè)計(jì)的一樣,在RTL文件中的 number 是可以修改的,可以改成任意偶數(shù)從而實(shí)現(xiàn)任意偶數(shù)分頻(改為2也行,即每次時(shí)鐘上升沿到來(lái)時(shí),if語(yǔ)句一直滿(mǎn)足,clk_out 翻轉(zhuǎn)一次,每次時(shí)鐘上升沿翻轉(zhuǎn)一次,就是我們之前提到的二分頻。)注意翻轉(zhuǎn)的時(shí)間點(diǎn)是number/2-1!因?yàn)楫?dāng)cnt 是從0開(kāi)始計(jì)數(shù)的,

當(dāng)cnt == 3 時(shí)(八分頻舉例),cnt被重置到0,持續(xù)一個(gè)clk。

? ? 檢測(cè)到上升沿,cnt再持續(xù)一個(gè)clk,cnt=1。

再檢測(cè)到上升沿,cnt再持續(xù)一個(gè)clk,cnt=2。

再檢測(cè)到上升沿,cnt再持續(xù)一個(gè)clk,cnt=3。

再檢測(cè)到上升沿,此時(shí)cnt=3,cnt又被置零。

解釋clk_out為什么在number/2-1時(shí)flip的圖

????????更加直觀一些可以把cnt作為div_8這個(gè)module的輸出信號(hào),查看cnt隨時(shí)間的變化值,找感覺(jué)。

占空比分析:我們上面寫(xiě)的任意偶數(shù)分頻代碼的占空比都是50%,實(shí)際上面試手撕代碼不會(huì)讓你50%占空比,那怎么辦?

????????答:進(jìn)行計(jì)數(shù),對(duì)于一個(gè)八分頻,開(kāi)始就把時(shí)鐘設(shè)為高電平,我用cnt 計(jì)數(shù)到兩個(gè)時(shí)鐘上升沿后再把它拉低,計(jì)數(shù)到7后cnt 拉低 時(shí)鐘拉高,這樣就實(shí)現(xiàn)了兩個(gè)周期高,六個(gè)周期低,占空比為2/8 即 25% 的八分頻。

????????本篇專(zhuān)欄到此結(jié)束,感興趣的小伙伴可以關(guān)注我, 一起學(xué)習(xí),備戰(zhàn)秋招。

??



數(shù)字IC手撕代碼-分頻器(任意偶數(shù)分頻)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
峡江县| 蒙阴县| 隆安县| 咸宁市| 东乡族自治县| 湘阴县| 弥渡县| 合江县| 永宁县| 乌什县| 渝中区| 萍乡市| 阿拉善右旗| 京山县| 江都市| 玉树县| 遂平县| 怀来县| 耿马| 马山县| 修文县| 嘉荫县| 舟曲县| 巩义市| 循化| 台中市| 永州市| 宣化县| 武邑县| 昭苏县| 咸丰县| 潼关县| 呼和浩特市| 唐河县| 宣威市| 青河县| 克什克腾旗| 黔东| 鄂尔多斯市| 扎鲁特旗| 麟游县|