什么是VHDL?数字电路设计的硬件描述语言介绍

摩尔学堂 2022-03-09 12:00

本文介绍了 VHDL,一种硬件描述语言,以及它在描述数字电路时的结构。我们还将回顾一些介绍性示例电路描述,并触及“std_logic”和“bit”数据类型之间的区别。

VHDL是数字电路设计中常用的硬件描述语言(HDL)之一。VHDL 代表 VHSIC 硬件描述语言。反过来,VHSIC 代表超高速集成电路。

VHDL 于 1981 年左右由美国国防部发起,在 IBM 和德州仪器等公司的合作下,1985 年发布了 VHDL 的第一个版本。1984 年发明了第一块 FPGA 的赛灵思很快在其产品中支持了 VHDL。从那时起,VHDL 已经发展成为数字电路设计、仿真和综合方面的成熟语言。

在本文中,我们将简要讨论 VHDL 代码在描述给定电路时的一般结构。我们也会通过一些介绍性的例子来熟悉一些常用的数据类型、运算符等。

VHDL的一般结构

让我们考虑一个简单的数字电路,如图 1 所示。

图 1.一个简单的数字电路。

此图显示有两个输入端口 a 和 b,以及一个输出端口 out1。该图表明输入和输出端口是一位宽。该电路的功能是对两个输入进行“与”运算并将结果放在输出端口上。

VHDL 使用类似的描述;但是,它有自己的语法。例如,它使用以下代码行来描述该电路的输入和输出端口:

1	entity circuit_1 is
2 Port ( a : in STD_LOGIC;
3 b : in STD_LOGIC;
4 out1 : out STD_LOGIC);
5 end circuit_1;

让我们逐行分解这意味着什么。

第 1 行:代码的第一行指定要描述的电路的任意名称。位于关键字“entity”和“is”之间的单词“circuit_1”决定了该模块的名称。

第 2 到 4 行:这些行指定电路的输入和输出端口。将这些线路与图 1 的电路进行比较,我们看到电路的端口及其特性列在关键字“端口”之后。例如,第 3 行说我们有一个名为“b”的端口。该端口是一个输入,如冒号后的关键字“in”所示。

关键字“std_logic”指定了什么?正如我们将在本文后面讨论的那样,std_logic 是 VHDL 中常用的数据类型。它可以用来描述一位数字信号。由于图 1 中的所有输入/输出端口都将传输 1 或 0,因此我们可以对这些端口使用 std_logic 数据类型。

第 5 行:此行确定“实体”语句的结束。

因此,代码的实体部分指定了 1) 要描述的电路的名称和 2) 电路的端口及其特性,即输入/输出和这些端口要传输的数据类型。代码的实体部分实际上描述了模块与其周围环境的接口。由讨论的“实体”语句指定的上述电路的特征在图 1 中以绿色显示。

除了电路与其环境的接口之外,我们还需要描述电路的功能。在图 1 中,电路的功能是对两个输入进行“与”运算并将结果放在输出端口上。为了描述电路的操作,VHDL 添加了“架构”部分并将其与实体语句定义的电路_1 相关联。描述该电路架构的 VHDL 代码将是

6	architecture Behavioral of circuit_1 is

8 begin
9 out1 <= ( a and b );
10 end Behavioral;

第 6 行:此行为将在下一行中描述的架构命名为“行为”。该名称位于关键字“architecture”和“of”之间。它还将这种架构与“电路_1”相关联。换言之,该架构将描述“电路_1”的操作。

第 8 行: 这指定了架构描述的开始。

第 9行 第 9 行使用 VHDL 的语法来描述电路的操作。两个输入 a 和 b 的 AND 在括号内,结果使用赋值运算符“<=”赋值给输出端口。

第 10 行 这指定了架构描述的结尾。如上所述,这些代码行描述了电路的内部操作,这里是一个简单的与门(在图 1 中以蓝色显示)。

将我们到目前为止讨论的内容放在一起,我们几乎完成了用 VHDL 描述“Circuit_1”。我们得到以下代码:

1	entity circuit_1 is
2 Port ( a : in STD_LOGIC;
3 b : in STD_LOGIC;
4 out1 : out STD_LOGIC);
5 end circuit_1;
-----------------------------------------------------
6 architecture Behavioral of circuit_1 is
8 begin
9 out1 <= ( a and b );
10 end Behavioral;

