自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Maaaa的博客

技术的搬运工

  • 博客(58)
  • 资源 (1)
  • 收藏
  • 关注

原创 【AMBA】Read and write Shareable transaction types

对于仅支持ACE-Lite的主设备,这些主设备没有AC通道,即一般是给没有Cache的设备使用,但是有snoop通道可以监听其他的主设备,所以可以发送一些主动的Cache maintenance的传输,对于读传输来说Coherent的传输几乎不能发,只能发ReadOnce。这意味着 WriteEvict 事务是一种优化操作,它允许系统在不违反缓存一致性原则的情况下,将不再需要的干净缓存行移动到缓存层次结构中的更低级别,或者完全从缓存中移除。同时,这也确保了主设备是唯一可以访问该缓存行的设备,

2024-09-24 15:54:13 774

原创 【数字】DDR交织/interleaving/地址分配

首先这样做的目的主要还是保证对于DDR来说看到的地址是连续的,这样读写效率较高,不会浪费DDR的地址空间。这样的地址转换会将addr[30]映射到addr[12]上。第一片4K地址0~4K,0~FFF ==> 0~FFF , 0x2000~0x2FFF ==> 0x1000~0x1FFF,依次递增,那对于DDR来说看到的依然是连续的地址。验证:0~FFF位的addr[12] =0, 1000~1FFF的addr[12]=1, 4000_0000~4000_0FFF的addr[12] = 1。

2024-09-23 19:45:19 305

原创 【数字】flexnoc Qos配置

当一笔request的最后一个response回来的时候,增加这笔request传输的总bytes数,然后按照设置的bandwidth 需求来每个cycle减少相应的bytes,便会出现上图中的楼梯型图像。因为在软件界面处也会配置saturation的配置,在实际使用的时候可能当SocketQoSEn开启的时候会使用register value,当没开启的时候使用的就是一开始软件配置的默认值。当SocketQosEn开启的时候会使用qos generator和Socket QoS中最大的那个QoS值。

2024-09-23 19:12:56 273

原创 【ARM】SMMU系统虚拟化(3)

这个概念的理解是,假如使用的是4KB的granule,IA(input address)的位宽是35位,根据IA bits resolved at different levels of lookup 表格,可以得出initial level为 level 1。在ARMv8架构中,地址翻译可以是多阶段的。以4KB转换粒度为例,如果使用单个转换表,第一阶段查找可以解析39位的IA,即IA[38:30]。串联转换表技术,允许地址翻译的初始查找级别中解析更多的输入地址(IA)位。

2024-09-20 18:36:37 528

原创 【数字】xilinx的AXI VIP如何使用的guide

AXI Stream VIP 可用于为支持定制 RTL 设计流程的 AXI 主设备及 AXI 从设备验证连接和基本功能性。此外,它还支持贯通模式,该模式明显有助于用户监控事务处理信息/吞吐量或驱动有源激励。AXI VIP 提供的实例测试台和测试可演示 AXI4-Stream 的能力。这些实例可作为一个起点,为支持 AXI3、 AXI4、和 AXI4-Lite 接口的定制 RTL 设计创建测试。这些实例可通过 IP 集成器访问。AXI 验证 IP (VIP)

2024-09-11 15:02:46 465

原创 【数字时序】介绍三种芯片timing model(ETM\ILM\HS)

另外,使用HS时还有一个top context的概念,这个context就是指block外的和block port相连的一些timing信息,就是说不仅仅top层在做timing分析的时候可以用block的timing model,block层在做timing分析的时候也可以看到top层的一些东西,一般也是port到第一级reg为止的信息。其实ETM模型就很像我们用的cell的lib,都是只能看到它们的pin或者port,所得到的delay信息都是黑匣子式的,内部具体的delay都是被隐藏的。

2024-09-05 10:53:44 595

原创 【数字】AXI burst跨4k的问题

4K对齐,以32位地址为例,[31:12]相等的地址都是同一个page,没有跨4K边界。ARM对AHB burst这样设计的目的是在于,SLAVE的地址访问空间基本都是以1KB为单位的,当AHB以burst方式传输时,为了避免错误的访问到其他的Slave空间而造成系统致命错误,因此在burst传输时限制1KB,若需要跨1KB边界时,需要重新initial一个新的传输。在AHB划分系统时,最小的地址空间为1KB,即slave至少地址空间是1k,或者2K,或者1M等。Q2:“4K/1K对齐的”是什么意思?

2024-08-27 18:27:45 539

原创 【数字】理解1/256字节每周期的吞吐量阈值

