当前位置: 首页 > news >正文

【从零开始学习计算机科学】硬件设计与FPGA原理

硬件设计

硬件设计流程

在设计硬件电路之前,首先要把大的框架和架构要搞清楚,这要求我们搞清楚要实现什么功能,然后找找有否能实现同样或相似功能的参考电路板(要懂得尽量利用他人的成果,越是有经验的工程师越会懂得借鉴他人的成果)。如果你找到了的参考设计,最好还是先看懂并理解,这一方面能提高我们的电路理解能力,而且能避免设计中的错误。

在开始做硬件设计前,根据自己的项目需求,可以去找能够满足硬件功能设计的,有很多相关的参考设计。如果没有找到,也可以自行设计。

硬件电路设计的大环节必不可少,主要都要经过以下这几个流程:原理图设计、PCB设计和制作物料清单(BOM)表。原理图设计,其实就是将前面的思路转化为电路原理图。pcb涉及到实际的电路板,它根据原理图转化而来的网表(网表是沟通原理图和pcb之间的桥梁),而将具体的元器件的封装放置(布局)在电路板上,然后根据飞线(也叫预拉线)连接其电信号(布线)。完成了pcb布局布线后,要用到哪些元器件应该有所归纳,所以我们将用到BOM表。在硬件电路设计中,还需要利用一些现有的工具,比如选择一些PCB设计工具,如Altium。

以protel为例,以下为一下具体的设计步骤:

一、原理图建立+网表生成

1、原理图库建立。要将一个新元件摆放在原理图上,我们必须得建立改元件的库。库中主要定义了该新元件的管脚定义及其属性,并且以具体的图形形式来代表。

2、有了充足的库之后,就可以在原理图上画图了,按照datasheet和系统设计的要求,通过wire把相关元件连接起来。在相关的地方添加line和text注释。wire和line的区别在于,前者有电气属性,后者没有。wire适用于连接相同网络,line适用于注释图形。

3、做完这一步,就可以生成netlist了,这个netlist是原理图与pcb之间的桥梁。原理图是我们能认知的形式,电脑要将其转化为pcb,就必须将原理图转化它认识的形式netlist,然后再处理、转化为pcb。

4、得到netlist,先做ERC。ERC是电气规则检查的缩写。它能对一些原理图基本的设计错误进行排查,如多个output接在一起等问题。

5、然后就可以从netlist中得到了pcb。

6、确定板框大小。在keepout区(或mechanic区)画个板框,这将限制了你布线的区域。

**二、PCB布局布线 **

1、确定完板框之后,就该元件布局了,布局这步极为关键。它往往决定了后期布线的难易。哪些元器件该摆正面,哪些元件该摆背面,都要有所考量。

2、接下来就是布线。这与布局往往是互动的。有经验的人往往在开始就能看出哪些地方能布线成功。如果有些地方难以布线还需要改动布局。对于fpga设计来说往往还要改动原理图来使布线更加顺畅。布线和布局问题涉及的因素很多,对于高速数字部分,因为牵扯到信号完整性问题而变得复杂,但往往这些问题又是难以定量或即使定量也难以计算的。所以,在信号频率不是很高的情况下,应以布通为第一原则。

3、使用DRC检查,这是一定要检查的。DRC对于布线完成覆盖率以及规则违反的地方都会有所标注,按照这个再一一的排查,修正。

4、最后的pcb文件转成gerber文件就可交付pcb生产了。

5、准备bom表,其一般能直接从原理图中导出。但是需要注意的是,原理图中哪些部分元件该上,哪些部分元件不该上,要做到心理有数。

三、电路板调试

1、拿到板第一步做什么,先拿万用表看看关键网络是否有不正常,主要是看电源与地之间有否短)。其实短路与否不光pcb有关,在生产制作的任何一个环节可能导致这个问题。

2、若电源网络没有短路,则检查电源输出是否是自己理想的值。

3、若电源网络短路了,这需要我们仔细检查自己原理图是否有可能这样的情况,同时结合割线的方法一步步排查倒底是什么地方短路了,是pcb的问题,还是装配的问题,还是自己设计的问题。

4、若电源输出正常了,还需要检查一下电源的输出跳变是否正常。也就是抓取开电的瞬间,看看电源从无到有的情况。

四、电源设计

电源设计是整个电路板最重要的一环。在电源设计用得最多的场合是,从一个稳定的高电压得到一个稳定的低电压。这也就是经常说的DC/DC,其中用得最多的电源稳压芯片有两种,一种叫LDO(低压差线性稳压器),另一种叫PWM(脉宽调制开关电源)。