但是,我们仍然需要添加几行代码。这些行将添加一个包含一些重要定义的库,包括数据类型和运算符的定义。一个库可能由多个包组成(参见下面的图 2)。我们必须使给定库的所需包对设计可见。

由于上述示例使用数据类型“std_logic”,我们需要将“ieee”库中的“std_logic_1164”包添加到代码中。请注意,std_logic 数据类型的逻辑运算符也在“std_logic_1164”包中定义——否则我们必须使相应的包对代码可见。最终代码将是

1	library ieee;
2 use ieee.std_logic_1164.all
3 entity circuit_1 is
4 Port ( a : in STD_LOGIC;
5 b : in STD_LOGIC;
6 out1 : out STD_LOGIC);
7 end circuit_1;
-----------------------------------------------------
8 architecture Behavioral of circuit_1 is
9 begin
10 out1 <= ( a and b );
11 end Behavioral;

在这里,我们创建两条新线以超越我们已经创建的内容。第一行添加库“ieee”,第二行指定需要此库中的包“std_logic_1164”。由于“std_logic”是一种常用的数据类型,我们几乎总是需要将“ieee”库和“std_logic_1164”包添加到VHDL代码中。

图 2.一个库可能包含多个包。图片由VHDL 101提供。

我们可以使用 Xilinx ISE 仿真器来验证上述 VHDL 代码的运行情况。

现在我们熟悉了 VHDL 代码中的基本单元,让我们回顾一下最重要的 VHDL 数据类型之一,即“std_logic”数据类型。

“std_logic”数据类型(相对于“位”)

如上所述,“std_logic”数据类型可用于表示一位信号。有趣的是,还有另一种 VHDL 数据类型“位”,它可以采用逻辑 1 或逻辑 0。

那么,如果“位”数据类型已经涵盖了数字信号的高低状态,为什么我们还需要 std_logic 数据类型呢?好吧,数字信号实际上不限于逻辑高和逻辑低。考虑一个三态逆变器,如图 3 所示。

图 3.三态逆变器的晶体管级原理图。

当“enable”为高电平时,“data_output”连接到 Vdd 或接地;然而,当“enable”为低电平时,“data_output”处于浮动状态,即它没有与 Vdd 或地的低阻抗连接,而是对外部电路呈现“高阻抗”。“std_logic”数据类型允许我们通过分配值“Z”来描述高阻抗模式下的数字信号。

还有另一种状态——即除了逻辑高、逻辑低和高阻抗之外——可用于数字电路的设计。有时我们并不关心特定输入的值。在这种情况下,用“无关”表示信号的值可以导致更有效的设计。“std_logic”数据类型支持“不关心”状态。这为查找表提供了更好的硬件优化。

“std_logic”数据类型还允许我们通过分配值“U”来表示未初始化的信号。这在用 VHDL 模拟一段代码时会很有帮助。事实证明,“std_logic”数据类型实际上可以取九个值:

  • 'U':未初始化

  • “1”:逻辑高电平的常用指标,也称为“强制高电平”

  • “0”:逻辑低电平的常用指标,也称为“强制低电平”

  • “Z”:高阻抗

  • '-':不在乎

  • 'W':弱未知

  • 'X':强制未知

  • 'H':弱高

  • 'L':弱低

在这些值中,我们通常使用“0”、“1”、“Z”和“-”。

    让我们看一个例子。

示例 1

为图 4 中的电路编写 VHDL 代码。


图 4。

一般程序与前面的示例几乎相同。代码如下:

1	library IEEE;
2 use IEEE.STD_LOGIC_1164.ALL;
----------------------------------------------------
3 entity circuit_2 is
4 Port ( a : in STD_LOGIC;
5 b : in STD_LOGIC;
6 c : in STD_LOGIC;
7 d : in STD_LOGIC;
8 out1 : out STD_LOGIC;
9 out2 : out STD_LOGIC);
10 end circuit_2;
-----------------------------------------------------
11 architecture Behavioral of circuit_2 is
12 signal sig1: std_logic;
13 begin
14 sig1 <= ( a and b );
15 out1 <= ( sig1 or c );
16 out2 <= (not d);

