Verilog 编程风格和基本语法
一、工程架构:

二、Verilog代码设计风格 :



三、Testbench代码设计风格:





四、基本概念:
- 硬件描述语言是一种用形式化方法来描述数字电路和系统的语言。目前主要有两种比较流行的语言:Verilog HDL 和 VHDL
● VHDL:是有美国军方组织开发的,在1987年成为IEEE标准。该语言的特点需要有Ada基础,不是很直观,所以掌握该设计技术就比较困难。
● Veriog HDL:是在1983年由GDA公司的Phil Moorby首创,后来Cadence公司收购GDA,1990年,Cadence公司公开Verilog HDL。该语言的特点是一种非常容易掌握的硬件描述语言,只有要C语言基础的,通过系统的学习很容掌握。Verilog HDL新的标准使其不仅支持数字逻辑电路的描述还支持模拟电路的描述。
五、Verilog HDL语法的基本概念:
Verilog HDL既是一种行为描述语言也是一种结构描述语言,用Verilog HDL描述的电路设计就是该电路的Verlog HDL模型,也称为模块,Verilog HDL模型可以是实际电路的不同级别的抽象。这些抽象和他们对应的模型类型有以下五种:
行为描述:
● 系统级:用语言提供的高级结构能实现待设计模块的外部性能的模型
● 算法级:用语言提供的高级结构能实现算法运行的模型
● RTL级:描述数据在寄存器之间的流动和如何处理、控制这些数据流动的模型
以上三种都属于行为描述,只有RTL级才于逻辑电路有明确的对应关系
结构描述:
● 门级:描述逻辑门和逻辑门之间连接的类型,与逻辑电路有确定的连接关系
● 开关级:描述器件中三级管和存储节点以及它们之间连接的模型
数字系统设计工程师必须掌握以上四种,第五种于具体的物理电路有对应关系,工艺库元件和宏部件设计人员必须掌握的。
一个复杂电路系统的完整Verilog HDL模型是由若干个Verilog HDL模块构成,每个模块又有若干子模块构成,其中有些模块需要综合成具体的电路,而有些模块只是与用户所设计的模块有交互联系的现存电路获激励信号源。

正在上传…重新上传取消
注意看小结。
六、模块结构、数据类型、变量和基本运算符
- 模块的结构:Verilog的基本设计单元是模块,一个模块是由两部分组成,一部分描述接口,另外一部分描述逻辑功能,体现在程序设计上,Verilog结构位于module和 endmodule声明语句之间,每个Verilog程序包括4个主要部分:端口定义、IO说明、内部信号声明和功能定义。
● Assign 和always语句:Assign语句是描述组合逻辑最常用的方法。Always块既可以描述组合逻辑,也可以描述时序逻辑
● 并发执行和顺序执行:所有过程块(always,initial)、assign、实例引用都是并行的;always内部的语句是顺序执行的。在同一模块中,以上几种出现的先后次序没有关系。只有连续赋值语句和实例引用语句可以独立于过程块而存在于模块的功能定义部分。
- 数据类型及其常量和变量: 共有19种数据类型,常用的有四种:reg型 wire型 integer型 parameter型;Verilog语言中也有常量和变量之分。
常量:
● 数字:
- 整数:表达方式为<位宽><进制><数字>,其中位宽和进制两项可以省略,默认位宽为由系统决定,默认进制为十进制
- X 和z:一个表示不定值,一个表示高阻值
- 负数:一个数字可以被定义为负数,只需在位宽前加一个减号,减号必须写在数字表达式的最前面。
- 下画线:下画线可以用来分隔开数的表达式以提高程序可读性,不可用在位宽和进制处。
● 参数( parameter)型:参数型经常用来定义延迟时间和变
量宽度。
变量:
● 网络数据类型(wire和tri):常用来表示用以assign关键字指定的组合逻辑信号。程序中的输入和输出信号类型默认时自动定义为wire。
● 寄存器数据类型(reg):reg是数据存储单元的抽象,默认初始值位不定值,always模块内被赋值的每一个信号都必须定义为reg,reg即可以是赋正值也可以赋负值,但当时一个表达式的操作数时,他的值被当做无符号值即正值。Reg型只表示被定义的信号将用在always模块内,并不是说reg型一定是寄存器或者触发器的输出。虽然常常是寄存器和触发器的输出。
● 存储器数据类型(memory):一个n的寄存器可以用一条赋值语句进行赋值,而一个完整的存储器不行。
- 运算符及表达式:重点关注拼接运算符;注意==和===的不同; >> 移位总位数不变,<< 移位总位数增加;缩减运算符。
4.赋值语句和块语句:
● 非阻塞赋值方式:b <= a;上面语句所赋的变量值不能立即为下面的语句所用,块结束后才能完成这次赋值操作。 在编写可综合的时序逻辑块时,时最常用的赋值方式
● 阻塞赋值方式: b = a; 赋值语句执行完后,块才结束,b的值在赋值语句执行完后立刻就改变。在时序逻辑中使用,可能会产生意想不到的效果。
● 块语句:
- . 顺序块begin end语句:通常用来表示顺序执行,相当于C语言中的大括号
- . 并行块fork join语句:通常用来标识并行执行的语句
5.条件语句和循环语句和块语句和生成语句
● 条件语句(if else):if else语句后面可以包含一条语句,也可以多条语句,如果是多条语句要用begin 和end包括起来作为复合语句。If 和else 还有case 语句中有没有else default决定会不会有锁存器.
● forever语句只能出现在initial块中
● for while repeat等语句
● Verilog可以通过关键字disable提供了一种终止命令块执行的方法,disable可以从循环中退出、处理错误条件以及根据控制信号来控制某些代码段是否被执行。
● 生成块语句目前还不是很明白,为什么名字不一样?
1139

被折叠的 条评论
为什么被折叠?



