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 .
这个是什么原因有什么影响我是初学者 还请大家看看了 应该是生成了17bit的信号锁存器<br>
<br>
begin<br>
c<=a when ctrl='0';<br>
a<=c when ctrl='1';<br>
<br>
d<=b when ctrl='0';<br>
b<=d when ctrl='0';<br>
<br>
应该是这几句话有问题,是不是先把值传到寄存器里然后再传到端口上好一点?<br>
<br>
我是用verilog的,不是很懂VHDL的语法,楼主再看看书吧 d<=b when ctrl='0';<br>
b<=d when ctrl='0';<br>
有问题,不懂VHDL 哦写错了是这样的<br>
d<=b when ctrl='0'<br>
b<=d when ctrl='1';<br>
后来改成<br>
d<=b when ctrl='0' else d<="zzzzzzzzzzzzzzzzz";<br>
b<=d when ctrl='1' else b<="00000000000000000";<br>
也就是ctrl='0' 时是数据从B到D,ctrl='1' 的时候数据从D到B;<br>
后来综合的时候就没告警了 不过总觉的有点问题 感觉有点冲突 还请大家研究研究。。 是不是这样的 就拿数据B来说 可进可出<br>
当做输入时 输出被禁止,成高阻<br>
当做输出时 输入一直被拉低 也就是禁止输入 <br>
是不是可以这样解释??? 这样想,就像verilog中,if..else没写完整.<br>
或者case 中,没写default...都会造成锁存. 我刚学 verilog 不懂这个 据我所知,这是因为"这样想,就像verilog中,if..else没写完整.<br>
或者case 中,没写default...都会造成锁存." 不会出问题<br>
inout包含了三态输入输出控制 应该是条件不完整造成的吧
页:
[1]
2