`timescale 1ns / 1ps
module led
#(
parameter CNT_MAX = 'd199_999_999
)(
input wire sys_clk_p,
input wire sys_clk_n,
input wire rst, //同步低复位
output reg led
);
reg [31:0] timer_cnt;
wire sys_clk;
/**********************************************
*********** IBUFDS 原语
**********************************************/
IBUFDS IBUFDS_inst(
.O(sys_clk),
.I(sys_clk_p),
.IB(sys_clk_n)
);
/**********************************************
*********** 信号赋值
**********************************************/
// 赋值 timer_cnt
always@(posedge sys_clk) begin
if(!rst) begin
timer_cnt <= 32'b0;
end
else if(timer_cnt >= CNT_MAX) begin
timer_cnt <= 32'b0;
end
else begin
timer_cnt <= timer_cnt + 32'd1;
end
end
// 赋值 led
always@(posedge sys_clk) begin
if(!rst) begin
led <= 1'b1;
end
else if(timer_cnt >= CNT_MAX) begin
led <= ~led;
end
end
endmodule
`timescale 1ns / 1ps
module tb_led(
);
parameter CNT_MAX = 32'd10;
reg sys_clk_p;
wire sys_clk_n;
reg rst;
wire led;
led #(
.CNT_MAX(CNT_MAX)
)tb_led(
.sys_clk_p(sys_clk_p),
.sys_clk_n(sys_clk_n),
.rst(rst),
.led(led)
);
// 初始化clk信号
assign sys_clk_n = ~sys_clk_p;
initial begin
sys_clk_p = 0;
forever #2.5 sys_clk_p = ~sys_clk_p;
end
// 初始化rst信号
initial begin
rst = 0;
#100;
rst = 1;
end
endmodule
仿真得到的时序波形图:
综合是将HDL代码转换为门级网表的过程,实现是将门级网表映射到目标FPGA设备的过程。
以 AXU9EG 开发板为例:
名称 | 位置 |
---|---|
led | AM13 |
rst | AN12(对应 PL KEY) |
sys_clk_p | AL8 |
综合后的原理图:
拨码开关调整到 JTAG 模式,连接 JTAG 接口后,上电
open hardware manager -> open target -> auto connect 后,成功扫描到硬件
/**********************************************
*********** ILA 例化
**********************************************/
ila_0 inst_ila (
.clk(sys_clk), // input wire clk
.probe0(timer_cnt) // input wire [31:0] probe0
);
重新生成比特流,并连接
选择 ILA 窗口
点击运行即可看到采集信号的波形,采集的个数为设置的采样深度
可以添加采样触发条件
最终调试窗口结果
导出 csv 文件:
clc;
clear;
close all;
data_depth = 131072; % 采集的数据个数
%% 读取csv文件
csv_file_name = 'iladata.csv';
out_data = csvread(csv_file_name, 2, 3, [2,3,2 + data_depth - 1,3]); % 从csv文件的第三行第四列开始读取读取到end行第四列