自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CodingCos的博客

且将新火试新茶,诗酒趁年华

  • 博客(924)
  • 收藏
  • 关注

原创 【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】

嵌入式学习必备专栏: ARM Core 的详细介绍, Cache 与 MMU/MPU专栏,Coresight 专栏,劳德巴赫 trace32 专栏, AXI/APB/AHB/ACE/CHI总线专栏、CoreLink 专栏,CSH/BASH/TCL专栏,芯片设计入门专栏、ARM GCC 编译专栏,VIM工具专栏

2023-12-30 12:25:07 3822 1

原创 【ARM Coresight | AMBA BUS | Cache 与 MMU/MPU | CoreLink | GCC | CSH 专栏导读】

1. ARM Coresight(SoC-400/SoC-600) 专栏2. ARMv8/v9 CPU/Cache 专栏3. Linux ARM AMBA 总线 专栏4. Trace32/DS-5 专栏。。。

2023-10-17 10:26:34 6408

原创 【芯片设计- RTL 数字逻辑设计入门 番外篇 9.5 -- SoC DV 验证中的 UPF】

UPF(统一电源格式,Unified Power Format)是由IEEE 1801定义的一种**描述电源意图(Power Intent)**的语言,它与 RTL 代码分离,专门用于描述:电源域(Power Domain)电源开关(Power Switch)电源状态表(Power State Table)电源相关的约束(如隔离、保持、重置)

2025-05-08 07:35:30 551

原创 【芯片设计- RTL 数字逻辑设计入门 13.2 -- wire 和 reg 的本质区别】

wire示例:组合逻辑连接// wire 必须通过连续赋值 assignendmodulereg示例:时序逻辑(触发器)if (rst)q <= 1'b0;elseq <= d;endendmodule这里的q是reg,因为它在always块中被赋值用法wire用于 assign 连续赋值✅❌用于 always 块中赋值❌✅用于组合逻辑中间变量✅(配 assign)✅(配 always @(*))用于时序逻辑中存储(触发器)❌✅初始值❌✅。

2025-05-08 07:30:14 151

原创 【芯片设计- RTL 数字逻辑设计入门 13.1 -- RTL 中的覆盖参数的实例化写法】

