- 博客(85)
- 收藏
- 关注
原创 测cache size的方法
软件不是这么测的,你可以分析下lmbench 这种linux benchmarlk 怎么测试cache size 的。anyway,我们的ux900 没有这种信号,就我知道,业界其它的core 也没有这种信号。
2026-09-01 14:17:31
233
原创 后仿真的worst,best,typical
在芯片设计和后仿真中,Worst(最差)、Best(最好)和 Typical(典型) 并不是单纯指某一个工艺角(Corner),而是综合了工艺(Process)、电压(Voltage)、温度(Temperature)这三大要素(即 PVT)所形成的极端或标准测试条件。* PVT 组合:通常是 快工艺(Fast) + 高电压(High Voltage) + 低温(Low Temperature)。* 对应工艺角:TT(Typical-Typical)。* 对应工艺角:SS(Slow-Slow)。
2026-08-11 09:39:15
160
原创 write through和write back呢
Write Through(写直写)和 Write Back(写回)是 Cache 的写策略(Write Policy)。* 主存控制器/特定外设区域:对于 DMA 传输或某些对一致性要求苛刻的内存映射 I/O(MMIO)区域,硬件会强制将其配置为 Write Through,以确保外设能立刻读到 CPU 写入的最新数据。只有当这个被修改的 Cache 行(Dirty Line,脏行)因为空间不足被替换(Evict)出去时,才会把数据写回主存。* 数据一致性极高:主存中永远保留着最新的数据。
2026-08-11 09:38:41
234
原创 后仿真的tt,ss,ff
在后仿真(Post-Simulation)中,TT、SS、FF 代表的是芯片制造过程中因工艺(Process)、电压(Voltage)和温度(Temperature)即 PVT 波动而产生的不同工艺角(Process Corners)。* 含义:慢工艺角。* 含义:快工艺角。在后仿真中,通常至少需要跑 SS 和 FF 这两个工艺角(加上 TT 作为基准),以确保芯片在最差的建立时间和最差的保持时间下都能正常工作。在这种工艺角下,芯片的 Setup(建立时间) 表现最差,最容易发生建立时间违规。
2026-08-11 09:38:10
202
原创 cache的分配策略有哪些
总结:Cache 的分配策略本质上是对主存带宽和Cache 空间的权衡。这通常分为两个维度的策略:读缺失时的分配策略(决定要不要把数据调入 Cache)和写缺失时的分配策略(决定写入操作是直接在 Cache 中分配新行,还是绕过 Cache)。CPU 发起读请求,发现 Cache 中没有,于是向主存请求该数据块,并将其分配(调入)到 Cache 中,然后再返回给 CPU。* 机制:发生写缺失时,先将该数据块从主存读入 Cache(分配一个 Cache 行),然后再在 Cache 中执行写操作。
2026-08-07 20:14:18
157
原创 cache的三种映射方式
由于每个主存块只能去一个固定的 Cache 行,因此不需要比较器阵列,只需将地址中的 Tag 字段与当前 Cache 行的 Tag 进行单次比较即可。需要大量的比较器(Cache 越大,比较器越多),且并行比较带来的功耗和延迟极大,因此无法做大,通常只用于容量极小的 Cache(如 TLB 或极小的 L1 Cache)。* 映射规则:主存中的每一个数据块,只能映射到 Cache 中唯一的一个固定行(Line)。* 映射规则:主存中的任何一个数据块,可以放入 Cache 中的任意一个空闲行。
2026-08-07 20:11:39
208
原创 那多核之间的通信呢
总结:多核通信是一个软硬协同的体系。而面对未来成百上千核心的众核系统,NoC架构 和 硬件级零拷贝/缓存注入(如Virtual-Link) 将是解决通信墙(Communication Wall)的核心方向。NoC采用类似城市交通网的网格结构,通过路由器和链路连接各个处理单元,支持多对多并发传输,提供高带宽、低延迟的通信,是目前复杂多核SoC的最佳互联标准。零缓冲协议通过设计专用的内存子系统来管理收发双方的数据,使得发送方的通信开销与数据大小无关,大幅降低了流水线应用(如H.264视频编解码)的通信延迟。
2026-08-07 20:10:41
171
原创 多核之间的一个通信,多核共享一片资源,怎样解决多核访问的一个冲突
总线仲裁机制 (Bus Arbitration):当多个核心同时请求总线控制权时,总线控制器(或仲裁器)会根据预设的算法(如固定优先级、轮询 Round-Robin 或加权公平队列)来决定哪个核心获得访问权,从而在物理链路上避免信号冲突。这避免了传统锁带来的死锁、优先级反转和上下文切换开销,但设计难度极高。* 硬件锁机制 (Hardware Locks):例如 x86 架构中的 LOCK 前缀指令,在执行期间会锁定特定的内存区域或总线,禁止其他核心访问该内存,直到当前指令执行完毕。
2026-08-07 20:09:17
186
原创 soc后仿真的意义,sta已经能检查时序了,为啥还要进行后仿真
这些动态的物理效应和真实的功耗活动(Activity),是纯静态的STA工具无法准确验证的,必须依赖带真实延迟的门级仿真。后仿真作为一种动态验证手段,能够结合具体的激励向量,发现STA可能遗漏的动态时序问题。后仿真通过施加实际的激励,可以反向验证STA约束的正确性,从而增强对设计的信心。后仿真能够验证复杂的时钟切换电路行为,并可以通过组合不同的工艺角(Process Corners)、电压、温度以及振荡器(OSC)漂移,来模拟芯片在极端工况下的表现,确保时序裕量(Timing Margin)充足。
2026-08-07 14:03:35
151
原创 rand和randc区别
如果确实需要对大位宽变量进行无重复随机,建议通过约束(constraint)将其限制在一个较小的范围内,或者在代码逻辑中手动维护一个未使用值的队列。它保证在一个完整的周期内,解空间中的每一个可能值都会被遍历且仅遍历一次,直到所有值都生成过一遍后,才会开始下一个周期的随机打乱。在 SystemVerilog 中,rand 和 randc 都是用于修饰类中随机变量的关键字,但它们在生成随机数的机制上有着本质的区别。调用次数 normal_rand (rand) cyclic_rand (randc)
2026-08-06 23:20:40
289
原创 local bus的rr仲裁逻辑
如果你是在特定的总线协议(比如 AXI Interconnect、Wishbone 或自定义的 Local Bus)中遇到了具体的 RR 仲裁问题,或者在看某段 RTL 代码时遇到了疑惑,可以把具体的场景或代码片段发出来,我们可以一起深入分析!* 实现开销适中:相比固定优先级,RR 需要额外的寄存器来记录上一次的授权状态(Grant),但相比复杂的加权或动态优先级算法,它的硬件面积和时序开销相对较小。无论设备的优先级高低,只要它持续发出请求,就一定能在一个有限的周期内获得总线控制权。4. 调试与验证建议。
2026-08-06 17:26:37
213
原创 以太网vip报tcp首部校验错误
用以太网vip发出的数据作为以太网dut的原始数据群,经过以太网dut发送给vip,vip报告tcp 首部校验错误,是因为计算tcp checksum的时候是首部和payload都会计算。我只保证了tcp首部一样,未保证payload一样。
2026-05-23 10:15:30
27
原创 堆栈的理解
,它的物理地址空间就不再属于栈,而是会被存放在全局/静态数据区。* 栈(Stack): 专门用来存放普通局部变量(函数内部定义的变量)、函数参数以及函数调用的返回地址等。1. 创建栈帧: 当程序运行并调用一个函数时,系统会在栈上为这个函数开辟一块专属的内存区域,叫做“栈帧(Stack Frame)”。3. 自动销毁: 当函数执行完毕准备返回时,这块栈帧会被系统自动“弹出”并销毁,局部变量占用的物理空间也就随之释放了。所以,只要你在函数里写的是普通的局部变量,它对应的物理空间一定是在栈上。
2026-05-23 10:13:45
46
原创 c语言中未初始化的变量,后面也没有重新赋值,使用它做数据比对会产生x态
在c语言中定义了一个rdata变量,没有初始化,后面也没有重新赋值,但是用它来做if语句后面的判断,导致m3出现x态。
2026-05-22 10:05:02
19
原创 armcomplier5中怎样将c中没有调用的函数优化掉
基于 ARM Compiler 5 (armcc/armlink),你需要添加的核心参数是 --split_sections(编译时)和 --remove(链接时)。* 仅 --split_sections + --remove:只能移除外部可见但未调用的函数(例如你在 utils.c 写了函数但在 main.c 没用到)。在使用 --remove 时,如果你的代码中使用了函数指针(例如回调函数、状态机跳转),编译器可能无法静态分析出这些函数被“调用”了,从而导致它们被误删。
2026-05-11 19:54:02
314
原创 vcs中的looprepprt
**报告文件**:生成两个报告文件`loop-info-xxxxx.log`和`loop-info-verbose-xxxxx.log`,其中包含有关死循环的详细信息,如循环的位置、调用栈等,帮助用户快速定位问题。- **语法**:在VCS编译命令中添加`+vcs+loopreport+number`选项,其中`number`是循环次数的阈值。- **阈值设置**:选择合适的阈值很重要。- **性能影响**:启用`+loopreport`选项可能会对仿真性能产生一定影响,特别是在仿真大量循环的代码时。
2025-04-08 20:16:09
1916
3
原创 initial块所在的文件的include必须放到module里面进行编译
调试soc平台创建了一个sv,sv里面有一个initial,编译报initial块语法错误,找不到原因,最后发现是因为include sv这个文件是在module之外。
2025-02-22 11:44:15
201
原创 仿真中产生的simv文件
最简单的方式是在命令行中输入 `./simv`(在 Linux 或 macOS 上)或 `simv`(在 Windows 上)。这条命令会编译 `my_testbench.sv` 和 `my_design.sv` 文件,并将生成的可执行文件命名为 `simv`。- **可执行仿真器**:`simv` 是一个自包含的可执行文件,它包含了所有编译后的 HDL 模型以及任何与仿真相关的设置。- `-l sim.log` 告诉 `simv` 将日志信息写入 `sim.log` 文件。
2024-12-24 20:23:36
1915
原创 gcc和gcc -c区别
**`gcc -c`**:当你希望分离编译和链接步骤时,`gcc -c` 是更好的选择。- **`gcc`**:当你想要直接从源代码生成一个完整的可执行文件或共享库时,使用 `gcc` 是最简单的方法。这两条命令会分别编译 `main.c` 和 `util.c` 文件,生成 `main.o` 和 `util.o` 目标文件,但不会将它们链接成可执行文件。1. **预处理**:处理所有的预处理器指令(如 `#include` 和 `#define`)。4. **不链接**:不执行链接步骤。
2024-12-24 19:03:32
619
原创 makefile中make -C
如果你的项目有复杂的文件夹结构,并且每个子目录都有自己的Makefile,你可以从项目的根目录调用`make -C`来进入特定的子目录并构建它,而不需要先手动cd到那个目录。在这个例子中,当你运行`make`时,它会首先切换到`lib`目录,然后在那里执行构建命令。在一个主Makefile中,可以使用`make -C`来调用不同子模块或库的构建过程,从而实现整个项目的统一构建。这将会设置环境变量`VAR`为`value`,并且这个设置只在`lib`目录下的构建过程中有效。如果省略,则使用默认目标。
2024-12-20 09:46:30
636
原创 makefile中ls -1
这行代码的意思是将`src/`目录下所有`.c`文件的名称收集起来,并将它们赋值给变量`SOURCES`。在Makefile中,`ls -1`(注意:这里的“1”是一,不是字母L)是一个常用的Unix/Linux命令,用于列出指定目录下的文件或目录。这个命令会以每行一个文件的方式输出结果。然而,值得注意的是,在Makefile中直接使用`ls`来获取文件列表并不是最佳实践。在Makefile中使用`ls -1`通常是用来生成文件列表,这些列表可以被后续的构建步骤所使用。- `ls` 默认按照字母顺序排序。
2024-12-20 09:43:05
267
原创 systemverilog中怎样对两个随机变量之间的大小关系进行约束
如果你想对两个随机变量之间的大小关系进行约束,可以使用`constraint`关键字来指定这些变量应该满足的关系。在这个例子中,`Example`类包含两个随机变量`a`和`b`。我们创建了两个约束:`c_ab`确保`a`总是小于`b`,而`c_b_max`则进一步限制了`b`的上界。你还可以通过使用`soft`关键字来指定软约束,这意味着该约束会尽量被满足,但在冲突的情况下可以被打破。// 如果你需要更复杂的约束,比如a必须小于b,但同时b又不能超过某个值。// 定义一个约束块,约束a和b的大小关系。
2024-12-19 10:46:43
396
原创 Linux下替换当前目录以及子目录下的文件中的指定字符串的shell脚本
find . -type f -exec sed -i 's/old/new/g' {} +
2024-12-17 14:43:03
225
原创 处理器的smp
在SMP系统中,每个处理器都有平等的地位,可以访问相同的物理内存地址空间,并且可以执行任何类型的任务。在现代计算环境中,SMP不仅限于传统的服务器或工作站,很多个人电脑和移动设备也采用了多核处理器,这些多核处理器本质上就是SMP架构的一种实现。- **可扩展性**:理论上,通过增加更多的处理器可以提升系统的整体性能,但实际上由于资源共享冲突等问题,性能增益会逐渐减少。- **操作系统支持**:需要操作系统能够管理多个处理器,调度任务到不同的处理器上以实现并行处理。
2024-11-26 10:33:35
558
原创 堆栈的作用
**堆**主要用于动态内存分配和管理,具有灵活分配和大容量的特点,但需要手动管理,访问速度相对较慢。- **栈**主要用于函数调用和局部变量的管理,具有自动管理和快速访问的特点,但容量有限。- **手动管理**:堆的内存分配和释放需要程序员手动管理,容易出现内存泄漏等问题。- **灵活分配**:堆内存的大小可以动态变化,适用于存储大小不确定的数据。- **自动管理**:栈的内存分配和释放由编译器自动管理,不需要手动干预。- **快速访问**:栈的内存是连续的,访问速度快。
2024-11-25 16:33:37
792
原创 堆和栈以及相应的基本操作
**Delete(删除)**:从堆中移除一个元素,通常是根节点(最大堆的最大值或最小堆的最小值),并保持堆的性质不变。- **Extract(提取)**:从堆中取出根节点的值,然后删除该节点。- **Heapify(堆化)**:调整某个节点的位置,使其满足堆的性质。- **Insert(插入)**:向堆中添加一个元素,保持堆的性质不变。- **Peek(查看根节点)**:返回堆顶元素,但不移除它。- **Size(获取栈大小)**:返回栈中元素的数量。- **Push(入栈)**:向栈顶添加一个元素。
2024-11-25 16:28:35
363
原创 基带芯片中的ap和cp
其中,“AP”和“CP”是两个重要的概念,它们分别代表“应用处理器(Application Processor)”和“通信处理器(Communication Processor)”,在设备中承担着不同的职责。它是一个高性能的处理器,能够处理复杂的计算任务、图形渲染等,以支持手机上的各种高级功能,如游戏、视频播放、多任务处理等。- 在一些设计中,AP和CP可能集成在同一块SoC上,而在其他情况下,它们可能是独立的芯片,通过特定的接口(如SLIMbus、SPI等)相互通信。
2024-11-25 16:26:06
2557
原创 处理器的32位指的是处理器总线地址位宽是32位吗?
**PAE(Physical Address Extension)**:这是一种技术,允许32位处理器访问超过4GB的物理内存。处理器的32位通常指的是处理器的**字长**(Word Size),即处理器一次能够处理的数据宽度。然而,这个术语也常常与处理器的**地址总线宽度**相关联,因为这两者通常是紧密相关的。- **地址总线宽度**:决定了处理器能够访问的物理内存的最大范围。- **字长**:决定了处理器一次能够处理的数据量。- **地址总线宽度**:32位。- **字长**:32位。
2024-11-19 14:02:34
1235
原创 处理器的实时性主要体现在哪
5. **硬件加速**:为了提高处理速度,许多现代处理器集成了专门的硬件加速单元,如DSP(数字信号处理器)、GPU(图形处理单元)等,用于加速特定类型的数据处理任务,如图像处理、音频解码等。3. **确定性行为**:实时处理器应具备确定性的执行时间,即对于相同的操作,在不同时间点执行时所消耗的时间应该是可预测且一致的。这一点对于保证系统的稳定性和可靠性非常重要。6. **功耗管理**:在某些应用场合,如移动设备或嵌入式系统中,处理器还需要具备良好的功耗管理能力,能够在保证实时性能的同时,尽可能降低能耗。
2024-11-19 14:01:38
412
原创 对内存的访问的原子性指的是
否则,不做任何修改。例如,如果一个原子操作更新了一个变量的值,那么在操作完成之后,所有读取该变量的线程都会看到最新的值,而不是中间状态。- 例如,`std::atomic::load` 和 `std::atomic::store` 操作可以用于原子地读取和写入一个原子变量的值。2. **编译器支持**:许多编程语言和编译器提供了内置的原子操作支持,例如 C++11 标准中的 `std::atomic` 类。3. **隔离性**:原子操作在执行时与其他操作隔离,不会受到其他操作的影响,也不会影响其他操作。
2024-11-14 10:32:40
369
原创 处理器中的strongly ordered
在 ARM 架构中,特别是 ARMv7-M(如 Cortex-M3 和 Cortex-M4)中,"Strongly Ordered" 是一种特殊的内存类型,用于确保特定类型的内存访问具有严格的顺序和一致性。- 对 Strongly Ordered 内存的访问必须是原子的,并且所有处理器核看到的访问结果是一致的。- 外设寄存器通常需要严格顺序和一致性,以确保控制信号和状态寄存器的正确读写。- 内存映射的 I/O 设备通常需要 Strongly Ordered 访问,以确保设备的状态和控制命令的正确性。
2024-11-13 16:47:05
787
原创 处理器的fpb
它允许开发者在不改变程序实际代码的情况下,在指定的地址插入断点或补丁。FPB通常作为处理器调试接口(如Cortex-M系列的SWJ-DP或Cortex-A/R系列的CS-DAP)的一部分,与调试工具(例如JTAG/SWD调试器)协同工作。开发者可以通过调试工具设置或移除断点和补丁,而无需修改目标系统的固件或应用程序。当处理器执行到被设置为断点的地址时,它会自动停止执行,等待调试器的进一步指令。对于补丁来说,FPB可以重定向指令流,使得处理器跳过某些代码段或者执行不同的代码。
2024-11-11 16:00:49
1162
原创 dhrystone和coremark
**起源与背景**:Dhrystone 是一个综合性的基准测试程序,由 Reinhold P. Weicker 于 1984 年设计,主要用于测试 CPU 的整数计算性能。- **起源与背景**:CoreMark 是由嵌入式微处理器基准测试联盟(EEMBC)于 2009 年开发的,旨在取代过时的 Dhrystone 基准测试,成为行业标准。- **适用性**:Dhrystone 适用于需要快速评估整数运算性能的场景,而 CoreMark 更适合全面评估处理器的综合性能。
2024-11-08 10:35:32
1260
原创 处理器的icm和tcm
**应用场景**:ICM 广泛应用于各种处理器中,包括 CPU、GPU 和嵌入式处理器,尤其是在需要频繁执行相同或相似指令的应用中,如实时控制系统、游戏引擎等。- **显式管理**:TCM 的使用通常需要程序员或操作系统进行显式的管理,可以通过特定的指令或配置寄存器来控制。- **减少延迟**:通过将常用的指令存储在 ICM 中,可以显著减少指令的加载时间,从而提高处理器的性能。- **ICM** 和 **TCM** 都具有非常高的访问速度,通常与处理器的核心频率相匹配。
2024-11-08 10:34:29
966
原创 芯片设计中leakage power
在芯片设计中,漏电功耗(Leakage Power)是一个重要的考虑因素,特别是在低功耗和高性能应用中。随着工艺技术节点的不断缩小,漏电功耗在总功耗中的比例逐渐增加,成为一个不可忽视的问题。通过采用多阈值电压技术、电源关断、动态电压和频率调整、高K金属栅极、体偏置技术和布局布线优化等方法,可以有效减少漏电功耗,提高芯片的能效和可靠性。- 漏电功耗增加了芯片的静态功耗,即在没有活动操作时的功耗。- 漏电功耗会产生额外的热量,增加芯片的温度。- 通过优化芯片的布局和布线,减少寄生电容和电阻,从而降低漏电功耗。
2024-11-08 10:33:32
1536
原创 coresight含义
**TPIU(Trace Port Interface Unit)**:将来自ITM和ETM的调试数据转换为适合物理接口传输的格式,并通过物理接口(如SWD或UART)传输到外部调试工具。- **复杂系统调试**:在复杂的SoC设计中,CoreSight 可以连接多个调试组件,提供全面的调试和跟踪功能。- **多核调试**:在多核处理器中,CoreSight 可以同时调试多个核心,提供全面的调试支持。- **CTI**:用于在不同调试组件之间同步和触发事件,实现复杂的调试场景。
2024-11-07 14:53:45
610
原创 处理器的特权模式和处理模式关系
通常情况下,处理模式下的代码(如中断服务程序)需要较高权限来快速响应和处理异常或中断,因此处理模式通常默认处于特权模式。- 但是,也可以通过配置使处理模式下的代码处于非特权模式,这种情况下,处理模式下的代码同样受到权限限制。- 在 ARM Cortex-M 系列处理器中,特权模式和非特权模式可以在处理模式和线程模式中都存在。- 当一个中断发生时,处理器从线程模式下的非特权模式切换到处理模式下的特权模式。- 也就是说,处理器可以在处理模式或线程模式下处于特权模式或非特权模式。
2024-10-28 15:33:21
635
原创 处理器的两级特权操作
如果你对具体的实现细节或应用场景有任何疑问,欢迎继续提问。- 特权模式是处理器的一个执行状态,在此状态下,运行的代码拥有完整的访问权限,可以执行所有类型的指令,包括那些可能会影响系统稳定性的敏感指令。- **特定指令**:某些架构提供了专门的指令来切换模式,例如 ARM 的 SVC 指令或 RISC-V 的 ECALL 指令。- **系统初始化**:在启动过程中,处理器通常处于特权模式,以便进行硬件初始化、加载操作系统等。- **非特权模式**:通过设置控制寄存器中的相关位,可以将处理器配置为非特权模式。
2024-10-28 15:32:46
661
原创 handler mode和thread mode
**专用寄存器**:在 Handler Mode 中,处理器使用一组专用的寄存器,这些寄存器不同于 Thread Mode 中的寄存器,这样可以防止异常处理过程中破坏正在运行的任务的数据。- **上下文保存**:进入 Handler Mode 后,处理器会保存当前 Thread Mode 下的寄存器状态,并切换到 Handler Mode 的寄存器集。- **上下文切换**:在多任务环境下,操作系统可能会在不同的任务之间切换,这时需要保存当前任务的寄存器状态,并加载新任务的寄存器状态。
2024-10-28 15:32:14
691
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