FPGA入门系列1

模块书写

Verilog HDL 语言的基本语法与 C语言相似,因此与 VHDL 相比较更容易上手。但与C语言有很大的不同,在执行上,C语言是顺序执行,而Verilog HDL在always块里是顺序执行,但每个always块之间是并行的,所以FPGA相比与传统的单片机、DSP速度上要快很多。
本章将会在实际小项目的基础上,以 Verilog HDL 语言为主, 教读者怎么更方便、更高效的学习 FPGA。Verilog HDL 中的 HDL 指的是硬件描述语言(Hardware Description Language), 顾名思义,Verilog HDL 可以描述对应的硬件电路,下面以一个小例子说明。
 图一电路图所示

如图1所示为电路示意图, 首先分析一下该电路:
①两个输入端口即 a 和 b,为了更好地让读者理解该变量为一个输入端口,输入端口可加上方向pi(port input)表示输入。面对大量的代码,一个比较好的命名风格,更方便我们后续的验证, 希望前期就可以养成比较好的命名风格。
②一个输出端口即 c,同理 po 即为 port output。
功能:该电路实现 a 和 b 相与,结果为 c。
在用 Verilog HDL 描述一个电路时,必须要对该电路命名,此处我们对该电路命名为 a_and_b。在用 Verilog HDL 描述一个电路时, 模块的开始都是以 module 开始,endmodule 结束, module 后面写该模块的模块名,模块名的后面有一个小括号,所有该模块的端口都需要在此小括号内声明,小括号以分号结束(半角分号,同c 语言一样, Verilog HDL 中每一条语句也是以分号结束)。
在 module 与 endmodule 之间,可以定义必要的内部变量,以及我们所有描述的逻辑功能。具体如图2所示:
图2 模块代码编辑示意
建议安装专门编辑程序的一些软件,例如Notepad++软件界面及功能都比较齐全。用 Notepad++打开我们新建的 V 文件, 按照模板书写模块a_and_b的 Verilog HDL 代码, 如下所示:
图3 模块代码
代码解析:
①模块以 module 作为开头, endmodule 作为结尾, 需要注意模块名与 V 文件名要一致;
②小括号内描述端口, Verilog HDL 中输入端口的关键字为 input,输出端口的关键字为 output。wire(线) 为端口的变量类型, input 端口的变量均为 wire型, Verilog HDL 中另一种常用的变量类型为 reg(寄存器),将在后面的章节详细介绍;
③代码第 8 行, 描述了具体的逻辑功能, assign 为 Verilog HDL 中的关键字,assign 可以描述组合逻辑,每一个 assign 后面只能跟一条语句。Verilog HDL 中另一个常用的关键字为 always, 后续会详细讲解。该语句表达的意思为 a&b赋值给 c, 其中=为赋值号, 将右边的结果赋值为左边的变量, &为按位与,即变量的对应位相与, 将在基础语法部分详细讲解。
这样我们就已经将图中电路描述清楚了,代码只需要按照给出的模板填写对应的内容即可。

参考资料:FPGA技术联盟

发布了2 篇原创文章 · 获赞 3 · 访问量 99

猜你喜欢

转载自blog.csdn.net/qq_45644646/article/details/105773608
今日推荐