前言
前面我们学习了Verilog的基础语法,接下来我们学习Verilog的程序框架。
一、注释
Verilog和C语言类似,也只有两种注释方式。
一种是以 // 开头的注释语句,它表示以 // 开头到本行结束都属于注释语句;
另一种是以“ /* ”开头,以“ */ ”为结尾的多行注释语句,它表示在两个符号之间的语句都是注释语句。
二、关键字
Verilog中有许多关键字,以下将其一一列出:
但在这么多的关键字中,我们编写程序经常用到的只有以下几种:
三、程序框架
1.模块的结构
基本知识阐述
Verilog的基本设计单元是“模块”(block),类似于C语言中的函数。它由两个部分组成,一个部分是描述接口,另一个部分是描述逻辑功能。
每一段Verilog程序中都包括有四个部分:端口定义、IO说明、内部信号声明以及功能定义。
上图中的 newproject 就是模块名;而括号中的代码就是端口的定义,端口定义有两种形式一种是如上面这张图一样,定义的同时对IO进行说明,另一种是如下面这张图一样,在括号内进行端口定义,程序部分进行说明;
从assign开始就是该模块的功能定义部分;该模块从 module 开始一直到 endmodule 结束。
在功能定义部分有三种语句(在逻辑功能上都是并行的):
- assign语句——描述组合逻辑的语句
- always语句——描述组合/时序逻辑的语句
- 例化实例元件
eg. and #2 u1(q,a,b);
完整实例
下图是一个流水灯模块的代码实例。
2.模块的调用
在模块调用时,信号是通过模块的端口在模块间进行传递。
下图是一个顶层模块的声明,在顶层模块中我们调用了 time_count 这个模块并将其实例化。
下图是被调用模块 time_count 的声明。
总结
上面我们学习了Verilog程序框架的基本知识点,对Verilog代码的编写规范也有了一定的了解。