首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的云盘
我的搜索
我的记录
我的图片
我的图书
我的笔记
我的音乐
我的影视
我的邮件
我的游戏
Search
1
virtuoso和empyrean alps模拟仿真和混仿教程
360 阅读
2
在IC617中进行xa+vcs数模混仿
301 阅读
3
文档内容搜索哪家强? 15款文件搜索软件横向评测
264 阅读
4
科普:Memory Compiler生成的Register file和SRAM有何区别?
258 阅读
5
通俗易懂的AI知识体系图及其产业链全景图
198 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
AI
python
Docker
vcs
PyQT
STM32
cadence
linux
systemverilog
EDA
Alist
vscode
uos
package
MCU
C
QT
CXL
sed
sv
bennyhe
累计撰写
387
篇文章
累计收到
33
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的云盘
我的搜索
我的记录
我的图片
我的图书
我的笔记
我的音乐
我的影视
我的邮件
我的游戏
搜索到
387
篇与
的结果
2025-07-17
KEIL5 仿真 —— 示波器显示(2021-11-18)
记录一下如何使用 KEIL5 的示波器查看变量波形。这里先列出我参考的资料:你知道 KEIL 自带示波器吗?STM32:keil的软件逻辑分析仪( logic analyzer)使用调节项目的 Xtal 为 8KHzDebug 出选择 "Use Simulator","Dialog DLL" 和 "Parameter" 也需要更改,软件仿真填入 "DARMSTM.DLL" ,参数为 "-pSTM32F103VE",这里是我的STM32芯片型号。硬件仿真填入 "TARMSTM.DLL" 。然后点击仿真按钮开始仿真。打开逻辑分析仪窗口。点击 View 菜单,选择 "Symbols Window" 选项,在弹出的窗口里 "Special Function Register" 里找到查看波形的引脚。这里比如 GPIOB_IDR,按住后将其拖入逻辑分析仪窗口。点击 "Setup",将 "Display Type" 选为 "Bit",且用 "And Mask" 和 "Shift Right" 来过滤掉不需要显示的位。关闭,全速运行,即可看见指定引脚的波形。有道云笔记2021-11-18
2025年07月17日
82 阅读
0 评论
0 点赞
2025-07-17
timer的输入捕获功能(2021-11-18 )
内部定时器结构在 STM32定时器系列 - STM32常规定时器时基与时钟源 这篇博文中,我们讲述过,定时器的结构。其实我们只需要看这张图就可以了:看流程的走向,由 时钟源 提供时钟 到 时间基(一般时钟源都是选择内部的CLK)这里需要注意的就是看定时器时挂在那个总线下的,APB1 与 APB2 CLK不一样。然后流向 输入捕获 的只有 PSC(预分配器) 并没有 重装载寄存器,因此,采样的频率就是定时器经过预分配器之后的频率,与重装载无关。输入捕获【Input Capture】基本原理定时器针对外部输入信号或者内部触发信号实现"边沿捕获";产生捕捉事件,并可以触发中断或者DMA请求,同时记录捕捉时刻计数器的值,基于这个原理,配合计数器实时计数器功能可以对捕捉信号进行脉冲宽度的测量,进而实现对周期性波形测量其周期与占空比,或者用来做通信解码(红外通信解码)。具体到我们的定时器,输入捕获的功能主要是靠捕获比较单元来实现。输入捕获模式下:当捕获单元捕获到外来有效信号边沿事件【上升沿或者下降沿】,将此刻计数器的值锁存到CCR影子寄存器并自动将CCR影子寄存器的值拷贝进CCR预装寄存器,以供用户读取。关于CCR寄存器,它是由影子寄存器与预装寄存器组成,带预装使能控制位。在输入模式下,此时CCR对用户是只读的,不可对其修改、赋值。外部输入信号作为输入捕获信号,往往需要经过如下几个阶段:一般经过滤波,边沿检测,极性选择,捕获信号选择,捕获信号分频,最终进入捕获功能模块从而实现输入捕获。其中边沿检测、极性选择确定捕获单元对捕获信号的捕获极性,即捕获上升沿还是下降沿,甚至双边沿。捕获信号选择是指:对输入捕获信号的信号进行选择,即前面提到过的作为捕获信号的信号源有两大类;捕获信号分频是指对将被用作捕获信号的信号进行分频,比如2分频,3分频等,分频之后送到捕获功能模块去完成输入捕获。(这里如果输入信号频率大于采样频率就可以采用捕获信号分频的方法降低信号频率,达到可以采集的目标,计算结果后,在乘以分频系数)外部输入信号的滤波为了防止因为输入信号上的噪声或边沿抖动而导致误计数、误触发,我们可以针对外部输入信号进行合适的滤波。用户要做的就是针对输入信号具体情况【频率、噪声等】,通过寄存器配置适当的滤波参数,选择适当采样时钟和采样次数,其它事情交给定时器硬件去处理。这样也可以减少因为做滤波而导致的软件开销。假设我们让定时器对某输入通道的信号进行捕捉,捕捉极性为上升沿。设置滤波的采样时钟与定时器内部时钟频率一致,采样次数为4次。则每当捕捉到上升沿时,硬件连续根据采样频率来采样4次【包括发生捕捉触发沿的那一次】。如果4次采样结果均为高电平,则此次触发有效。并可以产生触发事件,该事件可以触发中断或DMA请求,同时捕捉单元将此刻计数器的值放入到捕捉比较寄存器CCR中。当然,如果捕捉到触发边沿后,没法做到连续4次采样均为高电平,则该触发无效,将会被丢弃。这样达到滤除噪声的目的。内部触发输入信号【ITRx】作为输入捕获信号与输入捕获相关的事件捕获时刻的计数器值锁存到对应捕获通道的CCRx寄存器。对应通道的捕获事件/中断会被置位;【CCxIF@TIMx_SR】如果允许了捕获中断或者DMA请求,可以触发中断或者DMA请求。取决于【CCxIE/CCxDE@TIMx_DIER】配置。如果运行连续捕获事件,前一次没有清零的话会置位【CCxOF@TIMx_SR】对于CCxIF标志可以软件清零或者读取CCR来清零。可以通过设置位【CCxG@TIMx_EGR】来软件触发输入捕获事件。与输入捕获相关的事件主要就这些,我们要做到心中有数。只要了解它们后,在我们的定时器的实际应用中才能灵活使用它们,实现我们需要的功能。如在发生输入捕获事件时,利用相关中断或DMA请求实现其它功能,比如做数据的更新、ADC的启动、其它定时器的启动等等。通过输入捕获测量脉冲周期在输入捕捉模式下,定时器可用于测量外部信号周期。根据定时器时钟、预分频器和定时器分辨率,可推导出最大测量周期。相应的定时器配置包括:通过对CCMRx 寄存器中的 CCxS 位选择有效输入。根据需要,通过对 CCMRx 寄存器中的 IC1F[3:0] 位执行操作以编程滤波器参数,并通过对IC1PSC[1:0] 位执行写操作以编程预分频器。通过对 CCxNP/CCxP 位执行写操作选择极性,即选择上升沿触发、下降沿触发或边沿触发。当输入通道检测到相应的信号发生跳变时,可使用输入捕捉模块进行捕捉。要获取外部信号周期,需连续进行两次捕捉,通过将两次捕捉到的值相减可计算得到周期。对于单沿捕捉,计数器采用向上计数模式,待测信号不长于计数器的计数周期时:假设两次连续捕捉值为 CCRx_tn 和 CCRx_tn+1● 如果 CCRx_tn < CCRx_tn+1:捕捉宽度= CCRx_tn+1 - CCRx_tn● 如果 CCRx_tn > CCRx_tn+1:捕捉宽度= (ARR_max - CCRx_tn) + CCRx_tn+1如果待测信号周期长于当前计数器周期的话,需要考虑溢出问题。实际应用中有时因为忽略了这点而导致测试不正确。有道云笔记2021-11-18 17:40:28
2025年07月17日
39 阅读
0 评论
0 点赞
2025-07-17
Vivado综合时出现[Synth 8-91] ambiguous clock in event control(2021-11-24 )
在网上找了一波,改了一波,发现并没有消掉错误,头比较大,最终还是成功解决掉了。产生这种错误有两种情况第一种情况:定位在这个always块,我们通常习惯边缘触发,时钟上升沿和复位下降沿写到一起,但是,在always块里面并没有初始化的一些变量,也就是我们并没有用到rst_n,所以综合的时候就会报出上面的错误,将触发模式更改为always@(posedge clk)即可。第二种情况就是赋值冲突:同一个always块里可以允许两个if并行处理,但是这两个if所处理的内容不能有所交集,不然会产生赋值冲突,硬件电路不知道先处理哪个if的操作,也不能构建硬件电路,举个例子,如下图:第一个if else模块和第二个if else模块都对cnt进行了赋值,这是不允许的,综合是不能通过的,也会报相应错误。有道云笔记2021-11-24 18:24:11
2025年07月17日
63 阅读
0 评论
0 点赞
2025-07-17
芯片在ATE阶段主要是检测什么?ATE在芯片制造过程中处于什么阶段?(2022-08-05)
芯片在测试阶段主要检测其在制造过程中的缺陷。ATE测试是在post-silicon阶段,也就是制造完成后,对芯片进行测试。为什么要做测试?在这里要引出来两个概念defects和fault models,也就是是缺陷和故障模型。缺陷:是指电路因物质方面的原因而改变了其本来的结构,它出现在器件制造或使用阶段,通常是指因制造加工条件的不正常和工艺设计有误等造成电路不正常的物理结构,例如引线的开路、短路等.故障:是缺陷抽象级的表示,由于引起芯片发生故障的制造缺陷原因多种多样,为了便于分析和判断故障,需要将故障的特征进行抽象和分类,把呈现同样效果的故障归并成同一种故障类型,并使用同一种描述方法,这种故障描述方式称为故障模型。ATE测试就是为了检查制造缺陷过程中的缺陷。更接下来谈谈ATE,之前在另一个回答下也详细介绍过。芯片测试概述芯片测试分两个阶段,一个是CP(Chip Probing)测试,也就是晶圆(Wafer)测试。另外一个是FT(Final Test)测试,也就是把芯片封装好再进行的测试。CP测试的目的就是在封装前就把坏的芯片筛选出来,以节省封装的成本。同时可以更直接的知道Wafer 的良率。CP测试可检查fab厂制造的工艺水平。现在对于一般的wafer成熟工艺,很多公司多把CP给省了,以减少CP测试成本。具体做不做CP测试,就是封装成本和CP测试成本综合考量的结果。一片晶圆越靠近边缘,die(一个小方格,也就是一个未封装的芯片)出问题的概率越大。随着芯片规模的越来越大,测试也更为复杂。ATE(Automatic Test Equipment)也就应运而生。 目前ATE公司最大的是Teradyne和爱德万,NI目前也在做这一块,并且很多小公司都在用NI的仪器。国内的公司知名的有长川科技。ATE作为集成了众多高精密的Instruments的设备,价格自然不菲。一台泰瑞达的高端Ultra Flex可以买上海的几套房!芯片测试流程在测试之前,当然要有ATE设备,CP测试需要Probe Card, FT测试需要Load board, Socckt等。来一张全家福吧。最下边左一是Load Board(又叫DUT Board), 左二是Probe Card.然后由芯片设计公司来提供Design Spec和Test Spec(datasheet)来制定Test Plan,开发测试程序,建立测试项。Test Plan示意图:一般测试通常包含以下测试项:DC parameters Test主要包含以下测试,Continuity测试(又称open/short test)主要是检查芯片的引脚以及和机台的连接是否完好。其余的测试都是检查DC电气参数是否在一定的范围内。Continuity TestLeakage Test (IIL/IIH)Power Supply Current Test (IDDQ)Other Current/Voltage Test (IOZL/IOZH, IOS, VOL/IOL, VOH/IOH)LDO,DCDC 电源测试。以下这张图就是open/short test原理示意图,DUT(Device Under Test)的引脚都挂有上下两个保护二极管,根据二极管单向导通以及截至电压的特性,对其拉/灌电流,然后测试电压,看起是否在设定的limit范围内。整个过程是由ATE里的instruments PE(Pin Electronics)完成的。Digital Functional Test这部分的测试主要是跑测试向量(pattern),pattern则是设计公司的DFT工程师用ATPG(auto test pattern generation)工具生成的。pattern测试基本就是加激励,然后捕捉输出,再和期望值进行比较。与Functional Test相对应的的是Structure Test,应用Structure Test能更好的提高覆盖率。当然还有Build-in-Self-Test (BIST)主要是针对memory进行的测试。AC Parameters Test主要是AC Timing Tests,包含Setup Time, Hold Time, Propagation Delay等时序的检查。ADC and DAC Test主要是数模/模数混合测试,检查信号经过ADC/DAC后的信号是否符合期望,这个地方涉及到的信号知识比较多。总体来说包含静态测试和动态测试。Static Test – Histogram method (INL, DNL)Dynamic Test – SNR, THD, SINAD其他测试除了以上常规测试项,根据芯片的类型不同可能会进行不同的测试,比如RF测试,SerDes高速测试。除此之外还有Efuse测试,Efuse最终会在芯片上烧写这个芯片的基本信息,包括制造厂商代号,wafer的批次及编号,这个die在wafer上的坐标以及时间等,方便后续对有问题芯片的溯源。一个基本的测试流程图如下: 测试流程图 所有的测试项都是在ATE上执行的,一般会执行几秒到几十秒,因为ATE是根据机时来付费的(很少有海思,苹果这种土豪公司一次买数十台),所以缩短测试时间变得尤其重要!另外一般芯片在量产测试的时候,都是百万颗或者千万颗,每个芯片节省一秒,总体来说缩短的时间还是很可观的。在测试执行完成后,ATE会输出一个Datalog,以显示测试结果。对于测试pass或fail测试项的不同,也会对其进行分类(Bin),最后由Handler分拣。datalog 示意图:以上就是芯片的测试完整流程。再放两张芯片测试的封测厂/实验室的环境图: 封测厂需要穿静电服 写在最后:一个完备的的芯片测试不是靠芯片测试工程师一个人完成的,而是需要设计工程师,DFT工程师的支持,以及由可靠的EDA工具,优秀的硬件支撑等多方因素共同决定的。芯片测试是极其重要的一环,有缺陷的芯片能发现的越早越好。在芯片领域有个十倍定律,从设计-->制造-->封装测试-->系统级应用,每晚发现一个环节,芯片公司付出的成本将增加十倍!!!所以测试是设计公司尤其注重的,如果把有功能缺陷的芯片卖给客户,损失是极其惨重的,不仅是经济上的赔偿,还有损信誉。因此芯片测试的成本也越来越高!在 IC 行业,每一个环节都要十分小心,一次流片的费用在数十万美金,一天的ATE机台使用几百美金。而一个芯片的利润可能只有几美分。这也是IC行业投资周期长,收益少的原因,基本前几年都在亏钱。幸运的是国家越来越重视芯片了,期待国内IC发展能越来越好。摘自知乎有道云笔记2022-08-05 13:45:35
2025年07月17日
38 阅读
0 评论
0 点赞
2025-07-17
SWD协议通信的简单总结(2022-08-05)
对SWD协议做一个简单的总结SWD协议1.SWD协议框图SWD协议可以配置单片机内部几乎所有的寄存器。整个SWD过程是分级进行的,时钟信号由SWCLK 管脚输入,数据信号从SWDIO管脚输入输出。首先HOST对SW-DP进行操作,确定AP寄存器的参数,达到对Cortex Memory Map进行操作。Debug Access Port(DAP)由两部分组成:Debug Port(DP)Memory Access Port(MEM-AP)(AP)2.DAP寄存器1、DP寄存器IDCODE:识别码寄存器,用于识别SW-DP。ID:0x0BB11477(M0)ABORT:中止寄存器,强制AP事务中止。在通信中,若发生粘性错 误位置1(ack = 4)。将0b1写入ABORT中,会生成一个DAP中止使当前AP事务中止。CTRL_STAT_W/R:控制状态寄存器,用于控制和获取有关DP的状态信息。SELECT:AHB-AP选择寄存器,选择要访问的端口(AP)和AP中的bank地址和DP的bank地址。RDBUFF:读缓冲寄存器,在SW-DP上,RDBUFF显示了在上一次AP读取期间捕获的数据,允许重复返回值而不生成新的AP访问。2、AP寄存器CSW_W:控制/状态字寄存器,CSW配置和控制通过MEM-AP访问连接的内存系统。size:32bit-0b010;16bit-0b001TAR_W:传送地址寄存器,TAR保存要通过AP访问的内存地址。DRW_W/R:数据读/写寄存器,DRW将AP访问中传递的值直接映射到TAR中指定的地址的一个或多个内存访问。IDR:识别寄存器,IDR标识访问的端口3.读/写时序及命令1、SWD时序1)成功的写时序 (烧录器往DP或MEM-AP寄存器的写操作)2)成功的读时序 (指烧录器读取DP或MEM-AP寄存器的数据)3)DAP没准备好,响应WAIT给HOST,此次通讯结束4)DAP出错,响应FAULT给HOST,此次通讯结束2、SWD命令详情1)主机 HOST 发出的请求由 8bit 组成Bit0:Start,固定为 1。Bit1:APnDP,0表示访问 DP 寄存器,1 表示访问 MEM-AP 寄存器。Bit2:RnW,0表示写请求,1表示读请求。Bit[4:3]:地址值A[3:2],存放DP/AP寄存器的地址。Bit5:Parity,用于表示由{APnDP,RnW, A[2:3]}组成这四位数的奇偶总个数。Bit6:Stop,固定为0。Bit7:Park,固定为1。2)Target返回的ACK值由3bit组成ACK[0:2]==001,表示FAULTACK[0:2]==010,表示WAITACK[0:2]==100,表示OK response3)数据由32bit有效数据 + 1bit数据的奇偶校验位组成chip连接1.获取芯片IDSWD协议的操作步骤:1、SWD初始化步骤:a)初始化IO口,SWCLK和SWIO设置为输出模式,保持SWDIO=1,保证Host连续发送至少50个“1”,使得Target进行Line Reset。b)发送JTAG to SWD命令,0x79、0xE7两个byte(在ARM-Debug_Interface官方文档中可以查到),随后再发送一次line reset操作。c)至少发送两个Idle信号,保持SWDIO=0。d)读取Chip ID,从而完成SWD初始化操作。此时只能访问DP寄存器组,AP寄存器组还无法访问。2、解锁AP步骤如下:1)CTRL/STAT寄存器写入0x50000000 (第28位和第30位),开启debug port及其时钟2)SELECT寄存器写入的数据为0x000000F0,bank:0xF3)读取IDR寄存器(addr = 0xFC)的数据并验证4)SELECT寄存器写入的数据为0x00000000,bank:0x05)CSW寄存器写入0x00000002,data_size:32bit注意:1、CTRL/STAT寄存器:CSYSPWRUPREQ:System powerup requestCDBGPWRUPREQ:Debug powerup request2、SELECT寄存器:APSEL=0X00表示AHB访问;APBANKSEL:选择当前AP的bank地址。3、读取IDR寄存器的数值时,需要两次,第一次是dummy read,第二次读取到的才是正确的数据。(第二次也可以读RDBUFF寄存器)4、CSW寄存器:Size:访问MEM-AP的数据类型的大小其中:寄存器的数据是32bit–0b010,编程写入Flash的数据是16bit–0b001。2.读/写操作如果想要写入/读出MCU内部Flash的数值,需要用到两个AP寄存器:TAR(The Transfer Address Register)和DRW(The Data Read/Write Register)。1、写操作1)在TAR_W寄存器中写入要访问的内存地址数值 (addr = 0x08000000)2)在DRW_W寄存器中写入要往内存中写入的数据 (data = 0x12345678)2、读操作1)在TAR_W寄存器中写入要访问的内存地址数值 (addr = 0x08000000)2)从DRW_R寄存器中读取要访问的内存中存放的数据3)从RDBUFF寄存器(DP)中读取数据/从DRW_R寄存器(AP)中读取数据注意:由于读取AP寄存器的特殊性,当读取AP寄存器时,返回的数据是上一次传输的值。也就是说,有两种方式可以得到正确的 AP 寄存器的值。发送两次读DRW寄存器的操作发送一次读DRW寄存器的操作(读取上一周期的数据),再发送一次读RDBUFF寄存器的操作(读取自己需要的数据)总的来说,读写DP寄存器没有迟滞,不需要读写两次。读取AP寄存器,有迟滞,第一次读AP,是上一周期的值,第二次读AP才是想要的值。写AP寄存器,没有迟滞。如TAR,DRW只需要写一次即可写进去。有道云笔记2022-08-05 15:08:26
2025年07月17日
45 阅读
0 评论
0 点赞
1
...
24
25
26
...
78