我在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上升沿执行,对吗?与此同时它正在做那个奇怪的事情...在周期的中间,不知道为什么。 如何阻止这种情况发生?