一、DDR芯片详解
1. 硬件连接
图1.1 FPGA端DDR连接
图1.2 H5TQ4G63AFR端连接
2. DDR SDRAM主要特征及基础引脚
2.1 数据传输
DDR传输相较于SDR速度快了一倍,原因:SDR仅在时钟上升沿传输数据,DDR信号上、下沿同时传输数据,50MHz时钟,DDR传输速率可达100Mb/s。
2.2 Prefetch技术
一个内核时钟周期可同时寻址多个存储单元并将这些数据以并行的方式统一传输到IO Buffer中,之后以更高的速度将IO Buffer中的数据传输出去。
2.3 DDR SDRAM 基础引脚
1. CKE I 时钟使能信号,高有效。用途:1关闭时钟进入省电模式,2进入自刷新状态。
2. CS# I 片选信号,低有效。片选信号有效后,DDR才能识别控制器发送的命令,设计时注意上拉。
3. RAS# I 行地址选通信号,低电平有效。
4. CAS# I 列地址选通信号,低电平有效。
5. WE# I 写使能信号,低电平有效。
3. H5TQ4G63AFR
3.1 电源
表3.1.1 芯片电源
3.2 引脚
2.3内已经介绍的引脚在此不再赘述。
表3.1.2 芯片引脚
二、点亮第一盏灯
1. 工程创建及程序编写
由图可知4个LED分别挂在FPGA BANK35的M14、M15、K16、J16引脚上。
根据原理图设计可知当LED1即FPPGA BANK35的M14引脚输出低电平,LED5点亮。
1.1 源文件程序编写
编写“led.v”,这里定义了一个 32 位的寄存器 timer, 用于循环计数 0~49999999(1 秒钟), 计数到 49999999(1 秒)的时候, 寄存器 timer 变为 0,并翻转四个 LED。这样原来 LED 是灭 的话,就会点亮,如果原来 LED 为亮的话,就会熄灭,编写好代码后保存。[1]
源代码:
`timescale 1ns / 1ps
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
endmodule
1.2 编写XDC管脚约束文件
Vivado 使用的约束文件格式为 xdc 文件。xdc 文件里主要是完成管脚的约束,时钟的约束, 以及组的约束。需要对 led.v 程序中的输入输出端口分配到 FPGA 的真实管脚上。
set_property PACKAGE_PIN J16 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
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 PACKAGE_PIN K16 [get_ports {led[2]}]
set_property PACKAGE_PIN M15 [get_ports {led[1]}]
set_property PACKAGE_PIN M14 [get_ports {led[0]}]
set_property PACKAGE_PIN N15 [get_ports rst_n]
set_property PACKAGE_PIN U18 [get_ports sys_clk]
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]
XDC 编写语法,普通 IO 口只需约束引脚号和电压,管脚约束
如下: set_property PACKAGE_PIN "引脚编号" [get_ports “端口名称”]
电平信号的约束如下: set_property IOSTANDARD "电平标准" [get_ports “端口名称”]
create_clock -period 20.000 -name sys_clk -waveform {0.000 10.000} [get_ports sys_clk]为50M时钟
1.3仿真文件编写及仿真波形
`timescale 1ns / 1ps
module vtf_led_test;
//input
reg sys_clk;
reg rst_n;
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
图1.3.1仿真波形图
vivado安装包及LED工程文件连接:
链接:https://pan.baidu.com/s/1BnjrSLnDaeA-_KFAPDEgcA
提取码:es55
注释:
[1]该部分内容参考cource_s1_ALINX_ZYNQ(AX7010_AX7020)2019版开发平台FPGA教程V1.02