实例:点灯学习
一、Verilog
语法学习
1. 参考文章
刚接触
Verilog
,作为一个硬件小白,只能尝试着去理解,文章未完…持续更新。
参考博客文章:
这里抄点,那里扣点,整理了一下,感谢以上各位作者。具体的实例项目是同事给的,他让我学着编出个流水灯,这不要我的命嘛,慢慢学吧。
你还可以在哪里看到这篇文章:
2. Verilog
模块
Verilog
的基本设计单元是“模块”。一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能,即定义输入是如何影响输出的。下面举例说明:
可以看到模块由关键字module....endmodule
确定。
module
模块名(接口信号);
//信号声明
//功能描述
endmodule
要求: 1. 模块名具有意义;2. 一个.v文件只有一个模块。
3. Verilog
语法
Verilog
是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
Verilog
和C
的区别:
Verilog
是硬件描述语言,编译下载到FPGA
之后,会生成电路,所以Verilog
全部是并行处理与运行的C
语言是软件语言,编译下载到单片机CPU
之后,还是软件指令,而不会根据代码生成相应的硬件电路,而单片机CPU
处理软件指令需要取址、译码、执行,是串行执行的。
**可综合描述:**综合tool
能够Verilog
描述转化(complie
)成基本的数字电路底层cell
(与或非gate
,寄存器等)的描述。
assign y = a & b;
**不可综合描述:**综合tool
不能把Verilog
描述转换为基本的数字电路底层cell
的描述。
$display("hello word.\n")
Verilog
设计仿真与实现:通过EDA TOOL
,可以在计算机上对Verilog
设计的功能进行仿真。
数字电路设计方法学:
Bottom-Up
:从底层cell
开始,逐渐往上加功能;top-Down
:从底层结构,协议算法开始,向下逐步划分功能模块;再细分各功能模块与IO
。
目前,基于Verilog
的数字电路通常使用TOP-Down
的设计方法。因为数字IP/IC
的规模很大,需要先抽象思维再细化;
Verilog
给数字电路的设计的抽象思维提供了一种设计语言,但是:数字设计和软件设计不同的,需要Think in Hardware
,写代码前先设计电路结构。Verilog
的功能描述:
Top-Dowan
描述数字电路功能:通过模块module的层次化设计,实现一个复杂的数字逻辑功能
Verilog
逻辑值:
逻辑电路中有四种值,即四种状态:
- 逻辑0:表示低电平,对应电路的
GND
; - 逻辑1:表示高电平,对应电路的
VCC
; - 逻辑X:表示未知,有可能是高电平,也有可能是低电平;
- 逻辑Z:表示高组态,外部没有激励信号是一个悬空状态;
Verilog
的数字进制
Verilog
数字进制格式包括二进制、八进制、十进制和十六进制,一般常用的为二进制、十进制和十六进制。
- 二进制表示如下:
4'b0101
表示4位二进制数字0101 - 十进制表示如下:
4'd2
表示4位十进制数字2 - 十六进制表示如下:
4'ha
表示4位十六进制数字a
当没有指定数字的位宽与进制时,默认为32位的十进制,比如100,实际上表示的值为
32'd100
4. Verilog
语法详细介绍
(1)标识符:
用于定义code
中的各种名字,比如:信号,module
,define
,parameter
;
- 标识符由:字符,数字,下划线组成;
- 首字母必须是字母或者下划线;
- 标识符是区分大小写的;
- 信号名字与信号功能相对应;
不建议大小写混合使用,普通内部信号建议全部小写,参数定义建议大写
- 用有意义的有效的名字如
s