- 博客(31)
- 收藏
- 关注
原创 Hardware and Software Support for Virtualization读书笔记(一):定义
Hardware and Software Support for Virtualization一书的读书笔记
2022-08-15 21:50:05
1098
1
原创 为什么SOC需要APB,而不是所有的模块都挂在AHB上?
众所周知,AHB的速度比要快,但SOC中大多数外设是挂在APB上,以AHB to APB bridge作为master,而bridge又作为slave接到AHB上,那么为什么不把所有外设都挂在AHB上,以获得最快的访问速度?主要有以下四个原因:1.片上存储器直接与CPU进行数据交互,需要保证对它们有足够快的访问速度,所以必然挂在AHB上,DMA负责不同存储器或外设之间的数据传输,所以也挂在AHB上,而SOC上的其他大多数外设,它们挂在总线上的目的是CPU可以通过总线读写它们的寄存器,并不会过于频繁,不需要
2021-11-29 17:52:55
1053
原创 cortex-m3软件断点/单步执行的实现机制
一.软件断点软件断点设置后,断点处的代码如果是存放在SRAM中,相应的一条指令(C语言中的一行代码可能对应多条处理器指令)会被调试器(debugger)替换成cortex-m3的BKPT指令,当程序运行到这一BKPT指令时,处理器会被停机(halt),用户可以用调试器做出相应的操作。用户在操作完成继续执行指令时,原来C语言中的那一条指令会被调试器重新写入到该地址,并且取消停机,处理器从这一指令开始继续执行程序。当然,以上操作需要断点处的指令所在地址是SRAM等可写的存储器,如果是ROM等不可写存储器,就
2021-11-11 21:19:14
1365
1
原创 cortex m3/m4处理器的复位设计
cortex m3/m4处理器在复位层面总体上可以划分为core和debug logic两部分。core部分包括处理器内核(core)以及NVIC,BUS Matrix,MPU的非debug部分。debug logic部分包括debug模块(SWD接口,ETM, AHB-AP, TPIU等)以及NVIC,BUS Matrix,MPU的debug部分。下文中,用core代指core部分,debug代指debug部分。除JTAG的reset信号nTRST外,cortex m3/m4相关的复位信号主要有四个:
2021-10-27 20:25:53
1748
原创 cortex-M0+相比cortex-M0有哪些改动(不定期更新)
1.增加向量表重定位(VTOR),向量表默认存放在存储器初始地址,可以通过重定位,修改到SRAM或其他存储器区域。2.从三级流水线(取指,译码,执行)改为两级(取指+预译码,译码+执行),减少了寄存器的数量及对应的面积和功耗,也减少了跳转指令带来的性能损失。为了避免流水线级数降低对最大时钟频率的影响,CPU设计时已经对预译码和译码进行了时序的平衡,另外在实际使用中,大多数芯片实际的工作频率较低。3.增加了单周期I/O接口,这一接口的引入使M0+具有了哈佛结构的特征,但是因为主要的AHB master只有
2021-10-11 11:04:53
1530
原创 数字IC的功耗组成
数字IC的功耗主要分为静态功耗(static power)和动态功耗(dynamic power。1.静态功耗静态功耗也称为漏电功耗(leakage power),是指逻辑单元的输入和输出均不发生变化时(一般被称为inactive或static状态)的功耗。静态功耗又分为intrinsic leakage power和gate leakage power.intrinsic leakage power主要是由晶体管源极和漏极之间的亚阈值电流(晶体管在关断时实际并没有完全关闭,仍有电流),电流大小主要由
2021-09-30 09:53:02
6999
原创 为什么不能将异步复位信号同时用于某些寄存器的同步复位
将某个信号同时用于异步复位和同步复位,可能导致只有部分寄存器的复位触发/释放,可能导致CDC问题或预期电路功能失效在STA中,异步复位需要检查recovery time,同步复位需要检查set up time,将同一信号混用,可能导致这一信号相关的时序难以满足...
2021-09-23 15:55:37
479
原创 PVT的理解和以及它们在后仿/功耗仿真中的注意点
PVT(process, voltage, temperature)是影响集成电路性能的主要因素。P是指芯片制造过程中的工艺偏差,在不同晶体管/晶片/批次之间,NMOS或PMOS的驱动能力(有时也理解为电流大小或载流子迁移率)都会发生变化,用slow/fast/typical分别表示晶体管驱动能力弱/强/一般,则所有逻辑门的性能就可以限制在(ss,ff,sf,fs,tt)5个工艺角内。V是指芯片的供电电压,一般来讲,电压越大,晶体管电流越大,芯片速度越快。T是芯片的工作温度,温度对芯片性能的影响比较复
2021-09-09 20:15:05
19511
原创 用verilog产生一个和时钟相同的信号用作数据
input clk;input scan_clk;input scan_mode;input rstn;output clk_d;wire clk_inv;CKMX2N1(.i0(clk),.i1(scan_clk),.s(scan_mode),.o1(clk_inv));reg clk_r, clk_f;always@(posedge clk or negedge rstn)if(~rstn)clk_r <= 1’b0;elseclk_r <= ~clk_r;
2021-09-08 17:36:06
1152
2
原创 为什么时钟和复位信号要在综合阶段设置为set_drive 0和set_dont_touch_network
set_drive 0 表示驱动无穷大,延时为0,set_dont_touch_network是为了不让综合工具插入buffer等。这么做是因为综合时没有布局布线信息,即使综合工具针对时钟和复位进行了优化,也是不准确的,甚至可能对后端造成负面影响,正确的做法就是不要处理,而要到后端再去做CTS...
2021-09-06 19:46:58
1510
原创 向C case仿真中加入define
在做EDA仿真时,经常会通过在验证平台中加入对某些define是否存在的判断,以使验证平台产生不同的行为,但是这些判断都是在验证平台,也就是sv文件中,如果在跑仿真前给验证平台传入某个define,一般是通过在仿真工具的编译指令中,加入+define+xxx实现。如果要向C case传入define,实现和上述类似的功能,该如何操作?通过查网上的资料和修改makefile后仿真实验发现,gcc的编译可以通过在编译选项中加入-D实现define的传入。有以下四种形式:-DNAME-D NAME-DNA
2021-09-06 10:03:22
241
原创 NMI在芯片常见用途
NMI,即non maskable interrupt,在ARM cortex M处理器中具有最高的优先级,通常被用于接收并处理一些威胁到芯片安全的事件。从目前做过的项目和学习过程中,总结了NMI的三个常见用途:1.watchdog的计数器因为系统出现故障没有及时清除计数器而导致溢出时,可以产生NMI请求(当然,更常见的做法是产生复位)2.Brown-out detector(BOD),实时检查芯片的供电电压,如果低于警戒值,则产生NMI请求(也可以是产生复位,取决于芯片设计)3.芯片上的其他安全事件
2021-09-02 11:37:12
2941
原创 时钟/复位设计中的DFT考虑
芯片正常工作时,各寄存器使用片上的正常时钟和复位信号,但在进行scan test时,时钟和复位应该分别是来自PAD的scan_clk和scan_rstn信号,在进行前端设计时,需要加入scan mux,将芯片内部的时钟和复位bypass掉,选用scan_clk和scan_rstn.目录1.时钟1.1 时钟源的选择1.2 时钟门控2.复位1.时钟时钟的设计考虑主要包括时钟源的选择和clock gating的设计1.1 时钟源的选择时钟可能是直接来自片上PLL/OSC产生的时钟或是经由计数器分频产生的
2021-09-01 18:16:06
8900
2
原创 i2c的IOL及上拉电阻
1.拉电流与灌电流拉电流(pull current)是指PAD输出为逻辑1时,对外提供的电流,相当于电流是被拉出,所以叫拉电流。灌电流(sink current)是指端口输出为逻辑0时,对外提供的电流,相当于电流是被拉出,所以叫拉电流。对给定的PAD,PAD内部的输出晶体管是固定的,而输出0和1都各自有自己的允许电压范围,输出0时的范围为0-VOLmax,输出1时的范围为VOHmin-VDD。拉电流与灌电流一般被用来衡量PAD的驱动能力。例如,当PAD输出逻辑0,存在灌电流时,如果输出允许的最大电压V
2021-08-31 16:29:49
1235
原创 gpio pad的latch功能
在芯片中,有时可能出现GPIO的VDDIO有电,但VDDC(芯片的core电压)断电的情况,但是这种情况下,可能需要保留该PAD的状态。为了就需要对I,OEN,REN,RTYPE,IEN这些从core domain到IO domain的信号进行latch处理,latch的enable端也作为一个PAD的控制信号LE。需要IO domain的信号和core domain同步时,LE=1。希望让IO domain的信号保持不变时,LE=0。考虑到LE也是从芯片内部来的信号,必须把它的产生放到芯片的always
2021-08-30 11:58:08
1315
翻译 cortex m3的操作模式和状态
1.操作状态(operation state):debug state:处理器在调试器发起halt或匹配到断点时,会进入debug state并停止执行指令.thumb state:处理器正在运行程序代码(thumb 指令)时会处于thumb state。 和传统的ARM处理器不同,cortex m3不支持ARM 指令集,所以没有ARM state.2.操作模式(operation mode):handler mode:指执行异常处理例程(如ISR)时的模式。在handler mode中,处理器一
2021-08-11 16:18:53
2753
原创 cortex m0+的单周期IO port
cortex m0+提供了专门的单周期总线用于进行外设的访问,这个总线接口可以被处理器/调试器(debugger)进行读/写访问,提高了外设访问的速度。在arm提供的ip中,也包括了基于AHB的GPIO IP。某些应用下,软件会直接操作GPIO,以代替专门的硬件电路实现通讯的功能,被称为bit banging,单周期IO的特性也为bit banging提供了便利。...
2021-08-11 15:26:33
1094
2
原创 用verdi寻找信号出现某个值的时刻
目前知道有两种方法:1.search value,在nwave窗口的菜单栏中选择waveform->set search_value,设置要寻找的值,点击ok,设置的值会出现在窗口最右边的by: 后,选中要查找的信号,并点击by右侧value后面的左右方向键可以左右寻找信号值匹配的时间。同理,可以直接在by:后面的那个按钮,点击下拉按钮并选择bus value设置要寻找的值,后续操作与waveform->set search_value相同。注意:所设计search value的进制应与信号
2021-08-10 10:57:29
10040
原创 verdi波形中状态机信号用parameter的名字显示
一般来讲,状态机的编码会用parameter实现,但是在nwave中,有时状态机信号只会显示它的数值,而不是相应的parameter名,如果要检查跳转情况,就要不停的去把数值和相应的名字对应。可以使用ntrace中tools->extract interactive fsm,选择all stages后再点击ok,就可以在波形中显示状态机的状态名。...
2021-07-29 15:15:25
4810
原创 用verdi中的signal event report检测信号在一定时间内的行为
在做项目时,有时我们想统计某个信号的某个时间发生的情况。例如,仿真过程中想知道I2C已经完成了多少个byte的传输,可以通过数rx/tx buffer的not empty信号的上升沿个数来确定,但如果没有在环境里创建相应的变量计数信号的上升沿个数,靠人力数又太麻烦,怎么办?可以通过verdi的signal event report 功能实现,首先在波形窗口的左侧选择要检测的信号(一个或多个),在右侧用鼠标左键和中键选择好要检测的时间段,再点击波形窗口的view->signal event repo
2021-07-29 15:01:22
7216
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人