我是靠谱客的博主 执着百褶裙,这篇文章主要介绍Altera(Quartus) IP核 ALTDDIO_IN、ALTDDIO_OUT(双倍数据速率I/O,DDIO)的使用和仿真1、前言2、ALTDDIO_IN IP核3、ALTDDIO_OUT IP核4、参考,现在分享给大家,希望可以做个参考。
1、前言
ALTDDIO_IN、ALTDDIO_OUT是Altera 提供的双数据速率 (DDR,double data rate) IP 核,双数据速率 (DDR) IP 核可以用于在逻辑资源中实现 DDR 寄存器。
ALTDDIO_IN通过DDR接口可以实现在参考时钟的上升和下降沿接收数据;ALTDDIO_OUT通过DDR接口可以实现在参考时钟的上升和下降沿发送数据。
2、ALTDDIO_IN IP核
2.1、理论
框图如下:
接口信号描述如下表:
名称 | 需要 | 说明 |
---|---|---|
datain[] | Yes | DDR输入数据端口。输入端口WIDTH宽度。datain端口应该从顶层设计的输入管脚中直接驱动。 |
inclock | Yes | 时钟信号来采样DDR输入。datain端口在inclock信号的每个时钟沿上进行采样。 |
inclocken | No | 数据时钟的时钟使能 |
aclr | No | 异步清零输入。aclr和aset端口无法同时连接。 |
aset | No | 异步设置输入。aclr和aset端口无法同时连接。 |
sclr | No | 异步清零输入sclr和sset端口无法同时连接。sclr端口仅适用于Arria GX、Stratix III、Stratix II、Stratix II GX、Stratix、Stratix GX、HardCopy II和HardCopy Stratix器件。 |
sset | No | 同步设置输入。sclr和sset端口无法同时连接。sset端口仅适用于Arria GX、Stratix III、Stratix II、Stratix II GX、Stratix、Stratix GX、HardCopy II和HardCopy Stratix器件。 |
时序图如下:
2.2、仿真
在Quartus II中调用此IP进行仿真,Verilog文件如下:
//模块及端口声明
module ddio
(
input sys_clk , //系统时钟
input sys_rst_n , //复位
input [7:0] datain , //输入数据端口,位宽8
output [7:0] dataout_h , //输出在上升沿接收的数据,位宽8
output [7:0] dataout_l //输出在下降沿接收的数据,位宽8
);
//例化IP核--ATLDDIO_IN
ddio_in ddio_in_inst (
.aclr ( !sys_rst_n) ,
.datain ( datain ) ,
.inclock ( sys_clk ) ,
.dataout_h ( dataout_h ) ,
.dataout_l ( dataout_l )
);
endmodule
Testbench如下:
//------------------------------------------------
//--ATLDDIO_OUT仿真
//------------------------------------------------
`timescale 1ns/1ns //时间单位/精度
//------------<模块及端口声明>----------------------------------------
module tb_ddio();
reg sys_clk ;
reg sys_rst_n ;
reg [7:0] datain ;
wire [7:0] dataout_h ;
wire [7:0] dataout_l ;
//------------<例化被测试模块>----------------------------------------
ddio ddio_inst
(
.sys_rst_n ( sys_rst_n) ,
.sys_clk ( sys_clk ) ,
.datain ( datain ) ,
.dataout_h ( dataout_h ) ,
.dataout_l ( dataout_l )
);
//------------<设置初始测试条件>----------------------------------------
initial
begin
sys_clk = 1'b0; //条件为0
sys_rst_n <= 1'b0;
datain <= 8'd0;
#5 //35个时钟周期
sys_rst_n <= 1'b1; //拉高复位
#10
datain = $random % 256;
#10
datain = $random % 256;
#10
datain = $random % 256;
#10
datain = $random % 256;
#10
datain = $random % 256;
#10
datain = $random % 256;
#10
datain = $random % 256;
#10
datain = $random % 256;
#10
datain = $random % 256;
#10
datain = $random % 256;
end
//------------<设置时钟>----------------------------------------------
always #10 sys_clk = ~sys_clk; //系统时钟周期20ns
endmodule
仿真结果:
- 在时钟的上升沿分别通过两个输出接口输出数据
- dataout_l在上升沿输出上一个时钟周期下降沿采集到的数据;dataout_h在上升沿输出上一个时钟周期上升沿采集到的数据,
3、ALTDDIO_OUT IP核
3.1、理论
框图如下
接口信号描述如下表:
名称 | 需要 | 说明 |
---|---|---|
datain_h[] | Yes | outclock端口上升沿的输入数据。输入端口WIDTH宽度。 |
datain_l[] | Yes | outclock端口下降沿的输入数据。输入端口WIDTH宽度。 |
outclock | Yes | 寄存器数据输出的时钟信号。dataout端口在outclock信号的每个时钟沿上输出DDR数据。 |
outclocken | No | outclock端口的时钟使能。 |
aclr | No | 异步清零输入。aclr和aset端口无法同时连接。 |
aset | No | 异步设置输入。aclr和aset端口无法同时连接。 |
oe | No | dataout端口的输出使能。有效高电平信号。如果需要一个低有效电平oe,那么可以添加一个反转器。 |
sclr | No | 同步清零输入。sclr和sset端口无法同时连接。sclr端口仅适用于Arria GX、Stratix III、Stratix II、Stratix II GX、Stratix、Stratix GX、HardCopy II和HardCopy Stratix器件。 |
sset | No | 同步设置输入。sclr和sset端口无法同时连接sset端口仅适用于Arria GX、Stratix III、Stratix II、Stratix II GX、Stratix、Stratix GX、HardCopy II和HardCopy Stratix器件。 |
时序图如下:
3.2、仿真
在Quartus II中调用此IP进行仿真,Verilog文件如下:
//模块及端口声明
module ddio
(
input sys_clk , //系统时钟
input sys_rst_n , //复位
input oe , //使能信号,高电平有效
input [7:0] datain_h , //上升沿读取的输入信号,位宽8
input [7:0] datain_l , //下降沿读取的输入信号,位宽8
output [7:0] dataout //双沿输出信号,位宽8
);
//例化IP核--ATLDDIO_OUT
ddio_out ddio_out_inst (
.aclr ( !sys_rst_n ) ,
.datain_h ( datain_h ) ,
.datain_l ( datain_l ) ,
.oe ( oe ) ,
.outclock ( sys_clk ) ,
.dataout ( dataout )
);
endmodule
Testbench如下:
//------------------------------------------------
//--ATLDDIO_OUT仿真
//------------------------------------------------
`timescale 1ns/1ns //时间单位/精度
//------------<模块及端口声明>----------------------------------------
module tb_ddio();
reg sys_clk ;
reg sys_rst_n ;
reg oe ;
reg [7:0] datain_h ;
reg [7:0] datain_l ;
wire [7:0] dataout ;
//------------<例化被测试模块>----------------------------------------
ddio ddio_inst
(
.sys_clk (sys_clk ),
.sys_rst_n (sys_rst_n ),
.oe (oe ),
.datain_h (datain_h ),
.datain_l (datain_l ),
.dataout (dataout )
);
//------------<设置初始测试条件>----------------------------------------
initial begin
sys_clk = 1'b0; //初始条件为0
sys_rst_n <= 1'b0;
oe <= 1'b0;
datain_h <= 8'd0;
datain_l <= 8'd0;
#35 //35个时钟周期
sys_rst_n <= 1'b1; //拉高复位
#10 //拉高使能信号
oe <= 1'b1;
#200
oe <= 1'b0; //拉低使能信号
end
//------------<设置时钟>----------------------------------------------
always #10 sys_clk = ~sys_clk; //系统时钟周期20ns
always #20 datain_h = $random % 256; //每20ns生成一个0~255的随机数
always #20 datain_l = $random % 256; //每20ns生成一个0~255的随机数
endmodule
仿真结果:
- 在使能信号拉底时,无输出;使能信号拉高时有DDR输出
- 分别在上升沿、下降沿输出数据
- 在上升沿输出上升沿采集到的输入信号datain_h;在下降沿输出上升沿采集到的输入信号datain_l
4、参考
双倍数据速率I/O (ALTDDIO_IN、ALTDDIO_OUT和ALTDDIO_BIDIR) IP内核用户指南
最后
以上就是执着百褶裙最近收集整理的关于Altera(Quartus) IP核 ALTDDIO_IN、ALTDDIO_OUT(双倍数据速率I/O,DDIO)的使用和仿真1、前言2、ALTDDIO_IN IP核3、ALTDDIO_OUT IP核4、参考的全部内容,更多相关Altera(Quartus)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复