自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 CHI学习 --- Multicopy atomicity

如果核心 A 先写 X=1,然后核心 B 写 X=2,根据多副本原子性,所有核心必须看到这两个写操作的顺序是 A 先于 B,或者 B 先于 A,但必须一致。如果没有多副本原子性,可能出现核心 A 看到 A 先写,核心 B 看到 B 先写,导致顺序不一致,这会引发问题。假设有两个核心 A 和 B,都缓存了同一个内存地址 X 的值。必须确保所有写请求都是多副本原子的。假设核心 A 和 B 通过共享变量。举例说明多副本原子性。

2025-04-24 11:24:55 888

原创 CHI学习---Completion acknowledgment

响应主要用于控制Requester发出的事务以及不同Requester的事务引发的Snoop之间的相对顺序,确保snp在Requester的事务响应之后被接收,从而保证对同一缓存行的事务按正确顺序被观察到。请求(地址 0x1000),同时核心 B 可能持有该地址的缓存副本,Home 需发起窥探(Snoop)确认数据有效性。及其组合写(Combined Write)变体,如果需要。核心 A(RN-F)向 Home 节点发送一个。要求与组合写事务中写操作的类型的。请求者通过设置原始请求中的。

2025-04-24 10:32:45 843

原创 CHI学习---transaction ordering

在 CHI 协议中,可以利用实现系统请求排序,Order 字段用于控制 RN与HNSN之间的事务顺序,确保事务在系统中的执行和观察顺序符合预期。保证同一个RN,发往同一地址的多笔传输的顺序示例:处理器核心向内存地址0x1000发送两个写事务W1和W2:若设置,则系统必须确保W1先完成,W2后完成。若乱序处理(如W2先于W1到达内存),可能导致其他核心或设备看到错误的写顺序,违反多副本原子性保证同一个RN,发往同一个endpoint addr range的多笔传输的顺序。

2025-04-24 09:39:19 1067

原创 UCIE学习 --- Die-to-Die Adapter

如果双方需要协商自己公司特有的功能(比如 “说英语时带密码加密”),可以发 “自定义消息”(Vendor Defined),就像两个人发明的秘密手势,只有他们懂。

2025-04-08 16:11:45 1136

原创 UCIE学习 --- Protocol layer

用于引用 PCIe 基础规范中定义的与 Flit 模式相关的协议特性。:用于引用 PCIe 基础规范中定义的与非 Flit 模式相关的协议特性。:用于引用 CXL 规范中定义的与 68B Flit 模式相关的协议特性。:用于引用 CXL 规范中定义的与 256B Flit 模式相关的协议特性。

2025-04-08 11:38:40 788

原创 UCIE学习 --- UCIE components

UCIE 是一种 “分层合作” 的协议,就像搭建积木塔,每一层(组件)都有独特功能。三个主要组件(协议层、芯片到芯片适配器层、物理层),每层分工明确(如物理层负责底层信号传输,适配器层处理数据转发规则,协议层对接具体通信协议)。UCIE 要求每个组件都得 “胜任工作”,即能支持宣传的功能和带宽。同时,为确保组件间交互正常,对不同 “互动环节”(握手)和状态变化设定了超时机制与错误规则。除非特别说明,超时时间允许在规定值基础上 “上下浮动”(下限 0%,上限 + 50%)。

2025-04-08 10:26:35 1331

原创 UCIE专栏 ---- Introduction

但先进制程(如 3nm)成本太高,于是拆分成多个小芯片(Chiplet),但不同小芯片之间的通信需要复杂的接口设计,容易像 “不同国家的道路标准不统一”,导致效率低、兼容性差。UCIE 规范强制 Retimer 必须严格遵循 UCIE 协议,确保不同厂商的 Retimer 和芯片能互操作,就像不同品牌的路由器都支持 Wi-Fi 标准一样。封装就像芯片的 “包装盒”,不仅保护芯片,还决定了芯片之间的连接方式。每个芯片各自为政,通信靠 “传话员”(复杂的接口),效率低、功耗高。,就像接力赛中的接力棒传递信号。

2025-04-07 16:07:28 817

原创 RISC-V AIA学习---IPI 处理器间中断

