在vhdl中创建1位ALU

在vhdl中创建1位ALU,vhdl,hierarchical,quartus,Vhdl,Hierarchical,Quartus,下面的问题是家庭作业 我需要创建一个1位片ALU,它可以在两个1位输入之间执行以下操作: 和,或,使用全加器进行加法,使用加法进行减法,并反转输入,xor。我需要一个4:1的多路复用器来选择alu的这些功能 这张图片总结了我需要创建的内容 我被要求用分层设计(结构)来实现这一点。所以,我需要创建组件。这是整个项目的第一部分。在第二部分中,我需要使用这个1位ALU来创建一个16位ALU。但我现在的问题集中在第一部分 我已经为全加器创建了一个and门,或门,ADD,两个not门来反转输入和MUX4到

下面的问题是家庭作业

我需要创建一个1位片ALU,它可以在两个1位输入之间执行以下操作: 和,或,使用全加器进行加法,使用加法进行减法,并反转输入,xor。我需要一个4:1的多路复用器来选择alu的这些功能

这张图片总结了我需要创建的内容

我被要求用分层设计(结构)来实现这一点。所以,我需要创建组件。这是整个项目的第一部分。在第二部分中,我需要使用这个1位ALU来创建一个16位ALU。但我现在的问题集中在第一部分

我已经为全加器创建了一个and门,或门,ADD,两个not门来反转输入和MUX4到1

library IEEE;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

-- Entity or & and 

ENTITY orGate IS
    PORT( a, b: in std_logic;
        s: out std_logic);
END orGate;

ARCHITECTURE structure OF orGate IS
BEGIN
    s <= a OR b;
END structure;

ENTITY andGate IS
    PORT( a, b: in std_logic;
        s: out std_logic);
END andGate;

ARCHITECTURE structure OF andGate IS
BEGIN
    s <= a AND b;
END structure;

--Entity add 

ENTITY ADD IS
PORT(   cin, a, b : in std_logic;
        s, cout     : out std_logic)
END ADD;

ARCHITECTURE structure OF ADD IS
BEGIN
    s <= (a AND (NOT b) AND (NOT cin)) OR ((NOT a) AND b AND (NOT 
cin)) OR ((NOT a) AND (NOT b) AND cin) OR (a AND b AND cin);
    cout <=( a AND b) OR (cin AND a) OR (cin AND b);
END ADD

-- Inverter, Sub, nor

ENTITY notB IS
    PORT( b: in std_logic;
        s: out std_logic);
END notB;

ARCHITECTURE structure OF notB IS
BEGIN
    s <= NOT b;
END structure;

ENTITY notA IS
    PORT( a: in std_logic;
        s: out std_logic);
END notA;

ARCHITECTURE structure OF notA IS
BEGIN
    s <= NOT a;
END structure;

ENTITY xorGate IS
    PORT( a, b: in std_logic;
        s: out std_logic);
END xorGate;

ARCHITECTURE structure OF xorGate IS
BEGIN
    s <= a XOR b;
END structure;

-- MUX 4 TO 1

ENTITY mux4 IS
PORT(
    andGate      : in  std_logic_vector(2 downto 0);
    orGate      : in  std_logic_vector(2 downto 0);
    sum      : in  std_logic_vector(2 downto 0);
    xorGate      : in  std_logic_vector(2 downto 0);
    operation     : in  std_logic_vector(1 downto 0);
    rslt       : out std_logic_vector(2 downto 0));
END mux4;

ARCHITECTURE rtl OF mux4 IS
BEGIN
WITH operation SELECT
        rslt <= andGate WHEN "00",
        orGate WHEN "01",
        sum WHEN "10",
        xorGate WHEN OTHERS;
end rtl;
IEEE库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
--实体或&和
实体组织是
端口(a,b:标准逻辑中;
s:输出标准(U逻辑);
结束组织;
orGate的架构是
开始

使用结构组件在最终实体的架构和开始关键字之间添加刚才描述的实体

一旦这样做了,就必须使用信号在组件之间绑定组件。在所提供的图形中,信号与导线一样多

这里有一个例子:

使用结构组件在最终实体的架构和开始关键字之间添加刚才描述的实体

一旦这样做了,就必须使用信号在组件之间绑定组件。在所提供的图形中,信号与导线一样多

这里有一个例子:

如果使用无符号类型,则不必实现加法器。但是你必须做一些转换。然而,也许你必须这样做,因为你正在做一个指导性的练习?@Ayubbargach教授要求制作一个用于加法和减法的全加器,它给出了一些如何做的解释,所以我必须推动加法器。如果你使用无符号类型,你不必实现加法器。但是你必须做一些转换。然而,也许你必须这样做,因为你正在做一个指导性的练习?@Ayubbargach教授要求制作一个用于加法和减法的全加器,它给出了一些如何做的解释,所以我必须推动加法器。谢谢!我将定义组件,我想我知道如何制作信号。你有没有给安维特和宾维特的小费,因为我不太确定。是的!我有一些意见:您只需实现一次逆变器。之后,只需声明两个组件“AInverter”和“BInverter”。因为它是一个练习,所以直接使用您构建的实体来完成您的全加器。祝你好运谢谢我将定义组件,我想我知道如何制作信号。你有没有给安维特和宾维特的小费,因为我不太确定。是的!我有一些意见:您只需实现一次逆变器。之后,只需声明两个组件“AInverter”和“BInverter”。因为它是一个练习,所以直接使用您构建的实体来完成您的全加器。祝你好运