打印

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

[复制链接]
1703|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的。

使用特权

评论回复
5
catiya|  楼主 | 2012-12-27 21:50 | 只看该作者
jlass 发表于 2012-12-27 14:20
又看了一眼,发现是  if A = '0' then  Cpulse

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

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

行不通。

使用特权

评论回复
6
jlass| | 2012-12-28 08:17 | 只看该作者
是挺奇怪的

使用特权

评论回复
7
GoldSunMonkey| | 2012-12-28 23:05 | 只看该作者
jlass 发表于 2012-12-28 08:17
是挺奇怪的

没什么奇怪的。代码里面是用到A了,但是接1以后,A就不给赋值了。那么A会默认是0,然后
然后,肯定不对

使用特权

评论回复
8
GoldSunMonkey| | 2012-12-28 23:05 | 只看该作者
说了他半天,他也不懂

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

228

帖子

2

粉丝