对于有多个hart的机器,必须为每个 hart 提供一个由具体实现定义的内存地址。向这个地址写入数据,就能向该 hart 发送一个机器级软件中断(主代码为 3)。换句话说,机器级的 IPI 可以通过这种方式,以机器级软件中断的形式发送给任何一个 hart。接收中断的 hart 上的软件需要负责识别这个进入的软件中断是一个 IPI,并进一步解析其目的。通常,这需要借助发送方存储在普通内存中的额外数据来实现。

2025-04-07 14:25:16 817

原创 RISC-V debug专栏2 --- Debug Module(DM)

调试模块通过设置不同的控制位,就像老师给学生发指令一样,来控制 hart 的运行、暂停和复位等状态,并且能根据 hart 反馈的信号了解它的状态。同时,对 hart 的响应时间也有一定要求。调试模块(DM)支持一组抽象命令,不过大部分命令是可选的。这就好比一个工具包,里面有很多工具,但不是每个工具都一定会被用到。有时候,就算被选中的硬件线程(hart)没有暂停,调试器也能执行某些抽象命令。就好像你在一台电脑运行程序的时候,也能对它进行一些简单的设置操作。

2025-04-02 14:34:06 878

原创 RISC-V debug专栏1 --- Introduction

调试器会和一个 “翻译官”(调试翻译器,例如 OpenOCD,它可能还包含硬件驱动)沟通,这个 “翻译官” 再和一个 “硬件桥梁”(调试传输硬件,比如 Olimex USB - JTAG 适配器这种硬件)交流。其他额外的寄存器呢,要么也通过 “抽象命令” 访问,要么给一个 “程序缓冲区”(可选的,相当于一个临时的 “指令小仓库”)写程序来访问。这个机制还能用来访问内存。打个比方,它就像一个 “门卫”,当满足特定条件(比如特定的指令、地址操作等)时,hart 就会停下来,并且告诉调试模块 “我停下啦”。

2025-04-02 11:01:47 838

原创 RISC-V AIA学习3---APLIC第三部分

不管 APLIC 其他部分的状态怎么变,这几个特定的寄存器或寄存器中的某些位的状态是有明确规定的,不会因为复位操作而变得不确定。由于APLIC和hart之间的通信可能存在延迟,因此可能会发生外部中断陷阱被捕获(hart侧的MEIP或SEIP置位),但当实际发生对claimi寄存器的读取时,没有该hart中断enable和pending的情况。在APLIC,发送至hart的每个中断信号,均源自寄存器domaincfg的IE字段以及该域的内存映射控制区域中 hart IDC结构的当前状态。

2025-03-27 10:24:53 946

原创 CHI协议——retry

当Completer暂时无法处理请求(比如tracker不够被占满)时,通过retry机制避免请求在 REQ Channel堆积,确保系统流畅运行。retry机制只存在于REQ Channel,在DAT/RSP/SNP Channel不存在a.允许重试的字段 AllowRetry 在第一次发送时必须置位,PCrdType必须为0(意味请求允许retry)。b.完成者在资源不足时返回 RetryAck,并记录请求srcID和PCrdType(HN自己定即可 0-15)。

2025-03-26 21:05:24 717

原创 RISC-V AIA学习3---APLIC 第二部分(APLIC 中断域的内存映射控制区域)

每个中断域都有一个专用的内存映射控制区域,用来处理该中断域的中断。控制区域的大小是 4KB 的倍数,对齐到 4KB 边界。最小的有效控制区域是 16KB。每个中断域就像公司的一个部门,有自己的 "文件柜"(内存映射控制区域):一个中断域的控制区域,由一组32bit位宽的寄存器组成存放所有部门共享的控制文件,例如:IDC 结构,只有在直接向 harts 传递 interrupt 时使用,而由 MSI 转发interrupt时不会使用。每个 IDC 结构为 32 字节,并定义如下:寄存器功能:APLIC 的中

2025-03-26 17:39:28 1076

原创 RISC-V AIA学习3---APLIC 第一部分

