ZYNQ是Xilinx推出的新一代全可编程片上系统,将处理器的软件可编程性与FPGA的硬件可编程性完美整合。
ZYNQ7020:xc7z020clg400-2 ZYNQ7010:xc7z010clg400-1
组合了一个双核ARM Cortex-A9(PS)处理器和一个传统的FPGA(PL)。
常用的可编程逻辑器件:
CPLD:基于“乘积项”的与或逻辑阵列;FPGA:基于“查找表”(LUT,Look UP Table)的CLB阵列。
FPGA与单片机的区别:对单片机编程并不改变其电路的内部连接结构,只是根据要求实现的功能来编写运行的程序(指令)。
Verilog与C:
Verilog 是硬件描述语言,在编译下载到 FPGA 后会生成电路,所以Verilog 是并行运行的;
C语言是软件编程语言,编译下载到单片机后是存储器中一组指令。而单片机处理软件指令需要取指、译码、执行,是串行执行的。
Verilog 和 C 的区别也是 FPGA 和 单片机/CPU 的区别。FPGA 由于全并行处理,处理速度非常快,这是FPGA最大的优势,这一点是单片机/CPU 替代不了的。
FPGA架构:
硬核:功能专一,有些FPGA才有。
布线资源:用来连接模块。
可编程逻辑单元:Xilinx是CLB,ALTERA是LAB。
底层嵌入功能单元:PLL、DSP等。
嵌入式块RAM:block RAM。
Xilinx家三个系列:Artix(最便宜)、Kintex、Virtex(最高端)。
7020核心板:
开发板资源:
vivado开发流程:
Vivado软件的硬件调试
传统的FPGA板子调试用逻辑分析仪,但测试信号需引出,比较繁琐且昂贵。
Vivado工具集成了逻辑分析仪,用于替换外部的逻辑分析仪,添加ILA核和VIO核。
FPGA设计流程:
功能仿真:也称为行为仿真,主要验证电路的功能是否符合设计要求,不考虑电路门延迟与线延迟,验证电路与理想情况是否一致。
时序仿真:也称为布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,能较好地反映芯片的实际工作情况。
testbench:
例程:LED灯
DE代码:
module led_twinkle(
input sys_clk , //系统时钟
input sys_rst_n, //系统复位,低电平有效
output [1:0] led //LED灯
);
//reg define
reg [25:0] cnt ;
//用网表探针debug时防止软件对变量做优化。
(*mark_debug ="true"*) reg [25:0] cnt ;
//对计数器的值进行判断,以输出LED的状态
//assign led = (cnt < 26'd2500_0000) ? 2'b01 : 2'b10 ;
assign led = (cnt < 26'd5) ? 2'b01 : 2'b10 ; //仅用于仿真
//计数器在0~5000_000之间进行计数
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
cnt <= 26'd0;
// else if(cnt < 26'd5000_0000)
else if(cnt < 26'd10 - 1) //仅用于仿真
cnt <= cnt + 1'b1;
else
cnt <= 26'd0;
end
endmodule
DV代码:
`timescale 1ns / 1ps
module tb_led_twinkle();
reg sys_clk;
reg sys_rst_n;
wire [1:0] led;
initial begin
sys_clk = 1'b0;
sys_rst_n = 1'b0;
#200
sys_rst_n = 1'b1;
end
always #10 sys_clk = ~sys_clk;
led_twinkle u_led_twinkle(
.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),
.led(led)
);
endmodule