目录
1.综合和仿真
1.1 综合
将 Verilog 代码转成网表(实际电路)的过程称为综合,实现这一过程的工具就是综合器。
1.2 仿真
在综合前, 设计师可以在电脑里通过仿真软件对代码进行仿真测试, 检测出 BUG 并将其解决,最后再将程序烧写进芯片中。仿真代码只求产生最真实的激励,无需关注是否可综合成电路。
1.3可综合与不可综合
简单来说,“综合”要做的事情有:编译 rtl 代码,从库里选择用到的门器件,把这些器件按照
“逻辑”搭建成“门”电路。不可综合,是指找不到对应的“门”器件来实现相应的代码。比如“#100”之类的延时功能,简单的门器件是无法实现延时 100 个单元的, 还有打印语句等,也是门器件无法实现的。设计师应熟悉哪些代码是可综合哪些是不可综合的。
2.模块介绍
定义:module模块是 Verilog 的基本描述单位,用于描述每个设计的功能和结构,以及其他模块通信的外部接口。
模块有五个主要部分:端口定义、参数定义(可选)、 I/O 说明、内部信号声明、功能定义。模块总是以关键词 module 开始,以关键词 endmodule 结尾。它的一般语法结构如下所示:
模块例化:一个模块能够在另外一个模块中被引用,这样就建立了描述的层次。模块例化有两种方法,推荐后者通过名字相关联方法。
3.语法和要素
信号位宽:
wire [7:0] a; //定义wire类型变量a的位宽为8位,缺省时默认为1位
常见的数据类型:
线网类型wire :线网类型用于对结构化器件之间的物理连线的建模,通常用assign语句赋值。类型缺省时,默认为wire类型。
寄存器类型reg:寄存器类型通常用于对存储单元的描述,即可用于组合逻辑,也可用于时序逻辑。always 语句中进行描述的必须是用 reg类型的变量。
wire和reg区别:wire需要持续的驱动信号,reg不需要持续驱动就可保存最后一次赋值。一般always 语句中都用用