文章目录
前言
上文我们对Verilog语言有了一定的了解,知道了Verilog语言是一种硬件描述语言,他能够在EDA工具上综合成实际的电路,在FPGA或者单片机开发领域有着很高的地位。
我们学习一门语言,肯定需要学习它的语法结构,就像学习C语言一样,我们相应对某一事件重复操作,我们可以用for循环实现,这就是一种语法结构,弄清楚了会极大地提高我们的开发效率。Verilog语言的语法结构还是挺简单的,相信比其他语言来得容易。
一、简单的Verilog知识
1.1、Verilog端口定义
下面我们看一端简单的代码来了解Verilog的端口定义基础知识:
module adder(
input [2:0] a ,
input [2:0] b ,
input cin ,output count ,
output [2:0] sum
);assign {count,sum} = a + b + cin;
endmodule
这个例子通过连续赋值语句描述了一个模块名为adder的三位加法器可以根据两个三比特数a、b和进位cin计算出和(sum)和进位(count)。
通过这个例子,一个模块由module开头,endmodule结束,紧跟着module后面的是模块名。模块名后面括号里面的是输入输出端口信号,input为输入端口,output为输出端口,中括号里面是位宽,当没有指定位宽时默认为32位宽,{}叫做位拼接运输符,中间用逗号隔开,后面我们会细讲。
1.2、Verilog的标识符
标识符用于定义模块名、端口名和信号名等,上面代码里的adder就是一个标识符,也是模块名。Verilog的标识符可以是任意一组数字、字母、下划线等符号的组合,但是标识符的第一个字符必须是字母或者下划线。
标识符虽然可以任意定义,但是它是区分大小写的,比如Count和count就不是同一个标识符,这点需要注意。对于标识符的定义虽然没有限制,但是我们最好还是遵循一定的规则,以便于你以后回来对代码升级维护时一眼就能知道这个模块是干什么的。
关于标识符的规范,我这里有几个建议:
① 模块名定义最好见名知其意,定义的模块名最好和代码实现的功能相关,如sum等。
② 用下划线来隔开两个词组,看起来简单易懂,如cpu_addr就要比cpuaddr好很多。
③ 系统时钟和复位信号统一写法,系统时钟用clk,复位用rst_n。
④ 采用一些前缀或者后缀命名,如cnt_500ms、clk_50mhz等。
⑤ 参数统一大写,如TIME_SHOW。
⑥ 自定义的标识符不能与关键字同名。

本文介绍了Verilog语言的基础知识,包括端口定义、标识符、逻辑值、数字进制、数据类型、运算符以及程序设计框架。通过实例解析了模块结构、运算符使用和注释规则,为初学者提供了一个简洁易懂的指南。
2444

被折叠的 条评论
为什么被折叠?



