IC验证学习
文章平均质量分 68
IC验证学习
fenggang2333
这个作者很懒,什么都没留下…
展开
-
(UVM验证学习21) apb timer的参考模型和覆盖率模型实现
思路也是首先实现父类timer_subscriber,实现计分板和覆盖率模型的公用部分逻辑。原创 2023-03-08 15:57:08 · 1195 阅读 · 0 评论 -
(UVM验证学习20)Verilog手撕代码2-nowcode verilog进阶题(CDC)
就是一个将a时钟域的使能信号同步到b时钟域的小模块,首先在a时钟下用D触发器缓存使能和数据,随后在b时钟下用两级D触发器同步使能信号,最后按照b时钟域同步过来的使能信号选择是保持当前dataout还是输出datain。双端口RAM给出了示例,然后是有两个输入时钟,分别是读时钟和写时钟,然后读写操作也有分别的使能端口和地址端口,读有一个输出端口,写有一个输入端口。最后就是ram的读写使能信号不应该与同步fifo的读写使能信号直连,还需要考虑读空和写满时不能读和写,否则会出现在一个固定位置上的覆盖写和重复读。原创 2023-02-21 16:50:48 · 257 阅读 · 0 评论 -
(UVM验证学习19)Verilog手撕代码2-nowcode verilog进阶题(序列检测+时序逻辑)
然后三角波需要一个状态机,因为当wave>0的时候,需要判断wave接下来是+1还是-1.最简单的方法是reset的时候规定为down,然后,每次需要判断的时候基于现在是rise还是down,加上wave是0还是20两个极值点,同步修改wave和rise/down指示器。最好还是用计数器,每次输入有效时,计数器加一,读进来一位数到reg_data,reg_data是做成一个fifo,先进先出,每次计数器从0数到5正好对应一个6位输出,然后把reg_data的值复制到输出端口就可以。原创 2023-02-21 12:16:14 · 324 阅读 · 0 评论 -
(UVM验证学习18) Verilog手撕代码1-nowcode verilog入门题
主要是意识到T触发器是输入端0保持,输入端1反相;D触发器才是接收数据。然后有个说法是异步复位同步释放,既能捕捉同步复位可能捕捉不到的复位信号,由于释放是同步的,又可以减少亚稳态的可能。奇偶校验输出是线网类型,使用assign赋值移位运算与乘法要注意的问题是out是11位的,但是d是8位的,使用移位进行乘法时,如果module内使用的reg也是8位的,可能会出现溢出的情况,比如我用一个reg [7:0]data存输入d,那么乘7就应该使用而不能用因为data本身的位宽和out不一致,可能会溢出。原创 2022-12-05 18:45:10 · 316 阅读 · 0 评论 -
(UVM验证学习17) UART通信协议概览
两个uart设备之间异步通信,通信时不需要时钟线,需要在两个uart设备上指定相同的传输速率,以及空闲位、起始位、校验位、结束位,即需要遵守相同的协议。例如数据传送速率是120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率位10*120=1200 bit/s = 1200波特。:在通信的任意时刻,线路上可以同时存在双向的信号传输,全双工场景下,通信两端都设置了发送器和接收器,所以可以进行数据在两个方向上的同时传送,而无需进行方向的切换。原创 2022-11-26 19:57:11 · 337 阅读 · 0 评论 -
(UVM验证学习16) SPI通信协议概览
spi通信协议概述原创 2022-11-26 19:06:32 · 678 阅读 · 0 评论 -
(UVM验证学习15) I2C总线协议概览
(SCL)和(SDA).所有的通信都是由主设备发起,从设备响应,实现数据的传输。原创 2022-11-22 13:03:48 · 968 阅读 · 0 评论 -
(UVM验证学习14) AXI总线协议
AXI学习笔记原创 2022-11-21 20:07:30 · 1347 阅读 · 0 评论 -
(UVM验证学习13) apb和ahb的另外一些笔记
APB版本改变PPROT:一种保护信号,可支持APB上的非安全传输和安全传输。PPROT [0]:0:普通;1:特权。一些master使用它来指示其处理模式。特权处理模式通常在系统内具有更高级别的访问权限。PPROT [1]:0:安全;1:非安全。这用于需要更大程度区分处理模式的系统中。PPROT [2]:0:数据;1:指令。该位指示事务是数据访问还是指令访问。此指示仅作为提示,并非在所有情况下都是准确的。PSTRB:一个写选通信号,用于在写数据总线上进行稀疏数据传输.原创 2022-11-21 17:24:19 · 1783 阅读 · 0 评论 -
(UVM验证学习12) apb timer源码阅读和标准阅读
如果CTRL[0]=1 enable,再考虑EXTIN的作用,如果EXTIN作为enable(CTRL[1]=1),则需要EXTIN为高,如果EXTIN作为时钟(CTRL[2]=1),则需要检测到EXTIN要进行低到高翻转,这种情况下,就可以让计数器递减计数,递减到0时自动reload;对对应的寄存器(CTRL,RELOAD,CURVAL)进行写操作,注意cur_val寄存器除了要响应写操作,当计数器正常计数时,也需要随时钟更新值,这部分逻辑也在这里。无论是生成还是清除,都需要更新INT寄存器。原创 2022-11-10 19:16:59 · 1235 阅读 · 0 评论 -
(VUM验证学习11) 使用ahb vip对GPIO进行验证框架搭建,寄存器模型集成和测试点拆解编写
逻辑上来说,GPIO相当于一个bridge结构,需要有master端和slave端,但是这里将slave端的数据驱动放到interface里做,不单独实现slave端。相比ahbram,验证结构没有大的变化,区别是集成了寄存器模型,没有实现scoreboard,check全部实现在seq端。原创 2022-11-10 16:44:21 · 2082 阅读 · 0 评论 -
(UVM验证学习10) GPIO源码阅读
GPIO的源码分成三个部分,分别是ahb_gpio.v, ahb_to_iop.v, iop_gpio.v对应的是顶层模块,ahb模块和io模块。顶层模块只对后面两个模块进行了例化和连接。原创 2022-11-10 13:44:42 · 680 阅读 · 0 评论 -
(UVM验证学习9) gpio标准阅读
AHB GPIO全称是AHB通用输入输出接口模块,它提供了具有以下特性的16bit IO接口.原创 2022-11-09 18:53:45 · 895 阅读 · 0 评论 -
(UVM验证学习8) 使用ahb vip对ahbram进行测试-测试拆分和scb实现
虽然ahb vip有一些不足,但是暂时先使用它,考虑怎么对ahbram进行验证和测试。检查还是会在两个部分出现,对于简单的测试,check可以直接放置在seq中,如果测试内容较为复杂,就需要把check的位置移动到scoreboard处进行检测。在ahbram中,scoreboard通过使用mem关联数组模拟ahbram的行为,相当于一个简陋的参考模型,这样一来,每次检测到写操作时,就同样将内容写入到scb的关联数组中。如果是读操作,则将monitor传来的读得数据与关联数组中的内容进行比较就可以了scor原创 2022-11-09 18:01:09 · 1708 阅读 · 1 评论 -
(UVM验证学习7) ahb master验证组件实现学习
endclass// 只需要包含config和vif首先定义基类driver,可以被master端和slave端的driver继承,包含一些通用方法forkjoinendtaskendendtaskendtaskendtasklendclass随后定义master的driver,主要是重载一些父类提出的虚方法。原创 2022-11-09 14:28:32 · 1415 阅读 · 0 评论 -
(UVM验证学习6) ahbram 源码阅读
这里假设地址长度为14,然后用地址的低二位的四种情况00, 01, 10, 11指示一个字的4个字节, 则可用的字地址范围为[0 : 2^12-1];然后分别用4个reg类型的存储块存储一个字的四个字节.如果是使用字节地址,则字节地址的范围响应的是[0: 2^14-1]原创 2022-11-08 10:46:23 · 852 阅读 · 0 评论 -
(UVM验证学习5) ahb协议阅读
ahb协议学习笔记原创 2022-11-07 20:34:06 · 802 阅读 · 0 评论 -
(UVM验证学习4) apb watchdog源码阅读
watchdog源码阅读原创 2022-11-07 19:43:47 · 626 阅读 · 2 评论 -
(UVM验证学习3)apb watchdog scoreboard/coverage_model 实现
watchdog subscriber scb cov 实现思路原创 2022-11-05 13:35:45 · 572 阅读 · 0 评论 -
(UVM验证学习2) AMBA APB 协议学习和uvm apb master/slave实现
AMBA apb协议学习和UVC实现思路原创 2022-11-05 11:01:43 · 875 阅读 · 0 评论 -
(uvm验证学习1) apb watchdog 标准阅读和测试点记录
apb watchdog本身是基于一个递减的计数器,计数器的初始值是从WDOGLOAD寄存器读取的。在一些条件满足时,当计数器的值递减到0,输出接口的WDOGINT会拉高。图中只记录了WDOGINT和WDOGRES被拉高的两次计数器递减到0的过程,需要注意的是这两个信号能够被拉高的前提是对应的enable位被设置。当wdog发现interrupt信号已经拉高后,若是内置的计数器又一次递减到0,会拉高WDOGRES信号,随后。原创 2022-11-03 15:16:22 · 1599 阅读 · 0 评论