自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

geter_CS的博客

学习路上的总结和经验

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

原创 汉明码奇偶校验矩阵理解

此代码的纠正原理是:e[0]表示d[0]所在属的三个校验位c[0],c[2],c[3]的校验结果s[0],s[2],s[3]的取&,如果为1表示三个校验位都出错,(按照上面图形解释思想)同时属于这三个校验位的只有d[0],那么就表示d[0]出错了。最后矫正时d[0]^e[0]就是,如果d[0]出错,出错后为0,那么0^1=1,如果出错后为1,那么1^1=0.这样就可以矫正。如果第5位(d2)和第11位(d7)以及第10位(d6)出错:0 0 1 0 1 0 1 1 1 0 1 0 0。

2023-05-15 19:41:36 3568 5

原创 low power-upf-vcsnlp(七)

low power-upf-vcsnlp

2023-03-18 19:45:09 291

原创 (AHB VIP为例)Verdi UVM/interactive debug mode简单使用

AHB VIP为例,Verdi UVM/interactive debug mode简单使用

2022-11-09 22:56:15 3495 12

原创 riscv引导程序及仿真记录

l.jal _mymain表示跳转到_mymain处,可以看下面c代码的汇编,其中会根据mymain函数创建_mymain标签。注意:在实际的汇编程序编写中,跳转的目标往往使用汇编程序中的 label,汇编器 会自动根据 label 所在的地址计算出相对的偏移量赋予指令编码。.section .text表示下面的代码链接时放在.text段,.org设置当前代码的地址偏移(相对于链接时指定定.text段的起始地址)。_th0_main标签处,连续的l.addi 指令可以理解为对32个通用寄存器的清操作。

2022-11-05 17:00:45 890

原创 riscv-gcc工具编译firmware进行仿真问题总结

Q1 riscv裸机编程undefined reference to `_memcpy` :c代码中数组长度超过16,并在定义时做初始化,编译报错问题,Q2 全局变量初始化问题Q3 riscv裸机编程undefined reference to `_memcpy` :c代码中字符数组长度超过16,并在定义时做初始化,编译报错问题.Q4 字符串常量初始化问题。

2022-11-01 17:31:30 687

原创 systemverilog $isunknown的使用

比如logic,wire,reg。如下例所示,对二状态类型是没有用。注意在TB中如果使用$isunknown,$isunknown判断是否存在叉态。或者需要X和阻态传播,使用四值的类型。.只对具有4状态的类型有用。

2022-10-21 17:49:06 2308

原创 systemverilog disable在task中使用的坑

systemverilog disable在task中使用的坑

2022-10-21 16:11:58 684 1

原创 low power-upf-vcsnlp(六)

add_power_state,create_power_state_group

2022-09-10 17:29:50 1053

原创 low power-upf-vcsnlp(五)

set_isolation命令

2022-09-08 18:22:04 2641

原创 low power-upf-vcsnlp(四)

create_power_switch

2022-09-08 16:41:06 911

原创 systemverilog 结构体-简单使用

压缩结构体以向量形式将结构体的所有成员存储为连续位,存取顺序如下。压缩结构的成员变量不可以是实数或短实数变量、非压缩结构体、非压缩联合体体或非压缩的数组。1.upacked结构体,结构体每个成员变量,都是单独存放的。结构体不能整体赋值,但是可以整体复制给另一个同类型结构体。注意压缩结构体可以整体赋值15行,但是非压缩结构体不可以。结构体可以作为端口信号定义。2.pakced结构体。

2022-09-07 16:49:26 642

原创 systemverilog dpi简单使用

1.外部函数导入到SV中2.外部任务导入加了pure修饰的方法,表示该方法只能使用通过形参传入的数据,不能使用该函数外的其他数据或者方法,也不能进行文件操作。而context是可以的。另外pure不能修饰引入的task。[]表示可选的。

2022-09-07 16:48:36 1021

原创 low power-upf-vcsnlp(一)

动态功耗:如图中,CMOS反向器输出在0,1之间转换时,对负载电容的重放电过程。

2022-09-07 16:47:06 3160

原创 low power-upf-vcsnlp(三)

