【发布时间】:2019-04-01 16:07:40
【问题描述】:
这是我要回答的问题。
设计并模拟一个 2 位计数器,复位后计数为“00”, “01”、“10”、“11”、“00”、“01 ...”与时钟上升同步 边缘。
当我在Vivado 2017.2 中模拟它时,我的代码将z 输出增加一次,然后在01 处停止!我的代码有什么问题?我需要一个测试台吗?如果是这样,我怎么知道我需要一个测试台来模拟代码?
这是我的代码:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
entity twoc is
Port (reset : in std_logic;
ck : in std_logic;
z : out std_logic_vector(1 downto 0));
end twoc;
architecture Behavioral of twoc is
signal a : std_logic_vector(1 downto 0):= "00";
signal temp : std_logic_vector(1 downto 0);
begin
process(ck)
begin
if ck='1' and ck'event then
if reset ='1' then
temp<="00";
else
temp <=std_logic_vector(unsigned(a)+1);
end if;
end if;
end process;
z <= temp;
end Behavioral;
【问题讨论】:
-
测试平台确保了可移植性。 IEEE Std 1076-2008 14.2 设计层次结构的详细说明“实现可以允许但不要求允许设计层次结构根部的设计实体具有泛型和端口。如果实现允许这些顶级接口对象,它可能会限制它们允许的形式(即是否允许它们是接口类型、子程序、包或对象),并且在接口对象的情况下,以实现定义的方式允许它们的类型和模式。”需求可以基于复杂性或展示的问题/修复。
-
请注意,buraquete 的答案(现在)没有提到在将无符号温度分配给 z 时需要进行类型转换。测试台将允许复制问题并验证解决方案。
-
在 stackoverflow 上,答案的快速或准确程度取决于重现问题和验证解决方案的难易程度,鼓励使用测试平台。这也有助于未来读者遇到相同或相似的问题。您会发现更高质量的问题和答案很有用,因为参考资料往往会赢得选票并赢得声誉。
标签: vhdl simulation fpga