CHANG 发表于 2010-6-28 00:17:03

verilog初学者实际工作中遇到的问题 请大家指点下~~~

程序如下:
entity work is
port(a:inout std_logic_vector(16 downto 0);
b:inout std_logic_vector(16 downto 0);
c:inout std_logic_vector(16 downto 0);
d:inout std_logic_vector(16 downto 0);
ctrl:in std_logic);
end work;

architecture Behavioral of work is

begin
c<=a when ctrl='0';
a<=c when ctrl='1';

d<=b when ctrl='0';
b<=d when ctrl='0';
end Behavioral;

用ISE8.1综合的时候提示说:
WARNING:Xst:737 - Found 17-bit latch for signal .
WARNING:Xst:737 - Found 17-bit latch for signal .
WARNING:Xst:737 - Found 17-bit latch for signal .
WARNING:Xst:737 - Found 17-bit latch for signal .
这个是什么原因有什么影响我是初学者 还请大家看看了

CHA 发表于 2010-6-28 01:51:40

应该是生成了17bit的信号锁存器<br>
<br>
begin<br>
c&lt;=a when ctrl='0';<br>
a&lt;=c when ctrl='1';<br>
<br>
d&lt;=b when ctrl='0';<br>
b&lt;=d when ctrl='0';<br>
<br>
应该是这几句话有问题,是不是先把值传到寄存器里然后再传到端口上好一点?<br>
<br>
我是用verilog的,不是很懂VHDL的语法,楼主再看看书吧

ATA 发表于 2010-6-28 03:11:25

d&lt;=b when ctrl='0';<br>
b&lt;=d when ctrl='0';<br>
有问题,不懂VHDL

inter 发表于 2010-6-28 04:10:30

哦写错了是这样的<br>
d&lt;=b when ctrl='0'<br>
b&lt;=d when ctrl='1';<br>
后来改成<br>
d&lt;=b when ctrl='0' else d&lt;="zzzzzzzzzzzzzzzzz";<br>
b&lt;=d when ctrl='1' else b&lt;="00000000000000000";<br>
也就是ctrl='0' 时是数据从B到D,ctrl='1' 的时候数据从D到B;<br>
后来综合的时候就没告警了 不过总觉的有点问题 感觉有点冲突 还请大家研究研究。。

interig 发表于 2010-6-28 04:48:17

是不是这样的 就拿数据B来说 可进可出<br>
当做输入时&nbsp;&nbsp;输出被禁止,成高阻<br>
当做输出时&nbsp;&nbsp;输入一直被拉低 也就是禁止输入 <br>
是不是可以这样解释???

longt 发表于 2010-6-28 06:10:33

这样想,就像verilog中,if..else没写完整.<br>
或者case 中,没写default...都会造成锁存.

CCIE 发表于 2010-6-28 06:14:02

我刚学 verilog&nbsp;&nbsp;不懂这个

ANG 发表于 2010-6-28 07:02:00

据我所知,这是因为"这样想,就像verilog中,if..else没写完整.<br>
或者case 中,没写default...都会造成锁存."

encounter 发表于 2010-6-28 08:03:50

不会出问题<br>
inout包含了三态输入输出控制

ANG 发表于 2010-6-28 09:23:36

应该是条件不完整造成的吧
页: [1] 2
查看完整版本: verilog初学者实际工作中遇到的问题 请大家指点下~~~