先介绍一下什么是APLIC为什么需要 APLIC? APLIC 是 RISC-V 架构中升级版的中断控制器,专门处理通过物理线路(而非电子消息)传递的硬件中断。就像传统邮局处理实体信件,APLIC 负责处理这类 “实体中断信号”。与旧版 PLIC 的区别 APLIC 是 “高级版”,不兼容旧的 PLIC。就像智能手机不兼容老式大哥大,新系统需要 APLIC 才能支持最新的中断管理功能。无 IMSIC 的系统 如果 CPU 核心(hart)没有 IMSIC(类似智能分拣中心),所有外部中断必须通过 AP

2025-03-25 14:41:12 1163

原创 RISC-V AIA学习2---IMSIC

我在学习文档这章时,对技术术语不太理解,所以用比较恰当的比喻来让自己更好的理解。比较通俗的理解:将 RISC-V 系统比作一个工厂:1. IMSIC 的角色定位2. 硬件接口3. 典型工作流程4. 为什么选择 IMSIC?一、 Interrupt files and interrupt identities工厂里有不同级别的管理人员,对应 RISC - V 里的不同特权等级。比如有最高管理层(M 模式)、普通管理层(S 模式),如果工厂还设有虚拟分厂(对应实现了 hypervisor extension),

2025-03-24 16:19:07 1193

原创 RISC-V AIA学习1----介绍

而且,每个管理员负责的抽屉编号都是独一无二的,这样就保证了每个 IMSIC 都能准确接收到属于自己的 MSI 中断,不会出现混乱。比如,当多个外设同时请求中断时,PLIC 会根据优先级排队,让 CPU 先处理最重要的那个。IMSIC用来接收MSI中断,因此,每个 IMSIC 在物理地址空间中被分配了一个或多个不同的地址,当对这些地址进行写入时,接收的 IMSIC 就表示该行为为 external interrupt。想象计算机的内存就像一个巨大的文件柜,里面有很多抽屉,每个抽屉都有一个特定的编号(地址)。

2025-03-21 18:59:50 870

原创 CHI协议中的read transaction flow

而RN1该cacheline的状态是UDP(该cacheline部分是unique dirty态),会将主存读到的数据和RN1的部分dirty的cacheline merge 给到RN0,RN0最终得到该cacheline的UD态。而RN1该cacheline的状态是UDP(该cacheline部分是unique dirty态),会将主存读到的数据和RN1的部分dirty的cacheline merge 给到RN0,同时再次发起writenosnp将merge data再重新写回主存。

2025-03-11 22:57:58 339

原创 ACE学习2——write transaction

这种事务通常用于将缓存行写入到缓存层次结构的更低级别,例如L3缓存或系统级缓存。WriteEvict事务不需要更新主内存,它主要用于缓存层级之间的数据迁移。WriteClean事务用于将cache中的dirty态的cacheline写回主存,同时允许主组件保留cacheline copy在cache中。WriteBack事务用于将cache中的dirty态的cacheline写回主存,以释放cache中的cacheline,用于存储不同地址的数据。这种事务通常在缓存行被替换或需要为其他数据腾出空间时使用。

2025-03-10 22:21:04 297

原创 带宽计算公式

例如,一个系统的时钟频率为 100MHz(即100×106Hz),数据位宽为 32 位,那么根据上述公式,它的带宽B=100×106×32=3200×106bps = 3.2Gbps。这意味着该系统每秒可以传输 3.2G 位的数据。带宽的定义就是单位时间(每秒)内传输的数据量。带宽 = 时钟频率 * 数据位宽。

2025-03-09 22:14:06 861

原创 ACE协议学习1

当一个cache获取一个cacheline的新副本时,其他拥有该cacheline的cache必须被通知,即使这些cache当前可能将该cacheline作为唯一状态持有,它们也必须被通知将其更改为共享状态!shared:该cacheline存在于一个或多个cache中,当cacheline处于shared状态下时,core对它进行修改时需要确保其他cache中状态得到适当的更新,以维护数据的一致性。在这种情况下,如果主组件读取缓存行,它可以直接使用缓存中的数据,而不需要从主内存中重新获取。

2025-03-09 20:55:53 739

原创 CCIX——ordering