1/256字节每周期的吞吐量表示系统在一个时钟周期内能够处理多少个1/256字节的单位。为此,我们需要了解以下几点:1字节 = 8位:字节由8位组成,因此1/256字节相当于将1字节分成256个部分。吞吐量计算:如果一个系统可以每周期处理N字节,那么其以1/256字节每周期为单位的吞吐量为: [ \text{吞吐量} = N \times 256 ]例如,如果系统每周期可以处理2字节,那么其吞吐量为512(即512个1/256字节单位)。

2024-08-27 16:11:10 393

原创 【数字时序】SI(信号完整性分析)/Cross talk(串扰)/Delta delay/噪声/消除delay和噪声的方法/Infinite window/Timing window

前言信号完整性(Signal Integrity)指的是在周围高频电磁干扰环境中依然能够保持信号稳定的能力;串扰(Crosstalk)指的是相邻的两条或多条net之间的耦合电容带来的相互影响。随着工艺越来越先进,布线密度越来越高,串扰带来的影响越来越重要。

2024-08-26 20:08:40 1158

原创 【数字时序】时钟树延迟偏差——CPPR adjustment

但对于common path,在计算setup的时候,作为launch path使用的是max delay,作为capture path使用的是min delay,这会导致结果过于悲观,所以需要去除这个计算的悲观量。当CRP的值小于给定的timing_crpr_threshold_ps时,路径不做CRPR补偿,保留一定的悲观度,因此 report_timing报出来的CRP值与report_crpr报出来的CRP值差距不会超过timing_crpr_threshold_ps的值。

2024-08-26 14:39:57 812

原创 【数字时序】Innovus时序报告解读

而实际需要check的时钟沿和理想时钟沿有一定偏移,因此,工具需要根据自己的算法加上phase shift,才能得到它真正要去check的时钟沿。如果你生成的clock是positive clock,clock的rising edge就是leading edge,falling edge就是trailing edge。如果你生成的clock是negative clock,clock的rising edge就是trailing edge,falling edge就是leading edge。

2024-08-26 14:04:22 984

原创 【科普】8月国内ChatGPT-4镜像网站

转两个常用路径的gpt4镜像网站整理,好用能用~

2024-08-20 14:10:10 382

原创 【SOC】DMA时钟使用限制

这3个信号中只有write_enable同步到了dma_core_clk的时钟域,write_byte_en和write_data仍然使用的是config配置时钟。分析它为什么这么设计的原因:可能是默认dma_core_clk在异步使用的时候,默认dma_core_clk会快于config时钟,在这种情况下,write_byte_en和write_data使用config时钟也能被正常采样到,不会出错。先给出结论:在使用异步的时候DMA的配置时钟不要快于dma_core_clk。

2024-08-15 11:45:12 320

原创 【ARM】Cortex-A72技术手册(1)

这意味着ACP接口允许某些类型的加速器或辅助处理器以一致性的方式访问主处理器的内存,但这些加速器不能主动发起需要处理器响应的一致性操作或同步指令。当处理器中的任何核心执行SEV指令时,EVENTO信号被断言,表示向所有核心发出事件信号,并且EVENTO信号在任何核心执行SEV指令时保持高电平三个CLK周期。执行WFE指令时,核心等待核心中的所有指令完成后再进入空闲或低功耗状态。,简称WFE)是ARMv8-A架构的一个特性,它使用基于事件的锁定机制,通过禁用核心的时钟同时保持核心供电,将核心置于低功耗状态。

2024-08-13 11:44:13 978

原创 【ARM】v8架构programmer guide(5)_ARMv8指令集介绍

ARMv8架构中最显著的变化之一是引入了64位指令集。这个指令集补充了现有的32位指令集架构。这一增加使得处理器可以访问64位宽的整数寄存器和数据操作,并且可以使用64位大小的内存指针。这些新指令被称为A64,并在AArch64执行状态下执行。ARMv8还包括了原始的ARM指令集,现在称为A32,以及Thumb(T32)指令集。A32和T32都在AArch32状态下执行,并提供与ARMv7的向后兼容性。

2024-08-08 09:53:10 1374 1

原创 【ARM】v8架构programmer guide(4)_ARMv8的寄存器

这些128位寄存器在NEON指令中可以被当作一个128位的单一寄存器使用,或者在某些操作中被分为较小的寄存器组,例如两个64位寄存器或四个32位寄存器。这意味着在进行状态转换时,AArch64的异常链接寄存器的高32位不会被AArch32状态中的相应寄存器值所影响,而是被清零,以确保在AArch64环境中以一致的64位状态进行处理。这个映射的一个后果是,如果一个在AArch64下执行的程序正在解释来自AArch32执行的D或S寄存器,那么程序必须在使用这些寄存器之前,将D或S寄存器从V寄存器中解包出来。

