Vhdl 带时钟和复位的Alu

Vhdl 带时钟和复位的Alu,vhdl,Vhdl,我有一个项目要创建一个带有时钟和复位信号的ALU,但是对于下面的代码,这个错误显示为“非法的顺序语句”。我认为问题在于实例化流程中的实体。我怎样才能解决这个问题 library ieee; use ieee.std_logic_1164.all; entity alu is port(a: in std_logic_vector(31 downto 0); b: in std_logic_vector(31 downto 0); c: in std_

我有一个项目要创建一个带有时钟和复位信号的ALU,但是对于下面的代码,这个错误显示为“非法的顺序语句”。我认为问题在于实例化流程中的实体。我怎样才能解决这个问题

library ieee;
use ieee.std_logic_1164.all;

entity alu is
    port(a: in std_logic_vector(31 downto 0);
         b: in std_logic_vector(31 downto 0);
         c: in std_logic_vector(31 downto 0);
         opcode: in std_logic_vector(2 downto 0);
         rst: in std_logic;      
         cout: out std_logic;
         output: out std_logic_vector(31 downto 0);
         zero: out std_logic);
end alu;

architecture my_arch of alu is

    component mux4to1_32bits
    port (and_in: in std_logic_vector(31 downto 0);
          not_in: in std_logic_vector(31 downto 0);
              or_in: in std_logic_vector(31 downto 0);
          xor_in: in std_logic_vector(31 downto 0);
          sel: in std_logic_vector(1 downto 0);
              f: out std_logic_vector(31 downto 0));
    end component;

    component mux2to1_32bits 
    port (in1: in std_logic_vector(31 downto 0);
          in2: in std_logic_vector(31 downto 0);
          sel: in std_logic;
          output: out std_logic_vector(31 downto 0));
    end component;

    component full_adder_32bits
    port (in_a: in std_logic_vector(31 downto 0);
          in_b: in std_logic_vector(31 downto 0);
          cin: in std_logic;
          fa: out std_logic_vector(31 downto 0);
          cout: out std_logic);
    end component;

    component and_32bits
    port (in1: in std_logic_vector(31 downto 0);
          in2: in std_logic_vector(31 downto 0);
          output: out std_logic_vector(31 downto 0));
    end component;

    component or_32bits
    port (in1: in std_logic_vector(31 downto 0);
          in2: in std_logic_vector(31 downto 0);
          output: out std_logic_vector(31 downto 0));
    end component;

    component not_32bits
    port (in1: in std_logic_vector(31 downto 0);
          output: out std_logic_vector(31 downto 0));
    end component;

    component xor_32bits
    port (in1: in std_logic_vector(31 downto 0);
          in2: in std_logic_vector(31 downto 0);
          output: out std_logic_vector(31 downto 0));
    end component;

    component zero_flag
    port ( result: in std_logic_vector(31 downto 0);
           zf: out std_logic);
    end component;

    signal port_and: std_logic_vector(31 downto 0);
    signal port_or: std_logic_vector(31 downto 0);
    signal port_not: std_logic_vector(31 downto 0);
    signal port_xor: std_logic_vector(31 downto 0);

    signal port_not1: std_logic_vector(31 downto 0);
    signal output_mux2to1: std_logic_vector(31 downto 0);
    signal output_mux4to1: std_logic_vector(31 downto 0);
    signal output_fa: std_logic_vector(31 downto 0);
    signal mid_output: std_logic_vector(31 downto 0);

    signal Clk : std_logic := '0';
    constant Clk_period : time := 10 ns;

begin
    Clk_process :process
    begin
            Clk <= '0';
            wait for Clk_period/2;
            Clk <= '1';
            wait for Clk_period/2;
    end process;

    stim_proc: process
    begin     
        wait for Clk_period*2;
        and_port: and_32bits port map (a(31 downto 0),b(31 downto 0),port_and(31 downto 0));
        not_port: not_32bits port map (a(31 downto 0),port_not(31 downto 0));
        or_port:  or_32bits port map (a(31 downto 0),b(31 downto 0),port_or(31 downto 0));
        xor_port: xor_32bits port map (a(31 downto 0),b(31 downto 0),port_xor(31 downto 0));
        not1_port: not_32bits port map (b(31 downto 0),port_not1(31 downto 0));

        mux2to1_1: mux2to1_32bits port map (b(31 downto 0),port_not1(31 downto 0),opcode(0),output_mux2to1(31 downto 0));
        mux4to1: mux4to1_32bits port map (port_and(31 downto 0),port_not(31 downto 0),port_or(31 downto 0),port_xor(31 downto 0),opcode(1 downto 0),output_mux4to1(31 downto 0));
        fulladder: full_adder_32bits port map (a(31 downto 0),output_mux2to1(31 downto 0),opcode(0),output_fa(31 downto 0),cout);
        mux2to1_2: mux2to1_32bits port map (output_fa(31 downto 0),output_mux4to1(31 downto 0),opcode(2),mid_output(31 downto 0));
        zero_output: zero_flag port map (mid_output(31 downto 0),zero);

        output <= mid_output;
        wait;

    end process;
end my_arch;
ieee库;
使用ieee.std_logic_1164.all;
实体alu是
端口(a:std_逻辑_向量中(31向下至0);
b:标准逻辑向量(31到0);
c:标准逻辑向量(31到0);
操作码:标准逻辑向量(2到0);
rst:标准逻辑中;
cout:输出标准逻辑;
输出:输出标准逻辑向量(31到0);
零:输出标准(U逻辑);
末端alu;
alu的架构是
组件MUX4至1_32位
端口(和_-in:in标准逻辑_向量(31向下至0);
不在:在标准逻辑向量中(31到0);
or_in:标准逻辑_向量(31向下至0);
xor_in:in标准逻辑向量(31到0);
sel:标准逻辑向量(1到0);
f:输出标准逻辑向量(31到0);
端部元件;
组件mux2to1_32位
端口(in1:in标准逻辑向量(31到0);
in2:in标准逻辑向量(31到0);
sel:标准逻辑中;
输出:输出标准逻辑向量(31到0);
端部元件;
分量全加器32位
端口(在a中:在标准逻辑向量中(31到0);
in_b:in标准逻辑向量(31到0);
cin:标准逻辑;
fa:输出标准逻辑向量(31到0);
cout:输出标准逻辑);
端部元件;
组件和_32位
端口(in1:in标准逻辑向量(31到0);
in2:in标准逻辑向量(31到0);
输出:输出标准逻辑向量(31到0);
端部元件;
组件或_32位
端口(in1:in标准逻辑向量(31到0);
in2:in标准逻辑向量(31到0);
输出:输出标准逻辑向量(31到0);
端部元件;
组件不是32位
端口(in1:in标准逻辑向量(31到0);
输出:输出标准逻辑向量(31到0);
端部元件;
组件xor_32位
端口(in1:in标准逻辑向量(31到0);
in2:in标准逻辑向量(31到0);
输出:输出标准逻辑向量(31到0);
端部元件;
零组件标志
端口(结果:在标准逻辑向量中(31到0);
zf:输出标准逻辑);
端部元件;
信号端口和:标准逻辑向量(31至0);
信号端口或:标准逻辑向量(31至0);
信号端口非:标准逻辑向量(31至0);
信号端口异或:标准逻辑向量(31到0);
信号端口1:标准逻辑向量(31到0);
信号输出μmux2to1:标准逻辑矢量(31向下至0);
信号输出_mux4to1:std_逻辑_向量(31向下至0);
信号输出:标准逻辑向量(31到0);
信号中间输出:标准逻辑矢量(31至0);
信号时钟:标准逻辑:='0';
恒定时钟周期:时间=10纳秒;
开始
Clk_流程:流程
开始

Clk你是对的。您应该在
stim\u proc
之外实例化组件的端口映射。将其想象为流程旁边或旁边。它只是元件和过程电路之间的信号布线。在流程中,您只有描述数据如何在流程和组件之间运行的信号之间移动的代码。

process=sequential语句。组件=并发语句。您是如何学习VHDL而不遇到顺序语句和并发语句之间的差异的?“过程语句定义了一个独立的顺序过程,表示设计的某些部分的行为……过程语句部分:={顺序语句}”(IEEE Std 1076-2008 11.3)。“网络是驱动程序、信号(包括端口和隐式信号)、转换函数和解析函数的集合,它们共同决定网络上每个信号的有效值和驱动值。”IEEE Std 1076-2008 14.7.3,您的布线并发语句用于定义相互连接的块和过程,这些块和过程共同描述了设计的整体行为或结构。”(11.1)。“组件实例化语句定义了设计实体中出现的子组件,…”(11.7.1)。过程语句是设计层次结构的底层。