只有当所有core都感知到 A 的写操作后,读操作才会返回新值,这样就避免了读取到未完全同步的写数据,保证了数据在读操作时的一致性)所有RN观察到的写操作的顺序必须一致(比如coreA 和 coreB都对地址X进行写操作,无论AB谁先发起写操作,按照多副本原子性的要求,其它core看到的对A和B的写操作的顺序都是确定的,不会出现有的core认为是A先写,有的core是B先写的情况)对于来自给定src到同一个target 标记为devnR的请求,无需等待上一个请求的comp,就必须保序。

2025-03-07 11:01:51 343

原创 CHI协议学习—— Chapter1 Intro

写无效协议(Write-Invalidate protocol)如果两个组件对同一内存位置的写操作,能够被所有组件以相同的顺序观察到,那么该内存区域就是一致的。这也确保了不同组件在访问共享内存时,对数据的修改和读取能够按照一个可预测的顺序进行,避免数据不一致。下图展示了 允许同一内存位置的缓存副本存在于多个RN的cache中,表明多个组件可以同时拥有相同内存位置的数据缓存副本。在对某个内存位置进行存储操作时,该位置最多只能在一个cache中存在,来保证所有RN在任何给定的地址位置都能观察到正确的值;

2025-03-05 20:58:57 1031

原创 HN-I SAM

如果新的请求可能落入新配置的地址区域或排序区域,并且这些请求需要与现有的pending请求保持排序,则必须禁用相应的address regions寄存器。:每个地址区域可以包含一个排序区域(Order Regions),这些排序区域是地址空间的更小子集。在排序区域内,设备内存排序保证得以维持。:排序区域0,是一个配置参数,用于指定在Address Region 0中哪些地址范围的访问请求需要被保证按顺序执行。:地址区域0,是设备内存映射中的一个特定区域,通常用于访问Boot Flash等关键资源。

2024-09-04 14:48:48 621

原创 四路组相联

2024-07-29 15:40:38 546

原创 SGDC---CDC

shell下的Sg_shell:比如写了一个sdc/sgdc是否有效,如下图将sdc里面的一句话cp过来,这句话的意思是使用的工具是DC才可以,但是我们这里没有使用DC,所以输入之后没有打印任何东西。所以可以在sg_shell中检查sdc写的是否正确,不用每改一个标点符号都重新跑一遍spg flow.在spyglass中跑CDC时,建议按照严重性分,也可以按照module分。当有了waiver文件,waiver tree就会显示waiver的信息。3.设置sync cell。

2024-06-12 16:58:07 950

原创 SGDC---dft_lint

SpyGlass Design Constraints是在利用SpyGlass跑LINT/CDC时的设计约束文件。3.CRG中插了occ buf的Z端都要设置成test_clock (否则会报时钟不受控制)4. 给CRG中所有的dff设置no scan(不上chain)2.指定scan_clk 和scan_mode。6. 所有reset都要受scan控制。1. 指定current_disgn。5.测试的东西可以设置no_scan。

2024-06-04 16:15:56 1050

原创 UMA和NUMA

NUMA和UMA

2024-06-03 09:39:51 340

原创 牛客刷题总结——跨时钟域处理

因为慢时钟域采快时钟域的信号可能采不到,所以需要将快时钟域的信号进行脉冲展宽之后再用慢时钟域的时钟采样。在做SoC设计中,免不了包含异步时钟,那就需要进行正确的跨时钟域处理来保证数据在不同时钟域传输不出错。便得到时钟域clk_b下的脉冲信号pulse_b,采用三级寄存器进行边沿检测,可以防止亚稳态传播。pulse_a转化为电平信号pulse_inv,然后在时钟域clk_b下对该电平信号进行。我们在使用这个模块时,无论对于快时钟域到慢时钟域还是慢时钟域到快时钟域,原理:将时钟域clk_a下的单。

2024-04-16 16:33:48 1656

原创 牛客刷题——串并转换

输入端输入单bit数据,每当本模块接收到6个输入数据后,输出端输出拼接后的6bit数据。数据拼接时先接收到的数据放到data_b的低位。1.串转并(串转并就是把1位的输入放到N位reg的最低位,然后N位reg左移一位,在把1位输入放到左移后的reg的最低位,这样循环,就可以得到,以最高位开始传输,最低位传输完成的N位数据了)valid_a用来指示数据输入data_a的有效性,valid_b用来指示数据输出data_b的有效性;2.并转串(把并行的N位数据的最高位给1位输出,然后类似的循环左移)

