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