一、环境搭建
- 软件安装略。在官网下载即可,有免费个人使用的社区版。
- 程序下载:装好驱动直接点这个就可以下载
二、代码(如下三个文件)
- 顶层模块(文件main.v)
module top_hdl(
input sys_clk,
input sys_rst_n,
output reg led
);
localparam CNT_MAX = 27_000;
localparam precision = 27;
reg flag;
reg [14:0] cnt;
reg [14:0] Duty_cycle_ratio;
initial begin
flag = 1'b0;
cnt = 15'b0;
Duty_cycle_ratio = 15'b0;
end
always @ (posedge sys_clk) begin
if(!sys_rst_n) begin
cnt <= 15'd0;
end else begin
if(cnt >= CNT_MAX)begin
cnt <= 15'd0;
end else begin
cnt <= cnt + 15'd1;
end
end
end
always @(posedge sys_clk)begin
if(sys_rst_n == 1'b0)begin
flag <= 1'b0;
end else if(Duty_cycle_ratio == CNT_MAX)begin
flag <= ~flag;
end
end
always @(posedge sys_clk)begin
if(sys_rst_n == 1'b0)begin
Duty_cycle_ratio <= 15'b0;
end else if(cnt == 15'b0) begin
if(Duty_cycle_ratio < CNT_MAX)
Duty_cycle_ratio <= Duty_cycle_ratio + precision;
else
Duty_cycle_ratio <= Duty_cycle_ratio;
end else begin
if(Duty_cycle_ratio == CNT_MAX)
Duty_cycle_ratio <= 15'b0;
else
Duty_cycle_ratio <= Duty_cycle_ratio;
end
end
always @(posedge sys_clk)begin
if(sys_rst_n == 1'b0)begin
led <= 1'b0;
end else if(Duty_cycle_ratio >= cnt && flag == 1'b0)begin
led <= 1'b0;
end else if(Duty_cycle_ratio < cnt && flag == 1'b0)begin
led <= 1'b1;
end else if(Duty_cycle_ratio >= cnt && flag == 1'b1)begin
led <= 1'b1;
end else begin
led <= 1'b0;
end
end
endmodule //top_hdl end
- 测试文件(文件testbeach.v)
`timescale 1ns/1ps
module top_hdl_tb;
localparam PERIOD = 37; //ns
reg clk;
reg rst_n;
always #(PERIOD/2) clk <= !clk;
initial begin
rst_n = 0;
clk = 0;
#(PERIOD*100)
rst_n = 1;
end
top_hdl top_hdl_ut0(
.sys_clk(clk),
.sys_rst_n(rst_n),
.led()
);
endmodule //top_hdl_tb end
- 引脚约束文件(文件kb1.cst)
IO_LOC "led" 10;
IO_PORT "led" PULL_MODE=NONE DRIVE=8;
IO_LOC "sys_rst_n" 14;
IO_PORT "sys_rst_n" PULL_MODE=UP;
IO_LOC "sys_clk" 45;
IO_PORT "sys_clk" PULL_MODE=UP;
三、modulesim
- 略
四、代码下载(需要先进行代码的编译)
-
- -
-
五、看到开发板开始呼吸就是完成了功能。