自定义博客皮肤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的博客

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

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

原创 【嵌入式开发学习必备专栏 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 4377 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 7569

原创 【PCIe 总线及设备入门学习专栏 9.1 -- PCIe AER 中的 aer_layer 与 aer_agent】

字段意义错误发生在 PCIe 事务层(TLP 协议级错误)发起 TLP 的设备(DMA/RC/EP)发现错误因此:发起 PCIe 请求的设备在处理返回的 Completion 或协议时发现 TLP 错误。多数情况由非法访问、UR、格式错误、Completion Timeout导致。

2025-12-11 21:45:59 803

原创 【PCIe 总线及设备入门学习专栏 9 -- PCIe AER】

摘要:PCIe AER机制用于检测和处理PCIe传输错误,在Linux内核中通过pci_error_handlers结构体实现错误回调。触发hot reset时出现的"AER: device recovery failed"报错属于正常现象,原因是reset会暂时断开链路导致访问超时。建议优化方案包括实现错误处理回调、等待链路恢复后再访问设备,或使用相关API(如pci_wait_for_pending_transaction)改进reset流程。该报错不影响reset结果,但完善错误处

2025-12-08 21:06:19 84

原创 【PCIe 总线及设备入门学习专栏 5.4 -- Linux EP driver iommu 与 DMA】

本文介绍了IOMMU在Linux系统中的应用场景及关键概念。IOMMU主要用于PCIe设备DMA访问时的地址转换(IOVA→PA)、提供安全隔离以及支持虚拟化场景。文章对比了启用/关闭IOMMU的差异,详细说明了IOVA的使用时机,并列举了内核态地址转换的相关API,包括虚拟地址转物理地址(virt_to_phys)、用户态地址转换(get_user_pages)以及IOMMU相关转换(iommu_iova_to_phys)。特别指出CPU访问BAR时不经过IOMMU,只有PCIe设备DMA时才需要IOMM

2025-12-04 21:50:53 171

原创 【PalladiumZ2 使用专栏 5 -- 模拟电路是否可以仿真?】

仿真阶段:验证 PCIe 协议功能和 Controller-Phy 接口。EMU 阶段:验证 SoC 集成、软件驱动,但不能验证 PHY 模拟特性。硅后阶段:验证 PHY 的 TAP、PLL、EQ、信号完整性等真实特性。SoC 设计保证机制:依赖厂商硬核 PHY + 集成验证 + 规范的 bring-up 测试计划。模拟电路无法在 Palladium/Zebu 验证:因为它们是纯数字仿真器,不支持 SPICE/AMS,也没有真实 SerDes 电路的物理特性。

2025-10-09 22:19:19 1236

原创 【ARM 嵌入式 编译系列 7.5.1 -- 链接脚本中的 VMA 和 LMA】

链接脚本中会设定各个段的开始地址与结束地址,比如 text 段 bss 段,这些段最终在 bin文件中的偏移地址与链接脚本中设定的地址关系,比如当前将 text 段的开始地址设置为。,但没有把段的 LMA 设置成相应值(或 linker 把 LMA 设为 0),最终 bin 中该段会在文件起始处 —— 这正是你遇到的问题。,那么 objcopy 会在生成的 bin 中填充(pad)到该偏移位置,段数据就会出现在 bin 的对应偏移处(bin 会很大)。这是你当前正在做的方式。

2025-10-09 22:06:25 902

原创 【ARM 嵌入式 编译系列 10.4.3 -- 查看 bss 段在bin 文件中存在吗?】

通过链接脚本生成的 elf 然后在通过 objcopy 生成 binary文件中有bss段中的内容吗?如果有,那么如何从 bin 文件中找到 bss 中的值,比如某个静态变量的值。,所以在 bin 文件里看不到,运行时才由启动代码清零。里占用地址空间,但不会有实际的存储内容。所以在生成的 bin 文件里,你是看不到。没有,bin 文件里没有 bss 的内容。,在 bin 文件里可以直接找到初始值。在 ELF 文件里,BSS 段只会在。往往是 0(即不会在文件中占字节)。,因为它在 ELF 中没有实际数据。

2025-10-09 21:54:20 714

原创 【ARM 嵌入式 编译系列 10.9.1 -- llvm-size -B 与 llvm-readelf -S 区别】

→ 逻辑分类(text/data/bss 总览)→ 实际段名(受链接脚本影响)所以出现一个有 data,一个没有 .data 段名的情况是正常的,主要原因在于链接脚本或段合并。

