本文已参与「新人创作礼」活动,一起开启掘金创作之路。
首先,还是进行了牛客网上今天刷的错题总结:
- 下列选项中不是时序逻辑电路的是( )
A.触发器
B.分频器
C.编码器
D.计数器
这题答案选择C
- 解析:时序逻辑电路的特点是电路具有记忆功能,它是由组合逻辑电路和触发器组成,而触发器本身就是一种功能最简单的时序逻辑电路;计数器是对输入脉冲个数进行计数的电路,除计数功能外,还可以进行定时、分频、产生时序控制信号等,也属于时序逻辑电路;分频器具有根据时钟输入对频率信号进行时钟分频,同样属于时序逻辑电路。因此只有编码器不是时序逻辑电路,选C。
- 尖峰波通过( )电路可以变成矩形波。
A.加法电路
B.积分电路
C.微分电路
D.RC耦合电路
答案给的是B——???
- 参考解析是积分电路可以把尖峰波转变为矩形波。选择B。 我反正是不能理解,好奇不应该是微分电路,着实没有想清楚。
SV语言的核心特性
- 接口(interface)
- 面向对象特性(class & package)
- 约束随机(constrained random)
- 线程控制通信(process control and communication)
- 功能覆盖率(function coverage)
- 外部语言编程接口(Direct Programming Interface)
- 断言(assertion)
UVM的类可以按照类库地图大致分为以下几类:
- 核心基类
- 工厂(factory)类
- 事物(transaction)和序列(sequence)类
- 结构创建(structure creation)类
- 环境组件(environment component) 类
- 通信通道(channel)类
- 信息报告(message report)类
- 寄存器模型(register model)类
- 线程同步(thread synchronization )类
- 事物接口(transaction interface)类
Verilog的数据类型
- Verilog 语言提供两种基本的数据类型,即变量类型(variables)和线网类型(nets),这两种类型都是四值逻辑,即可表示0,1,X和Z值
- 例如 reg,integer 和time 等变量类型可以用来存储组合逻辑或者时序逻辑的值
- 例如wire,wor,wand 和其它线网类型用来连接硬件模块,以及提供特殊的线网驱动解决方案
Verilog 线网类型
- 线网用于建模硬件设计中的连接线路,而线网的值由线网驱动器所决定。
- 驱动器可以是门或模块的实例,或者连续赋值的输出。
- 变量类型保存在initial、always、task和function内赋的值。
- 变量只能用过程赋值来完成
- 类型是integer或time的变量一般像有相同数量位数的reg 一样运转。
- 在表达式中integer的值作为有符号数处理,而reg或time的值作为无符号数处理
- 用reg描述逻辑,integer描述循环变量和计算,real在系统模型中使用,time和realtime 保存测试装置的仿真时间。
- Verilog中的变量和线网类型均是四值逻辑
- SV添加了新的数据类型来帮助设计和验证工程师
- SV将硬件信号区分为“类型”和“数据类型”。
- 类型即表示该信号为**变量(var)**或者线网类型(wire)
- 数据类型则表示该数据是四值逻辑(logic)或者二值逻辑(bit)
- 在Verilog中,reg经常用来表示存储组合逻辑或者时序逻辑的变量,不过初学者容易混淆其综合后的硬件单元。实际上,reg并不一定会被综合为register,而它只是用来与线网类型相对,表示存储数据的变量
- 在SV中,我们可以直接使用logic(数据类型)来实现通用的存储硬件数据: logic resetN;// 1位宽的四值逻辑 logic [63:0] data;// 64位宽的变量 logic [0:7] array [0:225]; // 由8位向量元素构成的数组【256个8位的数组】
- logic 虽然只是表示数据类型,而在声明时,它默认会表示变量类型(variable),用户也可以显示声明其类型: var logic [63:0] addr;// 64位宽的变量类型 wire logic [63:0] data; // 64位宽的线网类型
二值逻辑类型
- SV 添加了二值逻辑类型,帮助更高抽象级的建模,例如事物级模型。这些二值逻辑数据类型包括:
- bit: 1位二值逻辑变量
- byte: 8位二值逻辑,类似于C语言的char类型
- shortint:16位二值逻辑,类似于C语言的short类型
- int: 32位二值逻辑,类似于C语言int类型
- longint: 64位二值逻辑,类似于C语言longlong类型
- 在RTL级别,X值用来捕捉设计错误,例如寄存器未初始化,Z值用来表示未连接或者三态设计逻辑,但是在系统级或者事物级,Z和X很少被使用
- 类似于logic类型默认为变量类型,bit类型默认也为变量类型。
有符号类型和无符号类型
- logic 或者bit 构成的向量(vector)是无符号类型
- integer、byte、shortint、int、longint 为有符号类型。
- 可以在有符号类型后添加unsigned来表示无符号类型,例如: byte 有符号类型,表示的数值范围是[-128,127]。 byte unsigned 表示的是无符号类型,等同于bit[7:0],表示的数值范围是[0,255]
- 在构建验证驱动组件时,无需关注硬件底层逻辑(X或者Z值),所以可使用二值逻辑实现。
- SV和C在发生交互时,也可以使用二值逻辑来使得两种语言的函数接口参数类型传输更为简单。
仿真行为
- 四值逻辑变量例如reg、logic或者integer等,在仿真开始时的初值为X。
- 二值逻辑变量例如bit等,在仿真开始时的初值为0。
| 4-state Value | Converts to |
|---|---|
| 0 | 0 |
| 1 | 1 |
| Z | 0 |
| X | 0 |
- 如果四值逻辑与二值逻辑的数据类型之间发生的默认转换,那么Z和X的值将转换为0。
- 二值逻辑也可以用来实现可综合电路,只是二值逻辑由于没有X和Z值,因此可能会出现仿真行为同综合电路结果不一致的情况
- SV添加了void类型来表示空类型,经常用在函数定义表示 不会返回数值,同C语言的void使用方法
- SV添加shortreal表示32位单精度浮点类型,同C语言的float;而Verilog的real类型表示双精度浮点类型,同C语言的double。