Asynchronous VHDL-异步上/下计数器

Asynchronous VHDL-异步上/下计数器,asynchronous,counter,vhdl,Asynchronous,Counter,Vhdl,我正在做一个大学的任务,要求用VHDL实现一个上/下异步计数器 我的实现包括使用一个控制变量ctrl,因此当它为0时,计数器按升序计数,否则按降序计数 下面是我实现的代码(在本规程中,我们使用Quartus 13和FPGA EP4CE129C7进行模拟)。然而,结果显示输出q0和q1仅为“0” 那么,代码中哪里可能会出现瓶颈,导致这种情况发生?我不是quartus用户,因此不熟悉波形查看器的限制,但这似乎是从类型位迁移到类型Std_逻辑造成的。其中,对于Std_逻辑(Std_ULogic),默认

我正在做一个大学的任务,要求用VHDL实现一个上/下异步计数器

我的实现包括使用一个控制变量ctrl,因此当它为0时,计数器按升序计数,否则按降序计数

下面是我实现的代码(在本规程中,我们使用Quartus 13和FPGA EP4CE129C7进行模拟)。然而,结果显示输出q0和q1仅为“0”


那么,代码中哪里可能会出现瓶颈,导致这种情况发生?

我不是quartus用户,因此不熟悉波形查看器的限制,但这似乎是从类型位迁移到类型Std_逻辑造成的。其中,对于Std_逻辑(Std_ULogic),默认值(除非另有规定)为“U”,而对于类型位,默认值为“0”

这会导致FFT q不为MUX的输入分配“U”。结果是触发器永远不会被分配到“U”以外的值

从std_logic_1164包:

   -- truth table for "not" function
    CONSTANT not_table: stdlogic_1d :=
    --  -------------------------------------------------
    --  |   U    X    0    1    Z    W    L    H    -   |
    --  -------------------------------------------------
         ( 'U', 'X', '1', '0', 'X', 'X', '1', '0', 'X' );
不是一个“U”就是一个“U”

使用显示“U”值的波形查看器:

这是通过ghdl和gtkwave以及添加的测试台完成的。对Taraefa09架构arc的唯一更改是添加sq0_n并将其分配到并发信号中:

INV:  sq0_n <= not sq0;

INV:sq0\n事实上,我怀疑std\u逻辑@DavidKoontz存在这个问题,但该学科讲义中存在的代码没有为信号sq指定默认值。因此,我遵循了您的提示,代码按照我的预期工作。感谢您这么多人的帮助和出色的解释。最好的规则!
ENTITY FFT IS
    PORT(
        clk: IN STD_LOGIC;
        q: OUT STD_LOGIC
    );
END FFT;

ARCHITECTURE Arc OF FFT IS
    SIGNAL sq: STD_LOGIC := '0' ;  -- choice c) 
    BEGIN
        PROCESS(clk)
        BEGIN
            IF(clk'event AND clk='1') THEN -- clk'event: é o evento de subida/descida. 
                sq <= (not sq);         -- changed target from q to sq
            END IF;
        END PROCESS;

    BUF: q <= sq;   -- added concurrent statement

    END Arc;