2024-08-07 19:31:03 969

原创 【ARM】v8架构programmer guide(3)_ARMv8的寄存器

在ARMv8架构的AArch64执行状态中,提供了31个64位的通用寄存器,这些寄存器在所有异常级别(Exception Levels, EL)上始终可访问。这些寄存器通常被称为X0到X30。每个AArch64 64bit的寄存器X0-X30也有一个32bit的格式。在ARMv8架构的AArch64执行状态中,每个64位通用寄存器X0到X30都有一个对应的32位宽的低半部分寄存器,称为W0到W30。:例如,W0是X0的低32位,W1是X1的低32位。

2024-08-07 10:30:42 947

原创 【ARM】v8架构programmer guide(2)_处理器及V8基础

ARMv8-A引入众多改变:在ARMv8中,执行发生在四个异常级别(Exception levels)中的一个。在AArch64状态中,异常级别决定了特权级别,这与ARMv7中定义的特权级别类似。异常级别决定了特权级别,因此在异常级别ELn上的执行对应于特权级别PLn。同样,如果一个异常级别的n值比另一个大,它就处于更高的异常级别。一个异常级别如果n值比另一个小,就被称为处于较低的异常级别。异常级别为软件执行特权提供了逻辑上的分离,这适用于ARMv8架构的所有操作状态。它类似于并且支持计算机科学中常见的分层

2024-08-06 19:55:50 1012

原创 【ARM】v8架构programmer guide(1)_基本介绍

程序员指南的目的是补充而不是取代现有的ARM文档,例如处理器本身的技术参考手册(TRMs)、个别设备或板子的文档,或者最重要的是ARM架构参考手册(ARM ARM)。它们旨在以温和的方式介绍ARM架构,并以易于阅读的格式涵盖所有主要概念,包括实际的C语言和汇编语言代码示例,并提供编写自己代码的提示和技巧。可以说,如果你是一个应用程序开发者,你不需要知道处理器内部发生了什么。ARM应用程序处理器可以很容易地被视为黑盒子,当你说开始时,它们就会运行你的代码。

2024-08-06 15:15:04 941

原创 【SOC】SoC架构系统总线的QoS管理——QoS generator

工具文档理解#

2024-08-05 19:55:11 853

原创 【ARM】SMMU系统虚拟化(3)_ VMSAv8-64 address translation stages

讲解颗粒度granule size如何影响地址转换的过程:对于每个颗粒度来说:由上面的例子我们知道,当超过39的时候,initial level会从level0 开始,但是level0不支持block 的分配方式,只有level1和level2支持block,所以只有table。由这个例子可以推测出如果系统的地址空间是44bit,使用4KB的translation granule的时候,那么TTBR[47:44]必须是0,TTBR[43:12]持有translation table base address

2024-08-05 16:00:28 362

原创 【ARM】SMMU系统虚拟化(2)_转换页表的配置方式boot_code.s

在ARMv8架构中,是一个特殊的汇编语言源文件,通常用于编写启动代码。启动代码是系统启动时首先执行的代码,负责初始化系统环境,设置堆栈,以及跳转到操作系统的启动例程。以下是初始化堆栈:在系统启动时,需要设置一个初始堆栈,以便程序可以正常执行函数调用和返回。设置BSS段:BSS段(Block Started by Symbol)是未初始化的全局变量和静态变量的区域。启动代码通常需要将这个区域清零。设置控制寄存器:启动代码可能需要设置一些控制寄存器,以配置处理器的工作模式和行为。跳转到操作系统启动例程。

2024-08-02 17:13:15 1004

原创 【SOC】总线中常见的仲裁方式Arbitration

如果多个输入输出具有相同的压力水平,并且该水平在具有不同压力水平的其他端口中的等级最高,则使用仲裁算法来现在组中具有最高压力的端口之一。竞争树用于选择授予哪个仲裁端口,当端口数量是2的幂时,仲裁时公平的,除此之外,一些端口的竞争水平低于其他端口,对树状分支内的端口进行排序,以确保没有哪个端口比其他端口的竞争水平低一个以上。对于Round Robin来说每个端口的priority都是轮询的,观察下图及priority都是逐渐递增的,会造成周期性的问题。仲裁时,具有最低端口优先级的端口会被授予权限。

2024-08-01 16:48:32 208

原创 【AMBA】AXI4 Ordering Model,保序,ID规则

