- 博客(17)
- 收藏
- 关注
原创 将register model集成到验证平台中
register model的读写操作通过sequence产生一个uvm_reg_bus_op的变量(继承自uvm_sequence_item),经过转换器(adapter)转换之,交给cpu_sequencer,再有cpu_sequencer交给cpu_driver,cpu_driver最终实现FRONTDOOR读写操作。1.调用configure函数将reg_model的绝对路径加入进去,与上一篇文章中reg_model中寄存器的路径组合起来实现相关寄存器的BACKDOOR操作;
2025-03-21 15:37:03
170
原创 UVM补充(寄存器模型register model相关)
这里dut中有一个17bit位宽的寄存器version,我们的类继承于uvm_reg,声明一个rand的uvm_reg_field,命名为data,并例化它,将其配置为this(表明其parent),16(size),0(lsb_pos低位的位置),‘RW’(读写类型),1(是否易失,一般不使用),0(复位默认值),1(是否有复位),1(是否可以随机化),0(是否可以单独存取)它比uvm_reg_field高一个级别,可以理解为相当于一行,一个寄存器中至少包括一个uvm_reg_field;
2025-03-21 14:46:27
783
原创 【Python】学习笔记[一]
通过下表访问列表元素list[0]、list[2]=2001、i=2, list[i]把字符串x看作一个python表达式,求其值。逻辑判断,判断字符串切片是否在某字符串变量种。用in判断列表是否包含某元素。空表 empty=[]
2025-02-23 18:10:06
118
原创 SV宏的应用
在实际编程中,有时会碰到若干段代码高度相似,平时我们会想办法把它函数化,将它写成一个函数,然后在它原本的地方调用并传递相关参数。但是,有时候,这个不同的地方有点尴尬,不属于变量,可能是一个变量名中的一部分。此时,可以使用SV宏中的双反引号``来实现该功能。
2025-02-17 15:29:19
150
原创 参数化类型
虽然SV本身不直接支持参数化类型(如C++中的模板),但可以通过使用泛型类(generic class)来实现类似的功能。这个方法提供了在SV中实现灵活函数接口的方式,可以创建能够处理不同类型或数量参数的函数。
2025-01-24 10:24:19
171
原创 【物理层PHY】
但真实世界中的无线环境并没有这么理想,当接收一个符号时,接收的信号不会完全与星座点重合,理想星座点和接收点的偏差存在于二维空间,“未命中”被描述成误差矢量(Error Vector),如图a所示。VHT信号B字段在一个单独的OFDM符号中传输,在不同的信道宽度下,字段的长度会有细微的差别,如图所示。如图b所示,当接收符号处在几个星座点之间,接收机必须选择其中一个星座点,如果选择错误,整个数据帧就要丢弃,因此256-QAM要求的误码率要远远低于先前的调制方式。调制描述的是在一个传输间隔内包含多少位的信息。
2025-01-03 16:34:54
961
原创 【波束成形(Beamforming)和多用户MIMO(MU-MIMO)】
多用户MIMO(MU-MIMO)计数:AP接入点同时传输4个空间流,MU-MIMO可以将这4个空间流传输到3个独立的设备,其中两个空间流被发送到一台笔记本。AP利用波束成型计数将每个传输波束集中到相应的接收端。(b)中为使用中的MU-MIMO,其AP可以在自己的覆盖区域内独立传输,每个接收机空间复用正如以太网交换机从整个广播段降至单个端口传输以减少冲突一样;多用户传输是802.11ac的新功能,无线电波可以叠加,如果两个接收机位于不同方向上,采用波束成形计数可以在同一时间把信息发送给这两个接收机。
2025-01-02 17:50:05
523
原创 Perl语言学习笔记(一)
例:my @weekdays = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");# 表示1,2,3,4,5,6,7,8,9,10。#表示a,b,c,d,e,f。例:my @names = ('name1', 'name2', 'name3');例:my @animals = ("cat", "dog", "fish");例:my @items = ("a", "b", "c");
2024-12-16 13:47:08
325
原创 RTL ready & TEST_BENCH ready
注:网上很多资料$fgets()系统函数是先file_descriptor后line的,ai搜索的很多资料也是,这里留个疑问!在rtl、tb中无需声明`timescale,在命令行统一写入+nctimescale+1ns/1ps。在tb中若需要读取文件,则调用$fopen、$fgets()、$fclose等系统函数。当写好RTL和TEST_BENCH后,写flist.f文件让仿真软件吃进去。需要在flist.f文件中将其包起来(所有需要编译的文件)(指定编译文件列表),以及两个文件。
2024-11-27 17:09:05
385
原创 verilog/systems verilog/linux常用系统函数/命令
在跨文件调用函数或数组时,时常找不到函数或数组定义在哪,该方法用于搜索某目录下my_function/my_array。仿真启动时,用户可以在命令行中使用+key=value的形式来传参;1.$clog2():计算以2为底对数的整数。key为字符串用于标识命令行中传递的参数;value是key相关联的值;
2024-11-18 11:07:55
148
原创 如何按下某个键位(例:F2)执行一段注释代码
项目开发中,多人合作是普遍存在的,所以在每个文件的起始处常常会加上几行注释,来表明文件名/开发日期/作者/文件描述等信息。3.在vim中source该文件(:source ~/.vimrc);2.编辑函数InsertComment(),详见附录;4.新建任意vim文件,按下F2即可实现该功能;1.在根目录下创建.vimrc文件;
2024-11-04 18:58:24
304
原创 UVM & SV八股
run_phase和12个task_phase是并行执行的,都是在同一时间开始,但是main_phase作为run_phase的一部分,会在pre_main之后和post_main之前执行。在run_phase中,用户可以在任何时候启动序列(seq),而在main_phase中通常执行的主要的测试序列。与vsqr用于复杂测试环境,允许协调多个不同的sqr上的seq执行,vseq只是不同的容器,vsqr是中心化的路由器,桥接不同的sqr,不直接与drv连接,也不处理任何item。
2024-09-13 17:28:46
527
原创 ADS1299数据手册笔记
2.单次转换模式下,START引脚拉高,一次转换结束后D\R\D\Y\拉低,转换停止,无论转换的数据是否被读取,D\R\D\Y\均保持低电平。WREG,写入寄存器指令,双字节指令,第一字节为指令和起始寄存器地址,第二字节为要读取的寄存器数量-1,后续跟寄存器数据。RREG,读取寄存器指令,双字节指令,第一字节为指令和起始寄存器地址,第二字节为要读取的寄存器数量-1。1.连续转换模式下,D\R\D\Y\在转换开始时拉高,在数据准备好时拉低。SDATAC,停止连续读取指令。RDATAC,连续读取指令。
2024-07-19 16:29:25
1168
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人