SyPrime:如何推断一个三态的启用寄存器(在多个时钟周期中存储“Z”)?

描述

关键词:SypLIPIVE、Verilog、VHDL

紧迫性:标准

一般描述:
SypPrimes不能推断注册三态驱动程序的使能逻辑。
SypPrimes将发布此错误消息:

不支持在多个时钟周期中存储“Z”值
FLoppTB。”

至于版本5.0.8a和以后,SypLID的HDL支持已经
增强识别Z(高阻抗)的存储
现在对VHDL和Verilog都支持多个时钟周期。
如果您使用的版本比5.0.8更早,请升级为
从SypulyIt的SyPrime:

HTTP://www. SyPrimy.COM/Sputt.HTML

然而,解决这个问题的方法是明确声明一个
使能信号及其逻辑。

解决方案

VHDL语言
----

示例1将不会在5.0.8之前用SypPrimes的版本进行合成。
例2解决这个问题的方法。

例1
----------
图书馆IEEE;
使用IEEE.STDYLogiCy1164.ALL;

实体示例是
端口(din in,CLK,rST,eNB:在STDYLogic中;
QXOUT:输出STDYLogic;
结束示例;

建筑Xilinx的例子是

开始

进程(din in,CLK,rST)
开始
如果(RST=‘1’)
qyOUT & lt;='z’;
然后,ELSIF RISIGIN EDGE(CLK)
如果(eNB=‘1’)然后
qyOUT & lt;=din in;
其他的
qyOUT & lt;='z’;
如果结束;
如果结束;
结束过程;

末端Xilinx;

例2
----------
图书馆IEEE;
使用IEEE.STDYLogiCy1164.ALL;

实体示例是
端口(din in,CLK,rST,eNB:在STDYLogic中;
QXOUT:输出STDYLogic;
结束示例;

建筑Xilinx的例子是

信号QYOUTXEN,QYOUTYRE:STDYLogic;

开始

qyOUT & lt=qyOutthReg时(qyOutoEn==1)否则“z”;

进程(din in,CLK,rST)
开始
如果(RST=‘1’)
QuutouthRe<=‘0’;
Q'OutuxEn<=“0”;
然后,ELSIF RISIGIN EDGE(CLK)
QuutouthRe<
QueOutoGeNe;
如果结束;
结束过程;

末端Xilinx;


Verilog
-----

示例1将不会在5.0.8之前用SypPrimes的版本进行合成。
例2解决这个问题的方法。

例1
----------
模块示例(DIN,CLK,RST,ENB,QOU-OUT);
输入DIN,CLK,RST,ENB;
输出QOU-OUT;

雷格;

总是@(PaseLK CLK或PASEDEST RST)
如果(RST)!eNB)
QuOUT=1’BZ;
其他的
qyOUT=din in;

终端模块


例2
----------
模块示例(DIN,CLK,RST,ENB,QOU-OUT);
输入DIN,CLK,RST,ENB;
输出QOU-OUT;

ReqQuututhEn,QuutouthReg;

分配QyOUT=(QyOutuxEN)?QuutouthReg:1’BZ;

总是@(PaseLK CLK或PASEDEST RST)
如果(RST)
开始
QuutouthReg=0;
QuoTuxEn=0;
结束
其他的
开始
qyOutsReg=din in;
QuutouthEn:Enb;
结束

终端模块
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-28 21:49:42 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它