本文共 948 字,大约阅读时间需要 3 分钟。
首先画出系统框图和时序图。
`timescale 1ns/1ns
module divider_six(
input wire sys_clk , //系统时钟50Mhz input wire sys_rst_n , //全局复位output reg clk_flag //指示系统时钟6分频后的脉冲标志信号
);reg [2:0] cnt; //用于计数的寄存器
//cnt:计数器从0到5循环计数
always@(posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1'b0) cnt <= 3'b0; else if(cnt == 3'd5) cnt <= 3'b0; else cnt <= cnt + 1'b1;//clk_flag:脉冲信号指示6分频
always@(posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1'b0) clk_flag <= 1'b0; else if(cnt == 3'd4) clk_flag <= 1'b1; else clk_flag <= 1'b0;endmodule
接着进行仿真文件的编写。
`timescale 1ns/1ns
module tb_divider_six();
wire clk_out;
reg sys_clk;
reg sys_rst_n;//初始化系统时钟、全局复位
initial begin sys_clk = 1'b1; sys_rst_n <= 1'b0; #20 sys_rst_n <= 1'b1; end//sys_clk:模拟系统时钟,每10ns电平翻转一次,周期为20ns,频率为50Mhz
always #10 sys_clk = ~sys_clk;divider_six divider_six_inst
( .sys_clk (sys_clk ), //input sys_clk .sys_rst_n (sys_rst_n ), //input sys_rst_n.clk_out (clk_out ) //output clk_out
);endmodule
转载地址:http://fpmyk.baihongyu.com/