【请教】quartus仿真时遇到的一个奇怪问题。

[复制链接]
2461|7
 楼主| catiya 发表于 2012-12-26 14:33 | 显示全部楼层 |阅读模式
一个很简单的模块,模块实现的功能是,在B输入的第一个脉冲下降沿将C拉低,此后C一直为低,如图:

仿真正常,如图:


现在想省一个口线,于是将A去掉,直接接入VCC,如图:

仿真,C无反应,如图:


请问是什么原因造成仿真时如果将A设为输入口就正常,直接置为1就不对?

说明:
A实际就是一个全局使能信号,作用是将C初始化为1,仅此功能。

附模块代码如下:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity ABC is port
(
A:      in std_logic;
clk:    in std_logic;
   
B:      in std_logic;
Bdelay: in std_logic;
C:      out std_logic
);
end ABC;
architecture behavior of ABC is
signal Bpulse: std_logic;
signal Cpulse: std_logic;
begin
process(A,clk)

begin
  
  if rising_edge(clk) then
   
   if B = '0' and Bdelay = '1'  then
   
    Bpulse <= '1';
   
   else
   
    Bpulse <= '0';
   
   end if;
  
  end if;
  
  if A = '0' then

   Cpulse <= '1';
  
  elsif rising_edge(clk) then

   if Bpulse = '1' then

    Cpulse <= '0';
   
   end if;
   
  end if;
  
end process;

C <= Cpulse;

end behavior;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
forgot 发表于 2012-12-26 15:02 | 显示全部楼层
深感惭愧,这个我不会
jlass 发表于 2012-12-27 14:11 | 显示全部楼层
感觉第二段不太规范,改一下试试
把rising_edge(clk)放在开头(就和第一段一样)
jlass 发表于 2012-12-27 14:20 | 显示全部楼层
又看了一眼,发现是  if A = '0' then  Cpulse <= '1';这句话没触发引起的。

估计是把A设为VCC时,A就一直为1了。而设为input时,在开始的瞬间会有一下为0的。
 楼主| catiya 发表于 2012-12-27 21:50 | 显示全部楼层
jlass 发表于 2012-12-27 14:20
又看了一眼,发现是  if A = '0' then  Cpulse

谢谢你有耐心看我的程序。

但是这种方法在我其他程序模块中是可以用的(直接将全局使能信号置为VCC),不知道为什么在这个模块上就

行不通。
jlass 发表于 2012-12-28 08:17 | 显示全部楼层
是挺奇怪的
GoldSunMonkey 发表于 2012-12-28 23:05 | 显示全部楼层
jlass 发表于 2012-12-28 08:17
是挺奇怪的

没什么奇怪的。代码里面是用到A了,但是接1以后,A就不给赋值了。那么A会默认是0,然后
然后,肯定不对
GoldSunMonkey 发表于 2012-12-28 23:05 | 显示全部楼层
说了他半天,他也不懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

235

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部