82i CPLD CurrRunterⅡXPLA3/XC9500系列-我如何创建延迟缓冲区?-Xilinx-AMD社区-FPGA CPLD-ChipDebug

82i CPLD CurrRunterⅡXPLA3/XC9500系列-我如何创建延迟缓冲区?

描述

关键词:81I,7.1I,63I,62I,5.1I,5.2I,5.1I,4.1I,4.2I,XST,9500 XL,9500×V,线

如何向一个信号添加逻辑延迟级别?

解决方案

不要期望逻辑延迟从一个部分到另一个部分是相同的,因为某些器件比其他器件更快。此外,所有CMOS器件在较冷的温度和较高的电压下加速,所以不能假定延迟总是恒定的。

您可以通过实例化BUF组件,将一个逻辑延迟添加到一个信号中,然后将保留属性放置在输入上,这样综合工具和CPLDfitter就不会优化它(因为它是冗余逻辑)。保持属性必须在源代码(VHDL/Verilog/示意图)中设置,否则缓冲区将通过综合去除。

如果被延迟的信号是组合信号,则实例化的第一缓冲器不增加任何额外的延迟;它明确地表示路径所通过的宏单元的路径。额外的缓冲器会增加额外的延迟。
需要2×缓冲器来创建等效的1延迟缓冲器。
需要3 x缓冲器来创建等效的2个延迟缓冲器等。

VHDL语言

库IEEE;
使用IEEE.STDYLogiCy1164.ALL;

库UNISIM;
使用UNISIM.VCISOTALS;

实体顶部
端口(DIN):在STDYLogic中;
CLK:在STDYLogic中;
DOUT:输出STDYLogic);
端部顶部;

顶层建筑行为

信号DutuNob:STDYLogic;定义触发器的输出信号

属性保持:字符串;
DouthNo结的属性保持:信号是“真”;保持缓冲区不被优化

组件BUF
端口(I:在STDYLogic中;O:输出STDYLogic);
端部元件;

开始

MYYBUF: BUF
端口映射(端口映射)
i=& gt;dutnNoad,
O= & GT;DOUT);

进程(DIN,CLK)
开始
如果(CLK’事件)和(CLK=’1)
DouthNob&L.= DIN;
如果结束;
结束过程;

结束行为;

Verilog

模块顶部(输入,A,CLK,梳子);
输入输入;
输入CLK;
输出梳;

Reg IpPuthAaReg;

//综合属性保持输入为“真”
Bu-MyBuf(I(IpPuth-AyReg),O(梳));

总是@(POSEDGE CLK)
开始
输入;
结束

终端模块

ABEL(必须使用ABELXST Verilog流)

模块顶部
CLK引脚;
Din PIN;
输出引脚;

延迟节点“保持”;

BUF外部(I & GT;O);
U1官能团BUF;

方程

I=DIN;
延迟=U1.O;

延迟;
CLK=CLK;

结束

示意图(XST VHDL流程)

执行以下步骤:
1。插入一个BUF组件。
2。双击“输出”网络以显示“对象属性”框。单击“新建”。
三。在属性名称的下拉菜单中,选择“保持”。将其他字段保留为空白,然后单击“确定”。
4。选择新的保存属性,点击类别“编辑特征”,选择“VHDL”。
5。选择用于写入此属性的单选按钮(这允许您选择下面的复选框)。检查项2(在属性声明语句中)和项3(在属性语句中)。
6。单击“确定”返回到“对象属性”菜单,然后再次单击“确定”,返回到“示意图”视图。

每个BUF组件迫使fitter使用额外的逻辑延迟级别。

请登录后发表评论

    没有回复内容