文章目錄
- 摘要
- 一、時序圖
- 二、程序設計
- 2.1 rtl
- 2.2 tb
- 三、仿真分析
- 四、實用性
摘要
文章為學習記錄。繪制時序圖,編碼。通過修改分頻值參數,實現一定范圍分頻值內的任意分頻器設計。
一、時序圖
二、程序設計
2.1 rtl
module divider
#(parameter DIV_VALUE = 5)
(
input wire sys_clk , //系統時鐘 50MHz
input wire sys_rst_n , //全局復位output reg clk_flag //指示系統時鐘分頻后的脈沖標志信號);reg [10:0] cnt; //計數//cnt:always@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 1'b0)cnt <= 'b0;else if(cnt == DIV_VALUE -1)cnt <= 3'b0;elsecnt <= cnt + 1'b1;end//clk_flag:脈沖信號指示always@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 1'b0)clk_flag <= 1'b0;else if(cnt == DIV_VALUE -2)clk_flag <= 1'b1;elseclk_flag <= 1'b0;endendmodule
2.2 tb
module tb_divider();reg sys_clk ; //系統時鐘 50MHz
reg sys_rst_n ; //全局復位wire clk_flag ;//初始化系統時鐘、全局復位initial beginsys_clk = 1'b1;sys_rst_n <= 1'b0;#20sys_rst_n <= 1'b1;end//sys_clk:模擬系統時鐘,每 10ns 電平翻轉一次,周期為 20ns,頻率為 50MHzalways #10 sys_clk = ~sys_clk;divider
#(
. DIV_VALUE(5))
divider_inst1
(
. sys_clk (sys_clk), //系統時鐘 50MHz
. sys_rst_n(sys_rst_n) , //全局復位. clk_flag(clk_flag) //指示系統時鐘分頻后的脈沖標志信號);endmodule
三、仿真分析
5分頻:
系統時鐘周期20ns,clk_flag周期100ns。
10分頻:
系統時鐘周期20ns,clk_flag周期200ns。
四、實用性
確保系統時鐘繼續作為工作時鐘:
系統時鐘是由外部晶振直接通過管腳連接到了 FPGA 的專用時鐘管腳上,會連接到全局時鐘網絡,能夠使時鐘信號到達每個寄存器的時間都盡可能相同,以保證更低的時鐘偏斜(Skew)和抖動(Jitter)。
always@(posedge sys_clk or negedge sys_rst_n)
beginif(sys_rst_n == 1'b0)A <= 4'b0;else if(clk_flag == 1'b1)A <= A + 1'b1;end