2FPGA时序逻辑电路设计

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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文件夹中
在这里插入图片描述
,

在这里插入图片描述
在这里插入图片描述
全编译后将文件下载入板子

补充实验

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
位拼接
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39289876/article/details/109092291