【问题标题】:Structural 4 bit ring counter with D flip flop. VHDL / GHDL带 D 触发器的结构 4 位环形计数器。 VHDL/GHDL
【发布时间】:2012-01-06 23:06:31
【问题描述】:

我不知道如何用结构化编程来做到这一点......

“由 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;

我的问题在最后几行。

【问题讨论】:

    标签: vhdl counter ghdl


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我认为问题出在其他地方。

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

      端口(CLK、D、复位:在 STD_LOGIC 中; 问:输入 STD_LOGIC);

      但请检查我不确定,

      johnson counter也是ring counter,看这个VHDL code for Johnson Counter是结构造型风格

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多