- 博客(21)
- 收藏
- 关注
转载 linux三大驱动类型:字符设备、块设备、网络设备
字符设备指能够像字节流串行顺序依次进行访问的设备,对它的读写是以字节为单位。字符设备的上层没有磁盘文件系统,所以字符设备的file_operations成员函数就直接由字符设备驱动提供(一般字符设备都会实现相应的fops集),因此file_operations 也就成为了字符设备驱动的核心。块设备除了给内核提供和字符设备一样的接口外,还提供了专门面向块设备的接口,块设备的接口必须支持挂装文件系统,通过此接口,块设备能够容纳文件系统,因此应用程序一般通过文件系统来访问块设备上的内容,而不是直接和设备打交道。
2024-12-27 09:48:48
84
原创 计算机和局域网通信
主板插入适配器,还必须在计算机操作系统中安装管理适配器的设备驱动程序,告诉适配器把网络数据存在存储器什么位置或者从存储器什么位置把多长数据发到局域网。ip地址 硬件地址。由于网络上的数据率和计算机总线上的数据率不同,因此适配器中必须有缓存数据的存储芯片。适配器和计算机通信走的计算机主板上的I/O总线,并行传输。计算机和局域网通信用的是通信适配器(大多指网卡)适配器和局域网通信用的是电缆或双绞线,串行传输。
2024-12-26 19:49:34
201
原创 AMBA总线简要发展框架
ACE 协议是基于 AXI4 协议,增加了 cache 的硬件一致性。一致性模型如下:简单来说,对于main_memory 中的数据,所有的 mster都可以其拿出来一部分放在自己的 cache 中,方便多次读取(如果其它 mst.cache 中有的话,先在其它 mst 的 cache 中读取),但是写入的话,在写入之前,清理掉其它 mst.cache 上对应的 cache line,再写数据到自己的 cache 中。
2024-12-26 14:30:39
836
原创 硬件统计采样PMU和SPE
触发PMU中断到内核中断处理,调用PMU driver然后将record通过软件写入buffer这些过程是比较耗时耗CPU执行cycle的。为了避免对正常应用/系统的性能影响,这种方式不能将采样频率设置太高。利用perf tool的’perf record‘可以获取这些信息。
2024-03-15 15:04:24
980
1
原创 c++之深浅拷贝
(String, Number, Boolean, Null, Undefined,Symbol)和。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。在栈中存储了指针,该指针指向堆中该实体的起始地址。
2024-01-15 16:08:47
407
1
原创 UVM框架的理解
uvm_component就是由其搭建成的一种高级生命,而sequence_item则是由其搭建成的血液,它流通在各个高级生命(uvm_component)之间,sequence则是众多sequence_item的组合,config则是由其搭建成的用于规范高级生命(uvm_component)行为方式的准则。从uvm_object派生出了两个分支,所有的UVM树的结点都是由uvm_component组成的,只有基于uvm_component派生的类才可能成为UVM树的结点;
2023-10-20 16:25:47
307
1
原创 一些汇编指令
看redboot的启动代码时,发现了很多地方使用了.MACRO这种宏定义,觉得类似C++里面的内联函数(C语言的宏定义成函数的对于新人来说可能不常用)。PS:形式参数只是一个标识符,他会在宏展开或者宏调用时被逐个展开,形参的定义也必须按照全局变量定义的。用 EQU 指令赋值以后的字符名,可以用作数据地址、代码地址、位地址或者直接当做一个立即数使用。2. 体: 这里包含的是当这个宏被调用时所需要执行的指令或者语句。.ascii和.asciz的区别是,.asciz会在字符串后自动添加。规则,形参不能为(%)。
2023-09-21 10:40:49
461
原创 AXI协议
●若hit,则CPU直接从Cache中读取数据即可。●若miss,有两种处理方式:>Read through,即直接从内存中读取数据;>Read allocate,先把数据读取到Cache中,再从Cache中读数据。●若hit,有两种处理方式:>Write through:把数据同时写到Cache和内存中;>Write back:先把数据写到Cache中,再通过flush方式写入到内存中。
2023-08-10 17:04:31
1347
1
原创 单核SOC系统设计
首先,cpu把这个字节从适配卡读到内部寄存器,然后再从寄存器传送到内存的适当地址。串行外围接口,主要应用于EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和解码器。SPI接口在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,全双工通信,速度总体比I2C快。通常cpu对其编程,一旦控制器初始化完成,数据开始传送,DMA就可以脱离CPU。1.对DMA控制器编程,写入数据要到达的内存地址和要传送的字节数;带bootrom的AHB接口的片上SRAM,可用于存储程序和数据。
2023-07-24 14:39:41
159
转载 UVM之phase
run phase发生在start_of_simulation阶段之后,用于激励的产生和testbench的监测和检查。run phase作为一个task实现,所有uvm_component的run phase都并行执行。测试台组件层次结构。在start_of_simulation phase之后,UVM并行执行run phase和pre_reset phase到post_shutdown phase。调用run_test()会构造UVM testbench根组件,然后启动UVM phase。
2023-06-27 17:23:05
708
转载 CPU组成原理基本概念梳理
1.字节8位二进制代码表示一个字节byte2.字-存储字计算机字长32位,64位,就是4个字节,8个字节3.数据字一个数就是一个存储字指令字一条指令就是一个存储字机器字长计算机一次能直接处理的二进制位数半字长字长等于半个机器字长双字长字长等于两个机器字长4.操作码不同指令操作码不同地址码参与操作的操作数的地址码5.操作码编码固定长度操作码:如果一共64条则需要6位二进制编码表示程序运行状态的一个二进制位序列。
2023-06-12 16:12:13
568
1
原创 ACE总线定义的缓存行状态
Clean, Dirty 干净时,缓存不负责更新主内存。脏的时候,相对于主内存,高速缓存行已被修改,并且此高速缓存必须确保主内存最终被更新。Unique, Shared 当唯一时,缓存行只存在于一个缓存中。共享时,缓存行可能存在多个缓存中,但这不能保证。Valid, Invalid 有效时,缓存行存在于缓存中。无效时,缓存行不存在在缓存中。ACE 协议定义了缓存状态。每个高速缓存状态都基于高速缓存行特性。
2023-04-17 09:59:20
267
转载 【总线】【PCI】【PCIe】【转】配置空间
和PCI并行总线不同,PCIe的总线采用了高速差分总线,并采用端到端的连接方式, 因此在每一条PCIe链路中两端只能各连接一个设备, 如果需要挂载更多的PCIe设备,那就需要用到switch转接器。PCIE设备的访问离不开其Bus,Dev,Fun的编号方式,如下图寄存器所示,Bit[23:16]用来存放Bus号,共8Bit,因此解释了上述表述为何一共有256条Bus,Bit[15:11]存放Dev,共5bit可存32个Dev,Bit[10:8]存放Bus,共3Bit可存8个Fun。
2022-09-02 16:21:51
1338
原创 RISCV中断异常
指令的PC值不对齐,会造成取指令不对齐错误。进入异常后,程序跳入相应中断服务程序中后,软件强行改写mstatus中mie改为1,再次打开。1.软件必须使用mret指令,然后硬件停止当前程序流,调到mepc里定义的pc地址去执行。这几个域的属性为只读,软件无法直接写这些域改变其值,只有中断源头被清除后才会相应归零。riscv架构中定义了csr寄存器机器模式中断使能寄存器mie来控制中断的屏蔽。2.读写数据访问的地址属性错误,如访问了只读的,会被MPU或MMU定位出。去执行mtvec寄存器里定义的PC地址。..
2022-09-01 10:49:09
2128
原创 ROM,RAM缓存内存傻傻分不清
RAM random accsess memory 可读可写,掉电数据就没了,分为sram和dram。ROM read only memory只读存储器,只能读不能写,掉电数据也在。dram需要动态刷新,因为电容放电的原因过一会得刷新一下,用作计算机内存。sram不需要动态刷新用作CPU的一二级缓存。...
2022-08-17 16:59:31
312
转载 Cacheable VS Non-Cacheable
不同的处理器平台对于non-cacheable的处理办法也是不一样的,在高级CPU里,一般在运行中,动态地采用页表的方式来标记某些内存是否是non-cacheable的,例如Linux内核里的有个常用的函数叫ioremap,在访问外设的时候经常会用到,它的作用是映射外设的物理地址到虚拟地址空间给内核驱动程序使用,在映射时,会将寄存器地址页表配置为non-cacheable的,数据直接从外设的地址空间读写,保持了数据的一致性。case4考虑双cpu的运行环境(不是双核)。...
2022-07-28 09:25:10
1366
转载 DMA/TCM/CACHE
这是ARM5TE引入的特性,目的是通过这一快速的存储区,一方面提高某些关键代码(如中断处理函数)的性能,另方面使存储访问延迟保持一致,这是实时性应用所要求的。TCM对于以下几种情况的代码是非常有用、也是需要的可预见的实时处理(中断处理)、时间可预见(加密算法)、避免cache分析(加密算法)、或者只是要求高性能的代码(编解码功能)。TCM是一个固定大小的RAM,紧密地耦合至处理器内核,提供与cache相当的性能,相比于cache的优点是,程序代码可以精确地控制什么函数或代码放在那儿(RAM里)。......
2022-07-27 16:00:03
446
转载 TLB缓存虚拟地址和其映射的物理地址
TLB是translationlookasidebuffer的简称。首先,我们知道MMU的作用是把虚拟地址转换成物理地址。虚拟地址和物理地址的映射关系存储在页表中,而现在页表又是分级的。64位系统一般都是3~5级。常见的配置是4级页表,就以4级页表为例说明。分别是PGD、PUD、PMD、PTE四级页表。在硬件上会有一个叫做页表基地址寄存器,它存储PGD页表的首地址。MMU就是根据页表基地址寄存器从PGD页表一路查到PTE,最终找到物理地址(PTE页表中存储物理地址).TLB其实就是一块高速缓存。......
2022-07-27 15:10:38
911
原创 覆盖率收集
1.收集覆盖率可以使用vcs、ius两种工具,vcs对应的覆盖率分析工具是dve,ius对应的覆盖率分析工具是imc;dve的打开方式是;其中vdb文件是跑出来的覆盖率收集结果文件VCS在仿真过程中,也可以收集CoverageMetric。其中覆盖率类型有包括control_flow和value两部分的coverage,line_coverage,branch_coverage,toggle_coverage,FSM_coverage。CoverageDatabase的产生使用工具。...
2022-07-27 11:48:04
5006
原创 内存一致性
首先说一下TSO模型在CPU与L1Dcache之间引入storebuffer,每个CPU核内专属一个storebuffer,写数的时候,数的更改值先存放在各自的storebuffer中,对方的核读取时读的还是原来未更新的值,但是本核内读取时可以读到更新值。紧接着在TSO基础上衍生出PSO模型在支持store-load就可以被对方核看到可以是load-store这种乱序基础上可以支持store-store这种乱序。risc-v模型典型代表,fence,amo,LR\SC。...
2022-07-26 20:16:54
525
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人