自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 脚本学习(1)验证目录自动化生成脚本

旨在一键创建符合IC验证规范的目录结构,避免手动创建目录和文件的重复劳动。优点:模块级验证目录可一键创建,代码简单易懂,可复用性高。缺点:子系统或系统级不适用。

2025-03-10 22:48:49 512

原创 SV刷题小记2

这个选项是错误的。虽然队列看起来可以在任意位置增加或删除元素,但实际上队列的元素是存储在连续的内存区域中的。因此,在队列的中间进行插入或删除操作时,可能需要移动其他元素以保持顺序。这意味着,在队列中间增加或删除元素时,操作的时间复杂度是,其中 n 是队列的大小。所以这种操作的时间是会随着队列的大小而变化的,不是“无论队列有多大,所耗费的时间都是一样的”。这个选项是正确的。在 SystemVerilog 中,队列常量的声明使用大括号 {},而数组常量使用的是带有单引号的语法。例如:// 队列常量。

2025-02-20 00:08:44 801 2

原创 systemverilog刷题小记

1. new。

2025-02-19 11:06:21 774

原创 基于UVM搭验证环境

基本思路:首先,我们搭建环境时一般都有一个目标的DUT。此时,我们可以结合所要验证的的模块、是否需要VIP、验证侧重点等在典型的UVM验证环境的基础上做适当调整后形成一个大体的环境架构。比如,需要一个ahb_vip_agent、系统级还是模块级的DUT等等。这样,整个验证环境中需要几个in_agent、是否需要out_agent、reference model是否需要自己写就比较清楚了。基于这些考虑,我们的环境架构基本上就定下来了。

2025-02-10 23:03:48 910

原创 HDLbits刷题记录1-3

定义所有可能的状态。2.

2025-01-04 17:23:05 563

原创 HDLbits刷题记录1-2

高斯LFSR(Galois LFSR)是一种特定的排列方式,其中具有“抽头”(tap)的位位置与输出位进行异或运算以产生下一位,而没有抽头的位则直接移位。代码思路:首先由题目可知,该设计分为时序和组合逻辑两部分,时序逻辑由一个左移移位寄存器控制,受enable信号控制,组合逻辑则是一个八选一的多路复用器,也可以叫三八选择器。• 在移位寄存器的部分位(称为抽头,tap)上进行某种逻辑运算(通常是异或 XOR),并将结果反馈到寄存器的最左端(或最右端)。• 异或得到的反馈值输入到寄存器的最左端(或最右端)。

2025-01-03 20:05:07 903

原创 HDLbits刷题记录1-1

考虑算术右移的另一种方法是,它假设被移动的数字是有符号的并保留符号,因此算术右移将带符号的数字除以 2 的幂。可以用if嵌套也可以用case,移位主要使用拼接符,主要是算术右移,因为左移不会有符号位影响,需要注意算术右移不是补0,而是补符号位。类似地,5 位数字01000算术右移 1 是00100,逻辑右移会产生相同的结果,因为原始数字是非负数。如果 q 的初始值是 4'b1010,左移1位后,q 将变为 4'b0100。如果 q 的初始值是 4'b1010,右移1位后,q 将变为 4'b0101。

2025-01-01 23:12:01 870 1

原创 HDLbits刷题记录12-25

解题思路:使用三个BCD计数器级联来分频:第一个计数器分频10倍,第二个分频10倍,第三个分频10倍,总共实现1000倍分频。解题思路:本来想着例化四个bcd计数器,然后通过第一个的进位控制第二个的开始,依次连接,最后发现直接从90跳到191,可能是进位信号没有处理好导致其它的高位跟着一起递增,苦思瞑想数小时,还是死磕不出来于是决定用四个always块堆出来。请注意, 11:59:59 PM提前到12:00:00 AM,12:59:59 PM提前到01:00:00 PM。没有 00:00:00。

2024-12-26 21:17:27 1030

原创 HDLbits刷题记录12-11

解题思路:第一步,对每一位都需要进行正边沿检测,因此需要一个for循环,第二步,由于需要检测一个0-1的变化,即前一时刻为0与当前时刻为1,前一时刻则需要保存下来,第三步,检测到0-1后,非阻塞赋值out,等待时钟输出为1.解题思路:第一步,fpga不接受两个组合在一起的时钟触发,因此需要分成两个,第二步,分成两个触发器后,会有两个输出,因此要定义两个触发器的中间输出值,第三步,根据时钟高低电平决定输出哪个中间值。思路:很简单,复位从0变成0x34,注意0x34这边是直接赋值给8位的会自动扩展。

2024-12-12 21:11:19 672

原创 HDLbits刷题记录12-7

思路:第一步,写出全加器模块,第二步,因为100位,肯定不能一个个实现,重复使用考虑generate for语句,第三步,因为波纹进位加法器一位一位计算,即前一个的高位进位cout,是下一位的低位进位,即.cin(cout[i-1]),因此需要分i=0和i!思路:第一步首先它给了bcd的模块,因此我们不需要考虑这个逻辑,因为输入是一个400bit的数,因此要将它切片成100个四位的数,第二步,由于top_module只给了一个一位总的cout,因此需要添加中间的进位,第三步,还是需要分成i=0,和i!

2024-12-08 00:46:04 747

原创 HDLbits刷题记录12-6

Verilog 中的主要数据类型是reg和wire,较为基础。SystemVerilog 提供了更丰富的类型(logicintbit等),更适合复杂的设计和验证。根据设计需求选择合适的数据类型,例如logic是 SystemVerilog 中最推荐的通用类型,可以替代reg和wire。

