自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 芯片验证系列课程(涵盖Verilog,SystemVerilog,UVM以及脚本)

芯片验证系列课程(涵盖Verilog,SystemVerilog,UVM以及脚本)

2022-07-09 18:54:24 234

原创 学什么脚本

芯片领域学什么脚本

2022-07-09 18:48:20 134

原创 为什么要学脚本

芯片领域为什么要学习脚本

2022-07-09 18:46:56 139

原创 什么是脚本

芯片领域的python脚本介绍

2022-07-09 18:45:58 617

原创 芯片验证-python脚本课程说明

芯片领域的脚本课程

2022-07-09 18:44:18 678

原创 数电和Verilog-小结及作业

A.21 小结及作业小结到这里,关于数电和Verilog基础的内容就讲完了,对于快速入门并学习后面的课程内容已经足够了。总之,希望对零基础的同学有帮助,如果觉得讲得还不错,也欢迎分享本课程内容给其他需要的同学。你的分享,就是对我最大的支持,谢谢。作业给大家留了两个作业,也是数字芯片设计经常会看到的笔试题。如果本章节课程内容都认真学习并掌握的话,这两个作业应该也可以参照本章节课程内容自行完成。感兴趣的话可以拿来练练手,以提升学习效果。1、用有限状态机(FSM)实现101101的序列检测模块。

2022-05-28 11:53:27 72

原创 数电和Verilog-组合逻辑实例二:加法器

A.12 组合逻辑实例二:加法器结构化描述半加器真值表abcarrysum0000010110011110逻辑电路图设计模块//文件路径:a.12/src/half_adder.vmodule half_adder(a,b,sum,carry); input a,b; output reg sum,carry; always@(a or b)begin sum = a ^ b;

2022-05-27 21:30:00 122

原创 数电和Verilog-组合逻辑实例三:存储器

A.13 组合逻辑实例三:存储器什么是存储器?用于存储数据的地方,那要存储的话,至少就需要地址和数据,也就是说它至少要包括一个二维的数组类型的变量。设计模块//文件路径:a.13/src/memory.vmodule memory(enable,rw,addr,data); parameter ADDR_WIDTH = 8; parameter DATA_WIDTH = 16; parameter MEM_WIDTH = 256; input enable; input rw

2022-05-27 21:30:00 94

原创 数电和Verilog-时序逻辑实例一:触发器

A.14 时序逻辑实例一:触发器设计模块D触发器//文件路径:a.14/src/dff.vmodule dff(clk,din,dout); input clk; input din; output reg dout; always@(posedge clk)begin dout <= din; endendmodule带低电平复位的D触发器//文件路径:a.14/src/dff_rst.vmodule dff_rst(clk,rst_n,din,do

2022-05-27 21:30:00 92

原创 数电和Verilog-时序逻辑实例二:移位寄存器

A.15 时序逻辑实例二:移位寄存器简单的单向移位寄存器,由低位向高位移动,可以通过load加载设定移位寄存器的初始值。设计模块//文件路径:a.15/src/shifter.vmodule shifter(clk,rst_n,load_enable,load_data,dout); input clk; input rst_n; input load_enable; input[7:0] load_data; output[7:0] dout; reg[7:0] shif

2022-05-27 21:30:00 124

原创 数电和Verilog-时序逻辑实例三:计数器

A.16 时序逻辑实例三:计数器顾名思义,就是用来根据时钟边沿跳变来统计时钟周期数量的模块。设计模块//文件路径:a.16/src/counter.vmodule counter(clk,rst_n,load_enable,load_counter,dout); input clk; input rst_n; input load_enable; input[7:0] load_counter; output[7:0] dout; reg[7:0] counter;

2022-05-27 21:30:00 148

原创 数电和Verilog-时序逻辑实例四:状态机(过程分析)

A.17 时序逻辑实例四:状态机(过程分析)以一个经典的数字IC设计笔试题,自动饮料售卖机,来给大家做示例讲解。题目要求设计一个自动饮料售卖机,饮料10分钱,硬币有5分和10分两种,并考虑找零。(1)画出状态转移图,公式和卡诺图分析(2)使用Verilog实现(3)搭建测试平台做简单验证下面带着大家一步步地完成。设计过程第一步确定输入输出。A=1表示投入5分钱,B=1表示投入10分钱,Y=1表示弹出饮料,Z=1表示找零。第二步确定电路状态。S0表示售卖机里还没有钱币,S1表示已经

