简介
/
//EDA工具平台:Vivado 2019.1 + ModelSim SE-64 10.5
//开发套件型号: STAR 入门FPGA开发套件
//版 权 申 明: 本例程由《深入浅出玩转FPGA》作者“特权同学”原创,
// 仅供特权同学相关FPGA开发套件学习使用,谢谢支持
//官方淘宝店铺: http://myfpga.taobao.com/
//微 信 公 众 号:“FPGA快乐学习”
// 欢迎关注,获取更多更新的FPGA学习资料
/
`timescale 1ns/1ps
module vlg_design(
input clk, //100MHz
input rst_n,
output reg[3:0] syscnt
);
localparam DIVCNT_MAX = 5'd19;
reg[4:0] divcnt;
reg clk_en;
/
//对输入时钟clk 100MHz做20分频的计数
always @(posedge clk)
if(!rst_n) divcnt <= 'b0;
else if(divcnt < DIVCNT_MAX) divcnt <= divcnt+1'b1;
else divcnt <= 'b0;
/
//产生时钟使能信号,这个时钟使能信号每隔20个时钟周期有一个高脉冲
always @(posedge clk)
if(!rst_n) clk_en <= 1'b0;
else if(divcnt == DIVCNT_MAX) clk_en <= 1'b1;
else clk_en <= 1'b0;
/
//使用时钟使能信号进行计数
always @(posedge clk)
if(!rst_n) syscnt <= 'b0;
else if(clk_en) syscnt <= syscnt+1'b1;
else syscnt <= syscnt;
endmodule
testbench:
/
//EDA工具平台:Vivado 2019.1 + ModelSim SE-64 10.5
//开发套件型号: STAR 入门FPGA开发套件
//版 权 申 明: 本例程由《深入浅出玩转FPGA》作者“特权同学”原创,
// 仅供特权同学相关FPGA开发套件学习使用,谢谢支持
//官方淘宝店铺: http://myfpga.taobao.com/
//微 信 公 众 号:“FPGA快乐学习”
// 欢迎关注,获取更多更新的FPGA学习资料
/
`timescale 1ns/1ps
module testbench_top();
//参数定义
`define CLK_PERIORD 10 //时钟周期设置为10ns(100MHz)
//接口申明
reg clk;
reg rst_n;
wire[3:0] syscnt;
//对被测试的设计进行例化
vlg_design uut_vlg_design(
.clk(clk),
.rst_n(rst_n),
.syscnt(syscnt)
);
//复位和时钟产生
//时钟和复位初始化、复位产生
initial begin
clk <= 0;
rst_n <= 0;
#1000;
rst_n <= 1;
end
//时钟产生
always #(`CLK_PERIORD/2) clk = ~clk;
//测试激励产生
initial begin
@(posedge rst_n); //等待复位完成
@(posedge clk);
repeat(20*16*2) begin
@(posedge clk);
end
$stop;
end
endmodule