描述
关键字:XST、IOB、3态、三态、三态、三态、三态、使能、保持、合并、复制、寄存器、多、总线
紧迫性:标准
一般描述:
我使用的是一个触发器总线,它必须放在器件的IOBs中。这些FFS的输出应该放置在3态条件下,并且应该记录三态缓冲器的使能信号。
如果一个总线用于注册的启用信号,则除了一个启用FFS之外,所有的总线都被优化出来。由于最后一个FF的输出负载现在不是1,它不能被放入IOBs中。我该怎么办呢?
解决方案
解决方案不是为启用信号创建FFS总线,而是创建一触发器并放置IOB属性。然后,激活开关将寄存器/锁存到综合属性中的IOBs中,这将复制单个FF并将其放入IOBs中。
为了使综合属性自动将触发器推到IOB(这是默认行为):
1。突出综合过程。
2。右键单击综合过程并选择“属性”。
三。选择Xilinx特定选项选项卡。
4。将“包I/O寄存器转换为IOBs”字段为“自动”(默认设置)或“是”。
下面的代码说明了一个8位宽的总线,通过寄存器将输出放在三态条件下。
注释三态缓冲器的允许行应该是活动的Low。
VHDL:
库IEEE;
使用IEEE.STDYLogiCy1164.ALL;
实体TIIIIOB是
端口(CLK,SEL):在STDYLogic中;
DI:在STdLogLogic向量(7下降到0);
DO:StdLogLogic向量(7下降到0);
末端三重IOB;
TIIIIOB的体系结构
信号TMP1:STdLogLogic向量(7下降到0);
信号TMP2:STDYLogic;
信号IpFFFS:STDYLogLogic向量(7下降到0);
属性IOB:字符串;
TMP2的属性IOB:信号为“真”;
开始
过程(CLK)
开始
如果(CLK’事件和CLK = ‘1’)
IpFFFF&L.= DI;
TMP1和LMP=
如果结束;
结束过程;
过程(CLK)
开始
如果(CLK’事件和CLK = ‘1’)
TMP2;
如果结束;
结束过程;
当TMP2=“0”时,Do和lt=TMP1(其他=&>z′);
末端箭头;
Verilog:
模块TrIIIIOB(CLK,SEL,DI,DO);
输入CLK;SEL;
输入[7:0] di;
输出[7:0];
RGG[7:0] TMP1,IPPFFS;
TMP2;
//综合属性IOB TMP2“真”
总是@(POSEDGE CLK)开始
IpFFFF&L.= DI;
TMP1和LMP=
结束
总是@(POSSEDGE CLK)TMP2 & lt;= SEL;
分配do= tMP2?8’BZ:TMP1;
终端模块
没有回复内容