2024-04-16 16:33:35 603

原创 牛客刷题——使用握手信号实现跨时钟域数据传输

分别编写一个数据发送模块和一个数据接收模块,模块的时钟信号分别为clk_a,clk_b。两个时钟的频率不相同。数据发送模块循环发送0-7,在每个数据传输完成之后,间隔5个时钟,发送下一个数据。请在两个模块之间添加必要的握手信号,保证数据传输不丢失。

2024-04-16 14:08:55 530

原创 牛客刷题 day2

请编写一个子模块,将输入两个8bit位宽的变量data_a,data_b,并输出data_a,data_b之中较小的数。在数字芯片设计中,通常把完成特定功能且相对独立的代码编写成子模块,在需要的时候再在主模块中例化使用,以提高代码的可复用性和设计的层次性,方便后续的修改。这里很多习惯于软件思维的人写代码会只例化2次子模块,是将a,b比较之后的结果min_ab与c进行比较,进而得到min_abc。现在输入了一个压缩的16位数据,其实际上包含了四个数据[3:0][7:4][11:8][15:12],

2024-04-08 20:02:51 397

原创 牛客刷题1——verilog

输入在6的时候很特殊,只持续了一个时钟周期,但是out 给6乘1、3、7、8需要四个时钟周期,说明不能利用d的实时变化去算out的实时变化,所以在第一个input_grant的时候把d寄存起来。end包含,即使只有一句。5. 在数字芯片设计中,经常把实现特定功能的模块编写成函数,在需要的时候再在主模块中调用,以提高代码的复用性和提高设计的层次,分别后续的修改。4. 已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输入的d有效(d给出的信号的上升沿表示写入有效)

2024-04-08 15:53:15 620

原创 System Verilog —— 数据类型

相比于Verilog将寄存器(register)类型reg和线网(net)类型例如wire区分地如此清楚,在SV中新引入了一个数据类型logic。但是,verilog在给每bit都赋1时,就不能直接写’b1了,这样编译器会将前63位补零,必须得写成16个F (1111)。(2)SV作为侧重于验证的语言,只会作为单纯的变量进行赋值操作,而这些变量也只属于软件环境构建。(1)Verilog作为硬件描述语言,要考虑变量是寄存器,还是线网类型。四值变量的默认初始值为X,二值变量的默认初始值为0。

2023-12-18 14:22:52 664 2

原创 STA静态时序分析——配置STA环境

edge指的是DCLK的每一个边沿(既包括posedge,也包括negedge),从1开始,每遇到一个边沿,增加1因为通过这三个边沿我们就可以确定generated clock的high duration和low duration。在-edge_shift {}中,三个参数指的是下图下面那排,也就是时间。CLKDIV2的posedge在DCLK的第2个边沿,negedge在DCLK的第4个边沿,下一个posedge在DCLK的第6个边沿。

2023-12-18 14:22:39 2470 1

原创 VC SPYGLASS——RDC Verification

所有复位信号都是从异步复位同步释放电路处理过的,复位释放导致的亚稳态不存在, 主要是reset assertion时刻带来的亚稳态。每个模块的复位信号不一样,信号在跨异步复位域传输就会出现亚稳态的问题。2. 没有声明的soft reset(由reset控制,由dff q输出,经过组合逻辑,输入给其他dff作为reset),建议soft reset 显示定义出来。默认情况下,D-Q的reset传递是disable的,要设置才可以接收到原来的rst的,不设的话是没有reset传递的。

2023-12-18 14:21:35 3066 1

原创 systemverilog声明的位置

SV通过几种方式扩展了Verilog的声明空间。

2023-01-18 15:55:07 466

原创 SystemVerilog学习1——interface

system verilog interface

2022-12-22 17:40:02 3081

原创 verilog手撕代码——找出高位或低位第一个出现1

找出高位或者低位第一个1

2022-12-20 14:25:53 2511

空空如也

空空如也

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

TA关注的人

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