全文总结:本文总结了Verilog的模块与程序结构,并详细阐述了:
1、连续赋值语句和过程赋值语句的基本格式和特点
2、阻塞赋值和非阻塞赋值的区别与使用场景
3、底层模块的命名法调用
4、最后简单介绍了Verilog中的两种数据类型及使用场景
一、Verilog模块与程序结构
Verilog模块结构主要分为模块说明部分和功能描述部分,所有的模块必须以module开头 - endmodule结尾。在功能实现时主要用到的语句有assign连续赋值语句、always语句块及过程赋值语句、底层模块的调用语句。
以2选1多路器的Verilog描述为例,将其与verilog模块对应,如下所示:
在模块说明部分,其以module开头,endmodule结尾,模块名为MUX21a,一共有4个端口分别为a,b,s,y,之后对端口信号的类型进行了声明。
在功能描述部分,只有一条assgin连续赋值语句,利用了条件赋值语句对输出端口y进行赋值。
1.1 模块说明部分
- 模块名是指电路的名字,由用户指定,最好与文件名一致
- 端口列表是指电路的输入/输出信号名称列表,信号名由用户指定,各名称间用逗号隔开
- 端口信号声明要说明端口信号的输入输出属性、信号的数据类型以及信号的位宽;输入输出属性有input、output、inout三种;常用信号的数据类型有wire和reg两种,缺省则为wire型;信号的位宽用[n1,n2]表示,缺省则为1bit
- 参数声明要说明参数的数据类型、名称和初值
1.2 功能描述部分
1.2.1 assign连续赋值语句
基本格式:assgin 赋值目标 = 表达式
与门实现:assign y = a&b;
- 连续赋值语句是指其总是处于激活状态,只要表达式中的操