Vhdl 带复位的2位计数器-不改变输出问题

Vhdl 带复位的2位计数器-不改变输出问题,vhdl,simulation,fpga,Vhdl,Simulation,Fpga,这就是我试图回答的问题 设计并模拟一个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 i

这就是我试图回答的问题

设计并模拟一个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库;
使用IEEE.STD_LOGIC_1164.ALL;
使用ieee.numeric_std.all;
实体twoc是
端口(复位:在std_逻辑中;
ck:标准逻辑中;
z:输出标准逻辑向量(1到0);
结束twoc;
twoc is的体系结构
信号a:std_逻辑_向量(1到0):=“00”;
信号温度:标准逻辑向量(1到0);
开始
工艺(ck)
开始
如果ck='1'和ck'事件,则
如果reset='1',则

temp这个问题是由于您分配了
temp,
temp
可能需要是一个
无符号
而不是
std_逻辑向量
,所以定义了
+
运算符,但我不确定。是的,我的意思是将它声明为
无符号
,不需要每次都转换。这需要在信号分配到z:
z时将temp类型转换为std_逻辑_向量。测试台确保可移植性。IEEE Std 1076-2008 14.2设计层次结构的细化“一个实现可能允许,但不要求允许设计层次结构根部的设计实体具有泛型和端口。如果一个实现允许这些顶级接口对象,它可能会限制其允许的形式(即,是否允许它们是接口类型、子程序、包或对象),以及对于接口对象,以实现定义的方式允许它们的类型和模式。”需求可以基于复杂性或演示问题/修复。请注意buraquete的答案(现在)并非如此提到在将未签名的temp分配给z时需要进行类型转换。测试台将允许复制问题并验证解决方案。在stackoverflow上,答案的快速或准确程度取决于重现问题和验证解决方案的难易程度,鼓励使用测试台。这也有助于未来的读者会遇到相同或类似的问题。你会发现高质量的问题和答案很有用,因为推荐人往往会赢得选票,赢得声誉。
signal temp : unsigned(1 downto 0) := "00";