2025-10-09 21:46:33 480

原创 【芯片设计-信号完整性 SI 学习 1.2.2 -- 时序裕量(Margin)】

在高速数字接口中,数据信号在接收端需要满足一定的建立时间(setup time)和保持时间(hold time)要求,才能被可靠采样。时序裕量(Timing Margin)指的是实际信号的采样时序与标准时序要求之间的余量,用来衡量设计的稳健性和抗干扰能力。正裕量:信号满足时序要求,并且还有额外余量(安全)。负裕量:信号不满足时序要求(可能导致误码)。时序裕量= 系统实际有效采样窗口 − 标准要求窗口。在 SI 测试中主要通过眼图、BER 扫描、bathtub 曲线来度量。在。

2025-09-15 21:06:47 1580 1

原创 【芯片设计-信号完整性 SI 学习 1.2.1 -- BER 误码率介绍】

BER错误比特数总传输比特数BER = \frac{\text{错误比特数}}{\text{总传输比特数}}BER总传输比特数错误比特数​任何通信系统的关键功能之一就是无差错地发送和接收数据。也就是说,通信系统在发送和接收过程中具有尽可能小的BER。因此,误码率是衡量通信系统设计好坏的一个重要指标。为了证明一个通信系统设计得很好,必须证明估计的(理论上计算的误码率)低于某一可接受水平,并且在建立设备后测量的误码率低于某一可接受水平。

2025-09-10 22:28:49 1256

原创 【芯片设计-信号完整性 SI 学习 1.2 -- loopback 回环测试】

验证 PHY 内部收发电路,排查芯片本身问题。

2025-09-10 21:26:34 1335

原创 【芯片设计-信号完整性 SI 学习 1.1.1 -- Unit Interval,比特周期】

在高速信号传输与信号完整性 (SI)测试中,就是1 个比特的持续时间。它等价于比特周期 (Bit Period)。UITb1UITb​1​TbT_bTb​:比特周期Data Rate:数据传输速率(bit/s)比特周期与数据速率成反比在眼图中表现为水平宽度,用于度量信号抖动和时间裕量。

2025-09-10 20:06:07 1141

原创 【芯片设计-信号完整性 SI 学习 1.1 -- 眼图、抖动、反射、串扰】

项目定义在眼图中的表现测试方法举例眼图综合波形叠加,直观表征信号质量开口高度=电压裕量;开口宽度=时间裕量示波器采集眼图PCIe、DDR bringup 验证抖动采样时间偏移水平闭合TIE/Jitter 分析,BER 仿真PCIe Gen4 TJ@BER 测试反射阻抗不连续导致回波噪声叠加,竖直闭合TDR/TDT,示波器波形DDR 终端不匹配导致振铃串扰相邻走线耦合干扰噪声/时序漂移,眼图收窄Crosstalk 仿真,示波器/误码仪。

2025-09-09 22:42:15 1117

原创 【芯片设计-信号完整性 SI 学习 1.0 -- SI 介绍】

设计验证阶段(Pre-Silicon):以建模 + SI 仿真为主,确保接口符合标准。Bringup 阶段(Post-Silicon):以实测验证为主,确保仿真和实物一致,验证接口在真实环境下稳定性。SI-PI 联合仿真:更真实地反映电源噪声对信号质量的影响,是高性能 SoC(如 DDR5/PCIe Gen5/SerDes 56G)的必做环节。

2025-09-09 21:34:42 692

原创 【PCIe EP 设备入门学习专栏 -- 8.2.3 Local Bus Controller (LBC) 详细介绍】

功能LBC 模块为远端链路伙伴 (PCIe Wire)和本地 CPU (通过 DBI)提供统一的访问机制。CDM (Configuration and Debug Module) 内部寄存器外部应用寄存器 (通过 ELBI 接口连接到控制器)访问来源远端 RC 侧(PCIe Wire)本地 CPU(通过 DBI 接口)

2025-09-08 21:23:44 179

原创 【PCIe EP 设备入门学习专栏 -- 8.2.2 PCIe EP Controller Register Types 介绍】

