自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 资源 (2)
  • 收藏
  • 关注

原创 SATA学习笔记 14 ---SATA PM

1. PM简介PM是SATA用来括展端口的设别,类似于PCIe的SW、USB的hubPM不能继续接PMPM最多可以扩展出15个PortPM的端口有编号,从0~15,编号为15的固定是和HBA port相接的PM port。其他接Device的PM port编号0 ~ 14(从0开始,有多少个下游port,编号到几,不是每个PM都可以扩展到15个口)1.1 PM的切换类型共有两种切换类型,并不是PM的属性,是HBA的属性,在AHCI的generic host register(global

2022-03-19 02:20:43 4224

原创 SATA学习笔记 13 ---SATA NCQ

1. NCQ的简介NCQ在SATA 2.0中被引入最多支持32个命令outstanding主要是硬盘侧的优化。支持NCQ 特性的硬盘可以根据收到的多个command去优化执行步骤(不是保序执行的),从而减少所有命令执行完时间,较少磁盘、磁头的转动,延长硬盘寿命。NCQ使用First Party DMA Read command、First Party DMA Write command不具有NCQ特性和具有NCQ特性的硬盘的执行过程差异如下图所示2. First Party DMA com

2022-03-18 02:54:09 1799

原创 SATA学习笔记 12 ---SATA Command Protocol

1. Command ProtocolSATA有很多种Command,总体可以分为12类。每一类中的所有Command执行时的FIS的交互过程时一致的。下表的统计不是最新的,具体看ATA8-ACS1.1 Command的传播过程软件在shadow register中填好对应的Command block(除command field)、Control block;最后在command field中填入要发送的command的编码。HBA会去发送一个H2D给DeviceDevice收到后,解

2022-03-18 00:26:45 1936

原创 SATA学习笔记 11 ---SATA Flow Ctrl

1. Flow Ctrl当发送时,会存在待传输数据不足的情况,这时需要提醒接收端,本端会暂缓数据发送当接收时,会存在缓存空间不足的情况,这是需要提醒发送送端去暂缓数据发送流控是通过

2022-03-17 01:07:38 801

原创 SATA学习笔记 10 ---SATA错误处理

1. 架构SATA每一层都有错误检测以及错误信息的上报所有的错误信息都是通过SStatus和SError寄存器来看大致可以将错误分为如下类:Freeze:严重的错误,无法恢复。需要冻结状态,等待resetAbort:预期错误状态会持续,通常会终止这些操作。Retry:预期错误状态不会持续(暂时性错误),进行重传操作。(CRC、8b/10b Error、Display Error)Track/ignore:可恢复的错误,跟踪或忽略2. Phy layer的错误处理2.1 未正确与

2022-03-16 02:49:59 719

原创 SATA学习笔记 9 ---SATA重传机制(FIS Retry)

1. SATA重传机制SATA只支持对部分FIS进行重传除了DATA FIS,其他FIS都支持重传协议中说,因为DATA FIS的传输改变了HBA的内部状态,所以DATA FIS不支持重传。(怎么理解?)其实一般SATA是追求低成本的,所以控制器内部不会留太大的ram,故缓存不了DATA FIS全部数据,故无法玩完成重传重传不限次数,但最终软件超时后会对接口进行复位能进行重传的FIS2. 重传的过程1、发送端发送FIS2、接收端接收到FIS后,检测到错误(CRC错误,8b/1

2022-03-16 01:14:34 708 1

原创 SATA学习笔记 8 ---SATA FIS类型与详细格式解析

1. FIS简介SATA执行的所有传输都是以FIS进行的,链路上实际传输的只有:OOB、primitive、FIS每一个FIS进行传输,都需要完成X_RDY、R_RDY … 的整个交互过程(见SATA学习笔记 6)SATA协议目前规定的FIS共有8种有些FIS是单向的,有些FIS是双向的除了DATA FIS,每个FIS都有固定的大小。DATA FIS由于payload的变化,大小为2DWs ~ 2049 DWs2. FIS详解2.1 Register Host to Device FI

2022-03-13 02:25:55 1934 1

原创 SATA学习笔记 7 ---SATA task file和shadow register

1. task file 和 shadow register的概念SATA是基于PATA演进的,以前的PATA的操作都是通过command来执行的。也就是device收到一个command后,就去执行这个command对应的操作。PATA支持的所有command 有一个集合:command setSATA推出后为了软件上兼容PATA,需要支持这些command,但SATA也有自己新的command。但总体操作模式还是通过发送command给device,然后进行操作。Device会存在一组寄存器,

2022-03-11 03:01:12 1352

原创 SATA学习笔记 6 ---SATA Primitives(原语)与完整传输实例

1. SATA Primitives简介SATA共有18种原语每个原语的格式都相同,为1 DWs,first Byte为K28.5(只有ALIGN)/ K28.3,后续为3个D码原语也有disparity,但ALGN为neutral,所以可以随意插入,而不影响display(极性偏差)2. 原语详细介绍除了标红色圆圈的几种原语不常见外,其他的原语都非常常见2.1 ALGNALIGN用于建联过程中的速率协商Link Layer最多发送256个DWs后,就要发送2个连续的ALGN

2022-03-10 02:48:02 1260

原创 SATA学习笔记 5 ---SATA的Link Layer

1. Link层的主要作用Provides frame flow controlCRC generation / checkingScrambles / descrambles data and control words8b / 10b encoding ConductConverts data from transport layer into framesPrimitive Suppression Scrambler

2022-03-10 01:37:46 569

原创 SATA学习笔记 4 ---OOB信号与SATA识别、初始化

1. OOB信号因为OOB(Out Of Band)信号只用于识别,没有进行正常的数据传输,所以对于正常的数据传输信号(in-band)来说叫带外信号,故称为OOBOOB信号有3个,但实际只有两类COMRESET,COMINITCOMWAKEOOB都是以1.5G在发送OOB信号每个burst的宽度是一致的,两类OOB不同点在于两个burst之间的间隔时间不同OOB的burst只有两种,随意选其中一种即可。1)4个ALIGN原语 ;2)16个D24.3(SATA 1.0的协议规定OOB只

2022-03-09 01:03:45 2849

原创 SATA学习笔记 3 --- SATA简介

1. 背景SATA前身位PATA,由PATA改为了SATA,即由并行化改为了串行化,这样带来可很多好处。速率更快,SATA GEN3支持6Gb/s的传输速率采用差分信号传输数据,抗干扰能力更强连接线能够延伸更长,如GEN3i、GEN3x等标准端口减少,连接线的面积减少,方便服务器布线支持热插拔,方便用于服务器场景2. SATA的发展SATA目前有三代:GEN1、GEN2、GEN3,速率分别为1.5Gb/s,3Gb/s,6Gb/s。SATA协议由SATA-IO协会制定并维护,不同

2022-03-08 00:12:16 3989

原创 SATA学习笔记 2 --- 扇区(sector)、块/簇(block/Cluster)等的理解

扇区(sector)扇区是硬盘(HDD)的一个最小存储单元,有两种规格:512B(较老的)、4KB(较新的)硬盘的容量就对应这扇区的多少,以前硬盘容量较小,sector为512B时,扇区数量也不算多。后来随着技术的发展,HDD容量越来越大,当每个扇区仍然时512B时,那么扇区的数量就会非常多,不方便管理。所以硬盘厂商推出了Sector为4KB的HDDHDD中有一些概念需要理解,下图为HDD的内部实物图与示意图platter:就是指代一个存储盘,一般一个HDD中有多个存储盘track:一个

2022-03-06 01:40:25 1836 1

原创 SATA学习笔记 1 --- ATA、IDE、ATAPI、SCSI、SATA、SAS等概念澄清

IDE与ATA-1IDE(Integrated Drive Electronics)即集成驱动设备,由西数、康柏、Control Data Corportion(CDC,一个老公司,以前的硬盘制造商)一起发起。主要为了维持与ST-506接口的软件兼容性。IDE最早用于286(PC-AT:基于intel 80286的PC对比8086的第一代PC,使用了高级技术,Advanced Technology)的AT总线应硬盘驱动器。使用IDE这个名字是因为硬盘控制器是集成在驱动器上的(之气的硬盘和控制卡是分离的

2022-03-05 22:32:10 1734

原创 SystemVerilog学习笔记5 ---《SV Schedule》

1. 为什么要了解SV Scheduleverilog是一个硬件描述语言,而硬件在现实中都是并行执行的,所以verilog描述的组合电路和时序电路都是并行执行的。而仿真器作为运行在CPU上的软件,只是按照SV LRM的仿真调度算法,开始仿真后,将仿真时间串行的一步步的向前推进。因此,实际DUT中同时发生的动作由模拟器建模为一组有序动作,依次执行。如果不能很好地撰写RTL代码和TestBench,那么仿真可能得到不匹配的结果:即DUT为正确,但是仿真却报告错误;或者DUT为错误,但是仿真却报告正确。

2022-02-27 14:59:09 844

原创 SystemVerilog学习笔记4 ---《变量范围、lifetime、static和automatic》

先明确下基本的概念block:块。一些关键字组成的一个范围区间,就叫做块。如 module … endmodue / task … endtask / begin … end / fork … joinstatic lifetime:存活于整个仿真过程1. 变量的范围(scope )module、interface、program、checker都提供了一个本地(local)的命名空间用于变量的声明。不同 block中命名同名的变量并不会冲突。通过在building block中import

2022-02-20 01:14:17 1029

原创 SystemVerilog学习笔记3 ---《函数和任务》

1、function和task简介Systemverilog和Verilog中的 function 和 task有一些区别。1.1 verilog中task可以消耗时间,而function不能消耗时间。function不能包含一些消耗时间的语句,例如:#100n; @ ; wait()等fucntion不能调用taskverilog中的function必须要有返回值,并且返回值必须被使用,例如用到赋值语句中。task没有返回值1.2 SystemVerilog中task可以消耗时间,

2022-02-17 02:57:50 1532

原创 SystemVerilog学习笔记2 ---《多维数组的遍历》

一维数组遍历数组遍历一遍使用foreach或者使用for循环foreachint array[3] = '{9, 5, 8};foreach(array[i]) $display("array[%0d] = %d", i, array[i]);foreach循环相当于从数组的宽度的左端点,向数组宽度的右端点循环。...

2022-01-25 00:56:11 2438

原创 SystemVerilog学习笔记1 ---《数据类型》

数据类型logicverilog中有两种基本的数据类型:变量和线网(net)。都为4状态(0、1、X、Z)SystemVerilog中将Verilog中的reg进行了一定改进,使其除了作为一个变量外,还可以被连续赋值、门单元和模块所驱动。任何可以使用了reg和wire的地方都可以使用logic,除了存在多个结构性驱动场景时,例如,对双向总线建模时,应该申明线网类型(例如:wire),不能使用logic。logic为4状态类型。类型整理表类型名位宽有无符号状态默认值w

2022-01-25 00:52:27 1557 1

原创 Verdi使用技巧整理(持续更新)

【注意】我使用的verdi版本为 verdi2016_vL-2016.06-1,下面都是基于此版本的一些使用技巧修改Verdi默认字体Verdi 提供名叫Configure Rule Set form的配置文件,以.rc为后缀名,verdi按照如下优先级去检索配置信息,找到后将不再向下寻找。-rcFile 命令行参数 verdi -ssf <fsdb filename> -rcFile <filename> 优先级最高NOVAS_RC 环境变量./novas.rc$H

2021-11-14 02:38:43 7890

原创 Verdi使用中报错

错误1问题:本来可以好好使用,然后突然有一次,verdi打开就闪退,报:ICE default IO error handler doing an exit(), pid = 3475, errno = 32解决:在自己的home目录下($HOME),删除.ICEauthority文件即可。...

2021-11-11 00:43:32 2667

原创 centos8 安装gcc4.8.5/g++4.8.5【实测经验】

目录1,先安装高版本gcc2,安装gcc4.8.52.1,下载gcc4.8.5源码2.2,编译&&安装3,建立gcc的软连接4,编译gcc4.8.5中的错误4.1,错误14.2,错误24.3,错误34.4,错误44.5,错误54.6,错误6本人搭建工作站的时候,vcs需要使用到gcc,而且高版本的还不行,故在centos8中安装gcc4.8.5。1,先安装高版本gcc安装gcc4.8.5的时候还需要使...

2021-10-31 22:54:44 8837 1

原创 PCIe学习笔记(二)-------2.2 PCI Header(BAR大小、MEM与IO范围、总线号)

目录1,PCI Header2,BAR(Base Address Register)2.1,BAR的属性2.1.1,MEM BAR2.1.2,IO BAR2.2,BAR的大小3,MEM地址与IO地址范围3.1,prefetchable memory range3.2,non-prefetchable memory range3.3,IO Range4,总线号1,PCI HeaderPCIe配置空间中前64 Byte为PCI Header,分为Type0 .

2021-03-26 01:23:24 7450

原创 PCIe学习笔记(二)-------2.1 PCIe配置空间

1,PCIe的配置空间PCIe每个Function都存在4K的配置空间,4K空间中前256 Byte(0x00 ~ 0xff)是与PCI 兼容的寄存器。256 Byte的前64 Byte(0x00 ~ 0x3f)就是PCI Header,可以分为Type0 和Type1 两种类型。对于RC的port和 SW的port,PCI Header都是Type1。对于EP,PCI Header是Type0。PCIe的4K配置寄存器的前64 Byte寄存器(PCI Header)的两种类型分别如

2021-03-24 01:42:48 4009 2

原创 PCIe学习笔记(一)-------1.5 一个TLP包的传输过程

1,MRd包的传输以MRd TLP包的传输为例,说明一个Non-Posted事务的TLP是如何在PCIe系统层次中处理的。1)Requester的软件层发送需要传送的信息给事务层。2)事务层将数据打包成TLP的Header(和Data,MRd TLP没有Data),并根据需要是否附加ECRC,将完成的TLP存入相应的VC transmit buffer。流控制机制确保TLP在合适的时间被发送指数据链路层。3)数据链路层将TLP前增加Sequence ID,并在后面附加LCRC。然后将TLP存