工作日志记录补坑篇把之前记录在笔记本上的笔记慢慢转移到博客上,之前提过一次把transaction的保序规则记录一下,花几十分钟整理一下。

2024-07-31 10:26:57 776

原创 【AMBA】Atomic sequences and exclusive accesses(原子序列和互斥访问)

协议整理#经常碰到的原子访问和互斥访问,这个概念在多核系统中非常常见了,很多不同地方会有不同的概念,以ARM的架构为主整理一下这两个操作,有个清晰的概念吧。ps:主要是因为NoC里面的写的我有点懵了,还是看看AMBA的文档吧。

2024-07-26 14:06:34 693

原创 【数字】三态门,双向端口,HDL描述

工作记录#之前工作的时候,负责GPIO的同事被负责人问“三态的en开启的时候是直通的吗?” 他支支吾吾的回答“是的吧”,负责人又问了一句,他就有点不自信了,顺手记录一下这个在SoC设计中非常场景的逻辑。

2024-07-23 10:52:28 466

原创 【SOC】MPU粗略记录

参考文章:Isolation Methods in Zynq UltraScale+ MPSoCs Application Note (XAPP1320) • 查看器 • AMD 技术信息门户

2024-07-22 17:10:28 136

原创 【SOC】SoC架构地址分配

当需要限定地址空间为1GB~2GB的时候,可以分析出1GB时30bit一定是1,2GB的时候31bit一定是1,所以可以得出addr[30]==1 && addr[大于30bit] == ’b0的地址空间代表1GB~2GB。往上递增GB的时候2、4、8、16按照2的幂次来递增即可,即相应的在31、32...来分配即可。PS:ARM架构下32位的一个word的长度是32位,64位的一个word的长度是64位。好记性不如烂笔头吧,承认一波脑子反应速度太慢了,还是记录一下来促进记忆。

2024-07-22 11:03:33 342

原创 【ARM】SMMU系统虚拟化(1)_特征功能详解

内部文档整理MMU-500 是一个系统级的内存管理单元(Memory Management Unit, MMU),它负责将输入地址转换为输出地址,这一过程基于 MMU-500 内部寄存器和转换表中的地址映射和内存属性信息。地址转换阶段地址从输入地址转换到输出地址的过程被称为地址转换的一个阶段。支持 ARM 架构MMU-500 支持 ARMv7 和 ARMv8 架构定义的转换表格式。转换类型第一阶段转换。

2024-07-18 20:16:11 1404

原创 【工具使用】EMACS的verilog_mode脚本

在做集成工作的时候,集成连线估计是一件比较繁琐且容易出错的事情,连线类型定义出错、位宽问题、连线众多等等问题,此时使用由Veripool带来的verilog_mode简直是令人神清气爽。然后上个简单的例子,在emacs(类似gvim的编辑器)中按Ctrl C然后按Ctrl A就能开始自动生成,Ctrl C 然后按Ctrl K就恢复到没有自动生成的模式。下面直接上官网连接:(英文好的直接看这个吧非常详细的)俗话说不会玩连连看的工程师不是一个好的SoC工程师。

2024-07-17 19:36:19 480

原创 【ARM】CCI缓存一致性(3)_集成指导整理

然而,如果暂停事务的原因是为了防止其他事务饥饿,被暂停的事务在早期写入事务完成后才能继续。请求集中器(RC)根据事务跟踪器(Transaction Tracker, TT)和ID跟踪器(ID Tracker, IDT)中的服务质量(Quality of Service, QoS)属性和占用水平(occupancy levels)来对请求进行仲裁。此外,任何在主设备之间共享的可缓存地址都必须使用被标记为内部共享(Inner Shareable)或外部共享(Outer Shareable)的事务来访问。

2024-07-13 18:05:02 716

原创 【ARM】使用JasperGold和Cadence IFV科普

Cadence的IFV,即Incisive Formal Verifier,是一种形式化验证工具,它通过在测试台架可用之前检测错误,使得设计周期的验证阶段可以非常早期地开始,并缩短了设计收敛的时间。此外,形式化验证在SoC连通性验证方面的应用也被详细描述,它提供了一种可扩展的解决方案,可以在过程中更早地发现更多的连通性问题,并且使用的验证资源更少。形式化验证是一种补充传统的仿真验证的方法,它可以在不运行仿真的情况下,通过逻辑和数学方法来证明设计的正确性或找出潜在的错误。

2024-07-13 13:42:44 1124

原创 【ARM】CCI缓存一致性(2)_特征功能详解