2022-05-27 21:30:00 625

原创 数电和Verilog-时序逻辑实例四:状态机(两段式描述-传统公式)

A.18 时序逻辑实例四:状态机(两段式描述-传统公式)什么叫做两段式描述的状态机?两段,可以理解为两个always程序块。(1)第一个always程序块采用同步时序逻辑电路描述状态转移。(2)第二个always程序块采用组合逻辑电路判断状态转移条件并描述状态转移规律,同时组合逻辑输出结果。卡诺图化简公式第二个always程序块中的组合逻辑电路会用到上一章节内容中化简后的公式,所以这里暂且列在这里。设计模块//文件路径:a.18/src/sell.vmodule sell(clk,r

2022-05-27 21:30:00 163 3

原创 数电和Verilog-时序逻辑实例四:状态机(两段式描述-行为级)

A.19 时序逻辑实例四:状态机(两段式描述-行为级)这里依然采用两段式描述,即:(1)第一个always程序块采用同步时序逻辑电路描述状态转移。(2)第二个always程序块采用组合逻辑电路判断状态转移条件并描述状态转移规律,同时组合逻辑输出结果。但是,这一次,我们不用像之前那样,又画状态转移图,又画卡诺图真值表的,这次我们简单点。设计模块这里的组合逻辑看起来更容易理解一点,写起来相对也更快。但是传统的卡诺图化简公式的方式和这里的按照行为逻辑来实现的方式都要掌握,两种方法结合才能解决实际

2022-05-27 21:30:00 140

原创 数电和Verilog-时序逻辑实例四:状态机(三段式描述)

A.20 时序逻辑实例四:状态机(三段式描述)什么叫做三段式描述的状态机?三段,可以理解为三个always程序块。(1)第一个always程序块采用同步时序逻辑电路描述状态转移。(2)第二个always程序块采用组合逻辑电路判断状态转移条件并描述状态转移规律。(3)第三个always程序块采用同步时序逻辑将结果寄存后输出。两者的区别是将原先第二个always程序块中对y和z的组合逻辑输出改为了第三个always块的时序逻辑的寄存输出。其实就这么简单,不少网络以及相关书籍上把它讲复杂了,甚

2022-05-27 21:30:00 793 1

原创 数电和Verilog-组合逻辑实例一:解码器

A.11 组合逻辑实例一:解码器什么是解码器?根据输入编码进行解码,解码输出的bit位中只有一个与其余位不一样。这里默认为2-4解码器。输入select输出z001110011101101011110111设计模块//文件路径:a.11/src/decoder.vmodule decoder(enable,select,z); //声明模块名以及端口列表 parameter SELECT_WIDTH = 2; //指定输入端select的位宽

2022-05-27 11:31:24 304

原创 数电和Verilog-系统函数