2021-03-23 00:19:16 1955

原创 PCIe学习笔记(一)-------1.4 PCIe体系结构

目录1,PCIe体系结构1.1,Transaction Layer1.2,Data Link Layer1.3,Physical Layer1,PCIe体系结构前文已经说了PCIe可以分为三个层次:Transaction Layer,Data Link Layer,Physical Layer。下图中为PCIe设备层的详细模块图,左半部分为发送,右半部分为接收,两边有所区别。下文将分别对三个层次的结构和功能做一个简短的介绍。1.1,Transaction Layer功能:

2021-03-21 21:07:46 2485

原创 PCIe学习笔记(一)-------1.3 PCIe数据包(TLP,DLLP,PLP)

1,PCIe的层次结构PICe设备在硬件电路上可以分为三个层次结构:事务层(Transaction Layer)、数据链路层(Data Link Layer)、物理层(Physical)。每一个层次又可以分为两个部分,分别为处理发送和处理接收的部分。也可以分为四个层次,将事务层以上的层次称为软件层(Software Layer)。2,PCIe数据包前面已经说过PCIe之间是以数据包的形式来传输数据的,协议共定义了3类数据包。与处理层相关的是处理层数据包(TLP),与数据链路层相关的是数据

2021-03-21 21:05:38 11529 2