17 end Behavioral;

第 1 行和第 2 行:这些行将所需的库和包添加到代码中。由于使用了“std_logic”数据类型,我们必须添加“std_logic_1164”包。

第 3-10 行:这些行指定模块的名称及其输入/输出端口。这部分代码对应于图 4 中的绿色部分。

第 11-17 行:这部分代码描述了电路的操作(图 4 中的蓝色部分)。您可能已经注意到,图 4 中有一个内部节点;它被标记为“sig1”。我们使用“entity”中的“port”语句来定义输入/输出端口,但是我们如何定义电路的内部节点呢?为此,我们使用“信号”关键字。

在上述代码的第 12 行,“signal”关键字告诉综合软件电路中有一个节点标记为“sig1”。与端口的定义类似,我们在冒号后使用关键字“std_logic”来指定所需的数据类型。现在我们可以给这个节点赋值(第 14 行)或使用它的值(第 15 行)。

 

示例 2

为图 5 中的电路编写 VHDL 代码。

图 5。

该电路是一个二对一的多路复用器。当“sel”为高时,无论“b”的值如何,下与门的输出都将为低。我们可以说与门阻止“b”传播到“sig2”。另一方面,由于“sel”为高电平,上与门的输出将跟随“a”。或者,等效地,“a”将达到“sig3”。由于在这种情况下“sig2”为低电平,因此或门的输出将与“sig3”相同。因此,当“sel”为高时,“out1”将与“a”相同。

类似的讨论将揭示,当“sel”较低时,“out1”将取“b”的值。因此,基于“sel”的值,我们可以允许一个输入或另一个到达输出。这称为多路复用,电路称为多路复用器。

我们可以使用以下代码来描述图 5 的电路:

1	library IEEE;
2 use IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------
3 entity circuit_3 is
4 Port ( a : in STD_LOGIC;
5 b : in STD_LOGIC;
6 sel : in STD_LOGIC;
7 out1 : out STD_LOGIC);
8 end circuit_3;
-----------------------------------------------------
9 architecture Behavioral of circuit_3 is
10 signal sig1, sig2, sig3: std_logic;
11 begin
12 sig1 <= ( not sel );
13 sig2 <= ( b and sig1 );
14 sig3 <= ( a and sel );
15 out1 <= ( sig2 or sig3 );

16 end Behavioral;

总结

在本文中,我们讨论了 VHDL 是什么、它的结构,并介绍了一些如何使用它来描述数字电路的示例。您现在应该对以下几点有了更好的理解:

  • 代码的“实体”部分指定 1)要描述的电路的名称和 2)电路的端口;它建立了模块与其周围环境之间的接口。

  • 代码的“架构”部分描述了电路的内部操作。

  • VHDL 库包含重要的定义,包括数据类型和运算符的定义。一个库本身可能包含几个包。

  • 我们几乎总是需要将“ieee”库和“std_logic_1164”包添加到我们的 VHDL 代码中。

  • 在“std_logic”数据类型的可能值中,我们通常使用“0”、“1”、“Z”和“-”。



--------------------


今天小编带来了:ISSCC2022套餐,里面有文章、PPT、Tutorial等,同学可以拿回去自己学习研究。


ISSCC2022完整资料领取方式如下   
识别关注下方公众号

公众号对话框输入 1325 

由于公众号后台资料容量有限
每份资料有效期为30天,过期会被更新删除
资料仅供个人学习使用,禁止分享与转发!
大家如果需要,请及时下载!




1、深入理解SerDes(Serializer-Deserializer)之一

2、深入理解SerDes(Serializer-Deserializer)之二

3、科普:深入理解SerDes(Serializer-Deserializer)之三

4、资深工程师的ESD设计经验分享

5、干货分享,ESD防护方法及设计要点!

6、科普来了,一篇看懂ESD(静电保护)原理和设计!

7、锁相环(PLL)基本原理 及常见构建模块

8、当锁相环无法锁定时,该怎么处理的呢?

9、高性能FPGA中的高速SERDES接口

10、什么是毫米波技术?它与其他低频技术相比有何特点?

11、如何根据数据表规格算出锁相环(PLL)中的相位噪声