Transaction Tracker(TT)是用来解决一致性和ordering问题的,它是non-blocking的并且可以根据QoS的需求来reorder requests。TT使用一个snoop filter来决定发送snoop requests的位置。CCI-500 是一种一致性互连,它能够实现硬件一致性。在硬件一致性系统中,操作系统可以在多个处理器集群上运行,而无需复杂的缓存维护软件。这是高级 ARM big.LITTLE 处理模型(如全局任务调度,GTS)的基本要求。

2024-07-11 17:56:03 1067

原创 【ARM】CCI缓存一致性(1)_验证testbench方案

基于目录的做缓存一致性功能的模块,支持4个ACE、6个ACE_LITE(ACE和ACE_LITE加起来不超过7个)、4个memory port、2个system port。Snoop Filter 用来记录来自Master的transaction,判断是否hit或Miss,如果hit表明其他的core中有相应的data,需要将这个request发往这个core,如果miss,则直接往主存发request。工作记录一下对CCI500 local验证case的波形理解,梳理一下ACE接口的逻辑流程。

2024-06-13 15:50:41 359

原创 AMBA-APB 协议介绍

系列文章目录文章目录系列文章目录前言一、APB二、APB signals三、write transfersno wait stateswait states![在这里插入图片描述](https://img-blog.csdnimg.cn/a4cf59c2ae564b58bf4eb25fbc72944f.png)四、Read transfersno wait states![在这里插入图片描述](https://img-blog.csdnimg.cn/a49e3b66382c42cbb97653f565

2022-04-28 15:52:17 1696

原创 verilog中简单的one-hot 状态机转换

简单的one-hot 状态机转换one-hot 编码verilog中写法one-hot 编码0001 0010 0100 1000如上例每次只有1个bit位置high其余low的状态叫one-hot,相反只有1个bit low 其余bit high 叫 one-cold。verilog中写法一般状态机转换中我们会先paremeter A = 0001, B = 0010, C = 0100, D = 1000;像这样预设值,这里介绍一种新的方法,如上图的变化,如果state想变到 A状态

2021-01-04 07:41:15 3272

原创 verilog中边沿检测器,双边沿检测器和双边沿触发寄存器的理解和写法

verilog中边沿检测器,双边沿检测器和双边沿触发寄存器的理解和写法单边沿检测电路图双边沿检测电路图下降沿检测保持器件电路图双边沿触发寄存器(DDR)单边沿检测电路图根据电路图很好理解, 为了让原来的信号保持一下也可以说是延迟一个时钟,就能做出上升沿的判断,后面加入一个寄存器的目的就是为了让检测延迟一个时钟显示,也保证检测只持续一个时钟。module top_module ( input clk, input [7:0] in, output [7:0] pedge);

2021-01-03 09:50:40 3341

原创 数字电路中卡诺图理解

简单理解就是,卡诺图是用来化简数字逻辑的图表,它将不同输入变量的组合枚举到图表中,然后填入是否为1或者0. 化简有2种方式1种是SOP一种是POS。SOPsum of products就是 P = ab+ bc + abc 这种形式化简方法为:1.圈出相邻的1(4个角也可以认为是相邻的)2.化简写出每个圈的最简式子3.将最简式相加举例假设A圈是 BD构成,B圈是B’ D’构成,则最后结果是 BD+B’D’POSproduct of sum就是P =(a+b)(c+d) 这种形式化简

2021-01-03 08:51:19 3345 1

原创 verilog中全加器行为级别(+ verilog中会自动添加进位)

module top_module ( input [3:0] x, input [3:0] y, output [4:0] sum); // This circuit is a 4-bit ripple-carry adder with carry-out. assign sum = x+y; // Verilog addition automatically produces the carry-out bit. // Verilog quirk: Even though the va

2020-12-26 04:43:33 570 1

原创 verilog中 在选择vector部分的时候无法使用variable变量的问题

经常碰到的问题就是使用一个vector的时候input [11:0] a;想每隔4个取一组 即a[3:0] a[7:4] a[11:8]for(genvar i =0; i<3 : i = i+1)a[(i*4+3):i*4]这种形式会报错 i is not constant file. 这种错误,表示verilog不知道这个a选取的时候是不是一个固定值。解决方法有两种一用连接符a={in[i*4+3],in[i*4+2],in[i*4+1],in[i*4+0]}每个相应位置选取

2020-12-25 00:06:52 921

cadence VirtuosoTutorial.pdf

cadence 6.1版本讲义,很细节的操作都会讲,内容应该是关于反相器的设计,涉及版图方面的内容。

2019-12-05

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

TA关注的人

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