首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
Search
1
在IC617中进行xa+vcs数模混仿
81 阅读
2
科普:Memory Compiler生成的Register file和SRAM有何区别?
73 阅读
3
virtuoso和empyrean alps模拟仿真和混仿教程
73 阅读
4
后仿中$setup,$hold与$setuphold
44 阅读
5
文档内容搜索哪家强? 15款文件搜索软件横向评测
35 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
python
Docker
vscode
linux
systemverilog
vcs
STM32
PyQT
EDA
FPGA
gvim
cadence
Alist
xilinx
UVM
uos
macos
package
MCU
risc-v
bennyhe
累计撰写
378
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
搜索到
40
篇与
的结果
2025-08-08
ASIC设计学习总结(包括:工具及书籍文档推荐 、软件环境搭建、RTL设计、验证、工艺库说明、形式验证、综合等共12部分)
原创tfpwl——lj EET0P2019年02月07日09:57之前介绍过了了芯片设计全流程介绍(芯片设计全流程详解 包括:正向流程和反向流程)。由于当时的经验十分有限,所以对于正向设计,特别是对于从RTL级代码开始的设计介绍得不是很清楚。经过这一段时间的学习,对于从RTL级代码开始的Asic芯片设计有了更多的认识,现在总结一下,一方面给自己整理思路,另一方面也希望抛砖引玉,让大家各抒己见,分享一下各自的设计经验,促进我们的共同进步。笔者原本打算详细的介绍学习中的收获,将各类知识点写成文章,但经过反复考量之后,发现这种详细照搬别人知识的做法其实没什么意思。与其原封不动的转述别人书中的内容,不如直接提供参阅的书目,这样就免得在转述别人的知识的时候误解作者想要表达的真正意义。所以本系列的文章,笔者将个人学习的经验加以整合,将经验知识点罗列出来,并附加所参阅的书籍。另外涉及到实践操作过程的章节,将会把具体使用的工具罗列出来,并附上一些参考性的代码和脚本。本系列文章主要分为十二个部分,分别为:(一)工具及书籍文档推荐(二)软件环境搭建(三)RTL设计(四)验证(五)工艺库说明(六)形式验证(七)综合(八)可测性设计(九)低功耗设计(十)静态时序分析(十一)数模混合仿真(十二)可测性设计介绍这么多,不是显得个人有多少经验,其实本人也只是菜鸟,关注这么多内容,主要是为了让自己的知识储备更全面一下,这样考虑设计问题的时候遗漏的东西会更少一些。在本系列文章中,每个章节的详略是不同的,主要是跟个人工作经验有关,有介绍得简单的地方,麻烦大家帮忙补充。每个部分的内容基本采用“理论+工具+示例”的行文结构,有些EDA工具笔者没有使用过的就暂不能提供实例了。(一)工具及书籍文档一、前言对于RTL级的Asic设计所涉及到的软件是非常之多的,笔者也并没有每一个都使用过。二、工具介绍RTL代码规则检查工具:nlint,spyglass。这两个软件主要是用于检查代码的语法和语义错误的,并且比其他的工具能检测出更多的问题,比如说命名规格,时序风险,功耗等。详细介绍请参考软件的使用教程,nlint有Windows版和linux版,软件的linux版本和使用教程可以在eetop上搜索到。RTL代码仿真工具:这类仿真工具有较多的组合,比如说:qustasim/modelsim,NC_verilog+Verdi,VCS+DVE,VCS+Verdi等等。目前笔者使用的组合是VCS+Verdi。这两个软件是业内主流的仿真软件,还可以结合UVM库进行仿真,当然这是验证方法学的内容。综合工具:Design Complier。最常用的综合工具,没有之一,该软件主要是将RTL代码“翻译+优化+映射”成与工艺库对应的门级网表。并且还包含功耗分析软件Power Complier和边界扫描寄存器插入软件 BSD Complier。可测性设计:DFT Complier + TetraMAX。软件在DC之后使用,DFT Complier 用于将设计的内部寄存器替换成扫描寄存器并组成一条或多条扫描链,TetraMAX是用于自动生成测试向量的。形式验证工具:Formality、Conforml(candence出品)。等价性验证工具,主要是在DFT Complier插入扫描链之后进行验证,另外,在版图综合时钟树,插入BUFFER之后,也需要用该工具进行等效性验证。静态时序分析工具: Prime Time。业界最常用的时序分析工具之一,该软件包括功耗分析PTPX工具,功耗分析必备。cadence也有对应的时序分析工具——Encounter Timing System。自动布局布线工具(APR):ICC,Enconter。其中Encounter是Cadence公司的。数模混合仿真: nanosim + VCS,nanosim的升级版为XA。这是一篇有关于synopsysEDA工具软件的介绍,希望对于EDA软件的用途不清楚的伙伴有帮助。http://bbs.eetop.cn/thread-151171-1-1.html三、书籍推荐《Verilog HDL 硬件描述语言》《设计与验证Verilog HDL》《企业用verilog代码风格规范》《verilog语言编码风格》《verilogHDL代码风格规范》《Verilog HDL高级数字设计》《Soc设计方法与实现》《高级ASIC芯片综合》《华为Verilog典型电路设计》《数字IC系统设计》《数字集成电路--电路、系统与设计》《专用集成电路设计实用教程》《集成电路静态时序分析与建模》《CMOS集成电路后端设计与实战》《makefile教程》《鸟哥的私房菜》《SystemVerilog与功能验证》《UVM实战》《通信IC设计(上下册)》《数字图像处理与图像通信》《数字信号处理的FPGA实现中文版》各类Synopsy userguide,EETOP有16年版的。三、工艺库说明使用DC,PT,FM,ICC或者ENCOUNTER软件需要工艺库文件,主要包括数字逻辑单元文件,符号库,综合库,寄生电容参数库,版图文件LEF,milkway库等等。有关工艺库各文件夹的作用,笔者将会在将“工艺库说明”的章节进行详细介绍,如果有遗漏还请大家包涵。(二)环境搭建一、前言先介绍一下个人的使用环境。由于网络上已经存在很多安装教程,笔者就不再废话,直接给出他们的连接,并附带其他需要注意的关键点,如果有安装问题,请追问。Synopsys软件安装包下载地址在笔者前一篇文章“工具及书籍文档”,都是来自EETOP的大牛们提供的。在安装的过程中需要具备一些Linux系统的使用经验,不然会很难理解这些步骤是做什么的。个人的环境如下:1、vmware 12;2、RHEL6.5系统;3、synopsys软件,Lib Complier,VCS,Verdi,Desgin Complier,PrimeTime,Formality,ICC。一共7个软件,几乎都是15年版本的。二、步骤环境搭建需要准备以下三件事:1,vmware12虚拟机安装;安装教程如下。https://jingyan.baidu.com/article/215817f78879c21edb142379.html2, RHEL6.5操作系统安装,当然也可以使用CentOs6.5,安装教程如下。http://www.linuxidc.com/Linux/2016-05/131701.htm ——》RHEL6.5https://www.kafan.cn/edu/488101.html ——》Centos6.5a、安装vmware tools。在虚拟机中把系统安装好了之后,需要安装vmware tools,安装教程如下,http://www.linuxidc.com/Linux/2015-08/122031.htm ,安装该软件之后才可以启用共享文件夹以利于RHEL6.5与windows系统进行文件交换。b、更新YUM源,RHEL和Centos都需要更新YUM源,操作步骤一致,YUM是一个链接到软件库的一个软件,随后安装软件需要用到。https://jingyan.baidu.com/article/b24f6c8239c6aa86bee5da60.html注意:该教程某些步骤可能会失效,需要结合自己具体的情况使用。安装好YUM之后,可以使用yum install gvim命令测试一下。c、安装GCC,G++,这两个软件在VCS+Verdi仿真时会调用到。命令:yum install gcc命令:yum install gcc-c++3、 Synopsys软件安装Synopsys软件安装教程,链接如下:https://wenku.baidu.com/view/c02c271d9b6648d7c0c74670.htmlhttp://bbs.eetop.cn/thread-553702-1-1.html高版本和低版本的Synopsy软件安装步骤一致,区别在于license的问题。用EETOP上的最新license即可使用15版的软件。在使用RHEL操作系统需要懂一些SHELL脚本,makefile脚本,这样便于提高操作效率,后文会提到。注意:此外还需要修改四个文件的hostname,使得这四处的hostname保持一致。a、synopsys.dat中的第一行hostname;b、synopsys.bashrc中的export SNPSLMD_LICENSE_FILE=27000@localhost行,“@”符号后的hostname;c、/etc/sysconfig/network配置文件中hostname;d、/etc/hosts配置文件中的127.0.0.1这一行的 ,第三个参数hostname;这四个hostname一定要一致,才能正确启动DC,PT,FM,ICC,VCS,VERDI软件。在启动DC,PT,FM,ICC,VCS,VERDI软件之前需要先启动Synopsys的license管理器。有关软件的使用教程可以参考官方的userguide。或者EETOP上,小伙伴们的教程。(三)工艺库说明(略,请点击阅读原文查看)(四)RTL设计数字电路设计RTL设计所需要的理论知识庞杂而繁多,本文所介绍的内容均由个人参阅了许多书籍之后加以整合的,很多内容本人也不是很熟,只是罗列出来作为参考学习的资料。主要有三个部分的内容,第一部分主要是数字电路设计的基础,这是在大学时期应该予以掌握的内容,第二部分是进阶的学习内容附带一个专业方向——MCU,第三部分是有关于各类算法处理的专业知识,需要更多的复合型知识,例如通信方向需要有较好的数学功底—傅立叶变换。由于这部分内容实在太多,个人没有能力也没有必要将每一部分的内容都详细的罗列出来,所以这里只是整理出一些需要把握的关键点。至于具体的内容,还请大家按照个人需求,参阅推荐的各类书籍。一、基础组合逻辑与时序逻辑:布尔代数,卡诺图,基本与非门,锁存器,触发器,冲突与冒险。——《Verilog HDL高级数字设计》Verilog语言基础:数值类型,表达式与运算符,assign语句,always语句,if-else语句,case语句,阻塞与非阻塞。——《Verilog HDL 硬件描述语言》状态机:一段式、二段式、三段式状态机的区别;独热码、二进制码、格雷码的区别及应用场合。——《Verilog HDL高级数字设计》同步电路和异步电路:两者的本质,异步电路跨时钟域,亚稳态。——IC_learner博客复位与时钟:同步复位、异步复位、异步复位同步释放的区别,时钟分频——二分频、三分频、任意整数分频,门控时钟,时钟切换。——《深入浅出玩转FPGA》,百度文档数据通路与控制通路:本质上任何数字电路都可以划分为简单的两种类型——控制通路与数据通路,控制通路的核心是状态机,数据通路是各类算术处理算法、并行总线等等。——《Verilog HDL高级数字设计》Testbench验证:无论什么电路,最终都需要验证其功能的正确性。Testbench的结构主要由a,复位和时钟,b,激励产生电路,c,系统监视器,d,结果比较电路,e,波形产生函数,f,待验证的MODULE等主要模块组成,其中,b是最重要的模块,一切验证都是从激励信号开始的。——《verilogHDL代码风格规范》。初学者推荐使用windows版qustasim 或者modelsim 仿真工具,简单又方便,以后可学习使用VCS+Verdi(比较折腾人)。二、进阶代码风格:良好的代码风格很有必要,参考一下企业用的代码风格,有助于个人养成良好的编码习惯。——《企业用verilog代码风格规范》《verilog语言编码风格》基本常用电路:具备以上庞杂的理论基础之后,需要积累一些常用的基础电路。——《华为Verilog典型电路设计》接口电路,I2C,UART,SPI:接口电路是中小规模芯片常用的对外接口电路,无论是与上位机(PC)通信还是控制其它芯片。I2C从机常用于EEPROM芯片中,主机可以直接使用单片机模拟,ARM单片机直接集成了I2C主机,I2C的IP代码网络上有现成的;UART是全双工电路,宏晶单片机通过UART进行烧录,SPI电路最常用于SD卡上。——《Verilog HDL高级数字设计》《通信IC设计(上下册)》有简单的UART和SPI的代码。RISC,8051 MCU ——IP:通过下载EETOP上相关的IP及文档来学习。 三、专业数值的表示方法:浮点数,定点数的表示办法——《Verilog HDL高级数字设计》《通信IC设计(上下册)》算术处理算法:浮点数的加法、乘法电路设计。——《Verilog HDL高级数字设计》通信算法:FIR滤波器,IIR滤波器,傅立叶变换,冗余编码等等各种通信方向必须掌握的。——《通信IC设计(上下册)》《数字信号处理的FPGA实现》图像处理算法:静态图像,动态图像去噪。——《数字图像处理与图像通信》SOC:SOC类芯片的组成结构,AMBA总线,IP复用,SV验证。——《Soc设计方法与实现》四、工具:文档代码编辑器:GVIM,Notpad++RTL设计规则检查:Nlin,spyglass(五)验证(1)一、前言借助于前文RTL设计中提到的UART代码,本章节将在后面给出对应的testbench以及说明如何在questa/modelsim、VCS+DVE、VCS+Verdi工具中使用。推荐书籍:《vcs User Guide 2016》二、TestbenchTestbench的结构,正如上文提到的,主要由a,复位和时钟,b,激励产生电路,c,系统监视器,d,结果比较电路,e,波形产生函数,f,待验证的MODULE,g,控制仿真时间这几个部分组成。本章节提供的testbench只包含a,b,e,f,g部分,至于c,d更高级的内容,暂时无法涉及,questa/modelsim将不会使用到e部分的代码,使用questa/modelsim仿真时要屏蔽掉全部e段的内容。同样,在使用VCS+DVE进行仿真时要屏蔽VCS+VERDI的e段内容三、工具使用3.1modelsim仿真对于modelsim仿真, 仿真文件包含:1,verilog源文件(前文已全部提供);2,testbench文件(后面会提供)modelsim使用教程:https://wenku.baidu.com/view/db638e25b9d528ea81c779cc.html有关在modelsim软件中如何使用本示例请参考以上教程。仿真结果图:3.2 VCS+DVE和VCS+VERDI仿真对于VCS+DVE和VCS+VERDI, 仿真文件包含:1,verilog源文件(前文已全部提供);2,testbench文件(后面会提供),3,包含verilog、testbench文件路径的uart.f文件(必要时需自行修改),4,makefile仿真启动文件。在终端中运行make命令即可运行仿真,一定要注意文件路径问题。makefile教程:http://blog.csdn.net/liang13664759/article/details/1771246VCS+DVE 使用教程,https://wenku.baidu.com/view/48912cf558fb770bf68a55b4.htmlDVE是VCS软件自带的波形查看器。本章实例对应的VCS+DVE makefile启动脚本:all:VCS DVE VCS: vcs -f uart.f -full64 -debug_all -R DVE: dve -vpd wave.vpd -mode64 将以上内容复制到文本文件中,并将该文本文件改名为makeflile。uart.f内容:/home/Lance/synopsys/UART/testbench.v //必须放在文件中的第一行。/home/Lance/synopsys/UART/UART_XMTR.v/home/Lance/synopsys/UART/Control_Unit.v /home/Lance/synopsys/UART/Datapath_Unit.v/home/Lance/synopsys/UART/UART_RCVR.v/home/Lance/synopsys/UART/Control_Unit2.v/home/Lance/synopsys/UART/Datapath_Unit2.v DVE波形查看器启动命令:dve -vpd wave.vpd -mode64此外,在运行makefile启动脚本之前,还需要在testbench中添加如下代码:initialbegin $vcdplusfile("wave.vpd");//保存的波形文件名字 $vcdpluson(1,tb);//tb对应testbench文件的内的module名字 end该段代码为e,波形产生函数,主要是生成DVE波形查看器使用的VPD格式的波形文件。仿真结果图:VCS+Verdi,Verdi是debussy的升级版,是一个独立的软件,这对软件组合使用方式与VCS+DVE差不多。VCS+Verdi makefile启动脚本:all:VCS VERDI VCS:vcs +v2k -sverilog -debug_all -P /usr/synopsys/Verdi/K-2015.09/share/PLI/VCS/LINUX64/novas.tab /usr/synopsys/Verdi/K-2015.09/share/PLI/VCS/LINUX64/pli.a +vcs+lic+wait \ -f uart.f -y ./ +libext+.v -full64 -RVERDI: verdi -f uart.f -ssf wave.fsdb & 将以上内容复制到文本文件中,并将该文本文件改名为makeflile。注意:-P /usr/synopsys/Verdi/K-2015.09/share/PLI/VCS/LINUX64/novas.tab /usr/synopsys/Verdi/K-2015.09/share/PLI/VCS/LINUX64/pli.a主要是调用Verdi的接口函数以生成fsdb波形。 Verdi波形查看器启动命令:verdi -f uart.f -ssf wave.fsdb &此外,在运行makefile启动命令前,还需要在testbench中添加如下代码:initialbegin $fsdbDumpfile("wave.fsdb"); $fsdbDumpvars(0,tb); end 以生成Verdi波形查看器使用的FSDB格式的波形文件。注意: 启动脚本相关问题,需要学习makefile有关内容,有关VCS和Verdi的详细使用教程,还请参考其它资料。 (七) 综合(八)形式验证(九)数模混合仿真(十)静态时序分析(十一)低功耗设计(十二)可测性设计(由于篇幅关系,以上章节请点击阅读原文前往作者博客查看)推荐阅读:关注EETOP公众号,后台输入 芯片,查看如下文章ASIC前后端设计经典的细节讲解IC大牛10多年的设计分享:数字典型电路知识结构地图及代码实现关于华为海思,这篇文章值得一看俄国没有高端芯片,为什么却能造出一流武器?别拦我,我要做芯片!芯片春秋·ARM传中国芯酸往事印度芯酸往事国防军工芯片行业深度报告一位美国芯片公司华人高管对中国芯片行业的思考学习、积累、交流-IC设计高手的成长之路女生学微电子是一种什么体验?MIPS架构开放了,10天设计一款完全免费的MIPS处理器(附源码)性能之殇:从冯·诺依曼瓶颈谈起AI芯片设计与开发概览AI 芯片和传统芯片有何区别?一个资深工程师老王关于AI芯片的技术感悟隔隔壁老王:AI芯片与她怎么选?终于有人把云计算、大数据和人工智能讲明白了!尺寸减半、功率翻番!——氮化镓技术的现在和未来逻辑综合 Design Compiler 资料大全集成电路制造技术简史版图中Metal专题——线宽选择麒麟980内核照片:NPU在哪呢?有哪些只有IC工程师才能get到的梗?为什么7nm工艺制程这么难?从7nm看芯片行业的“贫富差距”什么是台积电的SoIC? RISC-V打入主流市场的诸多问题RISC-V架构有何优势?关于RISC-V 终于有人讲明白了!ASIC低功耗设计实例分析及书籍推荐ASIC设计学习总结之可测性设计及书籍推荐ASIC设计学习总结之静态时序分析概要及书籍推荐ASIC设计学习总结之工具及书籍文档小芯片大价值 | ASIC工程师如此值钱到底为什么?芯片面积估计方法简介自主研发通信芯片有多难?通信行业老兵告诉你,没那么简单!RISC-V精简到何种程度?能省的都省了!多核CPU设计及RISC-V相关资料时序设计与约束资料汇总模拟版图讲义GDSII转DEF的flow简介机器学习将越来越依赖FPGA和SoCVerilog基本功之:流水线设计Pipeline Design先进封装发展趋势分析PPT先进封装发展现状分析PPT可测试性设计与ATPG麒麟980是如何诞生的?敢于失败,勇于尝试!(附:华为早期型号处理器研发过程)IC模拟版图设计讲义 Verilog CPU设计实例。。。。(共260篇)
2025年08月08日
0 阅读
0 评论
0 点赞
2025-08-07
IoT的核心:盘点下一代超低功耗节点黑科技
李飞的说2018年08月27日08:09随着物联网的逐渐铺开,人们已经在生活中看到了越来越多的物联网模块:智能水表,共享单车,等等。目前的物联网仍然主要由运营商推动,物联网模块需要使用标准蜂窝协议与基站通讯。由于基站需要覆盖尽可能大的面积,因此物联网模块需要能做到在距离基站很远时仍能通讯,这就对于物联网模块的射频发射功率有了很高的要求;从另一个角度来说,物联网模块在做无线通讯时仍然需要消耗高达30mA的电流,这使得目前的物联网模组仍然需要配合较高容量的电池(如五号电池)才能工作,这也导致了物联网模组的尺寸很难做小。为了能进一步普及物联网,必须克服这个功耗以及尺寸的限制。例如,如果未来要把物联网做到植入人体内,则不可能再搭配五号电池,而必须使用更小的电池甚至使用能量获取系统从环境中获取能量彻底摆脱电池的限制。为了实现这个目标,从通讯协议上说,可以使用更低功耗的自组网技术,类似BLE;而从电路实现上,则必须使用创新电路来降低功耗。能量获取技术根据之前的讨论,目前电池的尺寸和成本都已经成为了限制IoT设备近一步进入潜在市场的瓶颈。那么,有没有可能使用从环境中获得能量来支持物联网节点工作呢?这种从环境中获取能量来支持物联网节点工作的模块叫做“能量获取”(energy harvesting),目前能量获取电路芯片的研究已经成为了研究领域的热门方向。目前最成熟的能量获取系统可以说是太阳能电池。传统太阳能电池能提供较好的能量获取效率,但是付出的代价是难以集成到CMOS芯片上。最近,不少研究机构都在使用新型CMOS太阳能电池,从而可以和物联网节点的其他模块集成到同一块芯片上,大大增加了集成度并减小模组尺寸。当然,集成在CMOS芯片上的太阳能电池需要付出低能量输出的代价,目前常见的CMOS片上太阳能电池在室内灯光下能提供nW等级的功率输出,而在强光下能提供uW级别的功率输出,这就对物联网模组的整体功耗优化提出了很高的要求。另一方面,也可以将能量获取与小尺寸微型电池配合使用,当光照较好时使用太阳能电池而在光照较弱时使用备用电池,从而提升整体物联网模组的电池寿命。除了太阳能电池外,另一个广为人知的环境能量就是WiFi信号。今年ISSCC上,来自俄勒冈州立大学的研究组发表了从环境中的WiFi信号获取能量的芯片。先来点背景知识:WiFi的最大发射功率是30dBm(即1W),在简单的环境里(即没有遮挡等)信号功率随着与发射设备的距离平方衰减,在距离3m左右的距离信号功率就衰减到了1uW(-30dBm)左右,而如果有物体遮挡则会导致功率更小。俄勒冈州立大学发表的论文中,芯片配合直径为1.5cm的天线可以在非常低的无线信号功率(-33dBm即500nW)下也能工作给电池充电,能量获取效率在5-10%左右(即在距离发射源3m的情况下输出功率在50nW左右)。因此,WiFi信号也可以用来给物联网模组提供能量,但是其输出功率在现实的距离上也不大,同样也需要节点模组对于功耗做深度优化。另外,机械能也可以作为物联网节点的能量获取来源。压电效应可以把机械能转换为电能,从而使用压电材料(例如压电MEMS)就能为物联网节点充电。使用压电材料做能量源的典型应用包括各种智能城市和工业应用,例如当有车压过减速带的时候,减速带下的物联网传感器上的压电材料可以利用车辆压力的机械能给传感器充电并唤醒传感器,从而实现车辆数量统计等。这样,机械压力即可以作为需要测量的信号,其本身又可以作为能量源,所以在没有信号的时候就无需浪费能量了!压电材料的输出功率随着机械能的大小不同会有很大的区别,一般在nW-mW的数量级范围。唤醒式无线系统传统的IoT无线收发系统使用的往往是周期性通讯或主动事件驱动通讯的方案。周期性通讯指的是IoT节点定期打开与中心节点通讯,并在其他时间休眠;事件驱动通讯则是指IoT节点仅仅在传感器监测到特定事件时才与中心节点通讯,而其它时候都休眠。在这两种模式中,都需要IoT节点主动与中心节点建立连接并通讯。然而,这个建立连接的过程是非常消耗能量的。因此,唤醒式无线系统的概念就应运而生。什么是唤醒式无线系统?就是该该系统在大多数时候都是休眠的,仅仅当主节点发射特定信号时才会唤醒无线系统。换句话说,连接的建立这个耗费能量的过程并不由IoT节点来完成,而是由中心节点通过发送唤醒信号来完成。当建立连接的事件由中心节点来驱动时,一切都变得简单。首先,中心节点可以发射一段射频信号,而IoT节点可以通过能量获取(energy harvesting)电路从该射频信号中获取能量为内部电容充电。当IoT节点的电容充电完毕后,无线连接系统就可以使用电容里的能量来发射射频信号与中心节点通讯。这样一来,就可以做到无电池操作。想象一下,如果不是使用唤醒式无线系统,而是使用IoT主动连接的话,无电池就会变得困难,因为无法保证IoT节点在需要通讯的时候在节点内有足够的能量。反之,现在使用唤醒式系统,中心节点在需要IoT节点工作时首先为其充电唤醒,就能保证每次IoT节点都有足够能量通讯。那么,这样的唤醒式无线系统功耗有多低呢?在2016年的ISSCC上,来自初创公司PsiKick发表的支持BLE网络的唤醒式接收机在做无线通讯时仅需要400 nW的功耗,而到了2017年ISSCC,加州大学圣地亚哥分校发表的唤醒式接收机更是把功耗做到了4.5 nW,比起传统需要毫瓦级的IoT芯片小了4-6个数量级!来自UCSD的4.5 nW超低功耗唤醒式接收机反射调制系统唤醒式接收机主要解决了无线链路中如何低功耗接收信号的问题,但是在如果使用传统的发射机,则还是需要主动发射射频信号。发射机也是非常费电的,发射信号时所需的功耗常常要达到毫瓦数量级。那么,有没有可能在发射机处也做一些创新,降低功耗呢?确实已经有人另辟蹊径,想到了不发射射频信号也能把IoT节点传感器的信息传输出去的办法,就是由华盛顿大学研究人员提出的使用发射调制。反射调制有点像在航海和野外探险中的日光信号镜,日光信号镜通过不同角度的反射太阳光来传递信息。在这里,信号的载体是太阳光,但是太阳光能量并非传递信号的人发射的,而是作为第三方的太阳提供的。类似的,华盛顿大学研究人员提出的办法也是这样:中心节点发射射频信号,IoT节点则传感器的输出来改变(调制)天线的发射系数,这样中心节点通过检测反射信号就可以接收IoT节点的信号。在整个过程中IoT节点并没有发射射频信号,而是反射中心节点发出的射频信号,这样就实现了超低功耗。华盛顿大学的Shyam Gollakota教授率领的研究组在反射调制实现的超低功耗IoT领域目前已经完成了三个相关项目。去年,他们完成了passive WiFi和interscatter项目。Passive WiFi用于长距离反射通信,使用WiFi路由器发射功率相对较高的射频信号,而IoT节点则调制天线反射系数来传递信息。多个IoT节点可以共存,并使用类似CDMA扩频的方式来同时发射信息。interscatter则用于短距离数据传输,使用移动设备发射功率较低的射频信号,而IoT节点则调制该射频信号的反射来实现信息传输的目的。Passive WiFi和interscatter芯片的功耗都在10-20微瓦附近,比起动辄毫瓦级别的传统IoT无线芯片小了几个数量级,同时也为物联网节点进入人体内等应用场景铺平了道路。Passive WiFi(上)与Interscatter(下)使用反射调制,分别针对长距离与短距离应用。Passive WiFi和Interscatter还需要使用电信号因此需要供电,而Gollakota教授最近发表的Printed WiFi则是更进一步,完全不需要供电了!在物联网的应用中,许多需要检测的物理量其实不是电信号,例如速度,液体流量等等。这些物理量虽然不是电物理量,但是由于目前主流的信号处理和传输都是使用电子系统,因此传统的做法还是使用传感器电子芯片把这些物理量转化为电信号,之后再用无线连接传输出去。其实,这一步转化过程并非必要,而且会引入额外的能量消耗。Printed WiFi的创新之处就是使用机械系统去调制天线的反射系数,从而通过反射调制把这些物理量传输出去。这样,在IoT节点就完全避免了电子系统,从而真正实现无电池工作!目前,这些机械系统使用3D打印的方式制作,这也是该项目取名Printed WiFi的原因。上图是Printed WiFi的一个例子,即转速传感器。弹簧、齿轮等机械器件在上方测速仪旋转时会周期性地闭合/打开最下方天线(slot antenna)中的开关,从而周期性地(周期即旋转速度)改变最下方天线的反射特性,这样中心节点只要通过反射射频信号就能读出旋转速度。最下方的图是该传感器在不同转速时的反射信号在时间域的变化情况,可见通过反射信号可以把转速信息提取出来。超低功耗传感器物联网节点最基本的目标就是提供传感功能,因此超低功耗传感器也是必不可少。目前,温度、光照传感器在经过深度优化后已经可以实现nW-uW数量级的功耗,而在智能音响中得到广泛应用的声音传感器则往往要消耗mW数量级甚至更高的功耗,因此成为了下一步突破研发的重点。在声音传感器领域,最近的突破来自于压电MEMS(一个典型代表是脱胎于密歇根大学的初创公司Vesper)。传统的声音传感器(即麦克风)必须把整个系统(包括后端ADC和DSP)一直处于活动待机状态,以避免错过任何有用的声音信号,因此平均功耗在接近mW这样的数量级。然而,在不少环境下,这样的系统其实造成了能量的浪费,因为大多数时候环境里可能并没有声音,造成了ADC、DSP等模组能量的浪费。而使用压电MEMS可以避免这样的问题:当没有声音信号时,压电MEMS系统处于休眠状态,仅仅前端压电MEMS麦克风在待命,而后端的ADC、DSP都处于休眠状态,整体功耗在uW数量级。而一旦有用声音信号出现并被压电MEMS检测到,则压电MEMS麦克风可以输出唤醒信号将后面的ADC和DSP唤醒,从而不错过有用信号。因此,整体声音传感器的平均功耗可以在常规的应用场景下可以控制在uW数量级,从而使声音传感器可以进入更多应用场景。超低功耗MCU物联网节点里的最后一个关键模组是MCU。MCU作为控制整个物联网节点的核心模组,其功耗也往往不可忽视。如何减小MCU的功耗?MCU功耗一般分为静态漏电和动态功耗两部分。在静态漏电部分,为了减小漏电,可以做的是减小电源电压,以及使用低漏电的标准单元设计。在动态功耗部分,我们可以减小电源电压或者降低时钟频率来降低功耗。由此可见,降低电源电压可以同时降低静态漏电和动态功耗,因此能将电源电压降低的亚阈值电路设计就成了超低功耗MCU设计的必由之路。举例来说,将电源电压由1.2V降低到0.5V可以将动态功耗降低接近6倍,而静态漏电更是指数级下降。当然,亚阈值电路设计会涉及一些设计流程方面的挑战,例如如何确定亚阈值门电路的延迟,建立/保持时间等都需要仔细仿真和优化。在学术界,弗吉尼亚大学的研究组发布了动态功耗低至500nW的传感器SoC,其中除了MCU之外还包括了计算加速器和无线基带。在已经商业化的技术方面,初创公司Ambiq的Apollo系列MCU可以实现35uA/MHz的超低功耗,其设计使用了Ambiq拥有多年积累的SPOT亚阈值设计技术。在未来,我们可望可以看到功耗低至nW数量级的MCU,从而为使用能量获取技术的物联网节点铺平道路。结语随着物联网的发展,目前第一代广域物联网已经快速铺开走进了千家万户。然而,广域物联网节点由于必须满足覆盖需求,因此射频功耗很难做小,从而限制了应用场景(例如人体内传感器等无法使用大容量电池的场景)。局域物联网将会成为物联网发展的下一步,本文介绍的能量获取技术配合超低功耗无线通信、MCU和传感器可望让物联网节点突破传统的限制,在尺寸和电池寿命方面都得到革命性的突破,从而为物联网进入可植入式传感器等新应用铺平道路。来自微信
2025年08月07日
0 阅读
0 评论
0 点赞
2025-07-18
单片机中有FLASH为啥还需要EEPROM?
作者:无际单片机链接:https://www.zhihu.com/question/379251731/answer/2909256661来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。在网上搜了一些资料,看完以后还是不能理解透彻,直到项目做多了,才彻底搞懂。Flash和EEPROM都是非易失性存储器,就是你设备掉电重启后,数据还会保留,如果是RAM的话掉电数据直接就丢了。下面从几个方面去介绍下Flash和EEPROM的区别:1.读取方式Flash和EEPROM都采用随机读取,可以通过地址直接访问存储器中的数据。2.写入方式Flash和EEPROM的写入方式不一样,EEPROM可以按字节进行写入,而Flash通常需要按块进行写入。还有就是,在Flash中,要写入一个数据,需要先擦除一整个块,然后再将新数据写入该块。3.擦除方式Flash和EEPROM的擦除方式不一样,EEPROM可以按字节进行擦除,而Flash一般需要按块进行擦除。也就是说,在Flash中,要擦除一个数据,通常需要先擦除一整个块,然后再将该块中需要保留的数据重新写入,比EEPROM操作麻烦一些。4.擦写速度EEPROM的擦写速度比Flash慢得多,擦写速度会受到许多因素的影响,包括使用的存储器型号、使用的接口类型、写入和擦除的数据量、芯片温度等等。5.存储密度Flash比EEPROM的存储密度更高,可以存储更多的数据。6.寿命Flash和EEPROM的寿命长短取决使用方式、应用场景等等。一般来说,EEPROM的寿命可能会更长一些,因为它可以进行单独的字节单位的写入和擦除,而Flash需要进行整个页面或扇区的擦除。这意味着EEPROM可以更灵活地管理存储器,并减少对存储单元的擦写次数。但是,这并不意味着所有情况下EEPROM的寿命都会更长。7.价格Flash比EEPROM更便宜。8.通讯接口不同Flash很多是用SPI协议接口、EEPROM很多是IIC协议接口9.数据保护方式Flash具有硬件和软件保护功能,而EEPROM只有软件保护功能。10.总结Flash更适合存储代码和常量,就是不需要频繁更新、数据量大的场景,比如说音频数据、图片数据、程序等等。EEPROM适合存储需要频繁更新数据、数据量小的场景,比如系统参数配置等等。作者:无际单片机链接:https://www.zhihu.com/question/379251731/answer/2909256661来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2025年07月18日
1 阅读
0 评论
0 点赞
2025-07-18
STM32 - 定时器的设定 -高级- 08 - One-pulse mode - 触发波的实现 - 可变长度和相位
前言:直接开讲,请耐心看完 :首先,OPM模式的波形可以通过主从模式进行触发,其次,OPM模式的波形本身可以进行波形定制。1 OPM定义和功能说明One-pulse mode (OPM) is a particular case of the previous modes. It allows the counter to be started in response to a stimulus and to generate a pulse with a programmable length after a programmable delay.OPM 模式是一个比较特殊的模式,该模型的参数包括:可以定制的长度和Delay(相位)的波形Starting the counter can be controlled through the slave mode controller. Generating the waveform can be done in output compare mode or PWM mode.定时器的触发可以通过主从模式的定时器来控制,而输出波形可以是CC模式或者PWM模式。Select One-pulse mode by setting the OPM bit in the TIMx_CR1 register. This makes the counter stop automatically at the next update event UEV.在TIMx_CR1选择OPM模式使能OPM,同时定时器的计数器在下一个Event UEV停止计数2 OPM设定的定时器通道相关控制寄存器:2.1 OPM-使能-定时器控制寄存器:TIM1 and TIM8 control register 1 (TIMx_CR1)OPM模式,其实就是在一个脉冲波形后暂停计数,就这么简单,后面也方便你定制。Bit 3 OPM: One pulse mode0: Counter is not stopped at update event1: Counter stops counting at the next update event (clearing the bit CEN)2.2 OPM-波形的设定:使能OPM之后,后面就是对OPM的输出波形进行设置:波形的设定,用CC(捕捉比较)的方式, 就是用定时器的计数去比较你的各种设定,然后,各种翻转逻辑,最后实现波形的定制。A pulse can be correctly generated only if the compare value is different from the counter initial value.后面要做的事情就是CNT(counter的计数)和CCRx \ ARR进行比较,当然在比较之前,如下:Before starting (when the timer is waiting for the trigger), the configuration must be:(向上计数的时候)CNT的计数应该小于CCRX或 ARR这样才能产生波形。• In upcounting: CNT < CCRx ≤ ARR (in particular, 0 < CCRx)• In downcounting: CNT > CCRx2.2.1 设定输出波形的细节The OPM waveform is defined by writing the compare registers (taking into account the clock frequency and the counter prescaler).• The tDELAY is defined by the value written in the TIMx_CCR1 register.我们知道CCR为CC模式的比较值,这个值来决定Delay也就是相位• The tPULSE is defined by the difference between the auto-reload value and the compare value (TIMx_ARR - TIMx_CCR1).自动装载值和比较值之间的差值用了决定脉宽• Let us say the user wants to build a waveform with a transition from ‘0’ to ‘1’ when a compare match occurs and a transition from ‘1’ to ‘0’ when the counter reaches the auto-reload value.我们假设我们的波形在CC模式比较匹配时候为高电平翻转,而当定时器计数达到自动装载值的时候为低电平翻转。所谓CC模式比较匹配,就是CNT = CCRx,这时候电平翻转到高,定时器计数达到自动装载值,就是CNT = ARR的时候,高电平变成低电平下图做了一些修改,原图遗失CCR1的横坐标线对于输出的波形有多种选择,To do this, enable PWM mode 2 by writing OC1M=111 in the TIMx_CCMR1 register.111: PWM mode 2 - In upcounting, channel 1is inactive aslongas TIMx_CNTelse active. In downcounting, channel 1is active aslongas TIMx_CNT>TIMx_CCR1 elseinactive.The user can optionally enable the preload registers by writing OC1PE=’1’ in the TIMx_CCMR1 register and ARPE in the TIMx_CR1 register.Bit 3 OC1PE: Output Compare1 preload enable0: Preload register on TIMx_CCR1 disabled. TIMx_CCR1 can be written at anytime, the new value is taken in account immediately.1: Preload register on TIMx_CCR1 enabled. Read/Write operations access the preload register. TIMx_CCR1 preload value is loaded in the active register at each update event.Bit 7 ARPE: Auto-reload preload enable0: TIMx_ARR register isnot buffered1: TIMx_ARR register is bufferedIn this case the compare value must be written in the TIMx_CCR1 register, the auto-reload value in the TIMx_ARR register, generate an update by setting the UG bit and wait for external trigger event on TI2.(STM32手册这里好像有错误,应该是CC2P,不是CC1P)CC2P is written to ‘0’ in this example.In our example, the DIR and CMS bits in the TIMx_CR1 register should be low.Bits 6:5 CMS[1:0]: Center-aligned mode selection 00: Edge-aligned mode. The counter counts up or down depending on the direction bit (DIR).Bit 4 DIR: Direction 0: Counter used as upcounterThe user only wants one pulse (Single mode), so '1’ must be written in the OPM bit in the TIMx_CR1 register to stop the counter at the next update event (when the counter rolls over from the auto-reload value back to 0). When OPM bit in the TIMx_CR1 register is set to '0', so the Repetitive Mode is selected. Particular case: OCx fast enable:OPM模式也可以转成多波复制的模式,只需要OPM 位设为0即可。In One-pulse mode, the edge detection on TIx input set the CEN bit which enables the counter. Then the comparison between the counter and the compare value makes the output toggle. But several clock cycles are needed for these operations and it limits the minimum delay tDELAY min we can get.局限性:就是Delay的最小时间是系统局限的,因为上述信号接入需要一点时间:If the user wants to output a waveform with the minimum delay, the OCxFE bit in the TIMx_CCMRx register must be set. Then OCxRef (and OCx) are forced in response to the stimulus, without taking in account the comparison. Its new level is the same as if a compare match had occurred. OCxFE acts only if the channel is configured in PWM1 or PWM2 mode.注意:要立即响应的得到最小Delay的话,需要使能OCXFE位,改位用来强制OCx对OCXREF的响应加速。这个代价换来的意义是,多了仅仅两个时钟周期的响应时间。For example the user may want to generate a positive pulse on OC1 (输出比较)with a length of tPULSE and after a delay of tDELAY as soon as a positive edge is detected on the TI2 input pin.2.3 设置触发和时钟通道,定时器信号通道选择:Let’s use TI2FP2 as trigger 1:选择触发信号:下图为Timer channel的图我们这样理解定时器通道,定时器通道分成两个部分:输入、输出输入的部分我们看:TI1 、TI2这些都是input,输入通道包括输入滤波(可以滤除小的脉冲)和边沿检测,这样就到了TIxFPx(也就是输入经过滤波和预分频检测后的波形,叫做TI2FP2 Filtered Timer2 Input 2)。然后是,IC1,input capture输入捕捉通道,也属于输入吧,这里又有在预分频后的信号叫,ICx,(每个信号给他定一个名称就是为了后面负责的通道组合做好标识)。然后是,OC,输出比较通道,现在开始算输出通道。在进入输出通道OC之前,要开始做复杂的波形运算,达到我们想要的波形。就必须通过捕捉比较寄存器。通过设定通道的OCXREF、DTG的给到输出通道。• Map TI2FP2 to TI2 by writing CC2S=’01’ in the TIMx_CCMR1 register.将定时器输入通道TI2连接到TI2FP2,实际上是启用了CH2,将通道设定之后,通道的输出也就设定好了。• TI2FP2 must detect a rising edge, write CC2P=’0’ in the TIMx_CCER register.Bit 1 CC1P: Capture/Compare 1 output polarityCC1 channel configured as output:0: OC1 active high1: OC1 active low• Configure TI2FP2 as trigger for the slave mode controller (TRGI) by writing TS=’110’ in the TIMx_SMCR register.准备将TI2FP2作为从控制器的输入:TIM1 and TIM8 slave mode control register (TIMx_SMCR)Bits 6:4 TS[2:0]: Trigger selectionThis bit-field selects the trigger input to be used to synchronize the counter.000: Internal Trigger 0 (ITR0)001: Internal Trigger 1 (ITR1)010: Internal Trigger 2 (ITR2)011: Internal Trigger 3 (ITR3)100: TI1 Edge Detector (TI1F_ED)101: Filtered Timer Input 1 (TI1FP1)110: Filtered Timer Input 2 (TI2FP2)111: External Trigger input (ETRF)• TI2FP2 is used to start the counter by writing SMS to ‘110’ in the TIMx_SMCR register (trigger mode).Bits 2:0 SMS: Slave mode selectionWhen external signals are selected the active edge of the trigger signal (TRGI) is linked to the polarity selected on the external input (see Input Control register and Control Register description.000: Slave mode disabled - if CEN = ‘1’ then the prescaler is clocked directly by the internal clock.001: Encoder mode 1 - Counter counts up/down on TI2FP1 edge depending on TI1FP2 level.010: Encoder mode 2 - Counter counts up/down on TI1FP2 edge depending on TI2FP1 level.011: Encoder mode 3 - Counter counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input.100: Reset Mode - Rising edge of the selected trigger input (TRGI) reinitializes the counter and generates an update of the registers.101: Gated Mode - The counter clock is enabled when the trigger input (TRGI) is high. The counter stops (but is not reset) as soon as the trigger becomes low. Both start and stop of the counter are controlled.110: Trigger Mode - The counter starts at a rising edge of the trigger TRGI (but it is not reset). Only the start of the counter is controlled.111: External Clock Mode 1 - Rising edges of the selected trigger (TRGI) clock the counter.最后,来一个重点中的重点,相位调节示意图:摘自csdn有道云笔记2021-11-16 16:21:47
2025年07月18日
4 阅读
0 评论
0 点赞
2025-07-18
STM32 - 定时器的设定 - 基础- 07 - 6-step PWM generation - 6步长PWM的产生 - COM Event的解释
前言:本节主要讲互补输出的步长设定问题,同时引入了一个重要的参数COM,这个再诸多STM32的手册里面都过于分散,在本文有一个比较完备的小结: When complementary outputs are used on a channel, preload bits are available on the OCxM, CCxE and CCxNE bits.互补输出主要由以下三个可以预设的设定决定:1 OC1M,OC1通道的输出模式,首先有OC1REF的模式决定,OC1REF会接到OC1 、OC1N然后,在OC1这里进行第二次设置,这里的设置又包括比较复杂的一组设定,有一个表:COM:(COM COMMUTATION交换 EVENT)or (Capture/Compare control update)COM的引入:提到COM之前,我们先看:定时器的控制寄存器2,里面的CCPC,CCUS控制位TIM1 and TIM8 control register 2 (TIMx_CR2)这里控制寄存器的CCPC位,决定了CCP 的 Preloaded的使能,这里定义了COM的2种出现的形式:(COMG bit set or rising edge detected on TRGI, depending on the CCUS bit).而CCUS里面的定义,则是对上述使能做更新的选择:事件产生寄存器TIM1 and TIM8 event generation register (TIMx_EGR)也就是COMGBit 5 COMG: Capture/Compare control update generation1: When CCPC bit is set, it allows to update CCxE, CCxNE and OCxM bitsCCPC预设值使能后,COM的相关使能位可以通过预设先设定好,而这三个通道恰恰就是决定了互补的输出波形,这些预设值在COM的EVENT的时候给到实际的shadow寄存器。The preload bits are transferred to the shadow bits at the COM commutation event. The user can thus program in advance (提前预设)the configuration for the next step and change the configuration of all the channels at the same time.COM can be generated by software by setting the COM bit in the TIMx_EGR register or by hardware (on TRGI rising edge).COM 的EVENT设定值可以是软件设定TIMx_EGR来实现,也可以 由硬件上升沿触发决定。EVENT发生的时候,会更新状态寄存器A flag is set when the COM event occurs (COMIF bit in the TIMx_SR register),Bit 5 COMIF: COM interrupt flagThis flag is set by hardware on COM event (when Capture/compare Control bits - CCxE, CCxNE, OCxM - have been updated). It is cleared by software.0: No COM event occurred.1: COM interrupt pending. 同时也可以产生中断:which can generate an interrupt (if the COMIE bit is set in the TIMx_DIER register) or a DMA request(if the COMDE bit is set in the TIMx_DIER register).Bit 5 COMIE: COM interrupt enable0: COM interrupt disabled1: COM interrupt enabledFigure 91 describes the behavior of the OCx and OCxN outputs when a COM event occurs,in 3 different examples of programmed configurations.Example 1:1 CO1M = 100 : OC1REF 为低电平 预设值2 CC1NE = 0, 那么 OCXN 的互补输出被关闭了3 CC1E = 1,OC1 的输出依据OCXREF的输出,再结合MIX的Table组合:当COM = 1 ,也就是,TIMx_EGR 的 COMG 更新的时候COM EVENT 事件产生,同时更新设置,那么OC1REF force low,OC1的输出被拉倒低电平Example 2:和例子1不同的是,CC1NE的值设为1,这样互补通道打开,同时OC1M设为1,那么OC1REF 被Force to High 给到OC1如果之前OC1REF就是高,那么他是不变的,互补输出通道则由原来的LOW改为和OC1REF一致为高,所有的这些变动,都是在COM TO 1的时候生效,这个和SAMPLE1 一致,仔细看这个例子,前面互补输出的通道都是正常的,到COM TO 1 触发之后,OC1N的通道就一直未低电平了,DISABLE。该例子给出了OC1REF的两个互补波形,而且还带死区的Delay有道云笔记2021-11-16 15:30:49
2025年07月18日
0 阅读
0 评论
0 点赞
1
...
4
5
6
...
8