1新建工程
和之前一样新建工程
2编写描述文件
和上篇一样
在本工程目录下的 rtl 文件夹下新建 verilog file 文件并以 led_flash.v 保存。
module led_flash(
CLK50M,
Rst_n,
led);
input CLK50M;
input Rst_n;
output reg[3:0]led;
reg[24:0]cnt;
always@(posedge CLK50M or negedge Rst_n)
if(!Rst_n)
cnt<=25'd0;
else if(cnt==25'd24_999_999)
cnt<=25'd0;
else
cnt<=cnt+1'b1;
always@(posedge CLK50M or negedge Rst_n)
if(!Rst_n)
led<=4'b1111;
else if(cnt==25'd24_999_999)
led<=~led;
else
led<=led;
endmodule
进行验证
逻辑图如下
3编写测试脚本
为了测试仿真编写测试激励文件,新建 led_flash_tb.v 文件并输入以下内容再次进行分析
和综合直至没有错误以及警告,保存到 testbench 文件夹下。这里生成了一个周期为 20ns 的时钟 clk,并且例化了需要测试的led_flash_tb.v
`timescale 1ns/1ns
`define clock_period 20
module led_flash_tb;
reg CLK50M;
reg Rst_n;
wire [3:0]led;
led_flash led_flash0(
.CLK50M(CLK50M),
.Rst_n(Rst_n),
.led(led)
);
initial CLK50M = 1;
always #(`clock_period/2) CLK50M = ~CLK50M;
initial begin
Rst_n=0;
#(`clock_period*20+1) Rst_n=1;
#(`clock_period*25000000*5) ;
$stop;
end
endmodule
3功能仿真
设置nativelink脚本
使用RTL Simulation
发现比设计的短实际上,不能*5,将led_flash_tb下列式子修改重新仿真
然后restart,后run all
全编译
分配引脚
建立自动化脚本,在prj文件夹中
全编译后将文件下载入板子
补充实验
位拼接