FPGA学习——Xilinx Vivado 实现led流水灯详解
整个流程
创建工程
设计代码、编写功能
RTL分析——引脚定义和绑定
综合synthesis
时序约束
仿真设置并配置激励文件(中小等项目可跳过,直接在线调试毕竟仿真时间太久)
生成bit文件导入fpga中——在线调试
判断是否达成目标功能
1. 建立工程
建立led工程,然后Next直到选择开发板型号(我的是xilinx黑金zynq7010),选错也没事,后面进入工程可以修改,选好就按finish完成
在这里插入图片描述
在这里插入图片描述
2. 编写功能代码
主界面如下,点击加号添加资源文件led.v,然后点击finish-ok-yes完成,并编写代码
主界面如上
在这里插入图片描述
插入此段代码,实现流水灯,还有其它几种写法,不懂可以讨论。
//代码如下
module led(clk,rst_n,led);
input clk; //时钟信号输入
input rst_n; //复位信号
output reg [3:0] led; //4个led灯
reg [1:0] state; //标志位
reg [31:0] counter; //计数量
/* 也可以这样表示引脚绑定变量在()中
module led(
input clk,
input rst_n,
output reg [3:0] led);
reg [1:0] state;
reg [31:0] counter; */
always@(posedge clk or negedge rst_n) //时序电路非阻塞赋值写法
begin
if(!rst_n)
begin
led <= 4'b1111;
state <= 2'd0;
counter <= 32'd0;
end
else
begin
case(state)
0:
begin
led <= 4'b0111;
if(counter < 32'd49_999_999) //50MHz,延时1s
begin
counter <= counter+32'd1;
end
else
begin
counter <= 0;
state <= 2'd1;
end
end
1:
begin
led <= 4'b1011;
if(counter < 32'd49_999_999)
begin
counter <= counter+32'd1;
end
else
begin
counter <= 0;
state <= 2'd2;
end
end
2:
begin
led <= 4'b1101;
if(counter < 32'd49_999_999)
begin
counter <= counter+32'd1;
end
else
begin
counter <= 0;
state <= 2'd3;
end
end
3:
begin
led <= 4'b1110;
if(counter < 32'd49_999_999)
begin
counter <= counter+32'd1;
end
else
begin
counter <= 0;
state <= 2'd0;
end
end
default:
state <= 2'd0;
endcase
end
end
endmodule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
3. RTL分析——引脚定义
重要!(根据开发板原理图设置,这是我的led引脚)
两种方法实现:在这里插入图片描述在这里插入图片描述
- 图形界面设置: 设置好点击保存在这里插入图片描述在这里插入图片描述
- 代码设置:
新建并打开led.xdc文件,设置引脚和电平。
在这里插入图片描述
set_property PACKAGE_PIN M14 [get_ports {led[0]}] //设置引脚接口
set_property PACKAGE_PIN M15 [get_ports {led[1]}]
set_property PACKAGE_PIN K16 [get_ports {led[2]}]
set_property PACKAGE_PIN J16 [get_ports {led[3]}]
set_property PACKAGE_PIN U18 [get_ports clk]
set_property PACKAGE_PIN N15 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}] //设置引脚电平
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
1
2
3
4
5
6
7
8
9
10
11
12
在这里插入图片描述
5. run synthesis综合
在这里插入图片描述
综合完成后出现这个框框可以关掉,也可以直接选择对应操作进行,把鼠标放在对应选择上有提示出现。
在这里插入图片描述
6. 时序约束
在这里插入图片描述
create_clock -period 20.000 -name clk -waveform {0.000 10.000} [get_ports clk] //在led.xdc代码最后插入
1
在这里插入图片描述
7. 在线调试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8.仿真调试和使用自带的逻辑分析仪(后面补充)
原文链接:https://blog.csdn.net/moumourenaini/article/details/103892062