一文学习 AHB ram 验证


前言

面试问题:
0. 数据类型 默写下

  1. uvm_do() 的源代码讲一下,
  2. seq 发送到driver,seq_item是如何转换成transaction,为什么要由sequencer?
  3. scoreboard 谁驱动的。信息比较 :monitor拿到的信息 和 写seq中的数据比较这样做对么 ,是靠addr去比较的么
  4. AHB协议, 信号默写下,以及信号的master控制还是slave控制?transfer图默写下
  5. rgm 加深,默写下
  6. 字对齐,理解,默写下
  7. 对于sram只测试读写对么,每一测试代表的含义

以下内容大多是自己的理解,如有错误还请指正,谢谢。

开始是黑盒验证,ram就是mem,按照一定地址写进去,再按一定地址读出来。

在16位的系统中(比如8086微机) 1字 (word)= 2字节(byte)= 16(bit)

32位的系统中(比如win32) 1字(word)= 4字节(byte)= 32(bit)

在64位的系统中(比如win64)1字(word)= 8字节(byte)= 64(bit)

1字节(byte)= 8(bit)


面试答案

1. uvm_do() 的源代码

uvm_transaction ->
uvm_sequence_item ->
uvm_sequence_base ->
uvm_sequence #( uvm_sequence_item) -> rkv_watchdog_base_virtual_sequence -> rkv_watchdog_countdown_virt_seq

零、计算机体系结构中的memory

计算机体系结构

1. memory中的大小端存储

在这里插入图片描述

BE8 : Byte-invariant big-endian (字节不变大端,8bits)
BE32: Word-invariant big-endian (字不变大端,32bits)
Little endian ()

计算机系统中,每个地址单元对应一个字节(8bit),一种数据类型的数据 可能占用若干字节。

大端模式:低位(字节/比特)放在高地址中,高位(字节/比特)放在低地址中。
小端模式:低位(字节/比特)放在低地址中,高位(字节/比特)放在高地址中。

一般操作系统都是小端模式;而通讯协议是大端模式; java和平台无关,默认是大端模式
常见的cpu的大小端:
大端:PowerPC、IBM、Sun
小端:x86
ARM既可以工作在大端模式,也可以工作在小端模式

2. 内存对齐的理解

2.1 什么是内存对齐

内存对齐,就是将数据存放到一个是字的整数倍的地址指向的内存之中。
不论什么数据都有一定的大小,当一个数据所在的地址 和 它的大小对齐的时候, 就说这个数据自然对齐了(naturally aligned),否则就是没对齐。

怎么理解数据的地址和它的大小对齐这句话呢?例如有一个地址a,它是n的整数倍,并且这个n是2的幂,这时候我们就可以说a和n个字节对齐了。举个栗子:当 a = 0x00000008,n = 4,2^2 = 4 的时候,就说地址a和4字节对齐了2。
套用到数据的地址和它的大小对齐这句话,例如一个long变量,它占用4个字节,也就是他的大小是4字节,如果这个变量的地址为 0x00000004、0x00000008 等,那么这个变量就和4字节对齐了,而如果它的地址是0x00000006 之类的,那么它就没对齐。
在这里插入图片描述
当存取一个地址对齐了它数数据大小的数据结构的时候,就说这是一次对齐存取。上面的例子说的是基本数据类型,当一个复杂的数据结构中的所有成员都自然对齐了,我们就说这个数据结构对齐了,为了能让复杂数据结构对齐,编译器一般会对数据结构做一些填充,使得它的成员都能对齐。

2.2 为什么要内存对齐

总结:提升效率和避免出错。

  1. 有不少平台的CPU,比如Alpha、IA-64、MIPS还有SuperH架构,若读取的数据是未对齐的(比如一个4字节的int在一个奇数内存地址上),将拒绝访问,或抛出硬件异常。
  2. CPU处理内存的方式(32位的x86 CPU,一个时钟周期可以读取4个连续的内存单元,即4字节),使用字节对齐将会提高系统的性能(也就是CPU读取内存数据的效率。比如你一个int放在奇数内存位置上,想把这4个字节读出来,32位CPU就需要两次。但对齐之后一次就可以了)。

2.3 怎么进行内存对齐

