自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 统计序列中1的个数

2023-08-29 22:50:49 131

原创 i2c_SLAVE

下图仅仅为数据分析线程。如果是10bitADDR,先判断地址高两位是否一致,不一致则回复NACK,一致的话,回复ACK并判断读写位,是写,则接收第二byte数据判断是否匹配,不匹配则回复NACK,匹配的话,就回复ACK并释放总线,(如果是读,那么这里主机会产生RS,收集数据这里就不会执行)接收总线上传来的数据。如果是DEVICE_ID,回ACK,然后判断读写位是1还是0,是0 的话,continue,接着从forever头开始执行,等待START。匹配回复ACK,如果是写,释放总线,接收SDA上数据。

2023-08-03 23:13:47 617

原创 QSPI项目DUT

32、DATA_TX;PAGE_PROGRAMMING即一般的数据写操作,将数据发送给device,READ_DATA即读数据,此命令一般在写过数据之后再执行,将device中存的数据读出,WRITE_DISABLE和WRITE_ENABLE都只传输cmd命令,无实际地址和数据的传递。spi_oe0、spi_oe1、spi_oe2、spi_oe3(这四个信号表示通道使能信号,当此信号为1时候,代表对应的spi_sdo通道的数据有效,DUT内部利用这4个信号控制spi的工作模式,单线还是多线模式。

2023-06-06 21:50:00 348

原创 QSPI项目结构

结构:验证环境中例化了apb端的agent,此agent包含apb_drv、apb_mon、sqr以及一个agent_ap端口,此端口与apb_mon中的mon_ap端口相连,目的是将apb_mon中监控到的数据送到scoreboard中。scoreboard中声明了两个export端口分别连接apb_agent中的ap端口以及qspi_mon中的ap端口,将数据收集并存入内部数组做比较。apb端的接口vif直接与DUT以及apb_drv、apb_mon相连,其与apb连接时候端口一一对应。

2023-06-06 10:48:11 224

原创 QSPI项目seq波形详解

在写阶段,最开始写入TXFIFO的数据是12345678,但是,将CTRL寄存器第五位(清空FIFO)设置为1后,FIFO被清空,之前写入的12345678都被清除,然后重新向TXFIFO中写入了55aaaa55,那么QSPI总线上就传输55aaaa55这个数据,读阶段,在传输开始,又将FIFO清空,但是此次清空无任何影响,因为清空在读回数据之前,接下来读来的数据会重新写进FIFO中,读回来的数据就是写入的55aaaa55。激励:向qspi device 写数据,然后读qspi 的数据。

2023-05-31 13:38:06 361

原创 QSPI项目qspi_monitor和device

如果command是READ_DATA,那么根据数据格式,下一步应该发送地址,此时就要判断vif上地址宽度是否为0,如果不是0,那么下一个周期就应该直接跳转到ADDRE状态,如果是0,那么根据数据格式,下一步应该发送dummy周期,所以就要判断dummy周期是否为0,如果dummy周期不是0,那么下一个周期就应该跳转至RDATA_ADDR_DUMMY状态,如果dummy周期是0,那么根据数据格式,下一步应该发送rdata数据,所以下一个周期应该跳转至RDATA状态。

2023-05-31 13:37:17 233

原创 QSPI的scoreboard

如果是读,那么一般来说一定是从模块的RX_FIFO寄存器中读取数据(因为其他寄存器都是用来写,对模块进行传输设置,只有这个寄存器里面是存储从device端读来的数据),那么如果是从这个寄存器中读取数据,接着判断rdata_fifo(qspi_monitor此时已经将device端的读出的数据收集到,一般来说肯定是非空的)是否非空,是非空就将其中数据弹出,存入real_data数组,并将此数组数据与apb_txn中的pdata数据进行比较。然后将qspi_is_write_busy置0,。

2023-05-29 22:40:45 149

原创 QSPI功能覆盖率

将每个数据位宽的可能性都建一个仓,即0-8-16-24-32位宽的5个仓。在模式1和模式0,都有对应的4中command,所以将两个仓交叉覆盖。在模式1和模式0,都有对应的5种命令长度,所以将两个仓交叉覆盖。在模式1和模式0,都有对应的3种数据长度,所以将两个仓交叉覆盖。建仓分别覆盖0和1的值,从而可以覆盖读写的值。将从qspi_monitor端传来的事务中的数据提取。将从qspi_monitor端传来的事务中的数据提取。将从qspi_monitor端传来的事务中的数据提取。将接口传来的数据进行采集。

2023-05-29 22:40:35 181

原创 数据位宽转换

假设数据从模块A传入到模块B,模块A的,模块B的,那么如何能把数据从A传入B呢。假设一个原时钟clk2x,通过二分频,把原时钟变为时钟clk1x,那么clk2x的时钟频率就是clk1x的两倍。在clk2x的上升沿,我们读入32bit数据,在clk2x的上升沿我们输出16bit数据,由于clk2x的频率是clk1x的两倍,每读入一次32bit数据,就会输出两次16bit数据,从而实现了数据位宽的转换。

2023-05-25 21:46:27 858

原创 半加器、全加器

A和B是两个需要相加的数,Cin是来自上一级的进位,S是和,Cout是输入到下一级的进位。,A和B是两个需要相加的数,S是和,C是进位。

2023-05-25 21:32:55 155

原创 无毛刺时钟切换电路

第二级DFF的not Q的逻辑以负反馈的形式接回了输入,取了与逻辑,构建起50M时钟和100M时钟的关系,代表着切换前时钟等待一阵子后,才会转换到切换后时钟,避免了切换毛刺的出现。control信号无论是从上面通过还是从下面通过,都经过两级采样,避免了亚稳态的出现。,导致了毛刺的出现,假如control,clk_50M,还是clk_100M都是。最终上面的电路和下面的电路,以或的逻辑相取,输出clk_output.后一级的DFF用下降沿采样,避免了采样毛刺的出现。,根据控制信号control,

2023-05-25 21:27:50 889

原创 格雷码转二进制

因为这个问题,我们提出了一种新的码值,他的特点就是相邻两位只有单bit发生改变,这里提前引用格雷码中的3和4的表示0010和0110,这个时候采样从3到4,只有可能采样到0010和0110,即前一个结果和后一个结果,不会出现这两者之外的错位结果,格雷码的优势由此体现,也正是因为格雷码的优势,它广泛的应用在包括FIFO,跨时钟域的通信,纠错等内容中。

2023-05-25 20:28:59 543

原创 奇偶校验位

(3)奇偶校验只可以简单判断数据的正确性,从原理上可看出当一位出错,可以准确判断,如同时两个1变成两个0就校验不出来了,只是两位或更多位及校验码在传输过程中出错的概率比较低,奇偶校验可以用的要求比较低的应用下。以这样的一个双输入异或门为例子,我们可以发现,两个输入,有一个为1的时候,输出为1,有0个1或者2个1的时候输出为零,这里其实异或门的概念与奇偶校验的概念就重叠起来了,0和2是偶数,输出是0,1是奇数输出是1,根据此,我们只需要。为了搞懂奇偶校验的原理,我们首先需要知道的是异或门,他的真值表如下。

2023-05-25 20:06:55 2349

原创 串并-并串转换

输入一位的数据,每一个clk接收一位,最终以多位(8)位的形式输出。通常采用位拼接的形式来实现。典型的案例,给一位输入,实现8位数据的左移和右移操作。右移:舍弃低位,高位补输入的值左移:舍弃高位,低位补输入的值。计数器实现。

2023-05-25 17:38:26 147

原创 异步复位同步释放

当rstn释放的时候,寄存器的输入端D可能因为某个组合逻辑电路和rstn有关系,导致D随rstn同步拉高。当异步复位信号到来时,寄存器 reg_1 会被直接拉低,这是不会产生问题的,当rstn下降沿和clk上升沿同时到来时,如果rstn比clk先到来一瞬间,且原来的reg_1信号为1,reg_1会被拉低为0,后一瞬间,clk来了,因为前一瞬间的reg_1值被拉低了,所以在clk到来时,一定有set_up不满足要求...但是,一进always 语句块后,由于rstn是0,所以reg_1会被赋值为0,还是0。

2023-05-24 17:36:35 540

原创 奇偶分频电路

加如对占空比没有要求,可以使用状态机来实现六分频电路,定义六个状态:状态0时clk的输出为0,状态1,2,3,4,5时clk的输出为1,也可以同样的实现六分频电路,以此类推,可以实现任意偶数分频的电路,并通过状态的输出为1,控制特殊占空比。在边沿采样的时候如果发现计数器的值是1或者2,那么则翻转信号clk2,体现在posedge_clk2和negedge_clk2上,这两个信号取”相或“操作,得到logic_or就是50%占空比的分频电路。只需要修改N的值和count的位宽,即可实现任意奇数分频。

2023-05-24 16:30:57 832

原创 异步FIFO

根据给出的双口RAM代码和接口描述,实现异步FIFO,要求FIFO位宽和深度参数化可配置。电路的接口如下图所示。

2023-05-24 15:26:24 64

原创 同步FIFO

根据提供的双口RAM代码和接口描述,实现同步FIFO,要求FIFO位宽和深度参数化可配置。电路的接口如下图所示。

2023-05-24 15:12:19 64

原创 序列检测器

序列检测主要功能是:将一个指定的序列从数字码流中识别出来,当然也可以实现对指定序列的计数。

2023-05-24 13:43:08 113

原创 边沿检测电路

所谓的边沿检测(幼教边沿提取),就是检测输入信号的上升沿和下降沿。在设计数字系统时,边沿检测是一种很重要的思想,实际编程时用的最多的时序电路应该就是边沿检测电路和分频电路了。 在always的铭感信号列表中可以直接使用posedge和negedge来提取上升沿和下降沿,但是要是在always程序块的内部检测上升沿或者下降沿,使用posedge和negedge显然是不可以的,因为这样的语句不可综合。 要实现边沿检测,最直接的想法是用两级寄存器,第二级寄存器锁存住某个时钟上升沿到来时

2023-05-24 11:34:29 783

原创 数字电路基础

在互补开关电路中,S1和S2两个开关虽然受同一个输入信号v1控制,但它们的开关状态是相反的。反演定理:对于任意一个逻辑式Y,若将其中所有的“·"换成“+”,“+"换成“·”,0换成1,1换成0,原变量换成反变量,反变量换成原变量,则得到的结果就是Y'。”,0换成1,1换成0,则得到一个新的逻辑式Y,这个Y就称为Y的对偶式,或者说Y和Y互为对偶式。在从已知的逻辑函数波形图求对应的真值表时,首先需要从波形图上找出每个时间段里输入变量与函数输出的取值,然后将这些输入﹑输出取值对应列表,就得到了所求的真值表。

2023-05-23 19:48:08 916

原创 TCL文件访问

如果 cd 没使用参数,UNIX 下,会把工作目录变为启动 TCL 脚本的用户的工作目录,WINDOWS 下会把工作目录变为 windows 操作系统的安装目录所在的盘的根目录(如:C:/)。file lstat name arrayName 除了利用 lstat 内核调用代理 stat 内核调用之外,和 file stat 命令一样,这意味着如果 name 是一个符号连接,那么这个命令返回的是这个符号连接的信息 而不是这个符号连接指向的文件的信息。读 fileId 标识的文件的下一行,忽略换行符。

2023-05-19 22:00:47 1696

原创 TCL字符串操作

因为 TCL 把所有的输入都当作字符串看待,所以 TCL 提供了较强的字符串操作功能,TCL 中与 字符串操作有关的命令有:string、format、regexp、regsub、scan 等。语法:format formatstring?format 命令类似于 ANSIC 中的 sprintf 函数和 MFC 中 CString 类提供的 Format 成员函数。它按 formatstring 提供的格式,把各个 value 的值组合到 formatstring 中形成一个新字符串, 并返回。

2023-05-19 20:55:18 2861

原创 TCL过程语句

TCL 支持过程的定义和调用,在 TCL 中,过程可以看作是用 TCL 脚本实现的命令,效果与 TCL 的固有命令相似。我们可以在任何时候使用 proc 命令定义自己的过程,TCL 中的过程类似于 C 中的函数。TCL 中过程是由 proc 命令产生的:proc 命令的第一个参数是你要定义的过程的名字,第二个参数是过程的参数列表,参数之间用 空格隔开,第三个参数是一个 TCL 脚本,代表过程体。proc 生成一个新的命令,可以象固有 命令一样调用:add 1 2输出:3。

2023-05-19 20:11:51 834

原创 TCL控制流

TCL 中的控制流和 C 语言类似,包括等命令。语法: if test1 body1??else bodyn?TCL 先把 test1 当作一个表达式求值,如果值非 0,则把 body1 当作一个脚本执行并返回所得 值,否则把 test2 当作一个表达式求值,如果值非 0,则把 body2 当作一个脚本执行并返回所 得值……。例如:..........

2023-05-19 20:00:43 895

原创 TCL命令

list 这个概念在 TCL 中是用来表示集合的。TCL 中 list 是由一堆元素组成的有序集合,list 可以嵌套定义,list 每个元素可以是任意字符串,也可以是 list。下面都是 TCL 中的合法的 list:{} //空 list{a b c d}{a {b c} d} //list 可以嵌套list 是 TCL 中比较重要的一种数据结构,对于编写复杂的脚本有很大的帮助,TCL 提供了很多 基本命令对 list 进行操作。语法: list?

2023-05-19 18:55:57 1581

原创 TCL表达式

TCL 表达式的操作数通常是整数或实数。整数一般是十进制的, 但如果整数的第一个字符是 0(zero),那么 TCL 将把这个整数看作八进制的,如果前两个字符是 0x 则这个整数被看作是十 六进制的。TCL 的实数的写法与 ANSIC 中完全一样。如:2.17.9e+126e43.

2023-05-19 16:57:57 1288

原创 TCL变量

一个 TCL 的简单变量包含两个部分:名字和值。名字和值都可以是任意字符串。例如一个名为 “1323 7&*: hdgg"的变量在 TCL 中都是合法的。不过为了更好的使用置换(substitution), 变量名最好按 C\C++语言中标识符的命名规则命名。TCL 解释器在分析一个变量置换时,只 把从$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量 的名字。例如:set a 2输出:2set a.1 4输出:4set b $a.1输出:2.1。

2023-05-19 16:24:41 2115

原创 TCL语法

一个 TCL 脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开。set a 1set b 2或者set a 1;set b 2 都是合法的TCL 的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或 TAB 键隔开。TCL 解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,TCL 解释器运用规 则把命令分成一个个独立的单词,同时进行必要的置换(substitution);

2023-05-19 16:04:54 1314

原创 I2C项目问题总结

1、项目里面用到哪些接口?都是怎么用的?项目里面用到了rkv_i2c_if、lvc_i2c_if、lvc_apb_if。rkv_i2c_if用来将DUT内部的intr中断信号、debug信号、ic_en使能信号、i2c和apb的时钟复位信号引出,在接口中声明了一个大位宽信号用来表示intr中断的所有信号,每一位代表一个中断信号,每个debug信号对应声明一个单独的信号,内部有wait_apb和wait_intr任务,wait_intr(id)任务等待对应id位的变化。get_intr(id)函数返回对应in

2023-05-16 15:57:46 780

原创 芯片设计全流程知识点总结

K级的流水线就是从组合逻辑的输入到输出恰好有K个寄存器组(分为K 级,每一级都有一个寄存器组),上一级的输出是下一级的输入而又无反馈的电路。UVM环境中的动态phase也是按照自下而上的顺序执行,但是task phase是需要消耗时间的,所以他并不是等到下面的phase执行完以后再去执行上面的phase,而是将这些run_phase同时通过fork...join_none的方式全部启动,所以可以描述为自下而上启动,同时运行。后仿真,即网表验证中的仿真,也叫布局布线后的网表仿真验证。

2023-05-15 22:35:25 3977

原创 验证知识点总结

其次是建立新的约束,只有在确实需要的时候才会求助于定向测试,改进功能覆盖率最简单的方法是仅仅增加仿真时间或者尝试新的随机种子。那么最终block的路径是什么,答案是如果设置了root path,那么就是这个root path,如果没有设置,那么就是hdl_paths_pool中的值(在实际使用过程中只会add一次,这里假设是path1),其实这里的path1只是这个block的相对地址,怎么得到这个block的绝对地址呢,hier的概念,那么就是 parent_block的路径加上自身设置的路径。

2023-05-15 16:35:45 1576

转载 Linux压缩解压命令

解压:tar jxvf FileName.tar.bz2 压缩:tar jcvf FileName.tar.bz2 DirName。解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.tar.gz DirName。解压:tar Zxvf FileName.tar.Z 压缩:tar Zcvf FileName.tar.Z DirName。gzip usr.tar% 压缩 tar 备份文件 usr.tar,此时压缩文件的扩展名为.tar.gz。

2023-05-09 18:03:38 4822

原创 SystemVerilog与C语言的接口

SystemVerilog 引人了直接编程接(DPI.Direct Programning Interface),它能更加简单地连接C、C++或者其他非Verilog编程语言。一旦你声明或者使用import语句“导人”了一个C子程序,你就可以像调用SystemVerilog中的子程序一样来调用它。此外C代码也可以调用SystemVerilog中的子程序。使用DPI可以很方便地连接C代码,这些C代码可以读取激励,包含一个参考模型或仅仅扩展SystemVerilog的功能。

2023-05-09 17:50:13 1188

原创 Centos虚拟机网络连接

NAT模式和桥接模式一样可以上网,只不过,虚拟机会虚拟出一个内网,主机和虚拟机都在这个虚拟的局域网中。NAT中VMWare相当于交换机(产生一个局域网,在这个局域网中分别给主机和虚拟机分配ip地址)此步骤跟网上大多数步骤有些偏差,特别是最后一步最后一张图,配置自动网络设置以及配置中的ip、路由、DNS等要与前一些步骤的图上地址对应。网络-属性-网络共享中心-更改网络适配器设置-进入VMnet8的属性-协议版本4的属性。2.设置主机ip地址,点击VMnet8,设置ip地址,网关为上面设置的网关。

2023-05-09 17:43:21 816

原创 数字电路的设计方法与技术

本页只是主要来自于硬件架构的艺术这本书。

2023-05-08 22:28:57 899

原创 APB到AHB的接口

传输在AHB上的时刻T1发起并且地址在T2被APB桥采样。如果传输是到外设总线那么该地址被广播并且产生合适的外设选择信号。在外设总线上的第一个周期成为SETUP周期,当PENABLE信号被断言后,该周期后跟随着ENABLE周期。在ENABLE周期期间外设必须提供读数据。通常可能会将要读的数据直接发回到AHB,总线主机在ENABLE周期结束时的时钟上升沿采样该数据,在图5.9中为时间T4。在时钟频率很高的系统中可能需要桥在ENABLE周期结束时寄存读数据然后桥在接下来的周期将该数据驱动回AHB总线主机。

2023-05-08 22:16:33 270

原创 APB协议

高级外设总线(APB)是高级微控制器总线体系(AMBA)的总线层次的一部分并且为降低功率消耗和接口复杂性做了优化。AMBA APB应该被用来连接任何一种低带宽且不需要高性能通道总线接口的外设。最新版本的APB确保了所有信号转变仅和时钟的上升沿有关。这中改进意味着APB外设可以方便的集成到任何设计流程,并有以下优点:在高频操作时性能得到提高;性能独立于时钟的占空比;静态通过使用单时钟边沿简化了静态时序分析;自动测试插件无需特别考虑因素;许多特定用途集成电路(ASIC)库有较好的上升沿寄存器选择。

2023-05-08 22:10:56 178

原创 AHB总线

AHB是为提出高性能可综合设计的要求而产生的新一代AMBA总线。它是一种支持多总线主机和提供高带宽操作的高性能总线。AMBA AHB 实现了高性能,高时钟频率系统的以下特征要求:突发传输;分块处理;单周期总线主机移交;单时钟沿操作;非三态执行;更宽的数据总线架构(64位或者128位)。

2023-05-08 21:25:32 1008

原创 Linux常用命令

Linux命令是在命令行上运行的程序或实用程序。命令行是一个界面,它接受文本行并将其处理为计算机的指令。在开始使用最常用的Linux命令之前,请确保启动。在大多数Linux发行版中,您可以使用Ctrl + Alt + T来执行此操作。如果这不起作用,请在应用程序面板中搜索“terminal”它允许您列出您想要的目录的内容(默认情况下是当前目录),包括文件和其他嵌套目录。代表“打印工作目录”,它输出您所在目录的绝对路径。例如,如果您的用户名是“john”,并且您位于文档目录中,则其绝对路径将是。

2023-05-08 19:45:16 42

空空如也

空空如也

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

TA关注的人

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