Verilog学习笔记(01)
Posted 高山流水123a s d
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Verilog学习笔记(01)相关的知识,希望对你有一定的参考价值。
文章目录
参考:Verilog数字VLSI设计教程
硬件描述语言Verilog
Verilog HDL数字设计与综合
Verilog HDL 数字集成电路高级程序设计
1.1 什么是Verilog HDL?
Verilog是一种硬件描述语言,可通过对数字电路和系统的语言描述,对数字电路进行设计和验证。其主要作用是:数字集成电路设计者可以通过HDL,根据电路结构化特点,采用层次化的设计结构,将逻辑功能用电路的方式实现。
目前,Verilog HDL和VHDL是主要的两种HDL。
Verilog的限制是只能描述数字系统,而无法描述模拟系统
Verilog HDL相比于C语言具有以下特点:
并发性
结构化
过程化语句
时序
1.2模块
模块是Verilog HDL设计的基本单元结构
下图是Verilog模块的基本组成:
Verilog一共有三种建模方式:
(1)数据流建模
(2)行为级建模
(3)结构化建模
根据所调用子模块的不同抽象级别,可以将模块的结构描述方式分成三类:
(1)模块级建模
(2)门级建模
(3)开关级建模
模块调用方式:
模块名<参数值列表>实例名(端口名列表);
举个例子:
功能模块
module and_2(a,b,c);
input a,b;
output c;
assign c=a&b;
endmodule
模块调用:
module logic(in1,in2,q);
input in1,in2;
output 1;
and_2 U1(in1,in2,q);
endmodule
如果在同一个模块在当前模块被调用多次时,可以用如下方式表达:
模块重复调用
模块名<参数值列表>实例名(端口名列表),
<参数值列表>实例名(端口名列表),
......
<参数值列表>实例名(端口名列表);
注意:只用最后的末尾为;其余皆为,
模块阵列调用
模块名<实例名>[阵列左边界:阵列右边界](端口名列表);
举个例子:
module AND(ina,inb,andout);
input ina,inb;
output andout;
assign andout=ina&inb;
endmodule
module array1(out,a,b);
input [3:0] a,b;
output [3:0] out;
wire [3:0] out;
AND U1(out[3],a[3],b[3]),
U2(out[2],a[2],b[2]),
U3(out[1],a[1],b[1]),
U4(out[0],a[0],b[0]);
endmodule
module array2(out,a,b);
input [3:0] a,b;
output [3:0] out;
wire [3:0] out;
AND AND_ARREY [3:0] (out,a,b);
endmodule
模块端口对应方式
1.端口位置对应方式
模块名 <参数值列表>实例名(<信号1>,<信号2>,<信号3>,......<信号n>);
2.端口名称对应方式
模块名 <参数值列表>实例名(.端口名1(<信号1>),
.端口名2(<信号2>),
.端口名3(<信号3>),
......
.端口名n(<信号n>)
);
一般在工程中采用端口名称对应方式的较多,以确保程序的可靠性
3.端口位宽未匹配
(1)未连接端口
模块名 <参数值列表>实例名(<信号1>,<信号2>, ,......<信号n>);
模块名<参数值列表>实例名(端口名列表),
<参数值列表>实例名( ),
......
<参数值列表>实例名(端口名列表);
(2)不同的端口位宽(低端位置对齐,右对齐)
1.3门级建模
1.多输入门元件调用
元件名<实例名>(<输出端口>,<输入端口1>,......,<输入端口n>);
2.多输出门元件调用
元件名<实例名>(<输出端口1>,......,<输出端口n>,<输入端口>);
3.三态门元件调用
元件名<实例名>(<输出端口>,<输入端口>,<控制端口>);
1.4开关级建模
1.MOS开关(nmos,pmos,cmos)
nmos/pmos 实例名 (out,data,control);
cmos 实例名 (out,data,ncontrol,pcontrol);
2.双向开关
tran 实例名 (inout1,inout2);
tranif0/tranif1 实例名 (inout1,inout2,control);
以上是关于Verilog学习笔记(01)的主要内容,如果未能解决你的问题,请参考以下文章
FPGA/verilog 学习笔记—— verilog程序框架