而目前,基本上全部的硬件都是通过EDA工具进行设计的。

在电子设计自动化出现之前,设计人员必须手工完成集成电路的设计、布线等工作,这是因为当时所谓集成电路的复杂程度远不及现在。工业界开始使用几何学方法来制造用于电路光绘(photoplotter)的胶带。到了1970年代中期,开发人应尝试将整个设计过程自动化,而不仅仅满足于自动完成掩膜草图。第一个电路布局、布线工具研发成功。设计自动化研讨会(Design Automation Conference)在这一时期被创立,旨在促进电子设计自动化的发展。

电子设计自动化发展的下一个重要阶段以卡弗尔·米德(Carver Mead)和琳·康维于1980年发表的论文《超大规模集成电路系统导论》(Introduction to VLSI Systems)为标志。这一篇具有重大意义的论文提出了通过编程语言来进行芯片设计的新思想。如果这一想法得到实现,芯片设计的复杂程度可以得到显著提升。这主要得益于用来进行集成电路逻辑仿真、功能验证的工具的性能得到相当的改善。随着计算机仿真技术的发展,设计项目可以在构建实际硬件电路之前进行仿真,芯片布局、布线对人工设计的要求降低,而且软件错误率不断降低。直至今日,尽管所用的语言和工具仍然不断在发展,但是通过编程语言来设计、验证电路预期行为,利用工具软件综合得到低抽象级(或称“后端”)物理设计的这种途径,仍然是数字集成电路设计的基础。

从1981年开始,电子设计自动化逐渐开始商业化。

1984年的设计自动化会议(Design Automation Conference)上还举办了第一个以电子设计自动化为主题的销售展览。Gateway设计自动化在1986年推出了一种硬件描述语言Verilog,这种语言在现在是最流行的高级抽象设计语言。1987年,在美国国防部的资助下,另一种硬件描述语言VHDL被创造出来。现代的电子设计自动化设计工具可以识别、读取不同类型的硬件描述。根据这些语言规范产生的各种仿真系统迅速被推出,使得设计人员可对设计的芯片进行直接仿真。后来,技术的发展更侧重于逻辑综合。

数字集成电路的设计都比较模块化(参见集成电路设计、设计收敛(Design closure)和设计流(Design flow (EDA)))。半导体器件制造工艺需要标准化的设计描述,高抽象级的描述将被编译为信息单元(cell)的形式。设计人员在进行逻辑设计时尚无需考虑信息单元的具体硬件工艺。利用特定的集成电路制造工艺来实现硬件电路,信息单元就会实施预定义的逻辑或其他电子功能。半导体硬件厂商大多会为它们制造的元件提供“元件库”,并提供相应的标准化仿真模型。相比数字的电子设计自动化工具,模拟系统的电子设计自动化工具大多并非模块化的,这是因为模拟电路的功能更加复杂,而且不同部分的相互影响较强,而且作用规律复杂,电子元件大多没有那么理想。Verilog AMS就是一种用于模拟电子设计的硬件描述语言。此文,设计人员可以使用硬件验证语言来完成项目的验证工作最新的发展趋势是将集描述语言、验证语言集成为一体,典型的例子有SystemVerilog。

随着集成电路规模的扩大、半导体技术的发展,电子设计自动化的重要性急剧增加。这些工具的使用者包括半导体器件制造中心的硬件技术人员,他们的工作是操作半导体器件制造设备并管理整个工作车间。一些以设计为主要业务的公司,也会使用电子设计自动化软件来评估制造部门是否能够适应新的设计任务。电子设计自动化工具还被用来将设计的功能导入到类似现场可编程逻辑门阵列的半定制可编程逻辑器件,或者生产全定制的专用集成电路。

现今数字电路非常模组化(参见集成电路设计、设计收敛、设计流程 (EDA)),产线最前端将设计流程标准化,把设计流程区分为许多“细胞”(cells),而暂不考虑技术,接着细胞则以特定的集成电路技术实现逻辑或其他电子功能。制造商通常会提供组件库(libraries of components),以及符合标准模拟工具的模拟模型给生产流程。模拟 EDA 工具较不模组化,因为它需要更多的功能,零件间需要更多的互动,而零件一般说较不理想。

在电子产业中,由于半导体产业的规模日益扩大,EDA 扮演越来越重要的角色。使用这项技术的厂商多是从事半导体器件制造的代工制造商,以及使用 EDA 模拟软件以评估生产情况的设计服务公司。目前,EDA 工具也应用在现场可编程逻辑门阵列的程序设计上。

