我是靠谱客的博主 执着百褶裙,这篇文章主要介绍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[]YesDDR输入数据端口。输入端口WIDTH宽度。datain端口应该从顶层设计的输入管脚中直接驱动。
inclockYes时钟信号来采样DDR输入。datain端口在inclock信号的每个时钟沿上进行采样。
inclockenNo数据时钟的时钟使能
aclrNo异步清零输入。aclr和aset端口无法同时连接。
asetNo异步设置输入。aclr和aset端口无法同时连接。
sclrNo异步清零输入sclr和sset端口无法同时连接。sclr端口仅适用于Arria GX、Stratix III、Stratix II、Stratix II GX、Stratix、Stratix GX、HardCopy II和HardCopy Stratix器件。 
ssetNo同步设置输入。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[]Yesoutclock端口上升沿的输入数据。输入端口WIDTH宽度。
datain_l[]Yesoutclock端口下降沿的输入数据。输入端口WIDTH宽度。
outclockYes寄存器数据输出的时钟信号。dataout端口在outclock信号的每个时钟沿上输出DDR数据。
outclockenNooutclock端口的时钟使能。
aclrNo异步清零输入。aclr和aset端口无法同时连接。
asetNo异步设置输入。aclr和aset端口无法同时连接。
oeNodataout端口的输出使能。有效高电平信号。如果需要一个低有效电平oe,那么可以添加一个反转器。
sclrNo同步清零输入。sclr和sset端口无法同时连接。sclr端口仅适用于Arria GX、Stratix III、Stratix II、Stratix II GX、Stratix、Stratix GX、HardCopy II和HardCopy Stratix器件。
ssetNo同步设置输入。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)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部