一 ZYNQ FPGA 简介
ZYNQ FPGA主要特点是包含了完整的ARM处理系统,内部包含了内存控制器和大量的外设,且可独立于可编程逻辑单元,下图中的ARM内核为 ARM Cortex™-A9,ZYNQ FPGA包含两大功能块,处理系统Processing System(ps)和可编程逻辑Progarmmable Logic(pl),为了实现 ARM 处理器和FPGA之间的高速通信和数据交互,发挥 ARM 处理器和FPGA的性能优势,需要设计高效的片内高性能处理器与FPGA之间的互联通路。从zynq内部框图看ps与pl端的高速互联接口为Advanced eXtensible Interface(AXI)。
图: zynq fpga xc7z020 内部框图
二 通过 pl 点亮 LED 灯
1 硬件电路
zynq fpga 为xc7z020,电路如下图所示,点亮led1~led4,与PL端连接的为M14,M15,K16,J16,PL_GCLK为50M的时钟源。
图:硬件原理图
2 vivado 工程
vivado版本为2017.4。
license文件:
链接:https://pan.baidu.com/s/1mlVilCib8T-KzS6U1Ufytw?pwd=4kc3
提取码:4kc3
操作过程主要是:
新建工程→创建led.v文件→生成管脚xdc文件→综合在xdc中增加时序约束→生成bit文件
2.1 点亮 led 的 verilog
代码如下:
module led(
input sys_clk,
input rst_n,
output reg [3:0] led
);
reg[31:0] timer_cnt;
always@(posedge sys_clk or negedge rst_n)
begin
if (!rst_n)
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
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
由系统时钟50M,计数到49999999翻转LED,也就以1s的间隔亮灭LED。
IO 的配置如下图所示:
图:点亮 LED 的 io 配置
生成的原理图:
图:点亮 LED 的逻辑原理图
2.2 vivado 仿真
仿真文件:
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
仿真结果:
可以看到在1s的位置led1~led4电平有翻转。
图:仿真的波形
完整的点亮 LED 工程:
链接:https://pan.baidu.com/s/19WJav9AoM_YqfZWq-V-_Xw?pwd=mwgu
提取码:mwgu