文章目录
一 System Verilog
如果没有硬件描述语言(HDL hardware description language)?
kimi的回答 :需要手动绘制电路原理图、手动布线、要打出电路板后测试验证设计的正确性…
没有HDL,数字硬件电路的设计和设置将更加依赖于手动操作和物理原型,这将大大增加设计周期、成本和出错的风险。此外,设计过程将更加繁琐,且难以实现现代电子系统中常见的复杂性和灵活性。
硬件描述语言可以做什么?
数字电路和系统的设计、建模、仿真、验证和综合。以文本形式描述数字电路的行为和结构,从而创建电路的模型。模拟电路功能,完成仿真。完成电路的优化(综合)。自动化布局和布线。与EDA集成。
硬件验证语言(Hardware Verification Language, HVL):Open Vera ,e语言,PSL,SystemC,SystemVerilog等
1.1 Systemverilog简介
SystemVerilog既是硬件描述语言(rtl(Register Transfer Level)级),也是硬件验证语言(testbench)。用于为ASIC和FPGA/SoC算法和系统建模、设计、仿真、验证、测试和实现。SystemVerilog基于Verilog语言并进行了大量扩张,并在2009年与Verilog一样称为了同一IEEE标准的一部分。支持有约束随机验证、断言和功能覆盖率,并且支持面向对象的编程。
1.2 与verilog的区别
新增数据类型:
- 两态(I/O)数据类型
- 枚举类型和用户自定义类型
- 动态数组、关联数组和队列
- 联合体和结构体
- 字符串
- 类
1.2.1 两态数据类型(1,0)
verilog中有两种基本数据类型,reg和wire,都是四态数据类型(0,1,Z,X)。存储组合逻辑和时序逻辑的数据类型可以是标量,向量(reg[7:0]),integer,time,real,可以定义一个固定大小的数组。存储都是静态的。
systemverilog中引入两态数据类型 bit
(无符号的),short int , int, longint, byte
。
logic是system verilog引入的新的四态数据类型,system verilog对reg的数据类型做了改进,可以被连续赋值语句(assign)、门逻辑和模块直接驱动(可以同时用于时序和组合逻辑)。
kimi写的例子:
module top_module;
// 定义一个reg类型的变量,它可以被连续赋值语句驱动
reg my_signal;
// 连续赋值语句,类似于Verilog-1995中的wire
assign my_signal = some_condition ? 1'b1 : 1'b0; // some_condition是一个条件表达式
// 时钟信号
input clk;
// 时序逻辑,my_signal也可以在这里被赋值
always_ff @(posedge clk) begin
my_signal <= another_condition ? 1'b1 : 1'b0; // another_condition是另一个条件表达式
end
// 其他逻辑...
endmodule
1.2.2 枚举类型和用户自定义类型
枚举:
// enum [data_type] {name1 = value1, name2 = value2...} var_name;
enum {
red, yellow, green} light1, light2;
//使用
light1 = red;
//错误使用
light1 = 0;
用户自定义类型: