1 Verilog常用关键字
大概知道以下哪些是关键字就好,如何使用还是得在编写代码中来学习。
2 Verilog注释方法
Verilog有两种注释方式:
2.1 “ // ”
单行。
2.2 “ /* ”
可扩展多行。
3 Verilog程序基本框架
Verilog 的基本设计单元是“模块”( block),模块就类似于C语言中的函数。
每个Verilog程序包括4个主要的部分:端口定义、IO说明、内部信号声明、逻辑功能定义。
module 模块名字(端口定义);
...(IO说明)
...(内部信号声明)主要描述一些内部可能用到的信号,定义出来
...(逻辑功能描述)
endmodule
PS:其中,端口定义可以省略,或者说与IO说明合在一起(见例子1中abcd为端口定义),内部信号声明依具体情况而定也不一定存在。因此,其实一个模块主要的部分是:一部分描述接口(IO说明即端口说明),另一部分描述逻辑功能 。
3.1 例子1:
这个例子没有内部信号声明这一块,给出了对应的硬件电路图和模块图,比较简单易于理解。
(1)看上图左侧图,为一个模块的程序:
- module开始,endmodule结束。
- IO说明(描述接口部分):红色框,用关键字input定义a,b为模块的输入;用关键字output定义a,b为模块的输出。
- 逻辑功能定义(描述逻辑功能部分):绿色框,用关键字assign描述逻辑功能。
(2)看上图中间图和右侧图。
- 中间图就可以看作是你编写的这个程序的模块描述接口的情况,一个黑匣子,输入为你定义的a、b,输出为你定义的c、d。
- 右侧图就是描写的这个程序实现的硬件电路,程序中assign描述的就是ab连接一个或门,输出为c;ab连接一个与门输出为d。(注意,当程序编写的是可综合模块能够生成对应的硬件电路,不可综合的模块则不行,但可以在仿真中使用不可综合的模块程序。这个不太懂,后续学了再补)
3.2 例子2:
以上例子省略了端口定义这一部分
- module开始,endmodule结束。
- IO说明(描述接口部分):黄色框。
- 内部信号声明:粉色框,这里定义了一个寄存器类型的计数器。
- 逻辑功能定义(描述逻辑功能部分):蓝色框,这里有两个always,描述了两个逻辑功能。
3.3 总结:
以上两个例子,总结出Verilog程序框架的一些特点吧。
- 每个Verilog程序包括4个主要的部分:端口定义、IO说明、内部信号声明、逻辑功能定义。
- IO说明默认端口是wire类型,如果要改成reg类型,要写出来(如例子2程序中的output定义。)
- 逻辑功能定义可多个,且多个逻辑功能是并行的,即例子2中的两个always逻辑功能段谁前谁后无所谓,是同时编译完成逻辑功能的,这和C语言不一样,C语言要强调顺序问题。
另外逻辑功能定义部分有三种方法。
1、assign语句描述组合逻辑。
2、always语句描述组合/时序逻辑。
3、例化实例元件(可理解为画出一个逻辑单元)
比如这个例子就是先了一个二输入的与门。
PS:组合逻辑电路的输出仅取决于当前的输入状态,与电路之前的状态无关;时序逻辑电路的输出不仅取决于当前的输入,还受到电路原来状态的影响。
注:本文学习及图片来源于哔哩哔哩“正点原子”,如有侵权,请联系我,欢迎指正~