集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2877|回复: 3

Verilog HDL基本知识介绍

[复制链接]
xin-度 发表于 2019-3-24 08:44:00 | 显示全部楼层 |阅读模式
一、Verilog 语言简介

1.硬件描述语言说明

概念:硬件描述语言(HardwareDiscription Language, HDL)以文本形式来描述数字系统硬件结构和行为,是一种用形式化方法来描述数字电路和系统的语言,可以从上层到下层逐渐描述自己的设计思想,即用一系列分层次的模块来表示复杂的数字系统,并逐层进行验证仿真,再把具体的模块组合由综合工具转化成门级网络表,然后再利用布局布线工具把网络表转化为具体电路结构的实现。
优势:文本形式描述,有利于将系统划分子模块化,便于团队开发,通用性和可移植性强。


2.Veriolg  VS  VHDL

水太深,没学过VHDL,不敢妄加品论,想了解的可以参考http://blog.sina.com.cn/s/blog_5084855b0100b08i.html这篇博客。


3.Verilog HDL 与C语言
Verilog 语言从C语言发展而来,因此具备了C语言简洁、易用的特点。主要差别体现在以下三点:
1)互连:在硬件系统中,互连是一个非常重要的组成部分,而在C语言中,并没有直接可以用于表示模块间互连的变量;而Verilog HDL 中的wire型变量配合一些驱动结构,能有效的描述出网线的互连。
2)并发:C语言天生是串行的,不能描述硬件之间的并发特性。C语言编译后,其机器指令在CPU的高速缓冲队列中基本是顺序执行的;而Verilog可以有效描述并行的硬件系统。
3)时间:运行C程序时,没有一个严格的时间概念,程序运行时间的长短主要取决于处理器本身的性能;而Verilog语言本身定义了绝对和相对的时间度量,在仿真时可以通过时间度量与周期关系描述信号之间的时间关系。


4.Verilog HDL 可以用来做什么?
1)基本逻辑门电路的实现;
2)可以用户自定义原语(UDP),既可以是组合逻辑原语,也可以是时序逻辑原语;
3)开关级基本结构模型(如pmos和nmos等)
4)提供显示语言结构指定设计中的端口到端口延时以及路径延时,以及设计的时序检查
5)支持3种方式或混合方式建模:行为描述方式(使用过程化结构建模)、数据流方式(使用连续赋值语句方式建模)和结构化方式(使用门和模块实例语句描述建模)。
6)两种数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。
7)能够描述层次设计,可使用模块实例结构描述任何层次。
8)能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级
。。。。。。
太多了,数不胜数


二、Verilog HDL 设计流程
典型的FPGA/CPLD设计流程如下


三、Verilog HDL 模块设计
1.概念:用于描述某个设计的功能或结构及其与其他模块通信的外部端口。

模块对应着的硬件电路,他们之间是并行运行的,也是分层的,高层模块通过调用、链接底层模块的实例来实现复杂的功能。如果要将所有的功能模块连接成一个完整的系统,则需要一个模块将所有的子模块连接起来,这一模块也被称为顶层模块(Top Module)。为了便于管理,一般一个.v文件实现一个模块

2.模块的基本结构一个完整的Verilog HDL 模块结构如下所述:

modulemodule_name(port_list)    //模块开始

    //声明各种变量、信号
    reg            //寄存器
    wire           //网线
    parameter      //参数
    input          //输入信号
    output         //输出信号
    inout        //输入输出信号
    function     //函数
   task        //任务

//程序代码
initial assignment
always assignment
module assignment
gate assignment
UDP assignment
continuous assignment

endmodule  //模块结束

实际中不需要具备以上所有结构特征,基本模块结构如下,可以满足一般模块设计
module <模块名> (<端口列表>)
    <定义>
    <模块条目>
endmodule

其中,<模块名>   是模块唯一性的标识符;
          <端口列表> 定义了和其余模块进行通信链接的信号,根据数据流方向可以分为输入、输出和双向端口3类;
          <定义>     用于指定数据对象为寄存器型、存储器型、网线型及过程块;
          <模块条目> 可以是initial结构、always结构、连续赋值或模块实例。

3.端口说明模块端口是指模块与外界交互信息的接口,包括如下三种类型:
input:输入接口,模块从外界读取数据的接口,在模块内不可写。
output:输出接口,模块往外界送出数据的接口,在模块内不可读。
inout:输入/输出端口,也称为双向端口,可读取数据也可送出数据,双向流动。
上述3类端口中,input端口只能是wire数据类型;output端口即可是wirel类型,也可为reg类型;inout只能申明为wire类型。

关于wire和reg两种类型的区别这里就不详细讨论了,可以参考下面两个链接:http://blog.chinaunix.net/uid-21227800-id-65935.html
http://wenku.baidu.com/link?url= ... 55QN_-xNChR-MRQrAMW
zxopenljx 发表于 2019-4-2 10:57:35 | 显示全部楼层
verilog 语言简介
雷磊 发表于 2020-2-17 16:23:44 | 显示全部楼层
Verilog HDL基本知识介绍
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-24 09:43 , Processed in 0.059118 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表