我有一个非常简单的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));