A.7 系统函数同样只给大家讲相对比较常用的几个系统函数,对于后续课程内容的学习甚至实际工作的绝大部分场景来说已经足够了。$ display和$write将信息打印到屏幕。`timescale 10ns/1nsint a = 'd10;string s = "hello";$display("%t -> %s ,here a is %0d",$time,s,a);#10ns;$display("%t -> %s ,here a is %0h",$time,s,a);#1ns

2022-05-26 21:45:00 89

原创 数电和Verilog-硬件描述的抽象级别

A.9 硬件描述的抽象级别对于硬件电路的描述的抽象级别从高到低分别为:(1)系统级(system)通常由C/C++/SystemC语言来描述。(2)算法级(algorithmic)通常由C/C++/SystemC/SystemVerilog语言来描述,复杂的算法通常还是使用C/C++/SystemC。(3)RTL级(RegisterTransferLevel)通常由Verilog HDL/VHDL/SystemVerilog/SystemC语言来描述,当前使用的最多的还是Verilog HDL

2022-05-26 21:45:00 130

原创 数电和Verilog-组合逻辑和时序逻辑

A.10 组合逻辑和时序逻辑电路数字逻辑电路中分为两种逻辑电路结构,分别是组合逻辑和时序逻辑,如下图所示:时序逻辑电路由时钟clk来进行控制,像心跳一样一拍一拍的通过上升沿或下降沿来进行数据的同步和寄存,而组合逻辑则是一些逻辑运算,比如与、或、非、异或等运算,根据运算的复杂度,其组合逻辑电路的路径延迟就不同,但需要满足时序逻辑电路的建立时间和保持时间。一般两组触发器之间就是组合逻辑电路,图上的运算过程大致是:data_in数据输入进来,然后通过寄存器寄存,然后经过一段组合逻辑进行运算,最后再通过一

2022-05-26 21:45:00 388

原创 数电和Verilog-本章内容说明

Appendix A 【免费】数电和Verilog基础A.1 本章内容说明(1)本章节是给真正的零基础同学准备的,因为过来咨询的同学里有的在学习Verilog和数电时存在困难,所以为了照顾一下这些同学,也为了更好的学习本课程后面的内容,特别增加了本章节内容。(2)本章节内容同样采用视频+笔记的方式进行讲解,并提供源码供下载。视频部分近期会补齐。(3)本章节内容做了简化,仅对必要的基础部分进行讲解,对于入门以及后续内容的学习基础储备来说足够了。(4)本章节的内容是免费的,如果觉得讲得还不错,也欢迎分

2022-05-26 21:30:00 39

原创 数电和Verilog-基础概念

A.2 基础概念本章节以简单的问答方式来帮助大家做快速的建立一些基础概念。能做到了解就好,感兴趣的话可以再找找相关书籍或视频进行进一步学习,刚开始有这些概念对于本课程的学习来说应该就足够了。(1)什么是模拟信号?现实的世界里我们接收到的信息,包括图像、声音和触摸的手感、温度等等,这些信息基本都是随着时间连续变化的信号,即模拟信号。这里的信息指的是其信号的幅度,或频率或相位随时间作连续变化。(2)什么是数字信号?对模拟信号在某一个时刻进行采样,如果采样的点足够密集(即采样频率足够的话),那么就可以

2022-05-26 21:30:00 232

原创 数电和Verilog-数值及变量

A.3 数值及变量数值既然数字逻辑电路里面是做一些逻辑运算,那必须要有数字,那前面说的计算机中的”0“或”1“的数字如何表示呢?通常在现实生活中,我们说的数字都是十进制,但是在计算机中通常以二进制数存在,但也可以被表示成十进制和十六进制。比如说我们常说的十进制下的10这个数字,可以在Verilog中分别表示如下:十进制: 'd10 = 10^1 二进制: 'b1010 = 2^1 + 2^3十六进制: 'ha 注意前缀表示方式。还有这里没有列八进制,因为你几乎不会用到。所以,补充基础

2022-05-26 21:30:00 199

原创 数电和Verilog-运算符

A.4 运算符基本运算符a + b //加法运算a - b //减法运算a * b //乘法运算a / b //除法运算a % b //取余运算位运算符//取反运算a = 'b1101;b = ~ a;//取反后b的值等于'b0010//按位或运算a = 'b0101;b = 'b1110;b = a | b;//按位或运算后,b值的为'b1111//按位与运算a = 'b0101;b = 'b1110;b = a & b;//按位或运算后,b值的为'b0100

2022-05-26 21:30:00 107

原创 数电和Verilog-赋值语句、结构语句和程序块

A.5 赋值语句、结构语句和程序块阻塞和非阻塞赋值语句阻塞赋值前面语句执行完,才可执行下一条语句。always @(posedge clk) begin b = a; c = b;end上面代码综合后产生1个触发器,在时钟clk上升沿到来时进行触发,此时会先将输入端a的值赋给输出端b,然后等待赋值完成后,将输出端b的新值再赋给c,最终相当于将a的值同时赋给了b和c。非阻塞赋值语句同时执行。always @( posedge clk ) begin b &

2022-05-26 21:30:00 131

原创 数电和Verilog-条件和循环语句

A.6 条件和循环语句条件语句if…else//只有ifif(a > b) 语句;//if..elseif(a > b) 语句1;else 语句2; //if...else if...elseif(a > b) 语句1;else if(a == b) 语句2;else 语句3;//多个语句时使用begin...endif(a > b) 语句1;else if(a == b)

2022-05-26 21:30:00 152

原创 数电和Verilog-宏定义

A.8 宏定义`define 定义全局参数`define DATA_WIDTH 8module reg[`DATA_WIDTH-1:0] data; //这相当于定义 reg[7:0] data; ...endmodule`include 文件包含示例://文件aaa.vmodule aaa(a,b,out); input a, b; output out; wire out; assign out = a^b;endmodule//文

2022-05-26 21:30:00 603

原创 关于如何自学数字验证+SystemVerilog+UVM,该怎么进行?

首先我们来看自学的路径:第一阶段首先你需要有基本的数电基础,明白数字电路运行的原理和一些基本的常识,这个时候推荐你看《数字电路基础》第二阶段在懂得了基础的数字电路原理和常识之后,你需要将该数字电路转换成实际的硬件,即需要用硬件描述语言去把这个电路给实现出来,市面上用的最多的还是Verilog,此时需要学习如何用Verilog硬件描述语言与一个具体的数字电路联系起来,需要建立硬件设计的思维和概念,学习基础的语法,并试着要用Verilog写一个简单的设计,如一个二分频电路,简单的加减法器等,并且用Ve

2021-01-22 12:53:34 6665 4

原创 可重用的UVM验证平台

基本思路开发一个可重用的UVM验证平台,一般按照如下顺序进行:对数据元素进行建模开发事务级组件开发driver开发sequencer连接driver和sequencer开发monitor例化上述组件开发agent开发env启动场景创建控制仿真结束功能检查并搜集覆盖率下面就按照这个思路走一遍。对数据元素进行建模查阅文档,根据数据格式要求进行开发从uvm_sequence_item基类中继承定义数据构造器添加控制字来对数据格式进行配置使用UVM 域

2020-10-24 17:39:27 1349

原创 UVM事务级模型

TLM使用事务级模型非常重要,因为任何事情在某一个抽象层面的思考会比陷入一堆琐碎的细节里效率要高得多。UVM提供了TLM的接口从而可以将各个组件通过事务级的方式连接在一起。Transaction两个组件之间事务处理所需要的封装数据包。TLM-1基本的TLM通信producer产生transaction并通过put端口发送给consumer。class producer extends uvm_component; uvm_blocking_put_port #(simple_trans)

2020-10-21 15:21:08 443

原创 UVM基本概念

UVM验证平台的典型结构典型的UVM验证平台一般即例化DUT和UVM类库并配置其中的连接关系。UVM动态例化,可以一次编译完成多个测试用例的测试。UVM TESTUVM TEST是UVM的顶层Component组件,主要完成例化和配置顶层env,并通过env调用sequence产生激励从而给到DUT。一般情况下,会有一个基本的base_test用于对env的例化以及其他共同的UVM元素组件的生成例化。然后其他的test则继承该base_test并有针对性地配置env或者选择不同的sequence来测

2020-10-19 18:15:16 4914

原创 UVM高级应用之interface

1.interface中除了可以定义变量,还可以定义任务和函数。还可以在其中使用always和initial语句。interface可以代替driver做很多事情,但是并不能代替driver做所有的事情。interface只适用于做一些低层次的转换,如8b10b转换、曼彻斯特编码等。这些转换动作是与transaction完全无关的。使用interface代替driver的第一个好处是可以让driver从底层繁杂的数据处理中解脱出来,更加专注于处理高层数据。第二个好处是有更多的数据出现在interfac

2020-10-16 11:39:05 2653

原创 UVM中代码的可重用性

callback机制1.在UVM验证平台中,callback机制的最大用处就是提高验证平台的可重用性。如果把两个项目不同的地方使用callback函数来做,而把相同的地方写成一个完整的env,这样重用时,只要改变相关的callback函数env可完全的重用。除了提高可重用性外,callback机制还用于构建异常的测试用例,只是在UVM中,构建异常的测试用例有很多种方式,如factory机制的重载,callback机制只是其中的一种。post_randomize函数是SystemVerilog提供的广

2020-10-16 10:16:49 704

原创 UVM中的factory机制