EDA工具中重要的一部分便是工艺映射,工艺映射主要有以下三步:

分解。将综合优化后的布尔网络转换成具有特定K输入的约束的布尔网络。由于要使用K-LUT,布尔网络必须满足每个节点的扇入不超过K。

划分。将只含有原子门的网络划分为具有约束条件的块,每个块代表复杂的门,即查找表。其中约束条件是事件延时和查找表的数量。

映射。利用上一步的划分获得复杂门的具体实现,即调用设备数据库中的具体组件来来实现复杂门。

高层次综合(High Level Synthesis)

目前,设计复杂硬件的EDA工具是HLS。高层次综合(High-level Synthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。所谓的高层次语言,包括C、C++、SystemC等,通常有着较高的抽象度,并且往往不具有时钟或时序的概念。相比之下,诸如Verilog、VHDL、SystemVerilog等低层次语言,通常用来描述时钟周期精确(cycle-accurate)的寄存器传输级电路模型,这也是当前ASIC或FPGA设计最为普遍使用的电路建模和描述方法。

然而,HLS技术在近十年来获得了大量的关注和飞速的发展,尤其是在FPGA领域。纵观近年来各大FPGA学术会议,HLS一直是学术界和工业界研究最集中的领域之一。

HLS实现了一种将高层次功能定义转换成优化的寄存器传输层(RTL)描述的、提升硬件实现效率的自动化设计流程。其优点有以下三点:降低设计复杂度、加快仿真速度;一份源代码可以实现多份硬件;快速的设计空间探索以及更好的结果品质。

高层次综合在C语言的基础上进行了硬件专用化,其具有数据类型定制,包含任意精度的定点数、定制的浮点数;通信接口定制,包含流式接口、存储映射的I/O;存储定制化,包含数组划分、数据重用;计算定制化,包含循环展开(ILP/DLP技术),流水线(ILP/DLP/TLP技术),数据流(TLP技术),多线程(DLP/TLP技术)等等功能。

目前,可综合的C/C++子集如下:

1,基础类型:(u)char,(u)short,(u)int,(u)long,

相关文章:

【从零开始学习计算机科学】硬件设计与FPGA原理

硬件设计 硬件设计流程 在设计硬件电路之前,首先要把大的框架和架构要搞清楚,这要求我们搞清楚要实现什么功能,然后找找有否能实现同样或相似功能的参考电路板(要懂得尽量利用他人的成果,越是有经验的工程师越会懂得借鉴他人的成果)。如果你找到了的参考设计,最好还是…...

项目中同时使用Redis(lettuce)和Redisson的报错

温馨提示:图片有点小,可以放大页面进行查看... 问题1:版本冲突 直接上图,这个错表示依赖版本不匹配问题,我本地SpringBoot用的是2.7,但是Redisson版本用的3.32.5。 我们通过点击 artifactId跟进去 发现它…...

leetcode-数组

26. 删除有序数组中的重复项 已解答 简单 相关标签 相关企业 提示 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 n…...

人工智能里的深度学习指的是什么?

深度学习(Deep Learning, 简称DL)是机器学习领域的一个重要分支,它通过构建和训练深层神经网络模型,从大量数据中自动学习和提取特征,以实现复杂任务的自动化处理和决策。以下是关于深度学习的详细介绍: 一…...

docker本地部署ollama

启动ollama容器 1.使用该命令启动CPU版运行本地AI模型 docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama 2.此命令用于启动GPU版本运行AI模型 前提是笔记本已配置NVIDIA的GPU驱动,可在shell中输入nvidia-smi查看详细情况…...

LangChain构建语言模型驱动应用的强大框架

LangChain 核心功能与组件链(Chains)记忆(Memory)提示模板(Prompts)代理(Agents)数据检索(Indexes) 应用场景文档问答自动化工作流知识管理系统 发展历程总结…...

2025-03-08 学习记录--C/C++-PTA 习题10-2 递归求阶乘和

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h>double fact( int n ); double facts…...

浅谈 DeepSeek 对 DBA 的影响

引言&#xff1a; 在人工智能技术飞速发展的背景下&#xff0c;DeepSeek 作为一款基于混合专家模型&#xff08;MoE&#xff09;和强化学习技术的大语言模型&#xff0c;正在重塑传统数据库管理&#xff08;DBA&#xff09;的工作模式。通过结合其强大的自然语言处理能力、推理…...

AI如何重塑运维体系

AI大模型的引入正在从被动响应到主动预防、从经验驱动到数据智能全面重构运维体系。 一、颠覆传统运维模式的技术革新 故障预测&#xff1a;从“救火”到“防火” AI大模型通过整合历史日志、硬件状态、网络流量等多模态数据&#xff0c;结合时间序列分析&#xff08;如LSTM&am…...

linux 内网下载 yum 依赖问题

1.上传系统镜像 创建系统目录&#xff0c;用户存放镜像&#xff0c;如下&#xff1a; mkdir /mnt/iso上传 iso 文件到 /mnt/iso 文件夹下。 2.挂载系统镜像 安装镜像至 /mnt/cdrom 目录中 mount -o loop /mnt/iso/CentOS-7-x86_64-Minimal-xx.iso /mnt/cdrom3.修改yum源配…...

mapbox开发小技巧

自定义图标 // 1、单个图标 const url ./static/assets/symbols/code24x24/VIDEO.png // 图标路径 map.loadImage(url ,(error, image) > {if (error) throw errormap.addImage(video-icon, image) })// 2、雪碧图利用canvas // json和png图片 function getStyleImage(fil…...

DeepSeek×博云AIOS:突破算力桎梏,开启AI普惠新纪元

背景 在全球人工智能技术高速迭代的背景下&#xff0c;算力成本高企、异构资源适配复杂、模型部署效率低下等问题&#xff0c;始终是制约企业AI规模化应用的关键。 DeepSeek以创新技术直击产业痛点&#xff0c;而博云先进算力管理平台AIOS的全面适配&#xff0c;则为这一技术…...

Java高频面试之集合-07

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;ArrayList 和 Vector 的区别是什么&#xff1f; ArrayList 与 Vector 的区别详解 ArrayList 和 Vector 都是 Java 中基于…...

Redis- 切片集群

切片集群 切片集群什么是Redis Cluster吗&#xff1f;为什么需要切片集群&#xff1f;Redis Cluster的数据分片机制是怎样的&#xff1f;哈希槽的算法是什么基本算法流程 待填坑 切片集群 什么是Redis Cluster吗&#xff1f;为什么需要切片集群&#xff1f; Redis Cluster是R…...

【项目日记(十)】瓶颈分析与使用基数树优化

前言 上一期我们对整个项目进行了细节部分的优化&#xff0c;并在最后测试了多线程环境下和malloc的性能对比测试&#xff0c;发现malloc有时候还是更胜一筹的&#xff0c;基于此我们进行对我们的内存池进行瓶颈分析与优化。 目录 前言 一、项目瓶颈分析 VS编译器下性能分…...

后台管理系统比较全面的分析对比

以下是主流的 后台管理系统模板 分类与技术选型指南&#xff0c;涵盖开源、商业及全栈解决方案&#xff0c;可根据项目需求灵活选择&#xff1a; 一、开源免费模板 1. React 技术栈 Ant Design Pro 官网&#xff1a;pro.ant.design特点&#xff1a;阿里出品&#xff0c;内置 R…...

HCIA复习拓扑实验

一.拓扑图 二.需求 1.学校内部的HTTP客户端可以正常通过域名www.baidu.com访问到百度网络中HTTP服务器 2.学校网络内部网段基于192.168.1.0/24划分&#xff0c;PC1可以正常访问3.3.3.0/24网段&#xff0c;但是PC2不允许 3.学校内部路由使用静态路由&#xff0c;R1和R2之间两…...

TI毫米波雷达开发 —— 串口输出数据解析

TI毫米波雷达开发 —— 串口输出解析 TLV协议协议概述HeaderBodyPadding TI 毫米波雷达芯片计算的结果数据都会从UART发出供上位机进行解析并展示。解析和展示是两个不同的概念&#xff0c;解析指提取有效数据并转换成常见的度量值。展示指数据的可视化。 由于雷达这个领域的特…...

Docker Desktop 4.38 安装与配置全流程指南(Windows平台)

一、软件定位与特性 Docker Desktop 是容器化应用开发与部署的一体化工具&#xff0c;支持在本地环境创建、管理和运行Docker容器。4.38版本新增GPU加速支持、WSL 2性能优化和Kubernetes 1.28集群管理功能&#xff0c;适用于微服务开发、CI/CD流水线搭建等场景。 二、安装环境…...

【AD】5-16 泪滴的添加

1.工具—滴泪&#xff08;快捷键TE&#xff09;...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...