如何在结构VHDL代码中更新时钟上升边缘上的输出



我有一个非常简单的16位和门以vhdl结构形式编写:这些文件在此处上传。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity and_16bit is
  Port (
        A   : in std_logic_vector(15 downto 0);
        B   : in std_logic_vector(15 downto 0);
        Clk : in   STD_LOGIC;
        --Rst : in   STD_LOGIC;
        C   : out std_logic_vector(15 downto 0) );
end and_16bit;
architecture Behavioral of and_16bit is
component and_1bit is
  Port (
        A   : in std_logic;
        B   : in std_logic;
        C   : out std_logic );
end component;
signal s : std_logic_vector(15 downto 0);
begin
            ands: for i in 15 downto 0 generate
            and_1bit_x: and_1bit port map (A => A(i), B => B(i), C => s(i));
            end generate;
process(Clk)
    begin
        if rising_edge(Clk) then
             C <= s;                     
        end if;
        end process;
end Behavioral;

为了更新时钟上升边缘的输出,我已经定义了此" S"信号。我想知道这是否是更新结构VHDL代码中输出的正确方法?我该怎么做才能为第一个输出示出未知输出?

任何评论都将是一个很好的帮助。

最好将顺序过程放入子模块中,然后将其实例化在顶级(and_16bit)中。那么您的顶级将更加结构。

您可以像为and_1bit一样拥有一个实例。

例如,此模块是1位寄存器。

entity dff_1bit is
    Port (
        D   : in  std_logic;
        Clk : in  std_logic;
        Q   : out std_logic );
end dff_1bit;
architecture Behavioral of dff_1bit is
begin
process(Clk)
    begin
        if rising_edge(Clk) then
             Q <= D;                     
        end if;
end process;
end Behavioral;

然后,您可以在同一 generate块内在and_16bit中实例化。

dff_1bit_x: dff_1bit port map (D => s(i), Clk => Clk, Q => C(i));

最新更新