2024-12-06 23:32:36 727

原创 UVM查漏补缺(1)

核心就是注册加创建。下面是类库地图,用来区分component类和object类。

2024-12-05 20:29:55 957

原创 HDLbits刷题记录12-4

Verilog 中的 case 语句**与一系列 `if-elseif-else` 几乎等价,比较一个表达式与多个值列表之间的关系。- 每个 case 条目只能执行一条语句,这使得 C 中的 `break` 变得不必要。- `case` 语句**以 `case` 开始,每个“case 条目”以冒号(`:`)结束。5、verilog中3'b0等价于3‘b000,但是3’b2不等价于3‘b010.只能用二进制显示表示,不然无法识别会报编译错误。在组合逻辑的always块中,应使用阻塞赋值(=)

2024-12-04 20:16:15 822

原创 HDLbits刷题记录12-2

1、全加器都快忘记了,还是列真值表自己慢慢推出来的。

2024-12-02 22:05:57 148

原创 从零开始搭建Linux(Centos7)下uvm验证环境(4)

因为后面需要导入安装包所以需要设置VMware tools。第二步,设置共享文件夹。第三步安装VMware Tools拖到桌面解压后,打开终端,运行pl脚本安装。第四步从芯王国将eda工具包下载到共享文件夹。第五步,进入虚拟机,新建文件夹,将共享文件夹下拷贝过来。

2024-11-27 21:12:51 507 1

原创 从零开始搭建Linux(Centos7)下uvm验证环境(3)

一开始以为是DNS配置的问题,如图加上之后,发现可以ping通百度,并且火狐可以打开网页,但是还是无法下载,经过分析后发现是yum的问题,centos的源已经不更新了,因此尝试更新centos的源,将其替换成阿里云的源。改完之后,发现centos7还是无法下载,报错没有正确配置网络,开始排查问题。tips:可以去搜一下自己喜欢的gvim的配置,改善一下敲代码的环境。是最常用的文件,配置了主要的镜像源。按照上述步骤完成后,再下载git发现可以成功下载了,如下图。首先,连接网络,后面的软件下载都需要联网。

2024-11-27 14:44:12 849

原创 从零开始搭建Linux(Centos7)下uvm验证环境(2)

输入用户密码,登录初始化后进入桌面,centos7在win11下磕磕绊绊用VMware16.2安装成功。第六步,点击自定义硬件,根据自己的电脑配置来,我电脑是10核16进程,因此我给虚拟机直接一步到位分配4核,8G。第五步,设置磁盘空间,建议第一次尽量设多一点,免得后面扩容麻烦,我这里设置的是350G,选择拆分,方便移动。第一步,打开VMware,点击创建虚拟机,选择典型。第二步,选择稍后安装,这样后面可以自定义系统。安装完后点击重启,接受许可后,点击完成配置。第七步,点击开始此虚拟机后,出现不兼容。

2024-11-26 22:00:03 438

原创 从零开始搭建Linux(Centos7)下uvm验证环境(1)

1、VMware15.5下载(借用芯王国的安装包)选择自己的安装位置,下一步,不要勾选增强。首先下载好安装包,点击进入安装程序。第二步,同意协议,下一步。第五步,创建桌面快捷程序。第四步,不勾选用户体验。输入许可证,借用他人的。输入许可证后安装完成。

2024-11-26 19:37:10 284

原创 HDLbits刷题记录11-16

模块的层次结构是通过在一个模块中实例化另一个模块创建的,只要所有被使用的模块属于同一个项目(这样编译器才能找到模块)。不用管模块内部什么逻辑,连接的时候只要抓住,端口的连接信号是哪个就可以。4、在一个 Verilog 文件中,可以有多个模块,每个模块都是独立的定义,模块之间可以通过实例化来连接。//顶层top信号a连接到in1,b连接到in2,out_top连接到out。//按顺序连接:a连接到 in1,b连接到in2,out_top连接到out。时,信号通过端口的名称连接,而不是依赖顺序。

2024-11-18 15:19:26 903

原创 To be finished

不知不觉说这么多,写这篇文档主要还是记录一下接下来给自己的学习计划路线,可能大哥以为我真的会呆满一年,他一直循序渐进的在教我东西,上次地铁上有一个工作一年的验证大哥给我说,说我真幸运有大哥带,大哥脾气很好,跟他请教都会毫无保留的教你,我那时候还跟他吐槽为啥大哥不给我新项目干,让我写一个UVC,他解释说项目后半年一般都是验收阶段所以不满,加上业绩一般,上半年项目会很忙,然后说他入职都没写过UVC都是让他们直接学怎么用干项目,所以说我运气很好,有一个0-1的过程,他们则是从1开始,只会用。

2024-11-15 15:16:21 658 2

原创 HDLbits刷题记录11-14

把向量看成一个整体,一个布尔值,即非0即1,若向量非零则输出为1,为零则输出为0.逻辑运算的结果为1位。{4'ha, 4'd10} // 拼接成 8 位,结果是 8'b10101010。{3'b111, 3'b000} // 拼接成 6 位,结果是 6'b111000。{1'b1, 1'b0, 3'b101} // 拼接成 5 位,结果是 5'b10101。5、拼接运算符 {}

2024-11-15 00:15:00 459

原创 HDLbits刷题记录11-13

verilog

2024-11-13 23:40:48 1017

空空如也

空空如也

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

TA关注的人

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