我在VHDL中有以下代码:
process(RESET_N, CLK)
begin
if RESET_N = '0' then
COUNTER <= X"0";
else
if rising_edge(CLK) then
if EN = '0' then
COUNTER <= std_logic_vector(to_unsigned(to_integer(unsigned(COUNTER)) + 1, 4));
end if;
end if;
end if;
end process;
有一个不应该发生的转变。我错了吗?
请帮助我Xilinx当然不能!模拟器是Vivado 2016.2。
答案 0 :(得分:0)
好的,这就是我发现的。事实上,这是我的测试台故障。
Xilinx没有人能够指出这一点。我没有在这里提交的Testbench是错误的。
我设计它的方式(认为没问题)当EN信号变低时,CLK_EN信号被触发。然后CLK_EN信号允许将MAIN_CLK映射到屏幕截图中可以看到的CLK。
所以宁愿这样做
CLK_process :process
begin
CLK <= '0'; wait for CLK_period/2;
CLK <= '1'; wait for CLK_period/2;
end process;
FTDI_CLK <= CLK when CLK_EN = '1' else 'Z';
你应该这样做:
MAIN_CLK_process :process
begin
MAIN_CLK<= not MAIN_CLK; wait for CLK_period/2;
end process;
CLK_process :process
begin
wait for CLK_period/2;
if CLK_EN = '1' then
CLK <= not CLK;
else
CLK <= '0';
end if;
end process;
据我所知,我提供的信息不完整。为此道歉。