最近看到一篇介绍syssim
verilog的文章,比较简短,花个把小时简单学习一下。
数据类型:
1. logic
2. 双状态数据类型:byte,shortint,int,longint
3. 定宽数组
越界读取时,logic返回X,双状态返回0,线网未驱动输出Z。
4. 数据常量
数组操作:
1. for / foreach: foreach 自动遍历数组中元素
2. 数组复制和比较
3.合并数组
[3:0][7:0]bytes;//4个字节组装成32bits
->bytes(7~0,7~0..,7~0)
4. 动态数组
申明使用空下标[]。调用时使用new[]分配空间。
5. 队列
申明需要使用带有$的下标:[$].
6. 数组排序
x.reverse ; x.sort ; x.rsort ; x.shuffle
7. typedef创建新类型
typedef reg[7:0] opreg_t;
opreg_t op_a,op_b;
8. 枚举类型
只能用于本模块。
9. 过程语句和子程序
1)begin .. end
2) continue:
表示跳过本轮循环剩下的语句直接进入下一轮循环。
3)Break:用于终止并跳出循环
4)task. function, void(ignore return value)
5) ref & const 传递数组 :const ref 定义的数组不能被子程序修改
10. 接口中的logic和wire
接口中过程赋值语句驱动异步信号,则必须用logic类,wire只能被连续赋值语句驱动.
11. 接口中的双向信号: wire[7:0] data; or inout data.
下面是面向对象的基础知识:
1.class
2.object
3.handle
4.property
5.method
6.prototype
1)new[] & new() : new[]建立含有多个元素的数组。new()使用参数设置对象的值,比如 class transaction, transaction t; t=new().//创建一个handle,并分配一个新的t。
2)使用new 复制一个对象:data = new; dst = new data;
条件约束:
“->” == if true begin else begin
线程:
1)begin...end 顺序执行
2)fork...join并行执行
systemVerilog 与 C:
SV支持直接编程接口(DPI),只要使用import语句将c语言子程序导入,即可当作SV子程序调用。
只是简单概念的摘录,慢慢积累。