从传统设计到现代设计:SystemVerilog在RTL可综合设计中的优势

SV设计特性

1. 面向可综合设计的主要优化

  • 添加接口(interface)从而将通信和协议检查进一步封装
  • 添加类似C语言的数据类型,例如int、byte
  • 添加用户自定义类型,枚举类型,结构体类型
  • 添加类型转换($case(T, S)或者’())
  • 添加包(package)从而使得多个设计之间可以共享公共类型和方法
  • 添加方便的赋值操作符和运算操作符,例如:++、+=、===
  • 添加priority和unique case语句
  • 添加always_comb、always_latch和always_ff等过程语句块

2.SV中方便上手的可综合设计语法点

2.1过程语句块

  • SV添加了新的面向硬件的过程语句块,从而使得该语句块可以更清楚地表达设计者地意图。
  • always语句块被细分为了
    • 组合逻辑语句块:always_comb
    • 锁存逻辑语句块:always_latch
    • 时序逻辑语句块:always_ff
  • 通过以上细分地方式,降低了Verilog always语句块容易混淆方式,也使得仿真工具、综合工具、形式检查工具、于一检查工具和其它EDA软件工具可以更准确地检查设计地实现意图。

下面是各个语句的语法

  • always_comb 的用法:
always_comb begin 
 a <= b+1 ;
end
    • 项目always_comb可以自动嵌入敏感列表
    • always_comb可以进制共享变量,即赋值左侧地变量无法被另一个过程块所赋值
    • 软件工具会检查该过程块,如果其所表示的不是组合逻辑,那么会发出警告
    • always_comb在仿真0时刻会自动触发一次,无论在0时刻是否有敏感信号列表中的信号发生变化,always不会,always只有在敏感信号列表发生变化时才会触发
  • always_ff 的用法
always_ff @(posedge clk, negedge r_set_n) begin
    if(!r_set_n) q <= 0;
	else q <= d;
end

  • always_latch 的用法
always_latch begin
    if(!r_set_n)
        enable <= 0;
    else if(ready)
        enable <= 1;
    else
        enable <= 0;
end

2.2赋值操作符

对向量的快速赋值:
通过赋值 ‘1 , '0 , 'Z , 'X。来赋值全0、1、X、Z。

reg [63:0] date ;
date =64'hFFFF_FFFF_FFFF_FFFF; //verilog语言中进行全0/1赋值
date = '1; //SV语言中进行全0/1赋值

2.3枚举类型

枚举类型主要用在状态机状态变量的定义时。

2.4接口

dac61402_drive u1(.* );

2.5结构体

未完待续

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值