一、新建工程
1、打开 Vivado 软件,点击 “Creat Project” 新建工程;设置工程名称为 “led_twi” 并指定保存路径(工程路径不能包含中文、空格或者其它一些特殊的符号)。
2、选择工程类型为 “RTL Project” 并勾选 “Do not specify sources at this time”(不创建或者添加设计文件)。
3、选择器件型号为xc7k325tffg900-2 (这里使用的是Digilent Genesys 2 board Kintex-7 FPGA)。
二、设计输入
1、点击“Sources”窗口中的“+”号,选择 “Add or create design sources”, 点击“Create File”, “File name” 输入 “led_twi”, 点击 finish。
2、双击 “Sources” 窗口中的源文件,输入LED灯闪烁的代码:
module led_twi(
input clk_p,
input clk_n,
input sys_rst_n,
output [1:0] led
);
wire clk;
reg [25:0] cnt ;
assign led = (cnt < 26'd2500_0000) ? 2'b01 : 2'b10 ;
//pll设置200MHz差分时钟输入,100MHz时钟输出
clk_wiz_0 u_clk_wiz_0
(
.clk(clk),
.clk_in1_p(clk_p),
.clk_in1_n(clk_n)
);
always @ (posedge clk or negedge sys_rst_n) begin
if(!sys_rst_n)
cnt<=26'd0;
else if(cnt < 26'd5000_0000)
cnt <= cnt + 1'b1;
else
cnt <= 26'd0;
end
endmodule
三、分析与综合
1、点击“Flow Navigator”窗口中的“Open Elaborated Design”按钮编译RTL 源文件进行全面的语法检查。
2、点击“Flow Navigator”窗口中的“Run Synthesis”按钮进行综合。
四、约束输入
1、点击“Sources”窗口中的“+”号,选择“Add or create constraints”,在接下来的界面中点击“Create File”,输入约束文件的名称“led_twi”,点击finish。
2、双击打开"led_twi.xdc"文件(“Source”->“Constraints”->“constrs_1”->“led_twi.xdc”),输入以下内容:
# Clock Signal
set_property -dict { PACKAGE_PIN AD11 IOSTANDARD LVDS } [get_ports { clk_n }];
set_property -dict { PACKAGE_PIN AD12 IOSTANDARD LVDS } [get_ports { clk_p }];
#Reset
set_property -dict { PACKAGE_PIN R19 IOSTANDARD LVCMOS33 } [get_ports { sys_rst_n }];
#LED
set_property -dict { PACKAGE_PIN T28 IOSTANDARD LVCMOS33 } [get_ports { led[0] }];
set_property -dict { PACKAGE_PIN V19 IOSTANDARD LVCMOS33 } [get_ports { led[1] }];
以上代码是对 IO 管脚的引脚位置约束和电平标准约束。第一行中“set_property”是命令的名称;“PACKAGE_PIN AD11”是引脚位置参数,代表引脚位置是 AD11;“[get_ports {clk-n}]”代表该约束所要附加的对象是 clk-n 引脚。
五、设计实现
点击“Flow Navigator”窗口中的“Run Implementation”按钮实现设计,完成后关闭窗口。
六、生成和下载比特流
1、点击“Flow Navigator”窗口中的“Generate Bitstream”按钮生成比特流文件,完成后关闭窗口。
2、将下载器一端连接电脑,另一端与开发板上的 JTAG接口相连接,然后连接开发板电源线。
3、点击“Flow Navigator”窗口中的“Open Hardware Manager”按钮,然后点击“Hardware”子窗口中的“Auto Connect”进行自动连接。右击“xc7k325t_0”,在弹出的菜单中选择 "Program Device” ,在弹出的对话框中直接点击“Program”,代码下载完成后可以看到开发板上的LED灯交互闪烁。
附录:添加PLL的ipcore进行时钟分频
Genesys 2有一个200MHz的LVDS差分振荡器,引脚为AD11/AD12。
1、选择“Flow Navigator”窗口中“Project Manager”下的“IP Catalog”
2、在右侧搜索“clock”,并选择"Clocking Wizard"
3、在"Clocking Options"界面进行如下设置:
4、在"Output Clocks"界面进行如下设置:
设置完成后生成如下代码:
`timescale 1ps/1ps
module clk_wiz_0
(
// Clock out ports
output clk,
// Clock in ports
input clk_in1_p,
input clk_in1_n
);
endmodule
参考:
1、正点原子达芬奇pro之FPGA开发指南
2、Genesys 2 FPGA Board Reference Manual
https://digilent.com/reference/programmable-logic/genesys-2/reference-manual