12、了解模数转换器(ADC):解密分辨率和采样率

13、究竟什么是锁相环(PLL)

14、如何模拟一个锁相环

15、了解锁相环(PLL)瞬态响应

16、如何优化锁相环(PLL)的瞬态响应

17、如何设计和仿真一个优化的锁相环

18、锁相环(PLL) 倍频:瞬态响应和频率合成

19、了解SAR ADC

20、了解 Delta-Sigma ADC

21、什么是数字 IC 设计?

22、什么是模拟 IC 设计?

23、什么是射频集成电路设计?

24、学习射频设计:选择合适的射频收发器 IC

25、连续时间 Sigma-Delta ADC:“无混叠”ADC

26、了解电压基准 IC 的噪声性能

27、数字还是模拟?I和Q的合并和分离应该怎么做?

28、良好通信链路性能的要求:IQ 调制和解调

29、如何为系统仿真建模数据转换器?

30、干货!CMOS射频集成电路设计经典讲义(Prof. Thomas Lee)

31、使用有效位数 (ENOB) 对 ADC 进行建模

32、以太网供电 (PoE) 的保护建议

33、保护高速接口的设计技巧

34、保护低速接口和电源电路设计技巧

35、使用互调多项式和有效位数对 ADC 进行建模

36、向 ADC 模型和 DAC 建模添加低通滤波器

37、揭秘芯片的内部设计原理和结构

38、Delta-Sigma ADCs中的噪声简介(一)

39、Delta-Sigma ADCs中的噪声简介(二)

40、Delta-Sigma ADCs 中的噪声简介(三)

41、了解Delta-Sigma ADCs 中的有效噪声带宽(一)

42、了解Delta-Sigma ADCs 中的有效噪声带宽(二)

43、放大器噪声对 Delta-Sigma ADCs 的影响(一)

44、放大器噪声对 Delta-Sigma ADCs 的影响(二)

45、参考电压噪声如何影响 Delta Sigma ADCs

46、如何在高分辨率Delta-Sigma ADCs电路中降低参考噪声

47、时钟信号如何影响精密ADC

48、了解电源噪声如何影响 Delta-Sigma ADCs

49、运算放大器简介和特性

50、使用 Delta-Sigma ADCs 降低电源噪声的影响

51、如何设计带有运算放大器的精密电流泵

52锁定放大器的基本原理

53了解锁定放大器的类型和相关的噪声源

54、用于降低差分 ADC 驱动器谐波失真的 PCB 布局技术

55、干货!《实用的RFIC技术》课程讲义

56、如何在您的下一个 PCB 设计中消除反射噪声

57、硅谷“八叛徒”与仙童半导体(Fairchild)的故事!

                                                                                                    

往期精彩课程分享


1、免费公开课ISCAS 2015 :The Future of Radios_ Behzad Razavi

2、免费公开课:从 5 微米到 5 纳米的模拟 CMOS(Willy Sansen)

3、免费公开课:变革性射频毫米波电路(Harish Krishnaswamy)

4、免费公开课:ESSCIRC2019-讲座-Low-Power SAR ADCs

5、免费公开课:ESSCIRC2019-讲座-超低功耗接收器(Ultra-Low-Power Receivers)

6、免费公开课:CICC2019-基于 ADC 的有线收发器(Yohan Frans Xilinx)

7、免费公开课:ESSCIRC 2019-有线与数据转换器应用中的抖动

8、免费公开课:ISSCC2021 -锁相环简介-Behzad Razavi

9、免费公开课:ISSCC2020-DC-DC 转换器的模拟构建块

10、免费公开课:ISSCC2020-小数N分频数字锁相环设计

11、免费公开:ISSCC2020-无线收发器电路和架构的基础知识(从 2G 到 5G)

12、免费公开课:ISSCC2020-从原理到应用的集成变压器基础

13、免费公开课:ISSCC2021-射频和毫米波功率放大器设计的基础





www.moorext.com--线!




