verilog学习一

来源:互联网 发布:苹果电脑装windows系统 编辑:程序博客网 时间:2024/04/30 14:34

1.verilog是硬件描述语言,归根结底是一种语言。类比C语言,C语言是用来写程序,描述一个算法。而verilog是硬件描述语言,即用它写的代码描述了一个电路系统结构(门级互联的结构模块),这个电路系统实现了一定的电路功能(功能行为模块)。

2.用verilog硬件描述语言所建立的电路系统模型由若干个模块(子模块)组成。类比C语言中子程序。

3.verilog模块可以有几种不同表达方式:

(1)仅仅描述逻辑功能,不关心内部具体结构;

(2)描述逻辑表达式;

(3)描述电路结构(具体的与或非门电路),与具体的逻辑元件对应。

4.综合:上述由方式(1)通过方式(2)自动转换为方式(3)。

而方式(3)的描述与具体的元件相对应,因此容易转变成具体的电路布线结构。

5.实例化(实例引用):调用(原语)库中定义好的元件或模块。类比C语言中调用库函数。

6.系统设计人员只需要关注逻辑功能,不需要关注具体元件细节,因为通过综合可以转换,进而提高设计效率。

7.关于仿真和测试:有待理解。

1. 模块的结构:

module 模块名(口1,口2,口3,……);   /*端口定义*/

 

input  [信号位宽-1,:0]  端口名1;  /*I/O说明*/

output  [信号位宽-1:0]  端口名 2;

inout  [信号位宽-1:0]  端口名3;

 

reg [width-1:0]  R变量1; /* 内部信号说明*/

wire [width-1:0]  W变量1;

 

assign a=b&c;    /*功能定义*/

and #2  u1(q,a,b); /*assign常用来描述组合逻辑*/

always ……;   /*always既可用来描述组合逻辑,也可描述时序逻辑*/

 

endmodule

2. 功能定义部分中:所有过程块(always块,initial块),连续赋值语句,实例引用是并行的(仿真一开始同时立即开始执行),与在模块中的顺序无关。initial语句只执行一次,always语句是不断重复活动着(只要满足条件就运行一次),直至仿真结束。

  在always块中是顺序执行的。

3. 符号常量定义: parameter 参数名=数字;类比C语言中的宏定义。

符号常量常用于定义延迟时间和变量宽度。

4.变量:

wire型:网络数据类型,由门电路或assign指定的连续赋值语句驱动(姑且理解为连接线上的数据吧)。

reg型:寄存器数据类型,常用来表示always块内的指定信号,代表触发器(可以理解)。通过赋值语句可以改变reg型数据的值,其作用相当于改变触发器的存储单元的值。在always模块内被赋值的每一个信号都必须定义成reg型。

memory型:存储器型,reg型构造数组。

1.运算符:算术运算符,赋值运算符,关系运算符,逻辑运算符,条件运算符,位运算符,移位运算符,拼接运算符,缩减运算符。与C语言中基本一致。

2.非阻塞赋值:(b<=a),块结束后才完成赋值操作。(时序逻辑电路中触发器动作)

阻塞赋值:(b=a),语句执行完就已经赋值。

3.块语句

顺序块:begin……end,块内语句顺序执行。

并行块:fork……join,块内语句并行执行。

1条件语句:if三种形式,与C语言相同。只能用在过程块(always,initial)中的begin……end块中。

2.case,casez,casex语句:条件分支语句。(多路选择器)

为避免生成不必要的锁存器,if语句要加上else项,case语句要有default项。

3.循环语句

forever:常用于产生周期性的波形,用来作为仿真测试的信号,必须写在initial模块中。

repeat,while,for。

4.命名块的禁用:disable。

5.生成块

原创粉丝点击