图书馆IEEE;使用IEEE.STD_LOGIC_1164.ALL;使用IEEE.STD_LOGIC_ARITH.ALL;使用IEEE.STD_LOGIC_UNSIGNED.ALL;实体A是 港口 ( clk:在STD_LOGIC中; reset:在std_logic中; - 重置输入…
您的 process(temp, reset) 无法工作,因为你把它组合起来,这不是你在这个例子中所需要的。在模拟中工作正常,在硬件中根本不起作用。
process(temp, reset)
你写的东西在硬件中产生一个循环:状态 countOf 取决于的状态 temp 的 和 强> 的状态 countOf 本身。由于您的进程不包含时钟,因此状态为 countOf 像门延迟一样快的变化允许它(如果这个代码将被正确合成)。
countOf
temp
如果你的软件有任何好处,它会给你一个这样的警告:
[Synth 8-614] signal 'countOf' is read in the process but is not in the sensitivity list
你应该 的 决不 强> 忽略,因为在99%的情况下,这意味着你会得到不希望的行为和/或模拟不匹配。
你需要做的是做 temp 你的时钟。它是由时钟分频器生成的,所以从逻辑上讲,你几乎可以肯定它也是一个时钟。如果你更换 if (temp = '1') then 同 if rising_edge(temp) then ,您的代码将按预期工作。
if (temp = '1') then
if rising_edge(temp) then
旁注:请删除 use IEEE.STD_LOGIC_ARITH.ALL; 和 use IEEE.STD_LOGIC_UNSIGNED.ALL; 。您根本不需要任何未签名的代码库,但是 IEEE.STD_LOGIC_ARITH 是 的 已弃用,不应再使用 强> 。它已经多年了。使用 IEEE.NUMERIC_STD 代替。
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
IEEE.STD_LOGIC_ARITH
IEEE.NUMERIC_STD