摩尔学堂 摩尔学堂专注于半导体人才培训,在线培训与学习服务平台,泛IC领域MOOC分享互动平台。 www.moorext.com
评论
  • 百佳泰特为您整理2025年1月各大Logo的最新规格信息,本月有更新信息的logo有HDMI、Wi-Fi、Bluetooth、DisplayHDR、ClearMR、Intel EVO。HDMI®▶ 2025年1月6日,HDMI Forum, Inc. 宣布即将发布HDMI规范2.2版本。新规范将支持更高的分辨率和刷新率,并提供更多高质量选项。更快的96Gbps 带宽可满足数据密集型沉浸式和虚拟应用对传输的要求,如 AR/VR/MR、空间现实和光场显示,以及各种商业应用,如大型数字标牌、医疗成像和
    百佳泰测试实验室 2025-01-16 15:41 160浏览
  • 一个易用且轻量化的UI可以大大提高用户的使用效率和满意度——通过快速启动、直观操作和及时反馈,帮助用户快速上手并高效完成任务;轻量化设计则可以减少资源占用,提升启动和运行速度,增强产品竞争力。LVGL(Light and Versatile Graphics Library)是一个免费开源的图形库,专为嵌入式系统设计。它以轻量级、高效和易于使用而著称,支持多种屏幕分辨率和硬件配置,并提供了丰富的GUI组件,能够帮助开发者轻松构建出美观且功能强大的用户界面。近期,飞凌嵌入式为基于NXP i.MX9
    飞凌嵌入式 2025-01-16 13:15 201浏览
  • 电竞鼠标应用环境与客户需求电竞行业近年来发展迅速,「鼠标延迟」已成为决定游戏体验与比赛结果的关键因素。从技术角度来看,传统鼠标的延迟大约为20毫秒,入门级电竞鼠标通常为5毫秒,而高阶电竞鼠标的延迟可降低至仅2毫秒。这些差异看似微小,但在竞技激烈的游戏中,尤其在对反应和速度要求极高的场景中,每一毫秒的优化都可能带来致胜的优势。电竞比赛的普及促使玩家更加渴望降低鼠标延迟以提升竞技表现。他们希望通过精确的测试,了解不同操作系统与设定对延迟的具体影响,并寻求最佳配置方案来获得竞技优势。这样的需求推动市场
    百佳泰测试实验室 2025-01-16 15:45 238浏览
  • 实用性高值得收藏!! (时源芯微)时源专注于EMC整改与服务,配备完整器件 TVS全称Transient Voltage Suppre,亦称TVS管、瞬态抑制二极管等,有单向和双向之分。单向TVS 一般应用于直流供电电路,双向TVS 应用于电压交变的电路。在直流电路的应用中,TVS被并联接入电路中。在电路处于正常运行状态时,TVS会保持截止状态,从而不对电路的正常工作产生任何影响。然而,一旦电路中出现异常的过电压,并且这个电压达到TVS的击穿阈值时,TVS的状态就会
    时源芯微 2025-01-16 14:23 152浏览
  • 日前,商务部等部门办公厅印发《手机、平板、智能手表(手环)购新补贴实施方案》明确,个人消费者购买手机、平板、智能手表(手环)3类数码产品(单件销售价格不超过6000元),可享受购新补贴。每人每类可补贴1件,每件补贴比例为减去生产、流通环节及移动运营商所有优惠后最终销售价格的15%,每件最高不超过500元。目前,京东已经做好了承接手机、平板等数码产品国补优惠的落地准备工作,未来随着各省市关于手机、平板等品类的国补开启,京东将第一时间率先上线,满足消费者的换新升级需求。为保障国补的真实有效发放,基于
    华尔街科技眼 2025-01-17 10:44 131浏览
  • 近期,智能家居领域Matter标准的制定者,全球最具影响力的科技联盟之一,连接标准联盟(Connectivity Standards Alliance,简称CSA)“利好”频出,不仅为智能家居领域的设备制造商们提供了更为快速便捷的Matter认证流程,而且苹果、三星与谷歌等智能家居平台厂商都表示会接纳CSA的Matter认证体系,并计划将其整合至各自的“Works with”项目中。那么,在本轮“利好”背景下,智能家居的设备制造商们该如何捉住机会,“掘金”万亿市场呢?重认证快通道计划,为家居设备
    华普微HOPERF 2025-01-16 10:22 178浏览
  • 随着智慧科技的快速发展,智能显示器的生态圈应用变得越来越丰富多元,智能显示器不仅仅是传统的显示设备,透过结合人工智能(AI)和语音助理,它还可以成为家庭、办公室和商业环境中的核心互动接口。提供多元且个性化的服务,如智能家居控制、影音串流拨放、实时信息显示等,极大提升了使用体验。此外,智能家居系统的整合能力也不容小觑,透过智能装置之间的无缝连接,形成了强大的多元应用生态圈。企业也利用智能显示器进行会议展示和多方远程合作,大大提高效率和互动性。Smart Display Ecosystem示意图,作
    百佳泰测试实验室 2025-01-16 15:37 172浏览
  • 80,000人到访的国际大展上,艾迈斯欧司朗有哪些亮点?感未来,光无限。近日,在慕尼黑electronica 2024现场,ams OSRAM通过多款创新DEMO展示,以及数场前瞻洞察分享,全面展示自身融合传感器、发射器及集成电路技术,精准捕捉并呈现环境信息的卓越能力。同时,ams OSRAM通过展会期间与客户、用户等行业人士,以及媒体朋友的深度交流,向业界传达其以光电技术为笔、以创新为墨,书写智能未来的深度思考。electronica 2024electronica 2024构建了一个高度国际
    艾迈斯欧司朗 2025-01-16 20:45 150浏览
  • 全球领先的光学解决方案供应商艾迈斯欧司朗(SIX:AMS)近日宣布,与汽车技术领先者法雷奥合作,采用创新的开放系统协议(OSP)技术,旨在改变汽车内饰照明方式,革新汽车行业座舱照明理念。结合艾迈斯欧司朗开创性的OSIRE® E3731i智能LED和法雷奥的动态环境照明系统,两家公司将为车辆内饰设计和功能设立一套全新标准。汽车内饰照明的作用日益凸显,座舱设计的主流趋势应满足终端用户的需求:即易于使用、个性化,并能提供符合用户生活方式的清晰信息。因此,动态环境照明带来了众多新机遇。智能LED的应用已
    艾迈斯欧司朗 2025-01-15 19:00 78浏览
  • 晶台光耦KL817和KL3053在小家电产品(如微波炉等)辅助电源中的广泛应用。具备小功率、高性能、高度集成以及低待机功耗的特点,同时支持宽输入电压范围。▲光耦在实物应用中的产品图其一次侧集成了交流电压过零检测与信号输出功能,该功能产生的过零信号可用于精确控制继电器、可控硅等器件的过零开关动作,从而有效减小开关应力,显著提升器件的使用寿命。通过高度的集成化和先进的控制技术,该电源大幅减少了所需的外围器件数量,不仅降低了系统成本和体积,还进一步增强了整体的可靠性。▲电路示意图该电路的过零检测信号由
    晶台光耦 2025-01-16 10:12 97浏览
  • 随着消费者对汽车驾乘体验的要求不断攀升,汽车照明系统作为确保道路安全、提升驾驶体验以及实现车辆与环境交互的重要组成,日益受到业界的高度重视。近日,2024 DVN(上海)国际汽车照明研讨会圆满落幕。作为照明与传感创新的全球领导者,艾迈斯欧司朗受邀参与主题演讲,并现场展示了其多项前沿技术。本届研讨会汇聚来自全球各地400余名汽车、照明、光源及Tier 2供应商的专业人士及专家共聚一堂。在研讨会第一环节中,艾迈斯欧司朗系统解决方案工程副总裁 Joachim Reill以深厚的专业素养,主持该环节多位
    艾迈斯欧司朗 2025-01-16 20:51 110浏览
  • 故障现象 一辆2007款法拉利599 GTB车,搭载6.0 L V12自然吸气发动机(图1),累计行驶里程约为6万km。该车因发动机故障灯异常点亮进厂检修。 图1 发动机的布置 故障诊断接车后试车,发动机怠速轻微抖动,发动机故障灯长亮。用故障检测仪检测,发现发动机控制单元(NCM)中存储有故障代码“P0300 多缸失火”“P0309 气缸9失火”“P0307 气缸7失火”,初步判断发动机存在失火故障。考虑到该车使用年数较长,决定先使用虹科Pico汽车示波器进行相对压缩测试,以
    虹科Pico汽车示波器 2025-01-15 17:30 95浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