[求助] 为什么在VHDL源程序中时钟是上升沿触发,在modelsim仿真时波形却是下降沿触发的?...

dy_dsm   2018-12-10 20:22 楼主
1Cnt_6VHDL源代码如下:
library ieee;  
use ieee.std_logic_1164.all;  
use ieee.std_logic_arith.all;  
use ieee.std_logic_unsigned.all;  
  
entity cnt6 is  
  port  
  (clr,en,clk :in std_logic;  
           q  :out std_logic_vector(2 downto 0);
           co :out std_logic
  );  
end entity cnt6;  
  
architecture rtl of cnt6 is  
signal tmp  :std_logic_vector(2 downto 0);  
begin  
  process(clk)  
     begin
      if (clr='0') then
         tmp<="000"; co<='0';
      elsif (rising_edge(clk))then
        if(en='1') then  
          if(tmp="101")then  
            tmp<="000"; co<='1';
          else  
            tmp<=tmp+1;co<='0';
          end if;  
        end if;  
      end if;  
      q<=tmp;  
  end process;  
end rtl;  
2Cnt_6testbench代码如下:
LIBRARY ieee;                                               
USE ieee.std_logic_1164.all;                                
ENTITY cnt6_vt IS
END cnt6_vt;
ARCHITECTURE cnt6_arch OF cnt6_vt IS
-- constants                                                
-- signals                                                   
SIGNAL clk : STD_LOGIC:='0';
SIGNAL clr : STD_LOGIC:='0';
SIGNAL en : STD_LOGIC:='0';
SIGNAL q : STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL co: STD_LOGIC:='0';
CONSTANT clk_period :time :=100 ns;   
COMPONENT cnt6
  port  
  (clr,en,clk :in std_logic;  
           q  :out std_logic_vector(2 downto 0);
           co :out std_logic
  );  
END COMPONENT;
BEGIN
        i1 : cnt6
        PORT MAP (
-- list connections between master ports and signals
        clk => clk,
        clr => clr,
        en => en,
        q => q,
        co=>co
        );                                         
  clk_gen:process  
  begin      
    wait for clk_period/2;  
    clk<='1';   
    wait for clk_period/2;  
    clk<='0';  
  end process;   
  clr_gen:process  
  begin  
    clr<='0';  
    wait for 30 ns;  
    clr<='1';  
    wait;  
  end process;  
      
  en_gen:process  
  begin  
    en<='0';  
    wait for 50 ns;  
    en<='1';  
    wait;  
  end process;                                       
END cnt6_arch;
3、Modelism中的仿真波形
如下图所示:
modelsim仿真波形
由波形可见,进位信号是上升沿触发的,计数结果确实下降沿触发的,不知道是什么原因?请各位大侠指点,多谢!!!

modelsim版本是6.4a

回复评论 (3)

设置问题哦
点赞  2018-12-10 23:32
两个问题:
1、你仿真结果里没发现temp,可以试着仿真的时候把temp显示出来看看
2、q <=temp;这个赋值要么放进程外,要么时钟打一拍赋值,再看看结果
点赞  2018-12-11 09:04
的确是这样,我把q<=tmp;放到进程之外波形就正确了,谢谢!
点赞  2018-12-11 15:11
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复