Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带D触发器的结构4位环形计数器。VHDL/GHDL_Vhdl_Counter_Ghdl - Fatal编程技术网

带D触发器的结构4位环形计数器。VHDL/GHDL

带D触发器的结构4位环形计数器。VHDL/GHDL,vhdl,counter,ghdl,Vhdl,Counter,Ghdl,我不知道如何用结构化编程来实现这一点 “由4 D触发器构成的4位二进制计数器(带复位信号)。” 如何连接输入/输出 下面是实体声明。问题的核心在最后几行 --FFD entity FFD is port( CLK, D, reset : in STD_LOGIC; Q : out STD_LOGIC ); end FFD;

我不知道如何用结构化编程来实现这一点

“由4 D触发器构成的4位二进制计数器(带复位信号)。”

如何连接输入/输出

下面是实体声明。问题的核心在最后几行

                    --FFD
            entity FFD is
            port( CLK, D, reset : in STD_LOGIC;
                Q : out STD_LOGIC
               );
            end FFD;
            
            architecture behaviour of FFD is
            begin
                process(CLK, reset)
                begin
                if reset='1' then Q<='0';  
                elsif (clk'event and clk='1') then Q<=D;
                else null;
                end if;
                end process;
            end behaviour;
        ----------------------------------------------------------  
            
        --counter

        library IEEE;
        use IEEE.std_logic_1164.all;
        use IEEE.numeric_std.all;

            entity counter is
            port(clk : in std_logic;
               reset : in std_logic;
               count : out std_logic_vector(3 downto 0));
            end entity counter;

                architecture rtl of counter is
            
            --
            component FFD 
            port (CLK, D, reset : in STD_LOGIC;
                       Q : out STD_LOGIC);
            end component;
            
            signal q0,q1,q2: std_logic:='0';
            signal q3: std_logic:='1';
            
            begin
            -- 

            ---
            inst1: FFD port map (CLK=>clk, D=>q3, reset=>reset, Q=>q0);
            inst2: FFD port map (CLK=>clk, D=>q0, reset=>reset, Q=>q1);
            inst3: FFD port map (CLK=>clk, D=>q1, reset=>reset, Q=>q2);
            inst4: FFD port map (CLK=>clk, D=>q2, reset=>reset, Q=>q3);
            inst5: count<=q3&q2&q1&q0;
            end architecture rtl;
--FFD
实体FFD是
端口(时钟、D、复位:在标准逻辑中;
Q:输出标准逻辑
);
结束FFD;
FFD的体系结构行为是
开始
过程(时钟、复位)
开始

如果reset='1',那么Q您的连接没有问题(它们正确地构成了一个环计数器),但是您不会看到太多的情况发生。复位后,所有触发器都包含零,这将随着每个时钟脉冲在环中循环,但实际上不会导致输出发生变化。当您声明信号时,q3的默认值“1”的分配将在电路开始运行(或模拟)时被触发器的实际输出覆盖,这通常是初始化硬件的错误方式


您需要确保当您断言重置信号时,您的硬件会转换到适当的状态(即:一个位设置,所有其他位清除)。实现这一点的一种方法是使用带有Q3设置输入的FF。如果您没有带set(而不是reset)信号的触发器,您可以通过在输入和输出端放置反相器来模拟触发器,这将在应用reset时在环形计数器周围提供“1”时钟。您还可以创建一些中间信号,为D输入制作一个多路复用器,以构建一个可加载计数器,或任何其他解决方案……

您的连接没有问题(它们正确地形成了环形计数器),但您不会看到太多情况发生。复位后,所有触发器都包含零,这将随着每个时钟脉冲在环中循环,但实际上不会导致输出发生变化。当您声明信号时,q3的默认值“1”的分配将在电路开始运行(或模拟)时被触发器的实际输出覆盖,这通常是初始化硬件的错误方式


您需要确保当您断言重置信号时,您的硬件会转换到适当的状态(即:一个位设置,所有其他位清除)。实现这一点的一种方法是使用带有Q3设置输入的FF。如果您没有带set(而不是reset)信号的触发器,您可以通过在输入和输出端放置反相器来模拟触发器,这将在应用reset时在环形计数器周围提供“1”时钟。您还可以创建一些中间信号,为D输入制作一个多路复用器,以构建一个可加载计数器,或任何其他解决方案…

我认为问题出在其他地方

我认为D触发器输出Q的端口方向应该是inout(或缓冲器),而不是out。这是因为输出也充当输入。我认为在进行结构建模时必须仔细观察这一点

端口(时钟、D、复位:在标准逻辑中; Q:inoutSTD\U逻辑)

但请查查我不确定


johnson counter也是环计数器,请看这张图,它使用的是结构建模风格,我认为问题出在其他地方

我认为D触发器输出Q的端口方向应该是inout(或缓冲器),而不是out。这是因为输出也充当输入。我认为在进行结构建模时,必须仔细观察这一点

端口(时钟、D、复位:在标准逻辑中; Q:inoutSTD\U逻辑)

但请查查我不确定

约翰逊计数器也是环形计数器,请参见此,它使用的是结构建模样式