数字电子技术基础(五十)——硬件描述语言简介
目录
1 硬件描述语言简介
1.1 硬件描述语言简介
1.2 硬件编程语言的发展历史
1.3 两种硬件描述的比较
1.4 硬件描述语言的应用场景
1.5 基本程序结构
1.5.1 基本程序结构
1.5.2 基本语句和描述方法
1.5.3 仿真
1 硬件描述语言简介
1.1 硬件描述语言简介
硬件描述语言(Hardware Description Language, HDL)是一种用于描述电子系统(尤其是数字电路)结构、行为和功能的专用编程语言。它允许工程师以文本形式对硬件(如集成电路、FPGA、ASIC等)进行建模、设计和验证,是电子设计自动化(EDA)流程的核心工具之一。
相较于传统的编程语言,例如C、Java等,硬件描述更加注重硬件之间的连接关系、时序运行以及并行操作等物理特性。主流的硬件描述语言包括Verilog HDL和VHDL,如下所示:
1.2 硬件编程语言的发展历史
上世纪1970s开始,随着电路的复杂度的提升,传统的手工绘图的方式开始变得低效,学术界开始研究文本硬件描述方法。1972年,美国南加州大学 D. D. Gajski开始研究AHDL(A Hardware Programing Lauguage),这是早期的数字电路描述语言。
目前主流的两种硬件描述语言均诞生在20世纪80年代,在上世纪80年代时,已经有上百种硬件描述语言,是硬件描述语言快速发展的时代。其中,Verilog HDL是由Gateway Design Automation公司开发的,后来被Cadence公司收购。VHDL是上世界80年代美国国防部资助开发的,作为ADA语言的一部分,用于规范文档和设计。VHDL和Verilog HDL分别在1985年和1997年成为IEEE标准。
2000年以后,衍生了更加高级的HDL,支持系统级验证和混合信号建立。
1.3 两种硬件描述的比较
Verilog HDL和VHDL之间都有相同点:
- 两种语言都支持层次化设计。
- 都支持并发执行,都是基于硬件的特点。
- 都支持行为级描述和结构级描述。
- 都支持相同的数据类型,并且都支持组合逻辑和时序逻辑。
除了相同点之外,Veriilog HDL和VHDL之间也存在不同点,对于Verilog HDL语言来说,相对于VHDL,优点为:
- Verillog语言语法简洁,易于学习。
- Verilog语言被广泛支持。
- Verilog语言仿真速度快。
- Verilog语言发展较快。
缺点为:
- Verilog语言不适合大型复杂设计。
- Verilog语言的类型系统较弱。
- Verilog语言对低层次的描述较弱。
对于VHDL语言,其优势为:
- VHDL的语法较为严谨。
- VHDL适合用于大型设计。
- VHDL标准化程度高。
- VHDL对于低层次描述支持。
- VHDL可以应用高可靠性系统。
而其劣势为:
- VHDL语法复杂。
- 仿真速度通常很慢。
将上面内容进行总结得:
1.4 硬件描述语言的应用场景
硬件描述语言的应用十分广泛,涵盖范围如下所示:
下面对于各个方面基进行简答介绍。
(1)人工智能
人工智能是当下火热的研究内容,HDL可以显著提升了深度学习中的神经网络计算,特别是图像识别中的卷积运算。通过硬件并行性,HDL可以有效地处理大量的图像数据,减少计算资源的浪费。同时,随着物联网(IoT)的发展,边缘计算是相对热门的话题,FPGA在边缘计算中可以提供快速、高效的数据处理能力,减少数据传输到云端的需求,降低延迟和带宽消耗。
(2)智能驾驶
CAN(Controller Area Network)总线是一种广泛应用于汽车电子、工业控制、航空航天等领域的可靠串行通信协议。CAN协议的数据帧结构包括帧起始位、仲裁字段、控制字段、数据字段、校验字段等多个部分。VHDL可以通过行为级描述来实现对这些字段的解析和生成,同时利用其并行处理能力来处理多个字段的同步操作。VHDL的高抽象性和模块化设计使得CAN协议的实现具有很高的灵活性和可扩展性。设计者可以根据不同的应用场景和需求,对CAN协议进行定制和优化。
(3)通信领域
HDL在通信领域同样也有应用。例如,在基带信号处理方面,完成各种调制方式,如相移键控(PSK)、正交幅度调制(QAM)等。HDL可根据不同的通信标准和需求,灵活实现调制和解调算法,将数字信号转换为适合在信道中传输的模拟信号。在射频信号处理方面,在发射端将基带信号上变频到射频频段以便通过天线发射,在接收端,将射频信号下变频到基带频段进行后续处理。FPGA 可以生成各种频率的本振信号,并与基带信号进行混频,实现频谱搬移。
(4)集成电路(IC)设计
在 IC 设计的早期阶段,设计人员通常使用 HDL 进行行为级描述。这种描述方式侧重于对电路功能的抽象表达,而不涉及具体的硬件结构。在 IC 设计过程中,需要对设计的功能进行验证,确保其符合设计要求。HDL 可以用于搭建测试平台,生成激励信号并监测电路的输出响应。例如,对于一个设计好的存储器芯片,使用 HDL 编写测试平台可以模拟不同的读写操作,检查存储器的读写功能是否正常。
(5)数字信号处理
HDL在数字信号处理有很多应用。例如在滤波器的设计方面,如果想设计一个FIR(有限冲击响应)滤波器,可以通过HDL代码在FPGA中实现。HDL代码可以定义滤波器的系数存储、乘法累加运算等逻辑,从而实现对输入信号的滤波处理。在快速傅里叶变化的应用中,FFT是数字信号处理中的重要算法,用于将时域信号转换为频域信号。HDL可以在FPGA中实现FFT算法的硬件加速。通过编写HDL代码,可以定义蝶形运算单元、数据存储和调度等逻辑,实现高效的FFT运算。
(6)医疗领域
HDL在医疗领域也有较多的应用,例如在医疗成像领域,在 MRI、CT 等医学成像设备中,HDL 可用于设计图像重建算法模块。通过对采集到的大量原始数据进行快速处理和运算,利用 HDL 实现如反投影算法、迭代重建算法等,能够在短时间内重建出高质量的人体内部器官图像,为医生提供准确的诊断依据。在医疗监护领域,DL 可用于设计生理信号采集与处理模块。可以对心电、血压、血氧等多种生理信号进行实时采集、放大、滤波和模数转换等处理。
(7)航空航天
HDL在高性能、高可靠性和和复杂系统设计方面有很多应用。例如,在航空发动机系统设计中,基于模型的系统工程(MBSE)方法结合HDL工具,可以实现需求驱动的正向设计流程,快速搭建系统模型,并与多学科联合仿真验证程序融合。HDL工具通过内置的设计规则集合(包括DO-254等安全关键设计规则集),能够确保设计满足航空航天行业的严格标准。
(8)消费电子
消费电子是普通人接触较多的领域,HDL在消费电子也有很大的应用。例如,在显示驱动方面实现屏幕控制和显示优化,在智能手机、平板电脑、智能手表等各类显示屏设备中,HDL 可用于设计显示驱动芯片。它能精确控制屏幕的像素点发光,实现不同分辨率、刷新率和色彩模式的显示。在音视频处理方面对于高清视频的解码,在智能电视、机顶盒、蓝光播放器等设备中,HDL 可用于设计专用的视频解码芯片。
1.5 基本程序结构
1.5.1 基本程序结构
和其他编程类似,Verilog HDL也是采用模块化的结构,以模块化的形式来描述数字电路系统。模块(module)是Verilog HDL语言中描述电路的基本单元。模块的基本语法如下所示:
module<模块化>(<端口列表>)
<定义>
<模块条目>
endmodule
最基本的模块如下所示:
module module_name (input [width] input1, // 输入端口input [width] input2,output [width] output1, // 输出端口output [width] output2
);// 模块内部逻辑
endmodule
上面的端口定义两个输入端口和两个输出端口。
1.5.2 基本语句和描述方法
对于组合逻辑来说,使用assign实现组合逻辑:
assign output = input1 & input2; // 逻辑与操作
组合逻辑是输出信号仅依赖于当前输入信号的逻辑。例如,设计一个简单的2输入与门:
module and_gate (input wire a,input wire b,output wire y
);assign y = a & b; // 组合逻辑
endmodule
而对于时序逻辑电路来说,使用always块实现时序逻辑,通常与clock信号结合。如下所示:
always @(posedge clk) beginif (reset) beginreg_out <= 0;end else beginreg_out <= input;end
end
时序逻辑的输出不仅依赖于当前输入,还依赖于过去的输入。例如,设计一个D触发器:
module d_ff (input wire clk, // 时钟信号input wire reset, // 异步复位信号input wire d, // 数据输入output reg q // 数据输出
);always @(posedge clk or posedge reset) beginif (reset) beginq <= 0; // 异步复位end else beginq <= d; // 数据锁存endend
endmodule
生成结构是Verilog中一种强大的功能,允许在编译时根据参数条件创建或重复模块实例、寄存器、线网或其他Verilog元素。它主要用于创建可配置和可重用的设计。主要的生产结果包括generate-for循环、generate-if循环、generate-case循环:
例如generate-for循环:
generateif (WIDTH > 4) begin : wide_block// 当WIDTH>8时包含的代码reg [WIDTH-1:0] wide_reg;endelse begin : narrow_block// 否则包含的代码reg [7:0] narrow_reg;end
endgenerate
Verilog中一种编译时循环结构,主要用于在硬件描述中创建重复的电路结构。
1.5.3 仿真
仿真用于验证Verilog代码的功能是否正确。通常使用仿真工具(如ModelSim、Vivado Simulator等)进行仿真。仿真工具会生成波形图,显示输入和输出信号随时间的变化。设计人员可以根据波形图判断是否设计正确。
因为本系列主要讲的是数字电子技术内容,在这里对于Verilog HDL和VHDL不进行更加细致的讲解,以后有机会的话可能对于这编程语言进行讲解。
相关文章:
数字电子技术基础(五十)——硬件描述语言简介
目录 1 硬件描述语言简介 1.1 硬件描述语言简介 1.2 硬件编程语言的发展历史 1.3 两种硬件描述的比较 1.4 硬件描述语言的应用场景 1.5 基本程序结构 1.5.1 基本程序结构 1.5.2 基本语句和描述方法 1.5.3 仿真 1 硬件描述语言简介 1.1 硬件描述语言简介 硬件描述语…...
【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读
【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读 文章目录 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读前言autopad函数Conv类__init__成员函数forward成员函数forward_fuse成员函数 Bottleneck类__init__成员…...
16.Chromium指纹浏览器开发教程之WebGPU指纹定制
WebGPU指纹概述 WebGPU是下一代的Web图形和计算API,旨在提供高性能的图形渲染和计算能力。它是WebGL的后继者,旨在利用现代GPU的强大功能,使得Web应用能够实现接近原生应用的图形和计算性能。而且它是一个低级别的API,可以直接与…...
示例:spring 纯xml配置
以下是一个完整的 纯 XML 配置开发示例,涵盖 DAO、Service、Controller 层,通过 Spring XML 配置实现依赖注入和事务管理,无需任何注解。 1. 项目结构 src/main/java ├── com.example.dao │ └── UserDao.java # DAO 接口…...
SQL预编译——预编译真的能完美防御SQL注入吗
SQL注入原理 sql注入是指攻击者拼接恶意SQL语句到接受外部参数的动态SQL查询中,程序本身 未对插入的SQL语句进行过滤,导致SQL语句直接被服务端执行。 拼接的SQL查询例如,通过在id变量后插入or 11这样的条件,来绕过身份验证&#…...
系统架构师2025年论文《论基于UML的需求分析》
论基于构件的软件开发 摘要: 2011 年 3 月,我有幸参加了某市医院预约挂号系统项目的开发工作,并担任系统架构师一职,负责系统的架构设计及核心构件的开发工作。该项目是某市医院为提升患者就医体验、优化挂号流程而委托开发的,项目于 2011 年底验收,满足了医院及患者提…...
运行neo4j.bat console 报错无法识别为脚本,PowerShell 教程:查看语言模式并通过注册表修改受限模式
无法将“D:\neo4j-community-4.4.38-windows\bin\Neo4j-Management\Get-Args.ps1”项识别为cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 前提配置好环境变量之后依然报上面的错…...
【EDA软件】【设计约束和分析操作方法】
1. 设计约束 设计约束主要分为物理约束和时序约束。 物理约束主要包括I/O接口约束(如引脚分配、电平标准设定等物理属性的约束)、布局约束、布线约束以及配置约束。 时序约束是FPGA内部的各种逻辑或走线的延时,反应系统的频率和速度的约束…...
【Lua】Lua 入门知识点总结
Lua 入门学习笔记 本教程旨在帮助有编程基础的学习者快速入门Lua编程语言。包括Lua中变量的声明与使用,包括全局变量和局部变量的区别,以及nil类型的概念、数值型、字符串和函数的基本操作,包括16进制表示、科学计数法、字符串连接、函数声明…...
Godot学习-关于3D模型选择问题
下面是OBJ、glTF/GLB、BLEND和FBX四种3D模型格式的比较表格,以便更直观地了解它们之间的差异: 特性/格式OBJglTF / GLBBLENDFBX文件类型文本文本/二进制二进制二进制几何数据支持支持支持支持材质支持基础高级(PBR等)完整支持高级…...
光谱相机在肤质检测中的应用
光谱相机在肤质检测中具有独特优势,能够通过多波段光谱分析皮肤深层成分及生理状态,实现非侵入式、高精度、多维度的皮肤健康评估。以下是其核心应用与技术细节: 一、工作原理 光谱反射与吸收特性: 血红蛋白&a…...
IDEA 插件推荐清单(2025)
IDEA 插件推荐清单 精选高效开发必备插件,提升 Java 开发体验与效率。 参考来源:十六款好用的 IDEA 插件,强烈推荐!!!不容错过 代码开发助手类 插件名称功能简介推荐指数CodeGeeX智能代码补全、代码生成、…...
机器学习第一篇 线性回归
数据集:公开的World Happiness Report | Kaggle中的happiness dataset2017. 目标:基于GDP值预测幸福指数。(单特征预测) 代码: 文件一:prepare_for_traning.py """用于科学计算的一个库…...
CS144 Lab1实战记录:实现TCP重组器
文章目录 1 实验背景与要求1.1 TCP的数据分片与重组问题1.2 实验具体任务 2 重组器的设计架构2.1 整体架构2.2 数据结构设计 3 重组器处理的关键场景分析3.1 按序到达的子串(直接写入)3.2 乱序到达的子串(需要存储)3.3 与已处理区…...
Linux安装mysql_exporter
mysqld_exporter 是一个用于监控 MySQL 数据库的 Prometheus exporter。可以从 MySQL 数据库的 metrics_schema 收集指标,相关指标主要包括: MySQL 服务器指标:例如 uptime、version 等数据库指标:例如 schema_name、table_rows 等表指标:例如 table_name、engine、…...
BeautifulSoup 库的使用——python爬虫
文章目录 写在前面python 爬虫BeautifulSoup库是什么BeautifulSoup的安装解析器对比BeautifulSoup的使用BeautifulSoup 库中的4种类获取标签获取指定标签获取标签的的子标签获取标签的的父标签(上行遍历)获取标签的兄弟标签(平行遍历)获取注释根据条件查找标签根据CSS选择器查找…...
HTTP的Header
一、HTTP Header 是什么? HTTP Header 是 HTTP 协议中的头部信息部分,位于请求或响应的起始行之后,用来在客户端(浏览器等)与服务器之间传递元信息(meta-data)(简单理解为传递信息的…...
linux虚拟机网络问题处理
yum install -y yum-utils \ > device-mapper-persistent-data \ > lvm2 --skip-broken 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&arch…...
unet算法发展历程简介
UNet是一种基于深度学习的图像分割架构,自2015年提出以来经历了多次改进和扩展,逐渐成为医学图像分割和其他精细分割任务的标杆。以下是UNet算法的主要发展历程和关键变体: 1. 原始UNet(2015) 论文: U-Net: Convoluti…...
基于华为云 ModelArts 的在线服务应用开发(Requests 模块)
基于华为云 ModelArts 的在线服务应用开发(Requests 模块) 一、本节目标 了解并掌握 Requests 模块的特点与用法学会通过 PythonRequests 访问华为云 ModelArts 在线推理服务熟悉 JSON 模块在 Python 中的数据序列化与反序列化掌握 Python 文件 I/O 的基…...
【Rust】基本概念
目录 第一个 Rust 程序:猜数字基本概念变量和可变性可变性常量变量隐藏 数据类型标量类型整型浮点型数值运算布尔型字符类型 复合类型元组数组 函数参数语句与表达式函数返回值 控制流使用 if 表达式控制条件if 表达式使用 else if 处理多重条件在 let 语句中使用 i…...
AI-Sphere-Butler之如何使用Llama factory LoRA微调Qwen2-1.5B/3B专属管家大模型
环境: AI-Sphere-Butler WSL2 英伟达4070ti 12G Win10 Ubuntu22.04 Qwen2.-1.5B/3B Llama factory llama.cpp 问题描述: AI-Sphere-Butler之如何使用Llama factory LoRA微调Qwen2-1.5B/3B管家大模型 解决方案: 一、准备数据集我这…...
C++学习之游戏服务器开发十四QT登录器实现
目录 1.界面搭建 2.登录客户端步骤分析 3.拼接登录请求实现 4.发送http请求 5.服务器登录请求处理 6.客户端处理服务器回复数据 7.注册页面启动 8.qt启动游戏程序 1.界面搭建 查询程序依赖的动态库 ldd 程序名 do 1 cdocker rm docker ps -aq 静态编译游戏服务程序&a…...
协同推荐算法实现的智能商品推荐系统 - [基于springboot +vue]
🛍️ 智能商品推荐系统 - 基于springboot vue 🚀 项目亮点 欢迎来到未来的购物体验!我们的智能商品推荐系统就像您的私人购物顾问,它能读懂您的心思,了解您的喜好,为您精心挑选最适合的商品。想象一下&am…...
【LLM】Ollama:容器化并加载本地 GGUF 模型
本教程将完整演示如何在支持多 GPU 的环境下,通过 Docker 实现 Ollama 的本地化部署,并深度整合本地 GGUF 模型。我们将构建一个具备生产可用性的容器化 LLM 服务,包含完整的存储映射、GPU 加速配置和模型管理方案。 前提与环境准备 操作系统…...
实践项目开发-hbmV4V20250407-Taro项目构建优化
Taro项目构建优化实践:大幅提升开发效率 项目背景 在开发基于ReactTaro的前端项目时,随着项目规模的增长,构建速度逐渐成为开发效率的瓶颈。通过一系列构建优化措施,成功将开发环境的构建速度提升了30%-50%,显著改善…...
MySQL中根据binlog日志进行恢复
MySQL中根据binlog日志进行恢复 排查 MySQL 的 binlog 日志问题及根据 binlog 日志进行恢复的方法一、引言二、排查 MySQL 的 binlog 日志问题(一)确认 binlog 是否开启(二)查找 binlog 文件位置和文件名模式(三&#…...
Jenkins的地位和作用
所处位置 Jenkins 是一款开源的自动化服务器,广泛应用于软件开发和测试流程中,主要用于实现持续集成(CI)和持续部署(CD)。它在开发和测试中的位置和作用可以从以下几个方面来理解: 1. 在开发和测…...
【集合】底层原理实现及各集合之间的区别
文章目录 集合2.1 介绍一下集合2.2 集合遍历的方法2.3 线程安全的集合2.4 数组和集合的区别2.5 ArrayList和LinkedList的区别2.6 ArrayList底层原理2.7 LinkedList底层原理2.8 CopyOnWriteArrayList底层原理2.9 HashSet底层原理2.10 HashMap底层原理2.11 HashTable底层原理2.12…...
软考高级-系统架构设计师 论文范文参考(二)
文章目录 论企业应用集成论软件三层结构的设计论软件设计模式的应用论软件维护及软件可维护性论信息系统安全性设计论信息系统的安全性设计(二)论信息系统的架构设计论信息系统架构设计(二) 论企业应用集成 摘要: 2016年9月,我国某省移动通信有限公司决定启动VerisB…...
