自我学习记录——SV环境的基础知识
前言
记录秋招开始,自己的验证学习过程遇到的知识点,将每天的知识进行回顾,总结,本人现在所用教材是路桑的红宝书绿皮书,有着一颗想要学习验证的心,但是属于基础极其薄弱的新手小白。再次特意感谢路桑,感谢红宝书,绿皮书,感谢你们,此谨作为回顾每天学习内容的记录。
纵然缓慢,驰而不息!
一、数据类型基础知识
1.1数据类型按照二值逻辑与四值逻辑分类
二值逻辑:bit,int,longint,shortint,byte
四值逻辑:integer,reg,logic(only SV),net-type(wire,tri)
按照有无符号分类
有符号:byte,shortint,longint,int,integer
无符号:logic,bit,reg,net-type
1.2在有无符号方面,将有符号数转化为无符号数,需要类型转换操作unsigned’(signed_vec)
1.3转换分为显式转换与隐式转换
显式转换包括静态与动态转换
静态转换如上转换表达式前加上单引号;
动态转换需要引用对应函数等$cast(tgt,src)
二、模块定义
模块定义属于硬件的介绍,Verilog中在module中进行定义,input,output,inout(方向);端口名称的定义,两种方式,端口名与方向同时定义;先定义端口,再定义方向。
三、接口(interface)
接口属于接口与接口之间联系的桥梁
接口定义需要注意的地方:
(1)interface 可以定义input,output,inout端口
(2)建议使用logic,特殊情况(多驱动multi-drive的情况)除外,因为logic只允许单驱动
(3)interface与DUT连接时,注意收到的数据是四值逻辑的,simulator与DUT之间,硬件里面会出现X或Z的信号。
(4)接口里面可以出现过程语句(always,initial)和连续赋值语句(assign)
(5)注意接口信号的方向,使用modport进行声明,确定信号连接的方向,类似于插孔的作用
四、Program与module
(1)硬件放module,软件放program,软硬分开
program中不应该出现硬件行为相关的实例与语句,例如always,module,interface
(2)program语句由上而下,顺序执行
(3)program内部定义的内部定义的函数赋值方式:阻塞赋值;内部在外部接口的硬件信号使用非阻塞赋值
在此回顾阻塞赋值与非阻塞赋值的区别: