- 博客(26)
- 资源 (3)
- 收藏
- 关注
原创 从标量到超标量:分支预测技术
本研究深入探讨了从标量分支预测向超标量分支预测的转变,系统剖析了分支预测的基础理论,详细阐述了标量分支预测和超标量分支预测的原理、机制及特点。研究明确了标量分支预测在面对复杂程序时准确率低、处理长距离和间接跳转困难以及流水线停顿代价大等局限性,揭示了超标量分支预测在提升处理器性能方面的关键作用,以及其在预测速度、硬件成本和准确性方面所面临的挑战。在实现从标量到超标量分支预测的转变过程中,提出了一系列关键技术和策略。
2025-03-07 20:13:49
450
原创 System Verilog 断言, SVA
SystemVerilog Assertion(SVA)是 SystemVerilog 硬件描述语言的一个重要扩展,它提供了一种形式化的方式来描述和验证硬件设计的属性和行为。断言是对设计属性的一种描述,它定义了在特定条件下设计应该满足的行为。如果在仿真或形式验证过程中,设计的行为不符合断言所定义的属性,那么断言就会失败,从而提示设计中可能存在的问题。例如,在一个简单的加法器设计中,我们可以使用 SVA 来断言:当两个输入信号有效时,输出信号应该等于两个输入信号之和。
2025-03-06 23:30:00
776
原创 深入理解 Transformer:用途、原理和示例
众多新闻媒体和信息平台运用 Transformer 模型对长篇文章进行自动摘要生成。例如,对一篇几千字的研究论文,模型能够提取关键信息,生成简洁明了的摘要,方便读者快速掌握论文核心内容,提高信息获取效率。
2025-03-04 23:45:05
1269
原创 Chipyard Workload生成与自定义SOC
Chipyard 是一个开源的、可扩展的、集成化的芯片设计平台,由加州大学伯克利分校的伯克利架构研究小组开发。它基于 Chisel 硬件描述语言(HDL)和 Scala 编程语言构建,为芯片设计人员提供了一套全面且高效的工具和流程,旨在加速基于 Chisel 的片上系统(SoC)的设计、开发和验证。
2025-03-04 20:45:03
984
原创 JTAG原理
需要注意的是DR寄存器有很多,每个IR指令可以对应不同的DR。一个特殊的DR动作是,当TAP进入Test-Logic-Reset状态时,DR寄存器自动装入这个器件对应的ID,规定这是一个32位的值。当TAP处在Shift-IR模式下,就可以通过TDI每次写入一bit到IR寄存器,然后IR寄存器会自动移动一位。TAP维护了一个状态机[1],这个状态机的状态变化只是受TMS控制,状态改变之后对TDI、TDO的解释和行为定义将发生对应的变化,从而实现了监测、下载程序、调试等不同的功能。
2024-03-30 21:51:03
732
原创 如何理解一个操作系统
操作系统通常比较复杂,各种系统服务和功能组件非常丰富,深入研究一个操作系统可能会经常感到无从下手,特别是没有很多资料的时候。有以上四点,我认为一个操作系统的关键内容已经有了,系统大厦的奠基完成。
2023-06-18 09:15:00
218
1
原创 linux mm系列:buddy分配器
buddy分配器的真实接口是 rm_queue,该接口实际调用 rmqueue_buddy. 这个函数不断地尝试从zone中寻找符合order要求的page,申请的核心是__rmqueue_smallest和__rmqueue.这是一个锦上添花的操作,大概的作用就是把空闲的块按照能否移动的性质分成几类,再以后出现大量外碎片的时候,可以做些移动操作来减小。expand函数中的low是申请的内存的order数,high是当前分配的block的order数。剩余的那一个3阶的内存块就是要返回的内存块了。
2023-03-26 18:19:21
445
原创 linux mm系列:内核内存管理概述
首先明确内存访问过程,程序中使用的都是虚拟地址,所有的内存访问从软件角度都是虚拟地址。同时,真实的存储都是在物理内存或者外设寄存器上,这些物理内存和外设寄存器在物理地址空间上的分配一同构成了物理内存布局。在解决这两个核心问题后,可以进行一些锦上添花的操作,例如可以在实际写内存时才分配物理内存,提升物理内存的实际利用率等等。这两个问题,在逻辑上是两个完全独立的问题,虚拟内存的分配可以和物理内存分配没有任何关系,让二者关联的方式就是地址映射,也就是通过页表将虚拟地址转换成物理地址。
2023-03-26 14:28:57
305
原创 linux mm系列:memblock分配器
memblock是物理分配器还是虚拟分配器?答:memblock管理的核心逻辑是基于物理内存的,从这个角度来看是物理分配器。但是分配的返回地址可以是物理地址也可以是虚拟地址。虚拟地址是通过phys_to_virt函数完成的映射。因此可以看出memblock的工作在直接映射区上,即通过__va()宏得到虚拟地址。memblock的生命周期是怎样的?答:memblock存在于Linux启动初期,这个阶段buddy还未工作。
2023-03-26 13:36:39
308
原创 libfakeroot.c:90:40:error _STAT_VER undeclared
将其下的fakeroot.mk中的版本改成1.25.3,确保下面的网址可以访问,如果不能访问,需要重新搜索一下。找到buiildroot/package/fakeroot。
2023-02-18 20:22:23
1939
原创 Cache的基本原理
Cache是高性能的处理器必不可少的,cache的实现在逻辑上的关键是在于将一个地址A,映射成为到一个cache内的地址单元。本文尝试对这三种结构做一个的简单明亮的阐述。
2022-12-12 01:51:59
713
2
原创 ARMv7 MMU多级页表
Arm v7-A架构中规定的VMSA(virtual memory space address)可以支持最多两级页表,MMU是具体实现VMSA的器件,本文关注使用MMU实现虚拟地址转换的关键的软件细节。
2022-08-07 12:11:17
1680
原创 SystemC快速实战指南
主要内容如何安装SystemCSystemC风格的hello worl如何编译SystemC下的hello world1. 如何安装SystemCSystemC是一组C++库,可以从下面这个网址进行下载。https://accellera.org/downloads/standards/systemcSystemC下有几个组件:SystemC 2.3.3 (Includes TLM)SystemC AMS 2.3SystemC CCI 1.0SystemC Verificat
2022-05-28 20:28:09
3665
原创 qemu仿真只显示vnc server running on ::1:5900
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2022-05-28 17:01:45
2655
1
原创 Linux CFS调度器的思考
linux CFS调度器常见的调度策略固定时间片的问题CFS调度的目标1 什么是完美的多任务处理器?2 如何刻画一个完美的多任务处理器?3 如何模拟一个完美的多任务处理器?CFS调度的实现新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与
2022-01-12 21:37:39
541
原创 C++模板的若干问题
1.为什么要使用模板?对于特点相似的类,比如有相同的方法相似的成员,使用模板可以使得这些类得到进一步的抽象。也就是写一个超级形态的类。这样至少有一个浅显的好处,只用写一次。但实际上,可能更方便维护,也具有更一直的特性。对于函数,作用也类似,也就是形成一个函数簇,这个函数簇的所做的动作是高度相似的。使用模板函数的益处也相似。2.模板类怎么写?模板类的申明如下template <class T> class MyClass1 { // C++98就开始支持}t.
2020-05-20 20:23:40
229
原创 C++ 内存泄漏究竟是什么
C++中被new出的空间没有被正确的delete则会造成内存泄漏。内存泄漏可以导致程序在运行时没有足够的内存空间,从而发生OOM错误。我在这里要测试一件事情,就是不正确的释放new出来的空间,看看会发生什么。上图中两段代码,左侧正常的new和delete,而右侧只new不delete。在程序运行过程中,这样的结果是显然的,也就是说不正确的delete内存会被继续消耗,而大量的这种情况存在,会使得程序在运行期间消耗的内存越来越大,到最后慢慢变卡,最后的最后就crash掉了。导致不能正确的d
2020-05-19 11:20:03
630
原创 搞懂链表环路-快慢指针:原理和代码
搞懂链表环路-快慢指针:原理和代码1问题抽象2快指针是慢指针的2倍速度3 C++代码描述4 快指针是慢指针的三倍速5二倍速算法中c点的存在性6重要的事快慢指针经常被用在链表相关的一些算法中,具有很高的时间和空间效率。最近在LeetCode上刷题看到了链表环路检测和环路起始节点的访问,看了一些代码和一些大佬的解释,但是感觉说得不是很清楚。所以自己动手推导了一下。1问题抽象带有环的链表一定可以表...
2020-04-26 19:42:47
993
免费的PDF分割合并小工具
2020-05-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人