从VHDL代码到真实硬件:设计一个8位算术逻辑单元

从VHDL代码到真实硬件:设计一个8位算术逻辑单元
2024年09月03日 11:21 电子产品世界

在这个项目中,我们使用VHDL语言创建了一个8位算术逻辑单元(ALU),并在连接到带有输入开关和LED显示器的自定义PCB的Altera CPLD开发板上运行它。

本文引用地址:

使用基于硬件的方法开发电子系统并不总是需要将各种晶体管和逻辑门物理连接到面包板或PCB上。可以使用离散逻辑构建算术逻辑单元(ALU),但随着逻辑复杂性的增加,还有更好的选择。通过可编程逻辑设备和硬件描述语言(HDL),可以在单个芯片中实现从简单电路到高度专业化的处理单元的任何内容。

ALU项目概述

在这个项目中,我将介绍8位算术逻辑单元(ALU)电路的创建过程,该电路具有输入DIP开关和输出LED,如图1所示。我使用VHDL语言对ALU进行编码,并在复杂可编程逻辑器件(CPLD)开发板上运行。我的目标是介绍可编程逻辑,并为使用真实硬件而不是图表和计算机模拟打开大门。

定制PCB开关和LED显示ALU操作

8位算术逻辑单元图1.

项目运行过程。图片由KristijanNelkovski友情提供

对于这个项目,我构建了一个带有All About Circuits品牌的定制印刷电路板(PCB),如图2所示。与更知名的现场可编程门阵列(FPGA)相比,CPLD是一种更实惠但功能较弱的可编程逻辑器件。这两种设备都可以用于创建具有专用输入和输出的定制电子设计。

已完成的ALU项目包括一个定制的PCB

图2:已完成的ALU项目包括一个定制的PCB。图片由Kristijan Nelkovski提供图2:已完成的ALU项目包括一个定制的PCB。图片由Kristijan Nelkovski提供

从内部来看,这些CPLD和FPGA组件包含可重构逻辑块阵列,并作为独立的IC封装,以便嵌入到您自己的设计中。制造商提供开发板,用于学习、测试和实验使用他们的技术和软件环境。我使用CPLD的开发板。

什么是ALU?

每个处理器的核心都是一个组合逻辑电路,该电路对称为算术逻辑单元的整数二进制数执行算术和位操作。我们将在本项目中构建的电路是一个8位算术逻辑单元,它包含两个8位操作数(输入),一个8位结果(输出)和一个4位操作码(输入),该操作码定义了将要执行的操作(图3)

ALU的符号表示

图3. ALU的符号表示。图片由Jim Lamberson提供,维基共享资源图3. ALU的符号表示。图片由Jim Lamberson提供,维基共享资源

ALU 通常包含状态位(既是输入也是输出),这些状态位向处理器提供有关最后执行的操作的重要信息。这些状态信息可以包括结果是否为零,或者结果是否溢出到最高有效位(MSB)之外。但是,我们的电路不需要它们,因此不会包含任何状态位。

ALU为学习VHDL编码和CPLD编程操作提供了极好的起点。一旦你完成这个项目,你就可以轻松地扩展到更困难的应用。

项目详情和参考

在这个项目中,我们将使用VHDL语言创建一个8位算术逻辑单元(ALU),并使用英特尔的Quartus Prime Lite Edition软件(Altera现在是英特尔的一部分)在Altera Max II EPM240 CPLD开发板上运行它。该电路的代码基于加州大学河滨分校发布的实验室练习设计。

对于这个项目,你需要对编程和离散逻辑有基本的理解。查看AAC的VHDL和4位离散逻辑ALU项目介绍也会有所帮助。

注意:虽然我为这个项目创建了一个“屏蔽”类型的板子,但这里介绍的所有内容都是完全适合面包板和穿孔板的。

使用Quartus Prime为Altera MAX II开发板设置新项目

