初识Verilog HDL
Verilog HDL的简介
Verilog HDL 是一种硬件描述语言,以文本的形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能
Verilog相比VHDL
Verilog
语法自有,易学易用
适合算法级、门级设计
代码简洁
发展较快
VHDL
语法严谨,难以上手
适合系统级设计
代码冗长
发展缓慢
Verilog 基础语法
逻辑值
0:逻辑低电平,条件为假
1:逻辑高电平,条件为真
z:高阻态,无驱动
x:未知的逻辑电平
算数运算符
+(加法,如assign c = a+b;就是把a与b的和赋给c)
-(减法,如如assign c = a-b;就是把a与b的差赋给c)
*(乘法,如如assign c = a乘以3;结果赋给c)
/(除法,如如assign c = a/2;结果赋给c,一般不会用除号)
%(求模,或者称为求余,要求%两侧均位整形数据,5%3的值为2,用在测试文件)
module
endmodule模块的开始和结束
输入信号的关键词和输出信号的关键词是input和output
还有一种既可以是输入信号还可以是输出信号inout比如i2C中的sda可以作为指令的输入也可以作为指令的输出
变量分为两种类型:
一种是wire型变量(可以看成直接的连接)会被映射为真实存在的物理连线;
一种是寄存器变量reg,具有对某一个时间点保持状态的功能,会被映射成真实的寄存器;
//参数
parameter 可以在模块的实例化中修改
localparam 只能在模块内部使用不能被实例化
常量
基数表示法
默认的位宽是32bit的数
阻塞赋值和非阻塞赋值
例如
//阻塞赋值
a = 1;
b = 2;
c = 3;
begin
a = b;
c = a;
end
//结果
//a = 2;
//b = 2;
//c = 2;
//非阻塞赋值
a = 1;
b = 2;
c = 3;
begin
a <= b;
c <= a;
end
//a = 2;
//b = 2;
//c = 1;
归约运算符、按位运算符
以"&"操作符位例子,"&"操作符有两种用途,既可以作为一元运算符(仅有一个运算的量),也可以作为二元运算符(有两个参与运算的量)。
当"&"作为一元运算符时表示归约与,&m试将m中所有比特相与,最后的结果是1bit。
逻辑运算符
关系操作符
移位运算符
位拼接运算符
条件运算符
优先级
if else
但是这个语句会产生latch,不推荐
case
case分支语句通常用来表示有限状态机的描述
系统函数
‘timescale 1ns/10ps
那么就是1ns/10ps = 0.01ns ,延时得更加精确
但是时间单位不能比时间的精度小
inital只真仿真的文件中使用,是不可综合的
和write区别就是一display可以自动换行
而write必须用换行符
$strobe也是输出打印信息只不过在最后输出
4.$monitor用于持续检测变量
$monitor("%b+%b=%d",a,b,c);
任何一个变量改变都会执行一次
用于暂停仿真,finish用于结束仿真