原创 PCIe学习笔记(一)-------1.2 PCIe总线简介

1,PCIe概览PCIe是第三代外围设备总线,英文缩写为PCIe或者PCI Express。PCIe是点对点,全双工的差分传输信号总线。点对点互连表示链路上的电气负载有限,从而使发送和接收频率可扩展到更高。PCIe目前成熟的版本有GEN1,GEN2,GEN3,GEN4和GEN5,每一代相较上一代传输速率和传输带宽都有了很大幅度的提升。PCIe每个Function的配置空间从PCI的256B扩展到了4KB,但前64B(PCI Header)配置寄存器仍然是相同的。差分信号对:PCIe采用差分对来串行传

2021-03-15 00:14:25 11730

原创 PCIe学习笔记(一)-------1.1 PCI总线简介

1,PCI概览PCI是Peripheral Component Interconnect(外设部件互连标准)的缩写,是第二代外围设备总线。PCI和PCI-X总线是多点并行互联总线,多台设别共享一条总线,通过仲裁机制来决定哪个设备占用总线。外围设别总线: 第一代:ISA,EISA,VESA,Micro Channel等 第二代:PCI,PCI-X,AGP 第三代:PCI Express2,PCI的带宽PCI总线常见的频率有33MHz和66M...

2021-03-14 02:42:27 2982