为了开始我们的项目,我们需要下载并安装Quartus Prime Lite Edition,并创建一个文件夹来存储我们所有的项目。我从英特尔的网站下载了该软件,并在“Windows Documents”目录中创建了一个名为“quartus”的文件夹。

当我们运行Quartus时,我们需要做的第一件事就是通过“新建项目向导”设置一个新项目,该向导可以在“文件->新建项目向导”下找到。然后,我们需要在名为“介绍”的第一个屏幕上点击“下一步”。

如图4所示,在名为“Directory, Name, Top-Level Entity”的第二个屏幕上,我们需要选择之前创建的文件夹作为工作目录,并为当前项目提供一个合适的名称。我将此项目命名为“ALU”。

Quartus“目录、名称、顶层实体”屏幕

图4. Quartus“目录、名称、顶层实体”屏幕。图片由Kristijan Nelkovski提供图4. Quartus“目录、名称、顶层实体”屏幕。图片由Kristijan Nelkovski提供

对于“项目类型”屏幕,我们需要选择“空项目”,并将下一个名为“添加文件”的屏幕留空(图5)。

Quartus“项目类型”屏幕

图5. Quartus“项目类型”屏幕。图片由Kristijan Nelkovski提供图5. Quartus“项目类型”屏幕。图片由Kristijan Nelkovski提供

在“Family, Device & Board Settings”屏幕上,我们需要从“Device family”部分的下拉菜单中选择“MAX II”(图6)。然后,从“Available devices”部分选择“EPM240T100C5”,因为这是Altera MAX II EPM240上的芯片。

Quartus 填满族群屏幕

图6. Quartus填充的“系列、设备和板设置”屏幕。图片由Kristijan Nelkovski提供图6. Quartus填充的“系列、设备和板设置”屏幕。图片由Kristijan Nelkovski提供

接下来,我们需要在“EDA工具设置”屏幕上将“Verilog HDL”更改为“VHDL”,点击下一步,并在“摘要”(图7)中检查是否一切正常。在此之后,我们可以点击“完成”按钮,然后我们的新项目将被创建。

Quartus EDA工具设置屏幕

图7. Quartus“EDA工具设置”屏幕。图片由Kristijan Nelkovski提供图7. Quartus“EDA工具设置”屏幕。图片由Kristijan Nelkovski提供

一旦此项目打开,我们需要在“项目导航器:层次结构”窗口中单击我们实体的名称,然后通过按“CTRL+N”并选择“VHDL文件”来创建一个新的VHDL文件

打开此文件后,我们必须通过“文件 -> 另存为”将其保存为实体的VHDL文件。完成所有这些后,我们可以开始为ALU编写代码。

声明VHDL库

因此,与所有编程语言一样,我们需要在VHDL代码的顶部首先声明将在项目中使用的库。

创建 ALU 电路实体

接下来,我们将创建一个ALU实体,定义其所有输入和输出端口。在这里,我们定义端口A和B为“IN STD_LOGIC_VECTOR(7 DOWNTO 0)”,这意味着每个输入实际上都是一个8位总线,其位编号从7到0,其中第七位是MSB。同样,SEL端口被定义为4位输入,RES端口被定义为8位输出。

创建算术逻辑单元电路的VHDL行为架构

现在我们需要设计电路的结构或行为。我们将使用三个输入或端口A、B和Sel创建一个过程。

在此过程中,我们可以调用“case-when”语句(类似于其他编程语言中的“switch-case”),其中我们检查端口SEL的状态。SEL值是ALU的操作码,它决定了需要在端口A和B上接收的两个8位数字之间执行的操作。

这是在语句的“当XXXX =>”部分完成的,其中XXXX表示SEL的二进制状态(介于0000和1111之间的位置)。每个状态都分配给一个相应的ALU操作,该操作使用端口A和B上接收到的值执行。输出在端口RES上写出。

在此之后,我们可以结束“case”语句、流程和行为架构,并以此结束我们项目的代码部分。

