第三章:FPGA学习之路——Verilog程序框架
文章目录
前言
本文主要记录本人学习正点原子的Verilog程序框架的内容,里面会添加一些个人的理解,方便自己和各位阅读者查看。
一、Verilog注释
1.注释的作用
- 提高程序的可读性
- 方便后期维护
2.两种注释方式
- 以 // 开头的语句,它表示以 // 开始到本行结束都属于 注释语句。
只能用于单行
例如:
wire locked; //PLL输出有效标志信号
- 我的话习惯把这种注释方式用与“屏蔽”,主要是在调试和改错的时候用的比较多。
有的人可能会说这样屏蔽比较麻烦,其实按住键盘上的“ ALT ”按键,然后鼠标放到要屏蔽的程序开头,按住左键往下滑,就可以在几行同时打相同的内容。
- 以“ /* ” 符号开始,一直到“ */ ”结束,在这两个符号之间的都是注释
可用于多行
例如
/*
我
是
6
行
注
释
*/
- 我个人比较习惯把这种注释用于模块开头或每条需要解释的语句后面,主要用于解释说明 。
二、Verilog关键字
1.关键字 & 定义变量的技巧
- 工具会自动识别关键字,并且每一个都有自己的物理意义,因此我们定义变量的时候不能与下表中的关键字重合。
虽然关键字很多但是我想大家应该都发现了,他们好像都是小写,那就好办了,当我们定义一个变量的时候可以将第一个字母大写或者全部大写,这样做我认为有两点好处
- 可以很有效的保证不会和表中的关键字重合
- 可以很好的提高程序的可读性,比如用英语或者拼音来写变量的时候使用大写加_的方式
2.常用的关键字
见下表:
三、Verilog程序框架
1.模块的结构
- Verilog的基本设计单元是“模块”(block)(类似:C语言的基本模块是函数)
- 模块由两部分组成:一部分描述接口,另一部分描述逻辑功能
- 每个Verilog程序包括4个主要的部分:端口定义、IO说明、内部信号声明、功能定义。
module block(a,b,c,d); /*module:关键字模块的开始;block:模块名;(a,b,c,d):端口的定义*/
/*IO说明*/
input a,b; /*输入信号*/
output c,d; /*输出信号*/
/*这个模块的功能定义*/
/*assign:给线网类型赋值*/
assign c = a | b;
assign d = a & b;
endmodule /*关键字模块的结束*/
- 模块接口图
- 综合的门级电路结构
可综合:对于Verilog而言,他作为一个硬件描述语言,所写的语句可以得到一个由门级结构组成的电路网表;也就是说可综合的模块最后可以生成一个物理电路的
而Verilog里还有不可综合的模块,它不能对应实际的电路,它的作用是给模块做一个测试文件(仿真文件)让仿真工具来识别
注意 :
- 对于c语言来说,函数的位置先后影响执行顺序;而对于Verilog来说位置并不影响,因为是并行的;
- 而在模块中,begin和end中逻辑是顺序执行的
2.模块的调用
在模块调用时,信号通过模块端口在模块之间传递。
总结
以上就是今天的内容,本文记录了学习Verilog程序框架的内容,以此来方便大家查阅和学习。