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

技术的搬运工

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

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

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

2024-08-26 20:08:40 536

原创 【数字时序】时钟树延迟偏差——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 348

原创 【数字时序】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 609

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

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

2024-08-20 14:10:10 152

原创 【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 284

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

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

2024-08-13 11:44:13 789

原创 【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 1209 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 917

原创 【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 898

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

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

2024-08-06 19:55:50 973

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

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

2024-08-06 15:15:04 901

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

工具文档理解#

2024-08-05 19:55:11 787

原创 【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 327

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

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

2024-08-02 17:13:15 945

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

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

2024-08-01 16:48:32 154

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

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

2024-07-31 10:26:57 674

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

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

2024-07-26 14:06:34 670

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

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

2024-07-23 10:52:28 437

原创 【SOC】MPU粗略记录

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

2024-07-22 17:10:28 127

原创 【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 300

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

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

2024-07-18 20:16:11 1268

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

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

2024-07-17 19:36:19 439

原创 【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 624

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

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

2024-07-13 13:42:44 963

原创 【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 1013

原创 【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 315

原创 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 1548

原创 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 3170

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

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

2021-01-03 09:50:40 3227

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

简单理解就是,卡诺图是用来化简数字逻辑的图表,它将不同输入变量的组合枚举到图表中,然后填入是否为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 3290 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 550 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 883

原创 verilog中 case写法避免写default的巧妙写法

always @(*) begin out = '1; // '1 is a special literal syntax for a number with all bits set to 1. // '0, 'x, and 'z are also valid. // I prefer to assign a default value to 'out' instead of using a // default case. case (sel) 4'h0: out

2020-12-24 23:19:59 3020 4

原创 casez优先编码

always @(*) begincasez (in[3:0])4’bzzz1: out = 0; // in[3:1] can be anything4’bzz1z: out = 1;4’bz1zz: out = 2;4’b1zzz: out = 3;default: out = 0;endcaseendz位置case不管是什么都可。

2020-12-24 23:18:15 208

原创 verilog中 blocking assignment 和non-blocking assignment的区别(阻塞赋值和非阻塞赋值的区别)

阻塞赋值与非阻塞赋值:1.阻塞赋值“=”(组合逻辑电路),非阻塞赋值“<=”(时序逻辑电路);2.Verilog模块编程的8个原则:(1) 时序电路建模时,用非阻塞赋值。(2) 锁存器电路建模时,用非阻塞赋值。(3) 用always块建立组合逻辑模型时,用阻塞赋值。(4) 在同一个always块中建立时序和组合逻辑电路时,用非阻塞赋值。(5) 在同一个always块中不要既用非阻塞赋值又用阻塞赋值。(6) 不要在一个以上的always块中为同一个变量赋值。(7) 用$s

2020-12-22 21:51:14 1649

原创 VHDL中 inout vs buffer out 的区别

inout - is used for ports that can both be an output and an input. They’re called tri state buffersif you define a port as inout, you also have to define it’s behaviour.Suppose "some_inout " is defined as an inout std_logic port in your entity.Code:som

2020-11-01 22:02:02 1121

原创 数字IC必修之Verilog知识点——Task和Function,System Task(系统函数), System Function, Verilog-2001

task和functiontask 和 function 的声明在module内部,且不需要先于调用之前。task:只能在procedural 内部调用,task的调用方式是statement本身,而不是表达式。function:可以在module的任何地方调用,是作为一种operands来使用。tasktask可以有0个或多个argument(即input output), 可以有延时,上升沿下降沿的使用。使用时的典型例子: read_reg(input [31:0] add, ..

2020-08-06 04:15:47 1195

原创 数字IC必修之Verilog知识点——时序逻辑(sequential logic),锁存器,异步&同步触发器flipflops,N位移位寄存器,计数器,FSM三段式状态机

Flip-Flopsasynchronous (异步中CDC)synchronous(同步时钟)时钟上升沿到来后,会产生的FSMs:有限状态机在同步时钟中一般用状态机来进行控制——structural view(FFs separate from combinational logic)——behavioral view(synthesis of sequencers)Latch with Reset第二个if没有else连接,所以当g=0时,Q锁存原来的值。异步复位F..

2020-08-05 22:56:53 836

原创 数字IC必修之Verilog知识点——系统任务,综合器指令,parameter重要性,testbench规范(面试小白考试)

System Tasks$display("…",arg2,arg3,…); 打印数据$monitor("…",arg2,arg3,…); 数据变化时才打印$stop suspends sim when encountered$finish finishes sim when encountered$fopen(“filename”); 返回file descriptor(integer); then, use $fdisplay(fd,"…",arg2,arg3,…); or #fmoni.

2020-08-05 03:58:49 318

原创 数字IC必修之Verilog知识点——模块建立及常用语法总结过程块中的语法(面试小白考试)

Modulemodule my_module(out1,…,inN) ;output out1,…,outM;input in1,…,inN;…// declarations…// description of f (maybe sequential)endmoduleContinuous Assignmentsassign #de1 (net type) = expr;inside a moduleoutside procedures(always可综合 initial不..

2020-08-04 23:42:02 490

cadence VirtuosoTutorial.pdf

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

2019-12-05

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

TA关注的人

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