verilog的课程要求:
- 有基本数电常识(数制、组合逻辑电路、时序逻辑电路)
- 掌握linux操作系统一些简单指令,掌握vi编辑器使用
- verilog-登陆服务器练习+仿真验证功能
只需要看懂verilog的代码
verilog
verilog概述
- 什么是HDL?(Hardware Description Lanuage)
- 具有特殊结构能够对硬件逻辑电路的功能进行描述的一种高级编程语言
- 这种特殊结构能够:
- 描述电路的功能
- 描述电路的链接
- 描述电路的时序
- 表达具有并行性(很多代码不是由上往下执行,而是同步执行)
- HDL语言设计利用EDA软件计算机仿真系统在将设计错误的数目减少到最低,使一次设计成功成为可能
- 修改设计方案将变得很容易,只需要对HDL进行修改,这比更改电路原理图要容易实现得多
HDL语言是并发的,即具有同一时刻执行多任务的能力,一般来讲编程语言是非并行的,但在实际硬件中许多操作都是同一时刻发生的,所以HDL语言具有并发的特征
HDL语言有时序的概念,一般来讲编程语言是没有时序概念的,但在硬件电路中从输入到输出总是有延迟存在的,为描述这些特征,HDL语言需要建立时序的概念。因此使用除了可以描述硬件电路的功能外还可以描述其时序要求
HDL主要有两种verilog和VHDL(用的很少)
- verilog语言起源于c语言,因此类似于C语言,容易掌握
- VHDL起源于ADA语言,格式严谨,不易学习
verilog HDL用途
Verilog的主要应用包括:
- 用来进行各种层次的逻辑设计,进行数字系统的逻辑综合
- 测试工程师用于编写各种层次的测试程序,仿真验证和时序分析,学习testbench的代码
verilog基本语法
- 模块(module)是verilogHDL的基本单位,除了编译指令,其他所有的设计代码都必须放在一个或多个模块中
- 一个模块内部可以使用其他模块,称为示例,上层模块可以引用底层任意层次模块的变量
- 模块内部可以包含若干个块
- 在moudle和endmoudle中除了I/O其他的都需要写在块中
注释:/…/和//…对程序的任何部分作注释。加上必要的注释,以增强程序的可读性和可维护性
verilog模块举例
注意always @()alway后面是存在空格的
一般推荐这类用法
数据类型及常量、变量
一、数据类型
-
数据类型是用来表示数字电路中的数据存储和传送单元
-
verilog HDL中共有19中数据类型
-
其中4个最基本的数据类型为:
-
interger型,用来描述整数
-
parameter型
-
reg型,寄存器
-
wire型,表示连线,类似用assign
二、常量
在程序运行过程中,其值不能被改变的量,被称为常量 -
数字(包括整数,x和z值,负数)
-
parameter常量(或称符号常量)
三、verilog中位宽的定义(位宽指的是二进制的宽度)
方式一
- verilog的位宽定义一般如下所示:
- 如reg[7:0]in,代表定义一个8位长度的变量in
方式二
在写代码的过程中不小心写成了reg[7]in(少写了“:0”),编译器没有报错,差别,此时变成了长度为7的变量in
可能引起的错误,不小心写成这样可能导致数据位宽不对而产生问题
四、变量
- 在程序运行过程中,其值可以改变的量,称为变量
- 其数据类型有19种,最常用的3种为:
- 线网型(nets type)
- 寄存器型(register type)
- 数组(memory type)
nets型变量不能储存值!!!wire常用其他不常用
wire型变量
register型变量(寄存器型变量)
input的所有基本上为wire型(在rtl代码中)
output可以上为wire或者reg型变量(视情况而定)
reg型变量
verilog中reg与wire的区别
memory类型变量-数组
- 定义-由若干个相同宽度的reg型向量构成的数组
- verilog hdl通过reg型变量建立数组来对存储器建模
- memory型变量可描述RAM、ROM和reg文件
- memory型变量通过扩展reg变量的地址范围来生成
memory型变量与reg型变量的区别
reg mema[0:n-1];//最好这样写,由n个1位寄存器组成的存储器
数据类型常量
parameter型常量
verilog中parameter来定义常量,即用parameter来定义一个标识符来代表一个常量,称为符号常量,即标识符形式的常量
采用标识符代表一个常量用途
1.可以提高程序的可读性和可维护性;
2.可以利用defparam或者在模块实例化的时候进行参数传递(即重写)
数据类型数组
常用的参数定义是写法2
paramerter和localparam的区别
课上关于parameter可由别的模块调用的例子
同步状态机的原理和设计(要懂状态机的运行思想,状态机转化为实际的电路)
vcs基本使用方法
vcs是在linux下面面进行仿真看波形的工具
- step1 在sim路径下输入”make all“
- step2 CSV软件运行成功
- step3 在列表中选择如下项
- step4 在variable中ctrl+a全选各input
- step5 右键选择”new wave view“
- 进入仿真,点击运行此仿真
verilog建模
系统级是数字系统设计的最高层次
一个系统可以包括若干芯片,如果是system on chip 设计,则在一个系统芯片上,也会有若干类似于处理器,存储器等这样的部件
算法及是对整个系统的数学模型进行建模,一般通过对输入/输出之间的关系描述,来模拟器件的行为,检验其功能是否正确,而不考虑具体硬件实现。
寄存器变换级