数据类型
按抽象数据类型分:
l Integer
l Real
l Event
l Parameter:参数型数据是被命名的常量,在仿真钱对其赋值,在整个仿真过程中保持其值不变,数据的具体类型由所赋值决定。用来定义变量位宽及延迟时间等。
Ø 算术运算符
+ - * / %
Ø 符号运算符
+ -
Ø 关系运算符
==逻辑相等 !=逻辑不相等 ===实例相等!==实例不相等
区别:操作数中含有一位X或Z,逻辑算子置位为X,实例算子可以比较X和Z的操作数
Ø 逻辑运算符
&&逻辑与 ||逻辑或 !逻辑非
Ø 位运算符
~非 &与 |或 ^异或 ^~同或 ~&与非 ~|或非
Ø 移位运算符
<<左移 >>右移
用0填补移出的空位
Ø 条件运算符
(:?)第一个操作数是TRUE,算子返回第二个操作数,否则返回第三个操作数(可以用来做一个选择器)
Ø 并接运算符
{}
² 选择结构
If和case语句
If语句与C相同
Case语句与C不同 Verilog中不需要break语句
² 重复结构
1. for循环语句Verilog中没有增1++ 减1—运算符需用i=i+1代替
2. while循环同C
repeat(重复循环结构)
等待5个时钟周期然后停止仿真的repeat循环
1. Repeat(5)
……
$stop
2. forever循环
用来监控一些条件,当条件发生时显示一条信息
参数语句
3. 参数语句应用在寄存器和延迟的宽度,在程序中任何可以使用字母之处都可以使用参数parameter <赋值列表>
Verilog允许用户在编译时对参数重新赋值而改变其值方法:
1) 使用defparam语句
2) 在同一模块实例中使用“#”符号
连续赋值语句
连续赋值语句用来驱动线型变量 关键词assign用来区分连续赋值语句和过程赋值语句
阻塞和无阻塞过程赋值
阻塞赋值:
lhs_expression=expression;
lhs_expression=#delay expression;
lhs_expression=@event expression;
lhs为变量名、变量的一个特定位
1中、仿真器对右端表达式进行计算后立即将结果赋给左端
2中、仿真器计算右端表达式后等待delay时间,后将值赋到左端
3中、仿真器等到event事件发生后才把右端的值赋给左端
这3种赋值都要等到赋值操作后才能执行下一条语句
无阻塞赋值:
lhs_expression<=expression;
lhs_expression<=#delay expression;
lhs_expression<=@event expression;
阻塞赋值与无阻塞赋值的区别:
无阻塞赋值右端计算好后并不立即给左端,在要赋值的同时控制下一条语句的继续执行(不用考虑顺序)