赞
踩
FPGA的开发流程主要分为两部分(不考虑仿真),.v文件的编写和.xdc文件的编写,前者为程序文件后者为管脚约束文件。
程序文件里实现的功能为每一秒实现两个led的亮灭变化,产生跑马灯的效果。
代码如下,注释也十分清楚。
module led_flash( input wire clk ,//定义一个输入的时钟信号 input wire rst_n ,//定义一个按键复位信号 output reg [1:0] led //定义两个led灯的电平信号 ); /*---计数器的定义---*/ reg [27:0] cnt ;//定义一个28位的寄存器,用来存数,目标一秒变化一次,则需要计数到50M,对应一个28位的二进制数 wire add_cnt ;//计数标志位 wire end_cnt ;//清零计数标志位 assign add_cnt = 1; assign end_cnt = add_cnt && cnt== 50000000 - 1; //只有当cnt=50M-1时,及计数时间已经到1S时,end_cnt才为1 /*---计数器功能实现---*/ always @(posedge clk or negedge rst_n)begin//当时钟上升沿或者复位信号下降沿时执行 if(rst_n==1'b0)begin cnt <= 'd0; end//检测到复位信号,计数器值归零 else if(add_cnt)begin//恒成立 if(end_cnt) cnt <= 'd0;//计数到目标值时归零 else cnt <= cnt + 1'b1;//正常加一计数 end end /*---led功能实现---*/ always @(posedge clk or negedge rst_n)begin//当时钟上升沿或者复位信号下降沿时执行 if(rst_n==1'b0)begin led <= 2'b10;检测到复位信号,led为二位二进制数10 end else if(end_cnt)begin led <= {led[0], led[1]};//计数到目标值时,调换led二位二进制数,实现led亮灭效果 end else begin led <= led; //计数未到目标值时,保持led的数值 end end endmodule
约束文件的作用就是对程序文件中定义的变量进行相应管脚的匹配。
代码如下
#时钟定义
create_clock -period 20.000 [get_ports clk]
set_property PACKAGE_PIN N18 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
#按键定义
set_property PACKAGE_PIN P16 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
#管脚电平初始化
set_property PACKAGE_PIN P15 [get_ports {led[0]}]
set_property PACKAGE_PIN U12 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports {led[*]}]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
其中时钟定义可有可无,额…我看的手册是这样说的,定义了会更好。
其中的代码无非就是两种,第一种为端口定义,例如:
set_property PACKAGE_PIN P15 [get_ports {led[0]}]
第二中为初始电平定义,例如:
set_property IOSTANDARD LVCMOS33 [get_ports {led[*]}]
第一种不同的是原理图上对应的管脚号,如上面的“P15”,“U12”,原理图如下。[ ]里面的就是程序文件中自己定义的变量名了。
第二种中的关键字就是“LVCMOS33”,它的含义是IO管脚的电平约束CMOS电压3.3V! [ ]里面的就是程序文件中自己定义的变量名了。
代码都写好后就可以生成FPGA的烧录文件了,使用的编辑器为Vivado,接下来就是编译三部曲,也可以直接点击第三个,同时完成上面的功能。
下面是综合后的结构图,大家感受一下FPGA的魅力吧!
放大前:
放大后:(仅仅是输入部分)
接下来就是把生成的.bit文件烧录进FPGA了
成功下载后,FPGA上的两个led灯交替闪烁,至此,over!
注:此下载方法只是在线编译,断电重连后不会执行该代码,要想断电不丢失代码要进行固化下载。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。