自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 python学习之在多个文件中依次查找多个关键词

这篇博文记录如何在多个目标文档中一次性地查找多个关键词。

2023-02-11 18:02:30 1629

原创 SystemVerilog Testbench Lab6: functional coverage, standardizing the environment

Lab5实现了多通道同时验证,遗留的问题是:发多少个包才能将所有输入输出端口的组合都测试一遍?这需要用功能覆盖率来回答。

2022-09-08 21:14:09 298

原创 HDLBits刷题记录——FSM之Serialdp奇校验二刷

关于HDLBits状态机Fsm serialdp+odd parity一题的疑惑

2022-04-14 14:45:30 347 1

原创 SystemVerilog Testbench Lab5: broad spectrum verification(下)

续《SystemVerilog Testbench Lab5: broad spectrum verification(上)》Generator ClassGenerator类要做的事情(1)通过随机的方式产生待发送的数据,即随机激励;(2)将产生的数据拷贝一份后放进信箱里,以便于和其他进程通信。`ifndef INC_GENERATOR_SV`defien INC_GENERATOR_SVclass Generator; string name; Packet pkt2send; pkt

2021-08-16 22:31:54 628 3

原创 SystemVerilog Testbench Lab5: broad spectrum verification(上)

Lab4采用面向对象封装的方式来搭建验证平台,但是前面的几个Lab都只给16个端口的其中一个灌激励。Lab5将多个组件都封装成类,使得测试平台能够同时驱动所有的端口。Driver ClassDriver类是由DriverBase基类扩展而来的,基类中定义接口信号、Packet类对象等。Receiver ClassGenerator ClassScoreboard Classtestbench...

2021-08-16 22:19:23 832 4

原创 SystemVerilog Testbench Lab4: oop encapsulatio

OOP encapsulation意为面向对象封装。Lab4做的事情就是将packet信息——sa、da和payload封装成一个Packet类,在generator中创建随机的Packet对象。Packet class在我看到的很多sv文件中,都会使用宏定义来防止多次编译。`ifndef INC_PACKET_SV`define INC_PAKET_SVclass Packet; rand bit[3:0] sa, da; rand logic[7:0] payload[$]; strin

2021-08-16 21:45:24 553 1

原创 SystemVerilog Testbench Lab3: self-checking

Tenstbench的基本组件包括generator、driver、monitor、checker。组件自底向上可以分为3个层次:signal layerdriver:将抽象层次的数据变成带有时序的信号,送到DUT端口monitor:将带有时序信息的端口信号转换成抽象的数据,送到上层处理encapsulation layergenerator:产生灌入DUT的激励,如随机激励、带约束的激励reference model:以更抽象的方式实现与DUT相同的功能checker:比较RM与D

2021-08-16 21:42:20 794 3

原创 SystemVerilog Testbench Lab2: sending packets

Lab1介绍了DUT的基本情况,学习了基本的验证流和基础的验证框架。Lab2在此基础上对test program进行功能的拓展,新增发送数据包的任务;其他模块保持不变。Test Programtest generator简单来说,这部分的功能就是产生激励,需要明确两点:一是数据输入和输出的端口,二是待传输的数据内容。...

2021-08-16 21:37:20 438

原创 SystemVerilog Testbench Lab1: verification flow

个人认为自学最大的门槛在于:用怎样的形式来输出所学知识,以保证对所学知识的理解是深刻的。我选择写博客来记录自学过程中的疑惑和答案。SystemVerilog Testbench Lab系列博客将作为我这段时间学习sv的输出,希望能够学会sv在验证中的使用。Synopsys的sv_lab是学习sv的入门资料(EETOP上可以搜到),这一系列的博客都将基于此展开。了解DUT创建测试平台之前,阅读rtl代码了解DUT。验证人员需要关注的是DUT实现了什么功能,不必过分关注实现的细节。在Synopsys的la

2021-08-16 21:32:55 1122

原创 Python学习之re.compile与findall

在做项目的过程中,有时候需要再一个几万行的代码里找到某个信号,并且把它拷贝出来用。信号的定义格式是相同的,但是编号不相同,如下图所示。按道理说可以利用vim的查找功能一个个找,然后一个个地手工拷贝。如果电路有修改和迭代,查找+拷贝的方式太费时费力了,所以想到用python来处理这种有规律的、重复性的工作。re.compile()用正则表达式可以匹配到我想找出的信号,使用正则表达式匹配之前将re模块导入。import rere.compile()函数用于编译正则表达式,生成一个Pattern对象,供

2021-08-08 17:57:18 7112

原创 HDLBits刷题记录——Sequential circuit 10

