Testing 计数器未按预期进行测试?[硬件描述语言]

Testing 计数器未按预期进行测试?[硬件描述语言],testing,counter,vhdl,waveform,Testing,Counter,Vhdl,Waveform,我想用VHDL做一个32位计数器。下面是我的代码: LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; ENTITY counter32 IS PORT (en, clk, clr: IN STD_LOGIC; count: OUT STD_LOGIC_VECTOR(4 DOWNTO 0)); END counter32; ARCHITECTURE rtl OF counter32 IS SI

我想用VHDL做一个32位计数器。下面是我的代码:

LIBRARY ieee; 
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;

ENTITY counter32 IS 
PORT (en, clk, clr: IN STD_LOGIC; 
count: OUT STD_LOGIC_VECTOR(4 DOWNTO 0)); 

END counter32;

ARCHITECTURE rtl OF counter32 IS 

SIGNAL count_result: STD_LOGIC_VECTOR(4 DOWNTO 0); 

BEGIN
counter32: PROCESS(clk, clr) 

BEGIN 
count <= "00000"; --Initialize counter to all zeroes

IF (clr = '0') THEN 
count_result <= "00000"; 

ELSIF (clk = '1' and clk'EVENT) THEN 

IF (en = '1') THEN
count <= STD_LOGIC_VECTOR(unsigned(count_result) + 1); 
count <= STD_LOGIC_VECTOR(count_result);

 ELSIF (count_result = "11111") THEN
 count_result <= "00000";

END IF; 

END IF; 

END PROCESS counter32;

END rtl;
ieee库;
使用ieee.std_logic_1164.ALL;
使用ieee.numeric_std.ALL;
实体计数器32是
端口(en、clk、clr:标准逻辑中;
计数:输出标准逻辑向量(4到0);
末端计数器32;
counter32的体系结构rtl是
信号计数结果:标准逻辑向量(4到0);
开始
计数器32:进程(clk、clr)
开始
你知道这是怎么回事吗?
您的波形与测试台刺激不匹配

波形中显示的信号计数有三个指定(在测试台级别)。“00000”的初始赋值和两个条件赋值。来回反弹是由进程对clk的敏感性引起的,使用第一个赋值语句在时钟的下一个边缘反弹回“00000”

在流程语句中,最后一个赋值是生效的赋值。您将其写入“00000”,并将其更改为基于时钟的正边缘有条件地计算结果。请注意,您实际上也没有使用count\u result+1加载count,下一个赋值将提供count\u result的当前值。当我们讨论这个主题时,也不需要将类型转换为std_逻辑向量,count_结果已经是std_逻辑向量了

时钟边缘的未知(红色)“闪烁”是因为您尚未实际清除计数结果。clr上的唯一事件是从“U”到“1”,不会导致清除

vhdl设计代码不能用作计数器

这:

ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体计数器32是
港口(
en、clk、clr:标准逻辑中;
计数:输出标准逻辑向量(4到0)
); 
末端计数器32;
counter32的体系结构rtl是
信号计数结果:标准逻辑向量(4到0);
开始
计数器:进程(clk、clr)
开始
如果clr='0',则
计数结果“0”);
如果clk='1'和clk'事件且en='1',则
计数结果时钟,
clr=>clr,
计数=>计数
);
时钟:
过程
开始
等待10纳秒;
时钟720纳秒
等待
如果结束;
结束过程;
刺激:
过程
开始

clr我的意思是它在二进制中计数到32。但是非常感谢你!你的帖子非常有用,内容丰富,我学到了很多东西,可以应用于未来的测试中!:)
library ieee; 
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity counter32_tb is
end counter32_tb;

architecture io of counter32_tb is

component counter32 is
port(en,clk,clr:in std_logic; count:out std_logic_vector(4 downto 0)); 
end component;

for all: counter32 use entity work.counter32(rtl);

signal en,clk,clr:std_logic;
signal count:std_logic_vector(4 downto 0);

begin

count <= "00000";
g0: counter32 port map(en,clk,clr,count);

p0: process

begin
en  <= '1';
clk <= '0';
clr <= '1';
wait for 10ns;
en  <= '1';
clk <= '1';
clr <= '1';
wait for 10ns;
en  <= '1';
clk <= '0';
clr <= '1';
wait for 10ns;
en  <= '1';
clk <= '1';
clr <= '1';
wait for 10ns;
en  <= '1';
clk <= '0';
clr <= '1';
wait for 10ns;
en <= '1';
clk <= '1';
clr <= '0';
end process;

end io;
library ieee; 
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity counter32 is 
    port (
        en, clk, clr: in  std_logic; 
        count:        out std_logic_vector(4 downto 0)
    ); 

end counter32;

architecture rtl of counter32 is 

    signal count_result: std_logic_vector(4 downto 0); 

begin
counter: process(clk, clr) 

    begin 

        if clr = '0' then 
            count_result <= (others => '0'); 

        elsif clk = '1' and clk'event and en = '1' then 

                count_result <= std_logic_vector(unsigned(count_result) + 1); 

        end if;         

    end process;

    count <= count_result;
end rtl;

library ieee;
use ieee.std_logic_1164.all;

entity counter32_tb is
end entity;

architecture foo of counter32_tb is
    signal en:      std_logic:= '0';
    signal clr:     std_logic:= '1';
    signal clk:     std_logic:= '0';
    signal count:   std_logic_vector (4 downto 0);
begin
DUT:   entity work.counter32
    port map (
        en => en,
        clk => clk,
        clr => clr,
        count => count
    );

CLOCK:
    process
    begin 
        wait for 10 ns;
        clk <= not clk;
        if Now > 720 ns then
            wait;
        end if;

    end process;

STIMULUS:
    process
    begin
        clr <= '0';
        en <=  '1';
        wait for 20 ns;
        clr <= '1';
        wait for 20 ns;
        wait for 20 ns;
        wait for 20 ns;
        wait for 20 ns;
        wait for 20 ns;
        en <= '0';
        wait for 20 ns;
        en <= '1';

        wait;
    end process;
end architecture;