使用软件设计硬件:硬件描述语言VHDL

有这样一个想法:使用您的软件开发技能来学习如何以硬件描述语言定义数字电路。您可以将设计编程到现场可编程门阵列中,从而获得功能齐全的高性能定制数字设备。低成本FPGA原型板包含足够的逻辑元素,可实现RISC-V等复杂的现代处理器设计,以及您梦寐以求的任何定制扩展。

硬件描述语言并不是半导体公司数字设计师的专属职责;甚至业余爱好者也可以充分利用这些强大的免费工具。本文介绍了在FPGA电路设计开发中广泛使用的VHDL语言。

逻辑门

在进入VHDL之前,我们将快速了解数字电路的基础知识。在集成电路芯片内部,计算机处理器由晶体管,电阻器,电容器和其他电路元件构成。在抽象层次结构的上一层,数字电路实现逻辑门以执行简单的操作,例如NOT,AND,OR和XOR。

NOT门将其输入反相(输入为1时产生,输出为0时,反之亦然)。仅当A和B输入都为1时,AND门的输出为1 ;否则,输出为0。当A和B输入之一或两者为1时,OR门的输出为1。XOR门仅当A和B输入之一恰好为1时,其输出才为1。此处显示了这些组件的示意图符号:

2020-05-31T15:11:44.png
逻辑门原理图符号

通过组合逻辑门,您可以开发更复杂的数字电路,例如寄存器和加法器,并最终开发整个处理器。

一位加法器电路

使用逻辑图表示简单的数字电路非常简单。例如,加法器电路将两个数据位(A和B)加一个输入进位(C in)相加,并产生一位和(S)和进位输出(C out)。这称为全加法器,因为它在计算中包括传入的进位。阿半加器仅增加了两个数据位,而不进入的进位。

2020-05-31T15:12:14.png
全加器

可以将该图浓缩为具有三个输入和两个输出的示意图块,以用于更高级别的图中。下图表示一个4位加法器,其中包含完整加法器电路的四个副本。输入是要相加的两个字,即A0 – A3和B0 – B3,以及输入进位Cin。输出为总和S0 – S3,输出为进位Cout。

2020-05-31T15:13:02.png
4位加法器

当设计比这些示例复杂得多的数字设备时,逻辑图的使用很快变得不便。多年来,作为逻辑图的替代,已经开发了许多硬件描述语言。摩尔定律鼓励这种发展,该定律促使数字系统设计人员不断寻找新方法,以快速有效地利用集成电路中不断增长的数量不断增长的晶体管。

FPGAs

门阵列是包含大量逻辑元件的逻辑设备,可以将其连接以形成任意数字电路。一类称为现场可编程门阵列(FPGA)的门阵列使最终用户仅使用计算机,低成本原型板和适当的软件包即可将自己的设计实现到门阵列芯片中。

FPGA 属于专用集成电路中的一种半定制电路,是可编程的逻辑列阵,能够有效的解决原有的器件门电路数较少的问题。FPGA 的基本结构包括可编程输入输出单元,可配置逻辑块,数字时钟管理模块,嵌入式块RAM,布线资源,内嵌专用硬核,底层内嵌功能单元。由于FPGA具有布线资源丰富,可重复编程和集成度高,投资较低的特点,在数字电路设计领域得到了广泛的应用。FPGA的设计流程包括算法设计、代码仿真以及设计、板机调试,设计者以及实际需求建立算法架构,利用EDA建立设计方案或HD编写设计代码,通过代码仿真保证设计方案符合实际要求,最后进行板级调试,利用配置电路将相关文件下载至FPGA芯片中,验证实际运行效果。

VHDL

VHDL是当今使用的主要硬件描述语言之一。在美国国防部的指导下,VHDL语言的开发始于1983年。VHDL的语法和某些语义均基于Ada编程语言。Verilog是另一种流行的硬件设计语言,其功能类似于VHDL。Chisel是Scala编程语言的扩展,可为大型数字开发工作(例如开源RISC-V处理器)提供高级的数字电路设计和重用功能。

VHDL是一个多层次的缩写,其中V代表VHSIC,这意味着超高速集成电路,而VHDL代表VHSIC硬件描述语言。以下代码是上面显示的完整加法器逻辑图的VHDL实现:
2020-05-31T15:16:56.png

该代码是整个加法器电路的相当简单的文字描述。这里,entity FULL_ADDER (第8行)介绍的部分定义了全加法器组件的输入和输出。的architecture区段(第20行)描述了如何在电路操作以产生输出S和C_OUT 给定的输入A ,B 和C_IN 。该术语std_logic指的是一位二进制数据类型。的<=字符序列代表导线状连接,行驶在左手侧上计算右手侧的值的输出。

以下代码FULL_ADDER在4位加法器逻辑图中所示的电路的实现中将用作组件:
2020-05-31T15:18:34.png

这里,entity ADDER4 (第8行)介绍的部分定义了四位加法器组件的输入和输出。该短语std_logic_vector(3 downto 0) 表示一种四位数据类型,其左侧(最高有效)位置的位号为3,右侧为位号0。

该FULL_ADDER 组件在一个单独的文件中定义,此处以开头部分component FULL_ADDER is(第23行)引用。语句signal c0, c1, c2 : std_logic; (第34行)定义了全加法器之间的内部进位值。四个port map 部分(第39-73行)定义了4位加法器信号与每个一位全加法器的输入和输出之间的连接。要引用多位值中的位,请在括号内的参数名称后跟随位数。例如,A4(0) 是指中的四个位的最低有效位A4。

分层设计

注意在此设计中使用层次结构。我们定义了一个简单的组件,即单比特全加器,作为离散的独立代码块。然后,我们使用该组件来构建更复杂的电路,即四位加法器。这种分层方法可以扩展到多个级别,以定义由不太复杂的组件构成的极其复杂的数字设备,而每个组件又由更简单的部分构成。

在开发包含数十亿个晶体管的现代处理器时,通常会使用这种通用方法,同时以使设计在体系结构的每个层次上都为人类所理解的方式来管理复杂性。

这些清单中的代码提供了逻辑综合软件工具套件在FPGA器件中实现四位加法器所需的所有信息。

这是对VHDL的非常简短的介绍, 目的是使您知道,诸如VHDL之类的硬件描述语言是复杂数字电路设计中的最新技术,并且这些功能可供您使用。此外,您应该知道FPGA开发工具和设备可以使用一些非常低成本的选择。

原创文章,作者:xgl,如若转载,请注明出处:https://edgeaitech.com/p/257

发表评论

登录后才能评论