很多时候,我们是不需要关注内存对齐的问题的,因为处编译器已经自动为数据进行对齐:对于基本数据类型,编译器会给他们分配一个是他们大小n被的地址;对于组合类型数据结构,编译器会在成员函数中填充一些字节使得每个成员都自然对齐。

struct MyStruct
{
   
char a; // 1 byte
int b; // 4 bytes
short c; // 2 bytes
char e; 
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AHB RAM验证AHB GPIO验证是数字电路设计中非常重要的两个方面。AHB RAM验证是检测AHB总线上的RAM中有无错误,而AHB GPIO验证是确保GPIO模块能够正确地连接到AHB总线。 AHB RAM验证的主要目的是确保RAM存储器的正常操作。在AHB系统中,RAM是存储器的最常用类型之一。AHB RAM验证可以确保RAM存储器能够正确地读取和写入数据。这种验证通常涉及到RAM的不同操作模式,例如随机访问和半随机访问,在检测到错误时,该验证可以修复错误在RAM中的位置。 AHB GPIO验证的主要目的是确保GPIO模块AHB总线的正确连接。在一个完整的AHB系统中,GPIO模块作为输入输出端口使用。由于其重要性,可以使用GPIO模块来与外部设备进行通信,并在需要时向系统控制器发送信息。因此,确保GPIO模块通过AHB总线发送和接收信息是非常重要的。在验证期间,则需要检查所有GPIO口的访问权限和控制能力,以确保其在程序规定的时间内正常工作。 因此,AHB RAM验证AHB GPIO验证涉及到不同的验证因素。AHB RAM验证重点是存储器的操作,而AHB GPIO验证主要关注GPIO模块AHB总线上的连接,这些验证都是确保数据的可靠传输和存储的重要组成部分。 ### 回答2: AHB RAM验证AHB GPIO验证都是针对AHB总线上的不同设备的验证工作。AHB RAM验证主要是验证AHB总线上的RAM存储器,而AHB GPIO验证则主要是验证GPIO(通用输入输出)设备的功能。 首先,AHB RAM验证的目标是验证随机访问存储器(RAM)的正确性。因此,该验证需要验证存储器中的读和写操作。同时,也需要测试存储器的读写时序和数据传输正确性,以确保存储器能够正常使用。 相比之下,AHB GPIO验证的目标则是验证GPIO设备的输入和输出功能是否正确。因此,该验证需要针对GPIO设备的输入和输出信号进行测试,并验证这些信号是否能正确地从GPIO设备进入和离开AHB总线。 另外,AHB RAM验证需要对存储器进行读取和写入操作,以验证存储器内部的数据传输是否正确。这需要读取已存储的数据并对比读取结果,以确保它们匹配。相比之下,AHB GPIO验证需要检测GPIO设备产生信号是否符合规范,无需进行数据匹配。 总体而言,AHB RAM验证AHB GPIO验证是两种可以同时进行的验证,并且这两个验证方法在AHB总线设备开发过程中都非常重要。选择不同的验证方法需要根据验证的目的来确定。 ### 回答3: AHB RAM验证AHB GPIO验证是两种不同的验证技术,AHB RAM验证主要是验证AHB总线上的RAM存储器的正常工作和存储功能是否正确,而AHB GPIO验证主要是验证GPIO模块的正常工作是否正确。 在AHB RAM验证中,验证工程师通常会使用AHB总线读写数据到RAM,然后再从RAM中读取数据进行比对。验证工程师还会验证RAM是否正确地响应读写操作,并且验证读写地址能否正确指向RAM中的正确位置。在此过程中,验证工程师还需要验证是否存在因为读写操作而导致的RAM数据异常等。 AHB GPIO验证过程中则需要验证GPIO的各种输入输出操作是否正确。验证工程师需要通过模拟各种输入输出信号或模拟GPIO端口的逻辑状态,然后验证GPIO模块能否正确地对输入/输出信号做出响应,并输出正确的信号状态。GPIO验证还需要验证GPIO模块是否能够正确地工作在不同的工作模式下,并且能否正确地响应GPIO端口与其他芯片之间的通信。 因此,AHB RAM验证AHB GPIO验证是两个不同领域的验证技术,在验证过程中所需注意的问题和方法也不同。在验证芯片的各个模块时,验证工程师会根据实际情况选择使用适当的验证技术,以确保芯片的正常工作和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值