原创 Pycharm或pip安装PyQt5,QT designer,Pyuic

目录1,通过pip安装1.1,指定下载源1.2,配置pip从国内下载源下载2,通过Pycharm安装2.1,将Pycharm的下载源变更为国内的下载源2.2,安装模块2.3,Pycharm添加Qt designer为外部工具1,通过pip安装 想要安装:1,PyQt5 2,PyQt5-tools pip安装python的module可以参考文章https://blog.csdn.net/l...

2021-01-27 02:22:15 2471

原创 Python中类,对象,面向对象编程(OOP)的理解

目录1,给大家介绍对象2,对象的创建与使用2.1,对象的创建2.2,对象的使用2.3,添加和删除属性2.4,构造方法(__init__)和析构方法(__del__)2.5,对象的私有属性3,面向对象的精髓(封装,继承,多态)3.1,封装3.2,继承3.2.1,子类继承父类的非私有属性和方法3.2.2,父类的私有属性和方法3.2.3,子类调用父类的...

2019-12-31 17:08:23 528

原创 【下载所有XKCD漫画】 详细解析

目录1,实现目的2,准备工作2.1,确保所需模块已安装2.2,脚本思路3,全部代码4,执行结果1,实现目的XKCD 是一个流行的极客漫画网站。首页 http://xkcd.com/有一个“Prev”按钮,让用户导航到前面的漫画。Python脚本实现:从第1幅到第n幅(用户输入),下载这些XKCD网上的漫画。2,准备工作2.1,确保所需模块已安装本脚...