导言根据波形推测电路的最后一题,难度稍微大些,但很有意思。首先得承认自己没做出来,看了其他博主的答案,才明白是怎么回事。这也验证了我先前的感受,电路设计的正向思路应该是功能>电路>代码>波形,逆向过程不见得好理解。波形图(仅从波形变化,不易看出逻辑关系。从答案看,其中蕴含了奇偶校验原理。)代码module top_module ( input clk, input a, input b, output q, output state

2021-01-25 13:35:49 156

原创 HDLBits刷题记录——fancytimer

导言定时器是和实际应用很贴近的一道题目。而且我曾在EDA课上做过类似的PJ,可惜当时从未接触过硬件描述语言,最终并没有得到一个正确的时钟计数器。思路前面四题(HDLBits<Circuitd<Biulding larger circuits)正是这个complete timer的铺垫序列检测状态机移位操作状态机下行计数器后面一题用独热码的方式表示状态的转移。我对独热码的理解还有待加强,关键在于:状态的表示方式是:state中某一位为高,即进入该位代表的状态下一状态同样

2021-01-24 16:33:49 276

原创 HDLBits刷题记录——FSM Q2a

导言这题是个实现仲裁电路的状态机。有了此题的状态转移图和文字描述,实现仲裁电路的难度下降了许多。代码module top_module ( input clk, input resetn, // active-low synchronous reset input [3:1] r, // request output [3:1] g // grant); parameter A=2'b00,B=2'b01,C=2'b10,D=2'b1

2021-01-23 13:41:02 121

原创 HDLBits刷题记录——FSM Q3a

导言Q3a这题要求使用尽量少的状态,那就按照状态图给的A和B两种状态来设计(虽然我感觉多加几个状态,这个电路的设计能够更简洁一些)。状态A相当于空闲状态,进入状态B后连续检测每3个时钟周期内1的个数。如果正好检测到2个1则输出高,否则输出低。思路key1:每3个时钟周期为一循环,则定义一个计数器cyc_cout,其值为0、1、2、0、1、2……计数值为0时开始计算1的个数。key2:根据波形图来看,当计数器进入下一周期时(计数值cyc_cout为0)判断1的个数是否为2个,注意此时使用组合逻

2021-01-22 15:17:26 229

原创 HDLBits刷题记录——FSM Moore&Mealy

导言这一篇记录Moore型状态机与Mealy型状态机的区别。题目的要求是将一个不定长的数据装成对应的二进制补码,直到reset出现时才结束转换。光看波形图没有看出来怎么设计状态机,看了其他博主的解法才理解这题的解法依据的是二进制转补码的一个规则:从LSB开始到首个非0值保持不变,剩余位到MSB全部取反代码Moore FSM:module top_module ( input clk, input areset, input x, output z);

2021-01-21 21:40:05 146

原创 HDLBits刷题记录——FSM之Serial receiver with parity checking

导言状态机这部分我一直理解得不太清楚,这一章节得习题花了比较长的时间。带校验码的串行接收器这题本身也不是非常难,解题关键在于读懂题目。HDLBits的题目往往由简到难,这道题之前有只要求描述状态转移以及FSM加Datapath两题。串行接收器的传输协议是1bit开始标志位+8bit数据+1bit结束标志位。开始接收标志是in=0,满足条件后连续传输1byte即8bit的数据(LSB到MSB),结束接收标志是in=1。传输线空闲IDLE时,输入in为置高状态。如果检测不到结束标志,则持续检测直到in=

2021-01-21 19:29:35 611 3

原创 HDLBits刷题记录——FSM ps2data

导言这道题目本身并不复杂,甚至可以说是比较简单。记录它的目的是之前做课程PJ时,要用到PS2接口连接键盘来键入输入值或者控制,印象中PJ里的实现方式比题目本身复杂。对于我而言,这大概是状态机用于实践的典型场景了。题目的意思是:PS/2协议每周期发送3个字节长的消息。但在连续字节流中,我们并不知道消息从哪里开始和结束。唯一的指示是,每3个字节的消息的第1个字节的bit[3]=1,而其他2个字节的[3]位可能是1或0(取决于数据)。需要一个在给定输入字节流时搜索消息边界的有限状态机。使用的算法是丢弃字节

2021-01-19 14:40:30 900

原创 HDLBits刷题记录——Conwaylife

导言HDLBits网站More circuits中的Conwaylife即Game of life,由数学家John Conway创造。之所以特别关注到这个题目,是因为某位同学曾拿这个游戏作为一门芯片设计课程的PJ。当时觉得生命游戏在众多坦克大战、走迷宫等小游戏中挺有新意,其实现程度比这个题目本身要复杂很多,比如精美的GUI和复杂的场景。思路题目告诉我们,这个16×16的细胞网格是一个toroid,可以理解为网格的四边连在了一起而没有边界。我的思路是将整个toroid展平成一个18×18的平面网格,

2021-01-19 11:04:04 2117 1

原创 HDLBits刷题记录——FSM Lemmings4

导言HDLBits状态机章节Lemmings1~4是有关于旅鼠的一个系列,解前面3题时没遇到什么阻碍,第4题耽误了一些时间。第一处阻碍是何时进入splatter状态,即计数器何时开始计数:是next_state为下落还是current_state为下落时开始计数?第二处阻碍是本应该进入splatter状态而进入了left状态,波形上表现为:输出不能都保持为0。原代码module top_module( input clk, input areset, // Freshly

2021-01-18 22:35:16 1196 10

空空如也

空空如也

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

TA关注的人

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