类别默认行为可写条件访问路径只读且DBI (特殊寄存器通过 DBI2 (dbi_cs2=1) 访问DBI2 (Wire 访问 (RC 侧)永远只读无法变为可写PCIe 配置事务一句话总结:→ 可以用 DBI 写部分 RO/HwInit Registers(仅本地)。→ 必须用 DBI2 写。Wire (RC 访问)→ RO 永远只读,不受任何设置影响。

2025-09-08 21:07:35 155

原创 【PCIe EP 设备入门学习专栏 -- 8.2.1 PCIe EP Capability Register 介绍】

→ 从0x34开始。→ 从0x100开始。每个结构 =。通过遍历 Next Pointer,可以枚举所有支持的功能。Synopsys PCIe EP Controller 使用双链表(PCI 兼容 + PCIe 扩展)组织能力寄存器。保证了对传统 PCI 驱动和 PCIe 6.2 规范的兼容。iATU 和 DMA 寄存器的访问方式在 4.80a 版本之后改为直接寻址,更易于使用。

2025-09-07 21:50:42 147

原创 【PCIe EP 设备入门学习专栏 -- 8.2 PCIe EP 寄存器配置空间介绍】

每个Function拥有配置空间。包含 PCI-SIG 标准寄存器(Base Spec 定义)以及 Synopsys 特定的应用逻辑寄存器(外部接入控制器的寄存器)寄存器类型地址范围访问方式说明标准 PCIe Spec 定义,主机必需可见Synopsys 定义,可选是否映射进配置空间配置空间之外MEM不在 0x000–0xFFF 内,只能用 MEM Request配置空间之外MEM所有 Functions 共享配置空间之外MEM所有 Functions 共享应用定义范围。

2025-09-07 21:42:21 221

原创 【PCIe EP 设备入门学习专栏 -- 8.1.3 PCIe EP AXI Bridge Module】

在AMBA AXI5 配置下,Synopsys PCIe EP Controller 内部包含一个AXI Bridge 模块,用于在与AXI5 事务之间进行双向转换。条件且时启用。功能入站的 PCIe AtomicOp TLP 会被桥接转换为 AXI5 原子事务。由执行翻译。出站的 AXI5 原子事务会被桥接转换为 PCIe AtomicOp TLP。由执行翻译。换句话说,AXI Bridge 就是一个双向的原子操作协议转换器。AXI Bridge。

2025-09-06 22:08:05 168

原创 【PCIe EP 设备入门学习专栏 -- 8.1.2 PCIe EP 通路详细介绍】

v| LBC || |v vLocal CPU:发起配置/控制访问DBI:本地 CPU 的访问入口CDM:实现标准 PCIe 配置空间 + 控制器寄存器LBC:中间层,既能访问 CDM,又能访问外部寄存器ELBI:挂外部应用寄存器的总线接口。

2025-09-06 21:01:18 171

原创 【PCIe EP 设备入门学习专栏 -- 8.1.1 PCIe EP 接口总结】

出口接口之一,用于应用发送出站请求 (Outbound Requests) 或 Completion。应用通过 DBI 访问控制器内部寄存器 (CDM),或者 ELBI 上的外部寄存器。可选接口,用于通过 DBI 或 Config 请求直接访问 PHY 的寄存器。这些接口处理从链路对端接收到的 TLP,根据配置分流到不同逻辑接口。TRGT1:接收接口,用于连接控制器与应用或 AXI bridge。PCIe 定义了多种消息机制,控制器为应用提供了独立接口。应用逻辑可监测这些请求,并可修改控制器的响应行为。

2025-09-06 12:37:38 150

原创 【PCIe EP 设备入门学习专栏 -- 8 PCIe EP 架构详细介绍】

Synopsys PCIe 5.0 EP 架构由多个功能模块组成,整体遵循分层 + 模块化设计CXPL(事务层 + 链路层 + 物理层 MAC)XADM(仲裁/生成)、XAIM(应用接口)RADM(过滤/路由/Completion)CDM(配置空间)、PMC(电源管理)、LBC/DBI(寄存器访问)MSG_GEN(消息)、CXS(多芯片一致性)

2025-09-06 11:57:40 241

原创 【嵌入式开发 Linux 常用命令系列 8 -- git checkout 解冲突详细介绍】

这篇文章介绍了Git冲突的产生场景及解决方法。当同一文件的同一部分在两个分支都被修改时,Git无法自动合并,会产生包含<<<<<<<、=======、>>>>>>>标记的冲突文件。文章解释了这些标记的含义:<<<<<<< HEAD表示当前分支(ours)内容,>>>>>>>表示要合并的分支(theirs)内容。提供了两种快速解决冲突的命令:g

2025-08-24 21:04:10 641

原创 【PCIe 总线及设备入门学习专栏 5.3.4 -- PCIe PHY Firmware 固件加载流程】

Firmware加载流程需要根据PHY的要求进行设计,加载流程通常需要相关复位处于释放状态,且工作时钟保持稳定后才能开始,此时才能保证数据能够有效写入。常见设计中,firmware的数据容量较大(有些PHY需要的firmware容量为96KB),因此 firmware存储在rom中,在 PCIe PHY 开始建链之前,需要将Firmware写入到PHY中,本质是写入到存储固件代码的存储模块中。简单来说,firmware就是一套配置文件,决定了在特定的时刻给控制类寄存器写入合适的数值以完成物理层的电路功能。

2025-07-27 22:54:07 429

原创 【PCIe 总线及设备入门学习专栏 5.1.3 -- PCIe PERST# 时序要求】

要求含义应用20ms 内进入 Detect设备在复位释放后,需迅速参与链路训练硬件侧需及时准备 LTSSM 启动等待 100ms 配置高速链路需给设备时间稳定内部逻辑软件侧需延迟访问配置空间。

2025-07-26 18:14:52 459

原创 【PCIe 总线及设备入门学习专栏 5.1.2 -- PCIe EP core_rst_n 与 app_rst_n】

信号名来源控制范围用户使用建议perst_nRC(外部)整体 PCIe EP 复位不直接用于同步逻辑core_rst_nIP 自动控制通常不直接使用app_rst_nIP 输出用户逻辑复位推荐作为用户 reset 信号同步寄存器输出app_rst_n 输出用于抗 metastability。

2025-07-15 22:23:25 263

原创 【PCIe 总线及设备入门学习专栏 5.1.1 -- PCIe PERST# 信号的作用】

PERST#是 PCIe 规范定义的一个低有效信号,全称为 “PCI Express Reset”。用于向 PCIe Endpoint 或 Root Complex 发出全局复位请求。通常由主机(RC, Root Complex)控制,在系统上电或热复位时拉低该信号。

2025-07-15 22:08:49 509

原创 【ARM AMBA AXI 入门 21.1 -- AXI partial 访问和软件的按字节访问关系】

维度软件按字节访问是否触发硬件 partial access总线支持 partial是 → 部分更新成功会正确触发总线不支持 partial是 → 整笔失败或异常会导致问题软件对硬件的依赖高(靠WSTRB是是否总是安全否(视硬件支持情况)需验证或规避软件的按字节访问是否有效,取决于硬件是否支持 partial access。支持WSTRB的 slave 才能正确响应 partial write。软件可通过字节读写 + 验证读回值判断是否支持。

2025-07-07 21:36:12 210

原创 【ARM AMBA AXI 入门 21 -- AXI partial 访问和 narrow 访问的区别】

项目Partial Access(部分访问)Narrow Access(窄口访问)目的在总线数据位宽范围内,只访问其中部分字节主设备自身位宽 < 总线位宽,只能传输小数据块主设备位宽与总线一致(如 64-bit)小于总线(如 32-bit master 连 64-bit 总线)有效字节控制方式使用WSTRBRSTRB来指定哪些字节有效通过AWSIZEARSIZE指定总线传输宽度是否需要桥接否是,通常需要宽度适配器或interconnect 自动分裂拼接是否跨beat访问。

2025-07-07 21:26:57 330

原创 【ARM 嵌入式 编译系列 7.5 -- GCC 打印链接脚本各段使用信息】

我们先假设你正在使用一个自定义的linker.ld*(.data)*(.bss)/* Stack segment (示例: 向下分配 1KB) *//* stack 顶部地址 *//* 1KB 栈空间 */也可以使用更复杂的 stack 分配逻辑,核心是要定义和。

2025-06-23 22:03:43 594

原创 【ARM 嵌入式 编译系列 7.4 -- GCC 链接脚本中 ASSERT 函数】

由于ASSERT()的限制,不能直接在错误信息中打印数值,但可以通过:将数值保存为符号供nm/objdump查看用多个ASSERT模拟区间“打印”编译失败后用size/nm等工具配合查看。

2025-06-23 21:58:02 1266

原创 【TCL 脚本学习 4 -- tcl 脚本 数组定义和使用】

仿真器中读取信号值的标准命令(如在 ModelSim / Questa 中)。由于要循环访问信号名并用。在 tcl 脚本中定义一个数组,然后将。中,然后使用一个for 循环,执行。, 然后再将获取到的值打印出来。在 Tcl 脚本中,可以使用。这些信号都放到这个数组。

2025-06-23 21:42:57 230

原创 【芯片设计- RTL 数字逻辑设计入门 4.2 -- 组合逻辑赋值 + 时序逻辑状态保持】

本文解析了Verilog RTL设计中一个典型的状态保持结构: 使用组合逻辑生成下一状态:reg_halt_mode_nx = halt_taken | (reg_halt_mode & ~halt_return) 使用时序逻辑保持当前状态:reg_halt_mode <= reg_halt_mode_nx 该结构实现了halt模式的进入(halt_taken)、保持(reg_halt_mode)和退出(halt_return)控制,具有逻辑清晰、易于扩展和避免生成锁存器等优点。通过组合当前状

2025-06-06 23:44:23 526

原创 【ARM AMBA APB 入门 1.1 -- APB 读写寄存器 RTL 实现】

从上面代码可以看到 当 psel 为 高,且 pwrite 为 低的时候 去判断 paddr 的地址对应哪个寄存器的地址,然后将该寄存器的值赋值给 prdata。这个信号为高,这个信号的作用是保证 寄存器的地址已经APB 总线都准备好了之后才进行写操作。同时也可以看到,SOC_PLL0_CFG_REG 位域中的各个值,来源于不同的信号。从上面的代码中可以看到,在写。这个寄存器的的时候需要先保证。

2025-05-29 09:26:37 505

原创 【芯片设计- SoC 常用模块 9.1 -- PLL 介绍】

锁相环(PLL)是SoC芯片设计中的关键电路,主要功能是将不稳定或低频时钟信号转换为稳定高频信号。文章通过舞蹈教室的比喻形象地解释了PLL的工作原理:它像智能助手一样调整芯片模块的"舞步"节奏,使其精准跟随参考时钟。PLL具有时钟倍频、稳定、同步和多输出等核心功能,广泛应用于CPU核心、外设接口等模块。其基本结构包含鉴相器、环路滤波器、压控振荡器和反馈路径等部件,通过闭环调节实现时钟锁定。文章还对比了模拟PLL、数字PLL等不同类型,并解释了震荡和相位等基本概念。PLL就像芯片的&quo

2025-05-28 23:13:17 484

原创 【芯片设计- RTL 数字逻辑设计入门 14.1 -- SRAM RTL 实现举例】

这个定义等价于:声明一个叫mem的数组,它包含多个寄存器,每个寄存器的位宽是DATA_WIDTH,索引范围是从0到。

2025-05-27 09:23:28 200

原创 【芯片设计- RTL 数字逻辑设计入门 14 -- SRAM 与 FIFO 区别 RTL 详解】

本文对比了SoC设计中SRAM和FIFO两种存储模块的主要区别。SRAM支持随机访问指定地址,具有地址线接口,适合缓存、寄存器等应用;而FIFO遵循先进先出原则,无地址输入,主要用于数据流处理。文章还提供了Verilog代码示例:SRAM模块通过地址线实现指定位置读写,FIFO模块则采用读写指针实现顺序存取。两者的选择取决于具体应用场景,SRAM适用于需要随机存取的场合,FIFO则更适合流式数据处理。

2025-05-27 09:05:23 266

原创 【PalladiumZ2 使用专栏 3 -- 信号值的获取与设置 及 memory dump 与 memory load】

在调试问题的时,有时需要将某些信号强制设置为某个值,或者某几个信号强制设置为某个值,这里就要用到 force 命令。经常遇到需要查看某个信号的值,比如寄存器的值,比如复位信号的值,这时就可以使用。当然也可以指定起始地址和结束地址,但是需要注意的是不能使用绝对物理地址。

2025-05-23 22:42:33 531

原创 【ARM/RISCV 嵌入式 编译系列 16 -- GCC 进制优化编译的常用方法】

方法适用情况是否推荐写在 C 代码中推荐KEEP()+ section写在链接脚本 + C/汇编都适用强力推荐直接放在_start中简单项目推荐关闭优化(-O0调试期可用有副作用,慎用。

2025-05-23 21:55:32 770

Zadig USB驱动安装

Zadig USB驱动安装

2024-11-11

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

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

2023-07-05

空空如也

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

TA关注的人

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