Vhdl 带时钟和复位的Alu
我有一个项目要创建一个带有时钟和复位信号的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_
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)。过程语句是设计层次结构的底层。