2019-12-21 20:16:44 1390 1

原创 【''I'm Feeling Lucky'' baidu 查找】 详细解析

目录1,确保所需的模块全部安装2,找到所用浏览器的User-Agent 信息3,完整代码块4,存在的问题1,确保所需的模块全部安装 该程序用了sys, webbrowser, requests, pyperclip, bs4 模块,除了前两个是python自带的,后三个都需要自己安装,若不会,可参考:通过命令行安装Python 的第三方模块。(注意bs4 模块...

2019-12-20 15:47:18 906

原创 通过命令行安装 Python 的第三方模块

打开pip.exe会闪退,导致无法安装python第三方模块。通过使用命令行安装可以规避这个问题,实现第三方模块的正确安装。问题:pip.exe闪退,无法通过GUI界面安装python 第三方模块解决:采用命令行安装 1,找到你电脑上pip.exe 的目录。首先找到你电脑上python的安装目录,如C:\Python\python38,该目录下的Scrip...

2019-12-20 10:04:11 2219

原创 递归的理解以及与循环,迭代的区别(Python 示例)

目录1,什么是递归1.1,递归与循环的区别2,递归函数实例2.1,Fibonacci sequence(斐波那契数列)2.2,Collatz sequence 1,什么是递归 递归最初给我的感觉就是循环嵌套调用(并不准确),对于递归这种思想,可以从递归函数来理解。先来看看递归函数的定义: 编程语言中,函数Func(Type a,...

2019-12-12 16:08:55 1808

原创 Perl学习之------哈希的排序

哈希是perl中一种重要的数据结构,计算机中hash表是完全乱序存储的,是为了最大化查找的速度。对hash的排序主要有按照key进行排序,或按照value进行排序。 两种排序都是将哈希的key进行排序,前一种是按照key的大小来对key进行排序,后一种是按照value的大小对key进行排序。(两种都是对 KEY 进行排序)结果为:...

2019-09-24 22:08:20 2300

原创 SystemVerilog——Polymorphism(多态)的理解

SystemVerilog作为一门面向对象的语言,和其他面向对象的语言一样,特性就是:封装,继承,多态。 尝试着去理解多态,网上有说:多态指调用相同的名字和方法,得到的结果是不同的。(from java)在SV中,If an instance sends a stimulus to another instance, but does not have to be aw...

2019-08-05 19:45:57 7463 4

原创 SystemVerilog——lab2学习笔记

lab2需要写drive,是在test中写。 思路:因为所有[15:0]端口都是独立的,所以选择一个想要的端口进行驱动(sa,一个 bit)。随机生成2--4个$urandom,塞入[7:0] payload [$] 中。然后把队列中的每一位数字的每一个bit 位依次赋值给 din 端口,进行驱动。驱动期间,保持对应位数的vliad_n 为低,frame_n 也是一直为低,直到...

2019-07-27 20:13:38 622

原创 SV中线程分析(fork..join,fork...join_any,fork...join_none)

发现了一点新的东西,加深了我对这几个线程的理解,写点东西记录一下。1,并行的实际执行顺序 大家都知道fork...join里面是并行执行的,但计算机执行语句肯定是有先后顺序的,具体那些并行的语句是怎么执行的呢? 这要看具体使用的SV 仿真器是怎么操作的。虽然fork...join里面是并行的,但VCS会先执行并行的写在前面的语句。 这个program中f...

2019-07-26 22:10:34 11804 2

原创 SystemVerilog——lab1学习笔记

最近在学习SV这门语言,做了一下Synopsys公司的lab(ces_svtb_2006.06-SP1.tgz),写一点自己的学习笔记。 Synopsys公司的这个lab验证的DUT为一个router。介绍如下: 看了下router.v这个code,发现它还有一个端口ouput [15:0] busy_n ,在这个图上面没有画出来。我写的lab1的SV ...

2019-07-26 20:57:15 2041

systemverilog for verification 绿皮书第三版(最新)课后习题答案.pdf

systemverilog for verification 绿皮书第三版(最新)课后习题答案.pdf

2022-01-14

verilog_systemverilog.vim

verilog与systemverilog的语法高亮文本,用于linux系统中在vim/gvim编译器下的verilog与systemverilog语法高亮

2019-04-26

空空如也

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

TA关注的人

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