system verilog语法

几乎通用的数据类型——logic
是4态数据类型的变量,只允许使用一个驱动源,或者来自于一个或者多个过程快的过程赋值。
位宽可变,logic类型可以替代所有其他类型,包括reg类型。
wire数据类型仍旧使用的原因:多驱动源总线,如多路总线交换器;双向总线(两个驱动源)。
bit是两态数据类型。
system verilog对端口的定义没有限制。

typedefine——用户定义的类型,允许生成用户定义的或者容易改变的类型定义,好的命名规则用“_t”做后缀。

always@*
begin
next=’x;
…….
//*表示对语句进行“填满”的操作。’x等价于’bx,’z等价于’bz,’1所有位赋为1,’0所有位赋为0。

特定逻辑过程
always_comb 组合逻辑过程 ,与always@*差别不大
always_latch 生成锁存器
always_ff 时序逻辑

void函数——与task不同
1、不能等待
2、不能包括延迟
3、不能包括事件触发
4、被always_comb搜寻到的信号自动加入敏感列表

module comb(output bit_t [2:1]y,input bit_t a,b,c);
always_comb//等价于always@(a,b,c).如果是always@*,则等价于always@(a).
  orf1(a);
function void orf1;
  input a;
  y[1]=a|b|c;
endfunction
always_comb//等价于always@(a)
  ort1(a);
task ort1;
  input a;
  y[2]=a|b|c;
endtask
endmodule

priority和unique——设计意图
枚举类型 enum{ } 变量名

隐含的端口连接(sv新增的)
.name 例如:multiplier multiplier(.mult, .mop1, .data); 名称要求一致
.* 例如:multiplier multiplier(.*);//名称要求一致
说明:
1、在同一个实例引用中禁止混用.*和.name端口;
2、允许在同一个实例引用中使用.name和.name(signal)连接;
3、也允许在同一个实例引用中使用.*和.name(signal)的连接;
4、必须使用.name(signal)的情况:
位宽不匹配 inst u1(…, .data(data[7:0]),…);
名称不匹配 inst u2(…,.data(pdata), …);
没有连接的端口 inst u3(…,.berr(),. …);

packed和unpacked的数组
未打包的位数组 bit a [3:0];
打包的位数组 bit [3:0] p; //打包的索引可以分块访问,可以对整个存储器进行操作。而未打包的只能按位访问。

数据的组织
struct 与c语法相似,这里分为struct packed
这里写图片描述
这里写图片描述

接口的使用
这里写图片描述

接口的详细使用见ppt80页。https://wenku.baidu.com/view/bb832e8f6529647d2728528b.html

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值