举个例子定义两个power domain。test.upf内容如下。-update#PD0-update仿真结果,power map如下,注意上面upf中使用了set_scope,所以此时新定义的net VDD0 VSS0,port VDD0 VSS0都是在scope inst0下的:此时instance上显示出两个power domain:两个domain的power是可以不一样的,但是VSS可以是一样的,所以可以将两个domain的VSS连接起来,并且将PD0的power从外面接进去。

2022-09-07 16:44:18 971

原创 low power-upf-vcsnlp(二)

二、upf+vcsnlp+verdi实例后文中使用的dut代码和testbench代码,使用的工具版本和参考文献在文末。

2022-09-07 16:42:52 1112

原创 怎样将例化的uvn test包含在verdi的instance中,并将其中变量加入到dump的波形中(方便verdi追test以及debug)

1.test class在module test中例化(verdi只显示module,class只有包含在module中才会被显示)。不可以写在module外面,写在外面是没法追代码的,代码都是灰白的。5.可能打开verdi也没有显示该test,可以在declaretion窗口找到该case(对应所在的module),双击,然后在instance中就会显示该case。(105和106行)定义了和test同名的module,test定义在了module中,并按照上面步骤在module中run的test。...

2022-08-03 16:28:43 886

原创 验证中filelist以及package的使用

不使用pkg的filist1,使用pakage的filist,嵌套pakage

2022-07-09 13:39:32 3846 3

原创 vcs常用断言debug选项,以及断言的注意点

1.compile添加选项-assert enable_diag之后对应的下列run的选项才能使用:• -assert success (默认只打印assert fail的log,加上此选项后assert success的选项也会打印)• -assert maxsuccess=N(assert success的最大打印次数)2.compile添加选项-assert enable_hier之后对应的下列run的选项才能使用:• -assert hier (可以enable和disable

2022-05-29 16:45:46 5270 1

原创 地址读写hang住case中,怎样中断hang住的读写进程,继续测试后面地址(关于fork的应用)。

比如我们测试某个地址读写的task如上,此task目的是测试是否对地址addr的读写,并不关心读写结果。如果读写的时候某个地址hang住,那么整个验证环境都会hang在这儿,后续地址不能测试到。我们希望的是:在测试到某个地址到hang住时,就中断对此地址的读写进程,测试下一个地址。可以改成这样的fork进程控制:1.最外面这个fork可以不要2.a0进程是测试对addr地址读写,和a1进程时并行的,因为a0是join_none。(这里addr不用automatic接收,因为多个地址并不并..

2022-05-13 17:45:42 201

原创 fork join和for循环结合的实际应用

fork…join结构中,父进程会被阻塞直到所有的子进程结束;fork...join_any结构中,父进程会被阻塞直到其中任意一个子进程结束;fork....join_none父进程会立即与产生的所有进程并发执行。fork中每条语句并行执行,如果将多个语句封装在一个 begin…end块中会将整个块作为单个进程执行,其中每条语句顺序地执行。实际应用:实际应用中,我们通常会使用了for循环和fork join_none来并行启动多个进程(这样不用写哪些重复的代码)。fo

2022-03-15 15:52:22 5625 8

原创 verilog 不定态(X态)传播

verilog语法中if else 和case语句是不能传递x态的。if(1'bx)会默认为0即false,对于case(1'bx),如果有默认default的分支语句,则会匹配到default的语句,如果没有default语句则不会匹配到任何语句。如下代码和波形:module top_module(); reg sel; reg [1:0]out1; reg [1:0]out2; reg [1:0]out3; wire [2:0]out4; `p

2022-03-07 17:25:37 8801

原创 UVM 使用start_item和finish_item指定sequencer发送item,比uvm_do_on更灵活。

我们使用uvm_do_on(item,sqr)是可以指定那个sequencer发送此。而且uvm_do系列宏第一个参数即可以是sequence也可以是transaction,当是sequence时使用start任务来启动sequence,当是transaction时使用start_item和finish_item来发送transaction。1.uvm_do局限性:uvm_do系列宏封装的太好但是灵活性更差。比如场景:要发送的transaction很复杂(有很多signal),我们需要精细化制定

2022-03-02 13:34:51 7513

原创 AHB VIP Example 的tb_ahb_svt_uvm_basic_ral_sys中关于slave和master接口连接的问题

AHB的tb_ahb_svt_uvm_basic_ral_sys中关于slave和master接口连接的问题一、原始使用方法hdl_interconnect中文件的DUT的部分内容是:DUT外面还做了封装,封装成了ahb_svt_dut_sv_wrapper.sv,部分代码如下:此DUT的作用是接收来自master的数据(这部分数据是传给slave的),传送给AHB bus(AHB总线),再由AHBBUS传送给slave的(interface),接收自slave的数据,传..

2022-02-21 17:18:05 2808 6

原创 xHCI1.1-TRB Ring

4.9 TRB RingTRB(Transfer Request Block) Ring是一个TRB数据结构的环状队列,TRBRing用来在producer和consumer之间传送工作项(WorkItem)。和其相关的有两个指针,出队指针(Dequeue)和入队指针(Enqueue)。一个工作项由一个或多个TRB数据结构组成。一个工作项定义了一个将要被执行的操作或是一个已经执行的操作的结果。有三种基本TRBRings:Transfer,Event和Command。每种Ring都有其专用...

2021-08-18 17:01:26 4821

原创 xHCI1.1-DCBAAP(设备上下文及地址数组指针 寄存器)

一、DCBAAP(设备上下文及地址数组指针 寄存器):xhci里面的Operational寄存器组里面的设备上下文基地址数组指针寄存器(DeviceContextBaseAddressArrayPointerRegister,DCBAAP),用于保存设备上下文基地址数组(DCBAA)的指针(也就是这个数组的首地址)。P418二、DCBAA(设备上下文基地址数组,内存数据结构):DCBAA和xHCI的设备槽相关联(DeviceSlot),也就是一个Slot对应DCBAA里面的一...

2021-08-16 21:26:11 1778

原创 xHCI1.1-USB设备的初始化

USB设备的初始化这节描述检测和初始化连接到xHC根集线器端口上的USB设备无论连接的设备是Function还是集线器,设备的初始化进程都是一样的。一旦与一个外部集线器关联的管道被建立,集线器驱动将会通过标准集线器类命令序列来枚举连接在外部集线器上的设备。这节将重点描述当设备连接到跟集线器上时的初始化进程。芯片硬件复位,HCRST(Host Controller Reset),或命令进入PLS(Port Link State) = RxDetect state后,所有根集线器端口均应处于Di

2021-08-13 14:37:36 2861

原创 xHCI1.1-框架和数据结构

Chapter 3 Architecturaloverview各个部分为: Application software:应用软件使用一个或多个USB设备提供的服务。应用软件通过ClassDriver提供的标准接口连接到USB设备 ClassDriver software :这种软件运行在hostPC上,对应USB设备一个具体的“类”(MassStorage,Human interface,Audio,etc.).ClassDriver software通常是操作系统一部分...

2021-08-13 14:22:59 5098

原创 JOHNSON计数器,环形计数器,普通计数器

1.普通4bit计数器,n为计数,2^n个状态:module top_module (); reg clk=0; always #5 clk = ~clk; // Create clock with period=10 initial `probe_start; // Start the timing diagram `probe(clk); // Probe signal "clk" // A testbench reg reset; initial begin

2021-07-22 20:13:57 1283

原创 全加器门级(结构级),数据流,行为级实现

1位全加器,门结构实现:module top_module (); reg clk=0; always #5 clk = ~clk; // Create clock with period=10 initial `probe_start; // Start the timing diagram `probe(clk); // Probe signal "clk" // A testbench reg ain,bin,cin;

2021-07-20 21:04:06 1530 1

原创 LFSR(线性反馈移位寄存器)

线性反馈移位寄存器LFSR,是移位寄存器的一种,通常用于在数字电路中产生伪随机数。寄存器中的初始值叫做种子,种子应该是非零的。LFSR的下一时刻输入为是由整个移位寄存器值的某些位做异或运算的结果。选取哪些位置 用于移位,是需要进行预先设计好的,目的是要产生一个伪随机并且尽可能长周期的数字序列。 n位LFSR,最多产生2^(n-1)种序列(全零或全一被排除,因为全零异或nor结果为0,不会产生新序列,全1同或xnor也是)。影响下一个状态的比特位叫做抽头。移位寄存器链的多个抽头用作XOR或XNOR门的

2021-07-20 19:42:51 15206 3

原创 用户自定义源语UDP

UDP类似于一张真值表注意点:1.U D P的定义不依赖于模块定义,因此出现在模块定义以外。也可以在单独的文本文件中 定义U D P。 2.U D P只能有一个输出和一个或多个输入(wire)。第一个端口必须是输出端口。此外,输出可以 取值0、1或x(不允许取z值)。输入中出现值z以x处理。U D P的行为以表的形式描述。 3.Table中描述顺序与定义顺序相同":"后面为输出。3.在U D P中可以描述下面两类行为: 1) 组合电路 2) 时序电路(边沿触发

2021-07-18 16:35:45 429 1

原创 vcs+verdi,以及Makefile注意点

1.命令行之前是以Tab开头的不然会报错gvim里面强制输入tab,使用Ctr+v+i直接使用tab键可能输入不成功。

2021-05-23 16:25:14 3962

原创 用宏重新定义printf(debug),宏函数中的可变参数

1.用宏重新定义printf(debug)可以这样定义宏:#include <stdio.h>//#define NDEBUG 10#ifdef NDEBUG#define debug_printf(fmt, ...)#elseextern int debug_print;#define debug_printf(fmt, ...) ({ \ if(debug_print) \ { \ printf(fmt, ##__V

2020-12-16 21:32:29 1338

原创 PCI、PCIE配置空间的访问

一.使用PCI兼容性配置访问机制根据协议,x86上使用了两个I/O端口寄存器(OUT 和 IN 在汇编中是端口读写操作指令。端口是主机与外设进行数据交换使用的,分为数据端口,状态端口和控制端口三种。PC机给每一个端口分配了一个地址,所有端口成线性排列,形成一个独立于内存空间的I/O地址空间,一般用十六进制表示。8086中,端口地址的范围是0000H-FFFFH。 ):CONFIG_ADDRESS(物理地址0CF8H)和CONFIG_DATA(0CFCH),来访问PCI配置空间。其中Bit .

2020-12-04 19:39:21 2229

原创 vector装变量地址作为函数引用参数的问题

函数引用参数会改变原始变量。比如:#include <iostream>#include <vector>using namespace std;void change(int &ve){ ve=2;}int main(){ int ve=0; change(ve); cout<<ve<<en...

2019-10-22 17:08:11 1054

原创 C++优先队列/priority_queue(最大堆、最小堆)

定义: priority_queue<int,vector,less> q;最大堆(默认为最大堆)priority_queue<int,vector,greater> q;最小堆Priority queues are a type of container adaptors, specifically designed such that its first eleme...

2019-10-16 11:08:59 17147

原创 两个链表的交点set解决法

求两个链表的交点使用set集合来做#include <iostream>#include <set>using namespace std;struct ListNode{ int val; ListNode *next;};ListNode* getIntersectionNode(ListNode *headA,ListNode *headB...

2019-09-28 10:41:49 221

原创 判断链表有环set解决法

判断链表是否有环,并返回换起始点#include <iostream>#include <set>using namespace std;struct ListNode{ int val; ListNode* next;};ListNode* detectCycle(ListNode* head){ set<ListNode*&g...

2019-09-28 10:39:03 333

原创 链表的翻转和链表的某一部分翻转

链表的翻转#include <iostream>using namespace std;struct ListNode{ int val; ListNode *next;};ListNode* reverse(ListNode* head){ ListNode *new_head=NULL; while(head){ List...

2019-09-28 10:35:31 392

原创 C++ set(容器(Containers))

1.setset中,set_name.begin()返回指向第一个元素的指针(地址),set_name.end()是指向最后一个元素的指针。2.iterator迭代器(iterators)迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。#include <iostream>#include <set>using namespace std;...

2019-09-24 12:00:41 514

DRQN和DARQN详解

深度强化学习DQN的两中改进方法的详细介绍,Deep recurrent Q-learning和Deep attention recurrent Q-learning

2019-02-27

空空如也

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

TA关注的人

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