2012-05-14 33 views
0

在某些条件assingning与时钟的计数值输出我新的VHDL和混淆这种设计设计在VHDL

当Acknwledgement =“1”和CLK =“1”,那么

计数应该是count +1;

当Acknwledgement ='0'时,我的计数时钟总计值应该被分配给'output',并且在那之后复位count ='0'和output ='0'。

任何人都可以帮忙。 在此先感谢。

编辑:从评论 代码中粘贴:从您的评论

library IEEE; 
use IEEE.STD_LOGIC_1164.all; 
entity acknw is 
    port (acknw : in std_logic; 
      clk : in std_logic; 
      output : out integer range 0 to 15); 
end acknw; 
architecture Behavioral of acknw is 
begin 
    process(clk, acknw) variable c : integer range 0 to 15; 
    begin 
     if(clk'event and clk = '1') then 
      if(acknw = '1') then 
       c := c+1; 
       output <= c; 
      else 
       c := 0; 
       output <= c; 
      end if; 
     end if; 
    end process; 
end Behavioral; 
+0

我摸索出这样的 东西图书馆IEEE; 使用IEEE.STD_LOGIC_1164.ALL; entity acknw is Port(acknw:in STD_LOGIC; clk:in STD_LOGIC; output:out INTEGER RANGE 0 To 15); end acknw; 架构acknw的行为是 开始 进程(clk,acknw) 变量c:INTEGER RANGE 0到15; 开始 如果(clk'event并且clk = '1'),那么如果 (acknw = '1'),那么 C:= C + 1; 输出<= c; else c:= 0; 输出<= c; end if; end if; 结束过程; 结束行为; 而不是让我的过程在时钟条件下工作,它应该工作在acknw条件,然后检查我的时钟条件。任何人都可以指导我! – user1016528

+0

当你说'它应该在acnkw条件下工作',你的意思是它应该只在acknw的边缘做些什么?作为一个单独的注释,acknw不需要出现在您的流程的敏感列表中,因为它是一个计时过程。如果将它用作异步事件,则只需要它,例如异步重置。 –

+0

是的,它应该只在acknw边缘做一些事情。而且像异步reseti.e。,当我的acknw = 1和我的clk = 1时,它应该计数,当我的acknw ='0'我的计数值应该是例如输出的输出是126,32(时钟计数)。 – user1016528

回答

0

这听起来像你想的异步acknw,尝试这样的事情:

library IEEE; 
use IEEE.STD_LOGIC_1164.all; 
entity acknw is 
    port (acknw : in std_logic; 
      clk : in std_logic; 
      output : out integer range 0 to 15); 
end acknw; 
architecture Behavioral of acknw is 
begin 
    process(clk, acknw) 
    begin 
     if (acknw = '0') then 
      output <= 0; 
     elsif rising_edge(clk) then 
      -- rollover 
      if (output /= 15) then 
      output <= output + 1; 
      else 
      output <= 0; 
      end if; 
     end if; 
    end process; 
end Behavioral;