SystemVerilog对重载的支持1.SystemVerilog是一种面向对象的语言。面向对象语言都有一大特征:重载。当在父类中定义一个函数/任务时,如果将其设置为virtual类型,那么就可以在子类中重载这个函数/任务:class bird extends uvm_object; virtual function void hungry(); $display("I am a bird, I am hungry"); endfunction function void hungry2(

2020-10-15 19:44:16 1633 2

原创 UVM中的寄存器模型

寄存器模型简介1.通常来说,DUT中会有一组控制端口,通过控制端口,可以配置DUT中的寄存器,DUT可以根据寄存器的值来改变其行为。这组控制端口就是寄存器配置总线。在没有寄存器模型之前,只能启动sequence通过前门(FRONTDOOR)访问的方式来读取寄存器,局限较大,在scoreboard(或者其他component)中难以控制。而有了寄存器模型之后,scoreboard只与寄存器模型打交道,无论是发送读的指令还是获取读操作的返回值,都可以由寄存器模型完成。有了寄存器模型后,可以在任何耗费时间

2020-10-15 15:45:03 3812 6

原创 UVM中的sequence

sequence基础1.如果将激励放在driver的main_phase中,是可行的,但是如果要对激励作修改,那么扩展性较差,所以我们将激励改为放在sequence中去写。driver就负责驱动激励就好了,而具体是什么样的激励,应该由sequence去完成。2.当定义完一个sequence后,可以使用start任务将其启动。my_sequence my_seq;my_seq = my_sequence::type_id::create("my_seq");my_seq.start(seque

2020-10-14 10:41:33 2130

原创 Debug Server Scripting (DSS) 的基本使用

最近在做一个dsp项目,需要使用到CCS中的DSS对dsp core进行验证,除了写出符合UVM验证平台的dsp参考模型外,还需要由DSS和DUT进行debug甚至结合NC-Verilog的联合仿真。这么一来就提供了两种对dsp core的验证方案,互为补充,思路是以参考模型为主,以DSS为辅,从而帮助debug。1.配置环境TI提供了两种不同环境下的配置文件,在windows环境下使用dss.bat,在linux/mac环境下使用dss.sh。上述配置文件可以以下路径中找到:[INSTALL DI

2020-10-12 11:58:43 612

原创 UVM验证平台的运行

phase机制1.task_phase消耗仿真时间,而function_phase则不消耗仿真时间。上图中的phase自上而下运行,其中灰色的部分为task_phase。最常用的是是build_phase、connect_phase和main_phase2.run_phase中的reset、configure、main、shutdown四个phase是核心,分别完成对DUT的复位、配置、运行和关闭等操作。function_phase基本都是自下而上执行的,当然这不包括build_phase,因

2020-10-10 22:32:23 1591

原创 UVM通信

3.UVM中的TLM1.0通信TLM1.01.如果要在两个uvm_component之间通信,如一个monitor向一个scoreboard传递一个数据,你可以采用下图中的方法:当然也可以从uvm_object派生出一个参数类config_object,在此类中有monitor要传给scoreboard的变量。在base_test中,实例化这个config_object,并将其指针通过config_db#(config_object)::set传递scoreboard和monitor。当monit

2020-10-09 23:08:25 1083

原创 UVM基础

uvm_component与uvm_object1.几乎所有的类都派生于uvm_object,包括uvm_component。uvm_component有两大特性是uvm_object所没有的:一是通过在new的时候指定parent参数来形成一种树形的组织结构;二是有phase的自动执行特点。下图是常用的UVM继承关系:从图中可以看出,从uvm_object派生出了两个分支,所有的UVM树的结点都是由uvm_component组成的,只有基于uvm_component派生的类才可能成为UV

2020-10-08 21:13:47 2480 1

原创 一个简单的UVM验证平台

1.SystemC是基于C++的,用户需要自己管理内存,容易发生内存泄漏[^内存泄漏指的是程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃]。而SystemVerilog则不存在这个问题,而且与Verilog完全兼容,提供DPI接口,而且本身自带内存管理机制,不用担心内存泄漏问题。还支持系统函数调用,可以直接调用可执行程序,即外部已经用C写好的参考模型。2.验证平台大致包括如下几个部分driver:实现激励。scoreboar

2020-09-29 19:33:06 3464 1

空空如也

空空如也

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

TA关注的人

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