(// 内部逻辑使用 WIDTH 和 DEPTHendmodule)(endmodule内容推荐写法/建议覆盖参数推荐方式命名式 .WIDTH(32)多层参数传递使用 localparam 转接不允许被覆盖的常量用 localparam 定义遗留写法 defparam不推荐使用,改为参数覆盖。

2025-05-08 07:18:57 49

原创 【芯片设计- RTL 数字逻辑设计入门 4.1 -- verilog 组合逻辑和时序逻辑延时比较】

简单、稳定,方便综合(synthesis)和时序分析(timing analysis)去驱动时序逻辑,容易出现组合路径过长导致 setup/hold 失败。(时钟上升沿)触发赋值的同步逻辑。慢一拍(晚一个时钟周期变化)。我们来详细分析下面这段。很清晰的同步逻辑结构,

2025-05-08 07:11:58 539

原创 【ARM AMBA AHB 入门 3.1 -- AHB控制信号】

每个slave最小的地址空间为1KB,所有的master的burst传输上限也是1KB,如此设计保证了不会出现地址越界问题。当一个设计不会用到所有的地址空间时,可能出现访问到一个不存在的地址的情请况,这就需要增加一个附加的默认slave (default slave)来为上面的情况提供一个响应。当IDLE或BUSY传输访问到个不存在的地址,默认slave会响应OKAY。Master 发起一笔传输后, slave 可以决定这笔传输的进程, 而 Master 不能取消已经发出的传输。

2025-05-07 22:27:27 1365

原创 【ARM AMBA AHB 入门 3 -- AHB 总线介绍】

AHB 总线的强大之处在于它可以将微控制器(CPU)、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线Master、各种拥有AHB接口的控制器等等连接起来构成一个独立的完整的SOC系统,不仅如此,还可以通过AHB-APB桥来连接APB总线系统AHB 可以成为一个完整独立的SOC芯片的骨架。

2025-05-07 22:05:18 1422

原创 【Windows 常用工具系列 22 -- vscode markdown preview 字体大小设置】

控制 Markdown 预览中使用的字号(以像素为单位)。

2025-05-06 10:57:37 344

原创 【SQL 基础入门 1. -- SQL 基本语法详解及举例】

创建新的数据库时,如果该数据库已经存在,则会出现错误,所以我们在创建新的数据库时一般会判断该数据库是否存在,如果已存在,则不会创建。为了避免出现错误,我们一般会先判断该数据库是否存在,如果不存在,则不会删除。插入多行数据之后,查看表格内容。

2025-04-23 09:44:42 218

原创 【芯片设计- RTL 数字逻辑设计入门 12 -- 地址空间 中的 hole 和 reserve 地址空间的区别】

项目Hole(地址空洞)Reserved(保留地址)含义系统中未被任何模块或设备响应的地址区域系统中已定义但暂未实现功能的地址区域是否有模块响应❌ 没有✅ 有(或未来会有)访问时响应通常为 bus error、无响应(例如 AXI SLVERR)有响应,但不执行有效操作,通常返回 0 或固定值是否有意义对系统无意义的空洞,访问为非法通常为向后兼容或留作扩展使用,访问后行为定义明确可否后期利用❌ 不推荐✅ 可用于后续版本功能添加特性Hole 地址空间。

2025-04-23 09:37:22 43

原创 【DDR 内存学习专栏 1.4 -- DDR 的 Bank Group】

它将多个Bank组合在一起形成一个Bankgroup,目的是为了进一步提高内存访问的并行性和带宽。DDR的bankgroup可以理解为是将颗粒分成了group进行操作,也可以抽象成是把黑色颗粒chip内又独立成了各个单独的小颗粒,即各个bankgroup。我们每次发送的读写命令都是操作的各个颗粒里面同一个位置的bank。比如chip0的bank3,chip1的bank3,chip2的bank3…:Bankgroup包含多个Bank,可以理解为Bank的上一级组织结构。

2025-04-14 23:15:12 893

原创 【DDR 内存学习专栏 1.3.1 -- DDR 的 Bank 及 burst 访问】

这是因为在这种设计中,每个DDR颗粒可以输出 8bit 数据,而这个Rank总共有8颗这样的芯片,所以它们被同时访问的bank以及bank内的行地址和列地址都是完全一致的。由于缓存行内的字在内存中是连续紧邻的,我们可以充分利用cell阵列中的行缓存。在 Rank 中,每个芯片(内存颗粒) 都共享内存通道的地址线、控制线和数据线,同时每个芯片(内存颗粒)还提供一组输出线,这些输出线汇聚成内存条的总输出线。值得注意的是,有些DIMM条的设计是双面的,即每面都布有内存芯片,这样的DIMM条就拥有两个rank。

2025-04-14 22:58:30 905

原创 【DDR 内存学习专栏 1.3 -- DDR 的 Rank 和 Bank】

这个格子(cell)阵有很多列(Column)和很多行(Row),这样我们想存取某个格子(cell),只需要告知是哪一行哪一列就行了,这也是为什么内存可以随机存取而硬盘等则是按块存取的原因。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。实际上每个格子的存储宽度是内存颗粒(Chip)的位宽,在这里由8个Chip组成一个Rank,而CPU寻址宽度是64bit,所以64/8=8bit,即每个格子是1个字节。

2025-04-13 22:52:50 767

原创 【DDR 内存学习专栏 1.2 -- DDR Channel 介绍】

通道是CPU与内存之间的独立数据传输路径,每个通道包含完整的信号线(数据线、地址线、控制线)。位宽:每个通道的位宽通常为 64位(现代DDR标准),双通道则为 128位,以此类推。带宽公式。

2025-04-13 22:19:06 861

原创 【DDR 内存学习专栏 1. -- DDR 内存带宽与 CPU 速率】

比如,3GHz的CPU,假设每个周期处理4个指令(IPC=4),理论峰值是3×4=12G指令/秒。大家有没有想过 CPU 的速度可以达到2.5G或者3G,那么芯片上DDR的带宽需要达到多少才能满足CPU的需求呢?而CPU的处理速度如果很高,比如每个周期处理多个指令,可能需要更高的内存带宽来支持数据供给,否则CPU会因为等待数据而闲置,影响性能。,表示CPU每秒的时钟周期数,但实际性能还与架构(IPC,每周期指令数)相关。另外,实际应用中,CPU通常有缓存层次结构,可以缓解内存带宽的压力,

2025-04-11 09:26:54 565

原创 【PalladiumZ2 使用专栏 1 -- 波形 trigger 抓取详细介绍】

下图是PalladiumZ2 抓取波形的配置页面,可以通过 GUI 页面来配置也可以使用命令行的方式来配置,这里先会介绍 GUI 界面抓取波形的常用按钮。Palladium Z2 通过高效编译、多模块并行验证及创新功能,成为复杂 SoC 设计验证的关键工具,助力企业应对日益增长的系统复杂度与软件开发需,芯片规模越来越大,仿真速度制约了验证进度,palladium因此被越来越多的使用。在抓取波形的时候我们需要在特定的点去抓,比如当某个信号或者某个寄存器的值变化,或者变成特定的值之后,才去抓取波形,

2025-04-07 22:09:22 226

原创 【RISC-V CPU Debug 专栏 1 -- RISCV 相关文档的区别与联系】

ISA(指令集架构)是 RISC-V 体系结构的核心部分,定义了指令集、寄存器和执行行为等基本内容。这部分文档由组织批准(Ratified),是处理器实现的基础。Profiles(配置文件)定义了 RISC-V处理器应实现的最低 ISA 组合,以确保不同处理器的软件兼容性。通过限定 ISA 组合,避免厂商各自扩展导致碎片化。Non-ISA 规范不涉及CPU 指令集,而是 RISC-V生态系统相关标准。这些标准有助于软件、调试、存储器接口、芯片互连等领域的发展。规范类型主要作用主要内容示例。

2025-03-26 09:41:56 211

原创 【SOC 芯片设计 DFT 学习专栏 -- IDDQ 测试 与 Burn-In 测试】

特性IDDQ 测试Burn-in 测试目标检测制造工艺缺陷(桥接、断开等)。筛选潜在早期失效芯片,验证可靠性。应用阶段通常在芯片生产的功能测试环节应用。通常在生产完成后或出货前进行。应力条件静态、低功耗电流检测。高温、高电压加速测试。测试成本较低,需精密电流测量仪器。较高,高应力设备及较长时间成本。效果补充功能测试覆盖,发现特定缺陷。增强产品可靠性,减少现场失效率。两者的结合在芯片测试流程中至关重要,可以有效提高产品的质量和市场竞争力。

2025-03-25 22:49:47 895

原创 【RISC-V CPU debug 专栏 4.1 -- RISCV CSR C 内嵌汇编访问介绍】

在 RISC-V 架构中,M-mode(Machine Mode) 是最高特权级别,负责处理系统底层操作,包括中断和异常。:CSR 立即数置位指令(csrsi mstatus, 0x8 等价于 mstatus |= 1 << 3)。**作用:**控制全局中断使能。:控制不同类型中断的单独使能。:查询中断挂起状态(只读)。:CSR 立即数清除指令。:读取 CSR 寄存器。

2025-03-25 22:09:18 139

原创 【PCIe 总线及设备入门学习专栏 5.3 -- PCIe 与 EP 中的 DMA协同工作介绍】

当EP 端和 Host 端有大量数据交互时,比如 NPU 的训练或者推理场景中,就需要Host 端向 EP 端搬运大量数据,这种场景就可以在 PCIe 系统中实现个 DMA,用来数据搬运。在PCIe环境中,比如,GPU 作为端点设备(EP),需要通过DMA从主机内存中读取数据,比如进行图形渲染或计算任务时的大量数据传输。比如主机主动将数据写入GPU的显存,这时候主机使用Memory Write TLP,而GPU不需要发送请求,只需要接收数据。主机驱动程序分配系统内存(源地址:0x8000_0000)。

2025-03-24 22:30:15 392

原创 【PCIe 总线及设备入门学习专栏 3.3 -- PCIe 数据搬运组包介绍】

PCIe使用TLP来传输数据,而TLP有最大载荷限制(Max Payload Size),通常是256字节或更大,这取决于 PCIe版本和设备的能力。GPU驱动发起DMA请求,指定源地址(内存0x8000_0000)和目标地址(GPU显存0x1000_0000),数据长度1MB。若PCIe设备支持,可将多个连续地址的TLP合并为更大的有效载荷(需硬件支持),减少TLP数量,提升吞吐量。若数据地址按MPS对齐(如256字节对齐),可避免跨地址边界的TLP分割,简化处理流程。

2025-03-24 09:31:09 293

原创 【LInux 维测专栏 1 -- printk extension 介绍】

是一个平台特定的扩展选项,用于在某些架构或平台上定制化printk行为。具体的实现和作用因平台而异,主要用于满足特定硬件或调试需求。

2025-03-24 09:14:23 77

原创 【PCIe 总线及设备入门学习专栏 3.2 -- PCIe 在进行大数据搬运时是如何组包的?】

同时,数据链路层和物理层的处理可能不需要用户过多关注,但需要简要提及它们的作用,比如确保数据包的可靠传输和物理信号的正确性。首先,当需要传输大量数据时,比如 GPU 进行显存和系统内存之间的数据传输,PCI e是如何处理这些数据的,如何将大数据分成多个包,以及这些包的格式是怎样的。若PCIe设备支持,可将多个连续地址的TLP合并为更大的有效载荷(需硬件支持),减少TLP数量,提升吞吐量。若数据地址按MPS对齐(如256字节对齐),可避免跨地址边界的TLP分割,简化处理流程。

2025-03-21 23:15:29 193

原创 【PCIe 总线及设备入门学习专栏 3.1 -- PCIe 中为何只有 TLP 会被 Switch 和 RC 进行路由?】

TLP在事务层生成,需要端到端传输,因此必须被路由;而DLLP和Ordered Set分别服务于数据链路层和物理层的本地功能,仅在相邻设备间传递,无需路由。这种设计优化了网络效率,减少了不必要的处理,确保了各层职责明确。

2025-03-21 23:00:13 114

原创 【Linux 维测专栏 1 -- Hung Task 分析与验证】

Hung Task 是 Linux 内核中的一个检测机制,用于监控长时间处于 D 状态(不可中断睡眠状态) 的任务(进程或线程)。如果某个任务在 D 状态停留时间过长,内核会认为该任务可能已经“挂起”(Hung),并触发相应的警告或调试信息,帮助开发者定位问题。

2025-03-21 22:33:57 221

原创 【Linux 维测专栏 5 -- linux pstore 使用介绍】

pstore(Persistent Storage)是 Linux 内核的一个功能模块,用于在系统崩溃(如内核 panic)或重启时,将调试信息(如日志、堆栈跟踪等)持久化保存到非易失性存储介质(如闪存、EFI 变量等)。pstore 的主要目的是帮助开发者和系统管理员分析系统崩溃的原因。

2025-03-21 22:22:16 349

原创 【Linux 维测专栏 2 -- Deadlock detection介绍】

【代码】【Linux 维测专栏 2 -- Deadlock detection介绍】

2025-03-21 22:11:08 330

原创 【NPU 系列专栏 3.0 -- scale-out 和 scale-in 和 scale-up 和 scale-down

特性Scale-outScale-inScale-upScale-down方向横向扩展横向缩减纵向扩展纵向缩减资源增加更多节点减少节点提升单个设备能力降低单个设备能力应用场景分布式系统资源回收高性能设备升级低功耗或低性能要求在 AI SoC 中,这四种方法通常结合使用。例如:数据中心可能会采用Scale-out的方式增加更多 AI SoC。终端设备(如手机、摄像头)可能更多使用Scale-up和Scale-down方法以适应不同性能和功耗需求。

2025-03-21 22:05:39 153

原创 【芯片设计- RTL 数字逻辑设计入门 9.3 -- SoC 设计中的 Macro】

综上,Macro 在 SoC 设计中是不可或缺的功能单元,其种类与用途非常多样。设计者根据设计目标和工艺节点选择合适的类型,以实现性能、成本和功耗的综合平衡。” 通常指的是具有特定功能的模块或单元,其可以是预设计、可复用的硬件模块。Macro 的作用是加速设计开发过程,降低复杂性,同时提升模块的性能和可靠性。:SRAM、DRAM 控制器、ROM 单元等被设计为硬宏,可以直接嵌入 SoC 中,实现数据存储功能。:用于处理音频、视频或信号数据(如 FFT 运算),在不同的场景下灵活定制功能。

2025-03-21 21:58:17 90

原创 【SOC 芯片设计 DFT 学习专栏 --DFT(Design for Test)中的 Tessent 和 TestMAX 工具】

在。

2025-03-14 11:05:58 1214

原创 【PCIe 总线及设备入门学习专栏 4 -- PCIe GIC LPI 与 MSI 中断机制】

能产生 MSI 中断的设备, 都有一个 DeviceID (设备ID), 它产生的每一个MSI中断都有一个EventID(事件ID)。ARM的 cpu,特别是 cortex-A 系列的 CPU,都是多 core 的 cpu,因此对于多 core 的 cpu 的中断管理,就不能像单 core 那样简单去管理,由此 arm定义了。对于原来的 SPI, 它也是可以使用MSI的方式传递的,这个功能是可选的。如果GICV3支持MSI方式的SPI,要产生/清除中断时, 操乍如下。架构,来支持多核 cpu 的中断管理。

2025-03-13 09:39:03 353

原创 【网络 MAC 学习专栏 -- linux 环境下 网路port端口使用情况查看】

方法命令说明netstat旧版工具,仍然可用ssss -tulnp更快,推荐lsof查找某个端口的进程fuser显示占用该端口的进程 ID。

2025-03-13 09:05:41 380

原创 【PCIe 总线及设备入门学习专栏 3 -- PCIe 三种路由方式详细介绍】

所谓 为了保证传输的可靠性,A设备会有一个buffer,里面会保存TLP, 它会一直保存,直到接收到了一个回应,如果过了一段时间没有收到回应,那么 A 设备会把 buffer 中的报文重发一下,所以 TAG 就是用来标记TLP的,收到的回应里面也会有 tag,根据收到的TLP 的 tag 把 buffer 中的 TLP 释放掉。下面的那些设备也可以发出一些消息,比如汇报一些产生的中断,汇报一些电源相关的信息,这些消息称为消息报文,它们使用的就是隐式路由。所以可以通 TLP 中获取具体使用的是哪种路由方式。

2025-03-12 23:23:09 215

原创 【C++ 系列文章 基础 01 -- std::string 与 fmt::format】

是 C++ 标准库中定义的一个类,用于表示和操作字符串。它提供了动态内存管理、丰富的成员函数以及与 C 风格字符串的互操作性。动态内存管理:std::string 自动处理内存分配和释放,避免了手动管理内存所带来的错误。丰富的成员函数:支持查找、替换、拼接、子串提取等多种操作,使得字符串处理更加方便。兼容性好:可以与 STL 算法和容器无缝集成,同时支持与 C 风格字符串的转换 () (

2025-03-12 22:42:12 1120

原创 【SOC 芯片设计 DFT 学习专栏 -- Scan chain 和 SDFFs及 EDT】

SDFFs是DFT中用于构建扫描链的基本单元,支持功能模式和测试模式的切换,显著提高芯片的可测试性。EDT是一种高效的测试压缩技术,通过减少测试数据量和测试时间,适应大规模芯片的测试需求。两者的结合为SoC设计提供了高效、可靠的测试解决方案,是现代芯片设计中不可或缺的技术123。

2025-03-12 22:36:57 1202

原创 【PCIe 总线及设备入门学习专栏 1.3.1 -- PCIe Controller and PHY】

在该模式下,数据传送由CPU执行I/O端口指令来按照字节或更大的数据单位来处理,占用大量的CPU资源,数据传输速度也大大低于DMA模式。国内应该有公司做出相应的phy芯片(例如芯动科技、牛芯半导体),毕竟常见的PCIe 3.0才8 Gbps的速率,最新的6.0才64Gbps。在该模式下,数据传送不是由CPU负责处理,而是由一个特殊的处理器DMA控制器来完成,因此占用极少的CPU资源。控制器逻辑包含了 IP 的 host 设计,以及 PCIe 协议中所规定的事务层、数据链路层、物理层实现逻辑,

2025-03-12 09:25:33 218

原创 【PCIe 总线及设备入门学习专栏 4.5 -- PCIe 中断 MSI 与 MSI-X 机制介绍】

软件在初始化的时候会把 cpu 地址空间的 中断地址转化为 PCIe 地址空间的地址,再 写入设备,同时也会把 Message Data 写入数据,后面 PCI/PCIe 想发中断的时候只需要将 Message Data 写入到 Message Address 上即可,也即会发出一个信号的写传输, 当 PCIe Controller 或者 GIC 收到数据后就会触发中断。表示中断的状态,不管是否屏蔽中断,设备想发出中断的时候,可能是被屏蔽了,但是即使被mask 掉了,pending bit 还是会置位。

2025-03-05 22:41:21 125

原创 【PCIe 总线及设备入门学习专栏 1.3 -- 访问 PCIe 设备过程】

由于A是一个桥,所以需要进行一个深度优先的配置,看看A 桥下面有哪些设备,结果发现A设备下面是一个C设备,然后就去配置C设备,接着就要去读C设备的配置寄存器,发现它仍然是一个桥,既然是一个桥,那么又需要去配置它的三个总线号,C设备的上游总线号是1,它自己的总线号加1,也即为2,它下游所有桥的最大总线号暂时设置为255,这时把C桥配置好了;那么对于终端的设备呢?Bus0 在发送数据的时候,发送的时串行数据包,那么我们需要了解下它的数据包是什么样子的,这里我们就需要先了解 PCIe 设备的层次结构。

2025-02-28 23:32:33 123

原创 【PCIe 总线及设备入门学习专栏 10.1 -- Linux PCIe 驱动框架 之 RK3399 Region1 访问】

如上图 1-3 所示,在addr0 寄存器中有 bit[5:0],这六位用来表示 cpu 发出来的地址里面可以使用多少位放到 如图 2-15 中的 TLP里面,TLP 需要64位数据,这64位数据里面有一部分可以由CPU 提供,另外一部分可以由 addr0 和 addr1提供,由cpu提供的位数由addr0 的bit[5:0] 来决定,不够的再由 addr0 和 addr1 中的其他位来提供,以后 cpu 发出访问 region 1 的地址的时候,就会产生如下图2-15 所示的TLP 包。

2025-02-28 23:26:39 250

Zadig USB驱动安装

Zadig USB驱动安装

2024-11-11

寄存器 bits 查看小工具, 可以用于查看及修改 32bit,64bit, 128bit, 256bit

寄存器 bits 查看小工具, 可以用于查看及修改 32bit,64bit, 128bit, 256bit

2023-07-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除