數(shù)字IC手撕代碼-樂鑫科技筆試真題(4倍頻)
????????樂鑫科技考了好幾次四倍頻了,輸入一個clk,要求輸出一個clk_out,滿足clk_out的頻率是clk的四倍。
????????要注意的是,這里實現(xiàn)的是倍頻,而不是分頻,如果是分頻的話很好實現(xiàn),在up前期專欄中對任意奇數(shù)分頻、偶數(shù)分頻、小數(shù)分頻都做了具體介紹,但這里的倍頻實現(xiàn)起來則需要一些不同于分頻的技巧。
????????這里實現(xiàn)的技巧就是利用組合邏輯的延時來實現(xiàn)倍頻。

二倍頻
????????在實現(xiàn)四倍頻之前,我們先來實現(xiàn)二倍頻。利用一小段組合邏輯clk_out = Q^clk來做延遲,然后Q的改變通過檢測clk_out的上升沿來實現(xiàn)。實現(xiàn)代碼如下:

波形如下:

????????通過計數(shù)器count可以看見,計數(shù)器每在clk_out的上升沿,計數(shù)器加1,從波形中我們可以看到計數(shù)器在每個clk的周期里,都加了兩次1,也就是說clk_out的頻率是clk頻率的兩倍,由此我們就實現(xiàn)了二倍頻,只不過是占空比極小的二倍頻。
????????實現(xiàn)原理:初始化Q為0,在clk為低時, Q=0,clk=0所以,clk_out=Q^clk=0。在clk上升沿到來的瞬間,clk=1,Q=0,所以得到clk_out=Q^clk=1。從而clk_out的時鐘上升沿到來,clk_out的時鐘上升沿到來后,觸發(fā)always語句塊后的敏感事件列表,使得Q = ~Q;所以Q=1。右因為Q =1,clk=1,所以clk_out = Q ^clk=0,相當(dāng)于產(chǎn)生了一個極小的脈沖。

????????打開modelsim中仿真時間片的模式后,可以看見,clk上升沿時刻的數(shù)據(jù)變化和我們所描述分析的一致。下降沿同理。

四倍頻
????????在理解了二倍頻的實現(xiàn)原理(利用組合邏輯延時,配合always敏感事件列表創(chuàng)造極短脈沖)后,四倍頻的實現(xiàn)也是同樣的道理。
????????只不過再二倍頻的基礎(chǔ)上, 再次二倍時,使用的參考時鐘為第一次二倍頻得到的時鐘,譬如第一次二倍頻產(chǎn)生的二倍時鐘令其為clk_out_temp1,那么第二次做二倍頻的時候,以clk_out_temp1為參考時鐘,令clk_out_temp2 = Q1 ^ clk_out_temp1;

代碼:


波形:

????????如何判斷我們代碼是否實現(xiàn)了二倍頻呢?利用一個計數(shù)器,每在最終生成的clk_out時鐘上升沿來進(jìn)行計數(shù)器加1。

????????從波形圖可以看到,每一個clk時鐘周期里,count計數(shù)器都加了4,也就是經(jīng)歷了4個clk_out的時鐘上升沿,也即,每一個clk周期,對應(yīng)四個clk_out周期,也就是實現(xiàn)了我們所說的時鐘四倍頻,只不過四倍頻得到的時鐘的占空比非常?。úㄐ螆D上展示為尖峰脈沖)。

ps:由于b站截圖顯示不全,up將完整代碼傳至網(wǎng)盤自取,總計代碼量60行左右,題目難度:
★★☆☆☆。
代碼自取
鏈接:https://pan.bai刪除中文du.com/s/1UWH刪除中文Vfiw273vlVe3VqFFwuA?
提取碼:ffv9?