vhdl - 异步计数器追溯问题VHDL
问题描述
我对以下代码有疑问,它代表一个通用异步计数器。
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity ASYNC_COUNTER is
generic(NBIT:integer);
port(
CLK : in std_logic;
COUNT : out std_logic_vector(NBIT-1 downto 0)
);
end entity ASYNC_COUNTER;
architecture architectural of ASYNC_COUNTER is
component FF is
port( INPUT, CLK: in std_logic;
OUTPUT, NOUTPUT: out std_logic
);
end component FF;
signal q: std_logic_vector(NBIT-1 downto 0);
signal retroaction: std_logic_vector(NBIT-1 downto 0);
signal first_in: std_logic := '0';
begin
ARCH: for i in 0 to NBIT-1 generate
FIRST:if i=0 generate
F1: FF
port map(first_in, CLK, q(0), retroaction(0));
end generate FIRST;
first_in <= retroaction(0);
OTHER:if i>0 generate
F: FF
port map(retroaction(i), q(i-1), q(i), retroaction(i));
end generate OTHER;
end generate;
COUNT <= q;
end architecture architectural;
当然问题是追溯,但我不知道如何以其他方式实现它。有什么建议么?
解决方案
在这部分代码中:
OTHER:if i>0 generate
F: FF
port map(retroaction(i), q(i-1), q(i), retroaction(i));
end generate OTHER;
您retroaction(i)
用作输入。该信号永远不会设置为已知值。在启动时,这个信号是'U',并且在每个时钟周期(q(i-1)
实际上是周期),它得到(不是'U')这是'U'。
一种解决方案是在声明中将追溯信号初始化为 0:
signal retroaction: std_logic_vector(NBIT-1 downto 0) := (others => '0');
推荐阅读
- docker - conda cache for docker
- spring-boot - 使用 JIB 插件对 Spring Boot 应用程序进行 Dockerizing
- angular - Angular 2 元素下划线
- git - 我需要暂时撤消合并,以便稍后再尝试
- google-api - 可以使用 Google Calendar API 创建可扩展的日程安排服务吗?
- python-3.x - 为什么我尝试抓取文本元素的值返回零?
- java - 使用 firebase ML KIT 进行实时人脸检测的问题
- angular - 如何从动态列表中获取所有选中的复选框
- android-studio - 如何使用其中的多个 textView 使 LinearLayout 可点击?
- python-3.x - 如何从两个文件中的一个文件中查找所有字符串,文本 - python