【数字IC手撕代码】Verilog偶数分频|题目|原理|设计|仿真(二分频,四分频,六分频,八分频,偶数分频及特殊占空比)
| 四社區聯合力薦!近500篇數字IC精品文章收錄! |
| 【數字IC精品文章收錄】學習路線·基礎知識·總線·腳本語言·芯片求職·EDA工具·低功耗設計Verilog·STA·設計·驗證·FPGA·架構·AMBA·書籍 |
Verilog偶數分頻
- 一、前言
- 二、偶數分頻題目
- 三、偶數分頻電路原理
- 3.1 寄存器級聯法
- 3.2 計數器法
- 四、寄存器級聯法分頻電路
- 4.1 二分頻|四分頻|八分頻RTL設計
- 4.2 分頻電路的Testbench
- 4.3 仿真波形
- 4.4 結果分析
- 五、計數器法分頻電路
- 5.1 六分頻RTL設計
- 5.2 分頻電路的testbench
- 5.3 仿真波形
- 5.4結果分析
- 六、不需要滿足50%占空比的偶數分頻
一、前言
本系列旨在提供100%準確的數字IC設計/驗證手撕代碼環節的題目,原理,RTL設計,Testbench和參考仿真波形,每篇文章的內容都經過仿真核對。快速導航鏈接如下:
1.奇數分頻
2.偶數分頻
3.半整數分批
4.小數/分數分頻
5.序列檢測器
6.模三檢測器
7.飲料機
8.異步復位,同步釋放
9.邊沿檢測(上升沿,下降沿,雙邊沿)
10.全加器,半加器
11.格雷碼轉二進制
12.單bit跨時鐘域(打兩拍,邊沿同步,脈沖同步)
13.奇偶校驗
14.偽隨機數生成器[線性反饋移位寄存器]
15.同步FIFO
16.無毛刺時鐘切換電路
應當說,手撕代碼環節是面試流程中既重要又簡單的一個環節,跟軟件類的崗位相比起來,數字IC的手撕代碼題目固定,數量有限,屬于整個面試中必得分的一個環節,在這個系列以外,筆者同樣推薦數字IC求職者使用“HdlBits”進行代碼的訓練
鏈接如下
HDLBits — Verilog Practice
二、偶數分頻題目
1.實現二分頻電路,滿足50%占空比。
2.實現四分頻電路,滿足50%占空比。
3.實現任意偶數分頻,滿足50%占空比。
4.實現任意偶數分頻,不需要滿足占空比。
三、偶數分頻電路原理
3.1 寄存器級聯法
寄存器級聯法能實現2^N的偶數分頻,具體是采用寄存器結構的電路,每當時鐘上升沿到來的時候輸出結果進行翻轉,以此來實現偶數分頻,具體的時序圖如下所示
3.2 計數器法
計數器法可以實現任意偶數分頻,以六分頻為例,電路需要實現的是:計數器從0開始計數至2,當clock上升沿取到clock=2時,輸出clock進行翻轉,具體的時序圖如下
若我們想實現任意任意偶數分頻,如10/12分頻,我們只需要將計數器的最大值設定為(10/2-1)或(12/2-1)或(N/2-1),既可以實現相關的分頻電路
四、寄存器級聯法分頻電路
4.1 二分頻|四分頻|八分頻RTL設計
module even_divide(clk,rst_n,clk2,clk4,clk8);input clk; input rst_n; output reg clk2; output reg clk4; output reg clk8;always@(posedge clk or negedge rst_n) begin if(!rst_n) clk2 <= 1'b0; else clk2 <= !clk2; endalways@(posedge clk2 or negedge rst_n) begin if(!rst_n) clk4 <= 1'b0; else clk4 <= !clk4; endalways@(posedge clk4 or negedge rst_n) begin if(!rst_n) clk8 <= 1'b0; else clk8 <= !clk8; endendmodule4.2 分頻電路的Testbench
module even_divide_tb();reg clk; reg rst_n; wire clk2; wire clk4; wire clk8;even_divide u1(.clk(clk),.rst_n(rst_n),.clk2(clk2),.clk4(clk4),.clk8(clk8));always #5 clk = ~clk;initial begin clk = 0; rst_n = 1; #15 rst_n = 0; #25 rst_n = 1;#300; endendmodule4.3 仿真波形
4.4 結果分析
可以發現,clk2為2分頻電路輸出,ck4為4分頻電路輸出,clk8為8分頻電路輸出,結果滿足需求
五、計數器法分頻電路
5.1 六分頻RTL設計
module odd_divide(clk,rst_n,clk6);input clk; input rst_n; output reg clk6;parameter N = 3'd6; reg [2:0] count;always@(posedge clk or negedge rst_n) begin if(!rst_n | count == N/2 -1) count <= 3'd0; else count <= count + 1'd1; endalways@(posedge clk or negedge rst_n) begin if(!rst_n) clk6 <= 3'b0; else if (count == N/2-1) clk6 <= ~clk6; else clk6 <= clk6; end endmodule5.2 分頻電路的testbench
`timescale 1ns/ 1ps module odd_divide_tb();reg clk; reg rst_n; wire clk6;odd_divide u1(.clk(clk),.rst_n(rst_n),.clk6(clk6));always #5 clk = ~clk;initial begin clk = 0; rst_n = 1; #15 rst_n = 0; #25 rst_n = 1;#300; endendmodule5.3 仿真波形
5.4結果分析
可以發現:所需六分頻電路得到實現,此處略去count計數器,當其等于2的時候clk6實現翻轉。
六、不需要滿足50%占空比的偶數分頻
通常來說,滿足50%占空比的要求更嚴格,假如對于占空比沒有要求,我們也可以使用狀態機去來實現六分頻電路
定義六個狀態:狀態0時clk的輸出為0,狀態1,2,3,4,5時clk的輸出為1,也可以同樣的實現六分頻電路,以此類推,可以實現任意偶數分頻的電路,并通過狀態的輸出為1,控制特殊占空比
總結
以上是生活随笔為你收集整理的【数字IC手撕代码】Verilog偶数分频|题目|原理|设计|仿真(二分频,四分频,六分频,八分频,偶数分频及特殊占空比)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python深度学习6之神经网络
- 下一篇: java多文件文件压缩加密下载