systemverilog与verliog的语法主要区别
·
1. 数据类型增强
SystemVerilog新增数据类型:
systemverilog
// 二值逻辑类型 bit a; // 2值,0/1 byte b; // 8位有符号 shortint c; // 16位有符号 int d; // 32位有符号 longint e; // 64位有符号 // 四值逻辑类型 logic f; // 4值,0/1/x/z(reg的增强版) integer g; // 32位有符号 // 其他类型 string str; // 字符串类型 void; // 空类型
Verilog只有基本类型:
verilog
reg a; // 4值逻辑 wire b; // 网络类型 integer c; // 32位有符号
2. 进程控制语句
SystemVerilog:
systemverilog
// fork-join变体
fork
begin : thread1
#10;
end
begin : thread2
#20;
end
join // 等待所有完成
join_any // 等待任意一个完成
join_none // 不等待,继续执行
// 高级同步机制
semaphore sem;
mailbox mb;
event e;
Verilog只有基本的:
verilog
fork
#10;
#20;
join // 必须等待所有完成
3. 面向对象编程
SystemVerilog支持OOP:
systemverilog
class Packet;
bit [31:0] addr;
function new();
addr = 0;
endfunction
virtual function void display();
$display("Addr: %h", addr);
endfunction
endclass
Packet pkt = new();
Verilog没有类概念。
4. 断言和功能覆盖
SystemVerilog:
systemverilog
// 断言
assert property (@(posedge clk) ready |-> valid);
// 功能覆盖
covergroup cg @(posedge clk);
coverpoint addr {
bins low = {[0:100]};
bins mid = {[101:200]};
}
endgroup
Verilog没有这些功能。
5. 接口和模块
SystemVerilog接口:
systemverilog
interface bus_if (input clk);
logic [31:0] data;
logic valid;
modport master (output data, valid);
modport slave (input data, valid);
endinterface
module top;
bus_if bus(.clk(clk));
master m1(.bus(bus.master));
slave s1(.bus(bus.slave));
endmodule
Verilog只能使用端口列表:
verilog
module top(clk, data, valid);
input clk;
output [31:0] data;
output valid;
// ...
endmodule
6. 数组和结构体
SystemVerilog增强:
systemverilog
// 动态数组
int dyn_arr[] = new[10];
// 关联数组
int assoc_arr[string];
// 队列
int q[$] = {1,2,3};
// 结构体
typedef struct {
bit [7:0] addr;
bit [31:0] data;
} packet_t;
packet_t pkt;
Verilog只有固定数组:
verilog
reg [31:0] fixed_arr [0:9];
7. 随机化约束
SystemVerilog:
systemverilog
class Transaction;
rand bit [31:0] addr;
rand bit [31:0] data;
constraint valid_range {
addr inside {[0:100]};
data > 0;
}
endclass
Transaction tr = new();
tr.randomize();
Verilog没有随机化功能。
8. 其他重要区别
| 特性 | SystemVerilog | Verilog |
|---|---|---|
| always块 | always_comb, always_ff, always_latch | 只有always |
| 包(package) | 支持 | 不支持 |
| 枚举类型 | 支持 | 不支持 |
| 参数化 | 更强大的参数化 | 基本参数化 |
| 运算符 | 新增 inside, ->, ++ 等 | 基本运算符 |
总结
SystemVerilog是Verilog的超集,主要增加了:
-
验证功能:断言、覆盖、随机化
-
抽象层次:类、接口、包
-
数据类型:更丰富的数据类型
-
进程控制:更灵活的并发控制
在实际项目中,SystemVerilog主要用于验证环境构建,而设计部分仍然常用Verilog风格。
更多推荐
所有评论(0)