在上面的代码中,我包含了一些最常见的算术和逻辑操作,以及一些随机的操作,并注释了每个操作的作用。在这里,你可以替换和包含任何你想要的任意算术或逻辑操作!

引脚映射

代码完成后,我们需要做的第一件事就是编译它。这可以通过进入“处理 -> 开始编译”来完成。如果一切编译正确,我们不应该收到任何错误消息,尽管我们可能会收到一些可以忽略的警告。

接下来,我们需要将之前为实体定义的端口连接到Altera开发板上的物理引脚。我们将通过Quartus的Pin Planner工具来完成此操作,该工具可通过“Assignments -> Pin Planner”访问

引脚规划工具包含:

使用中的芯片(本例中为EPM240)的视觉表示。

描述每种引脚类型的引脚图例。

一个包含我们实体端口中每个单独节点的表格。在这个表格中,我们可以通过在“位置”列的相应行中写出每个节点,将其连接到专用引脚。

表1包含我生成的引脚分配表。

表1. ALU的Quartus引脚映射表表1. ALU的Quartus引脚映射表

将代码上传到Altera开发板

一旦我们将每个输入和输出分配给一个引脚,就需要再次编译代码。如果没有弹出错误消息,我们就可以继续将其上传到Altera MAX II。

为此,我们首先必须通过板上的桶形插孔将板子本身连接到5 V电源。接下来,我们必须通过JTAG端口将其连接到USB Blaster,然后使用迷你USB插孔将USB Blaster连接到我们的计算机(图8)。

Altera板和USB Blaster连接。

•图8。更改板和USB喷砂机连接。图片由KristijanNelkovski提供•图8。更改板和USB喷砂机连接。图片由KristijanNelkovski提供

然后,我们可以通过进入“工具->编程器”并检查“编程/配置”来运行编程器,如图9所示。然后我们需要打开“硬件设置”,选择“USB Blaster”作为我们的“可用硬件项”(我们的程序员),然后点击“开始”,我们的代码将被上传到Altera MAX II。

Quartus编程器屏幕

•图9。Quartus编程器屏幕。图片由KristijanNelkovski提供•图9。Quartus编程器屏幕。图片由KristijanNelkovski提供

印刷电路板电路图

图10所示为我们的电路图。每个LED都通过一个限流电阻连接到一个输出针脚。连接到输入引脚的DIP开关的每个触点也通过电阻网络被下拉到地(在定制PCB上,这些电阻网络隐藏在DIP开关的下面)。

带开关输入和LED输出的定制PCB电路图

•图10。带开关输入和LED输出的定制PCB电路图。图片由KristijanNelkovski提供•图10。带开关输入和LED输出的定制PCB电路图。图片由KristijanNelkovski提供

在把所有的东西都接好并用5V给Altera板供电之后,我们可以通过在我们的操作端口上输入数字并将操作模式切换到我们喜欢的任何操作来看到ALU的动作。发光二极管显示结果,如图1所示。

ALU项目物料清单

表2为本工程的材料清单。

•表2。材料清单•表2。材料清单

轮到你了!

在这个项目中,我们用VHDL语言创建了一个8位ALU电路,并在CPLD开发板上运行。这里,我的目标是介绍可编程逻辑,并为使用真正的硬件组件而不是图表和计算机模拟的FPGA组件打开大门。

如果重复此项目,则可以很容易地向ALU的VHDL操作中添加额外的操作码。还可以修改电路设计以输出和显示状态代码。在以下评论中分享您的想法或项目!

新浪科技公众号
新浪科技公众号

“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)

创事记

科学探索

科学大家

苹果汇

众测

专题

官方微博

新浪科技 新浪数码 新浪手机 科学探索 苹果汇 新浪众测

公众号

新浪科技

新浪科技为你带来最新鲜的科技资讯

苹果汇

苹果汇为你带来最新鲜的苹果产品新闻

新浪众测

新酷产品第一时间免费试玩

新浪探索

提供最新的科学家新闻,精彩的震撼图片