奇怪的信号行为(时钟相关的信号在没有时钟的情况下改变)

时间:2014-05-04 12:09:13

标签: loops if-statement vhdl

我在NCO上工作(仍然),我遇到了地址选择块的问题 - 我的老师想要ROM块中的样本(已经完成了)但是地址似乎并不起作用。我需要的是一个带有可变步长的模200累加器...我从一个样本中采用了这个代码,其中有人用i作为计数器从样本数组中选择一个值,但我需要简单地将i复制到输出端口。 PWM的东西不起作用,它跳过了不是十个但是大约80个样本,所以我决定检查地址 - 当我注意到地址从时钟信号中独立变化时,我一直很惊讶。 (http://i.imgur.com/XL9l8mj.jpg

下面是代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;  --try to use this library as much as possible.

entity adress_select_200 is
port (clk :in std_logic;
      step :in  integer range 0 to 200;
      adress : out integer range 0 to 199
    );
end adress_select_200;

architecture Behavioral of adress_select_200 is
signal i : integer range 0 to 399:=0;
begin

process(clk)
begin
  --to check the rising edge of the clock signal    
if(rising_edge(clk)) then     
adress <= i;
i <= i+step;
if ((i + step) > 199) then
    i <= (i + step) - 200;
else
    i <= i + step;
    end if;
end if;
end process;

end Behavioral;

我用VHDL不太好,但我想整个循环应该只在clk上升沿执行,对吗?与此同时它正在做那个奇怪的事情...在周期的中间,不知道为什么。 如何阻止这种情况发生?

0 个答案:

没有答案