//小白入门记录,当电子笔记本来用,学习的视频来自b站ALINX官方。我所使用的板子就是购买的ALINX zynq7020,所以按照此教程进行学习。
【ALINX】FPGA ZYNQ视频教程——AX7010/AX7020教程——FPGA实验篇_哔哩哔哩_bilibili
led.v文件代码加注释
module led(
input sys_clk,
input rst_n,
(* MARK_DEBUG="true" *)output reg [3:0] led
//直接在HDL源代码中用(*MARK_DEBUG = “true”*)标识出要探测的信号
);
(* MARK_DEBUG="true" *)reg[31:0] timer_cnt;
always@(posedge sys_clk or negedge rst_n)
begin
if (!rst_n)
//如果reset active,全部reset
begin
led <= 4'd0 ;
timer_cnt <= 32'd0 ;
end
else if(timer_cnt >= 32'd49_999_999)
//设置翻转条件,翻转后计数器归零
begin
led <= ~led;
timer_cnt <= 32'd0;
end
else
//led保持不变,计数器加一
begin
led <= led;
timer_cnt <= timer_cnt + 32'd1;
end
end
Instantiate ila in source file
//ila ila_inst(
// .clk(sys_clk),
// .probe0(timer_cnt),
// .probe1(led)
// );
endmodule
约束引脚和时钟约束后自动生成的led.xdc约束文件代码段。1.其中约束引脚是通过“工具栏window-I/O ports”打开,对照使用手册选择引脚和电压值自动生成。2.时钟约束是通过左侧“综合-open synthesized design-constraints wizard”打开,选择时钟50MHz,自动生成。
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 N15 [get_ports rst_n]
set_property PACKAGE_PIN U18 [get_ports sys_clk]
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 {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]
create_clock -period 20.000 -name sys_clk -waveform {0.000 10.000} [get_ports sys_clk]
生成比特流后可以通过open hardware manager下载比特流到板子。下面说仿真。
右键simulation-simulation settings可以进行仿真的设置。
进行仿真需要添加仿真的激励文件,“add sources-add or create simulation sources”,创建文件“vtf_led_test.v”,复制例程代码如下。
`timescale 1ns / 1ps
//
// Module Name: vtf_led_test
//
module vtf_led_test;
// Inputs
reg sys_clk;
reg rst_n ;
// Outputs
wire [3:0] led;
// Instantiate the Unit Under Test (UUT)
led uut (
.sys_clk(sys_clk),
.rst_n(rst_n),
.led(led)
);
initial
begin
// Initialize Inputs
sys_clk = 0;
rst_n = 0 ;
#1000 ;
rst_n = 1;
end
//Create clock
always #10 sys_clk = ~ sys_clk;
endmodule
后面是一些基本操作,run行为级仿真,
仿真时,可以对信号进行设置,来显示我们想要的(比如计数器显示十进制数字而非16进制),点击信号右击,radix-real settings-选择fixed,或者直接选unsigned 十进制也行。
仿真1s,可以看到确实是1s时计数器达到4999_9999,led亮起来(F)了。
仿真文件会占用目录内sim文件夹的资源,仿真时间久了会很大,没啥用的仿真可以删了。大文件在这个路径下面。
在教程中后面就上电对板子进行操作了
后面要讲内嵌的逻辑分析仪的使用方法,就是要把板子内部实际的波形图通过IP“ila”导出来看到。
后面如果用的到ila再详细记录。学习到此结束。