网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
搜索关键字: 所有资讯 行业动态 市场趋势 政策法规 新品发布 技术资讯 价格快报 展会资讯
  • 达普IC芯片交易网 > 新闻中心 > 技术信息 > 正文
  • RSS
  • Verilog HDL 建模概述
    http://www.ic72.com 发布时间:2007/4/29 9:56:31
    在数字电路设计中,数字电路可简单归纳为两种要素:线和器件。线是器件管脚之间的物理
    连线;器件也可简单归纳为组合逻辑器件(如与或非门等)和时序逻辑器件(如寄存器、锁存
    器、RAM等)。一个数字系统(硬件)就是多个器件通过一定的连线关系组合在一块的。因此,
    Verilog HDL 的建模实际上就是如何使用HDL语言对数字电路的两种基本要素的特性及相互之间的
    关系进行描述的过程。
    下面通过一些实例,以便对Verilog HDL 的设计建模有个大概的印象。
    3.1 模块
    模块(module )是Verilog 的基本描述单位,用于描述某个设计的功能或结构及与其他模块通
    信的外部端口。
    模块在概念上可等同一个器件就如我们调用通用器件(与门、三态门等)或通用宏单元(计
    数器、ALU、CPU)等,因此,一个模块可在另一个模块中调用。
    一个电路设计可由多个模块组合而成,因此一个模块的设计只是一个系统设计中的某个层次
    设计,模块设计可采用多种建模方式。
    3.1.1 简单事例
    下面先介绍几个简单的Verilog HDL 程序。
    例[1] 加法器
    module addr (a, b, cin, count, sum);
    input [2:0] a;
    input [2:0] b;
    input cin;
    output count;
    output [2:0] sum;

    assign {count,sum} = a +b + cin;
    endmodule
    该例描述一个3位加法器,从例子可看出整个模块是以module 开始,endmodule 结束。
    例[2] 比较器
    module compare (equal,a,b);
    input [1:0] a,b; // declare the input signal ;
    output equare ; // declare the output signal;

    assign equare = (a == b) ? 1:0 ;
    / * if a = b , output 1, otherwise 0;*/
    endmodule

    2004-08-16 第9页,共41页
    版权所有,侵权必究

    绝密
    Verilog HDL 入门教程请输入文档编号
    该例描述一个比较器,从上可看到,/* .... */ 和 // ... 表示注释部分。注释只是为了方便设计者
    读懂代码,对编译并不起作用。
    例[3] 三态驱动器
    module mytri (din, d_en, d_out);
    input din;
    input d_en;
    output d_out;

    // -- Enter your statements here -- //
    assign d_out = d_en ? din :'bz;
    endmodule

    module trist (din, d_en, d_out);
    input din;
    input d_en;
    output d_out;

    // -- statements here -- //
    mytri u_mytri(din,d_en,d_out);
    endmodule
    该例描述了一个三态驱动器。其中三态驱动门在模块 mytri 中描述,而在模块trist 中调用了模
    块mytri 。模块mytri 对trist 而言相当于一个已存在的器件,在trist 模块中对该器件进行实例化,实
    例化名 u_mytri 。
    3.1.2 模块的结构
    通过上面的实例可看出,一个设计是由一个个模块(module )构成的。一个模块的设计如
    下:
    1、模块内容是嵌在module 和endmodule 两个语句之间。每个模块实现特定的功能,模块可进
    行层次的嵌套,因此可以将大型的数字电路设计分割成大小不一的小模块来实现特定的功能,最
    后通过由顶层模块调用子模块来实现整体功能,这就是Top-Down 的设计思想,如 3.3.1的例[3]。
    2、模块包括接口描述部分和逻辑功能描述部分。这可以把模块与器件相类比。
    模块的端口定义部分:
    如上例: module addr (a, b, cin, count, sum); 其中module 是模块的保留字,addr 是模块的名
    字,相当于器件名。()内是该模块的端口声明,定义了该模块的管脚名,是该模块与其他模块
    通讯的外部接口,相当于器件的pin 。
    模块的内容,包括I/O说明,内部信号、调用模块等的声明语句和功能定义语句。
    I/O说明语句如:input [2:0] a; input [2:0] b; input cin; output count; 其中的input 、
    output、inout 是保留字,定义了管脚信号的流向,[n:0]表示该信号的位宽(总线或单根信号线)。
    2004-08-16 第10页,共41页
    版权所有,侵权必究

    绝密
    Verilog HDL 入门教程请输入文档编号
    逻辑功能描述部分如: assign d_out = d_en ? din :'bz;
    mytri u_mytri(din,d_en,d_out);

    功能描述用来产生各种逻辑(主要是组合逻辑和时序逻辑,可用多种方法进行描述,具体的
    用法下面章节有介绍),还可用来实例化一个器件,该器件可以是厂家的器件库也可以是我们自
    己用HDL设计的模块(相当于在原理图输入时调用一个库元件)。在逻辑功能描述中,主要用到
    assign 和always 两个语句。
    3、对每个模块都要进行端口定义,并说明输入、输出口,然后对模块的功能进行逻辑描述,
    当然,对测试模块,可以没有输入输出口。
    4、Verilog HDL 的书写格式自由,一行可以写几个语句,也可以一个语句分几行写。具体由
    代码书写规范约束。
    5、除endmodule 语句外,每个语句后面需有分号表示该语句结束。
    3.1.3 模块语法
    1. 一个模块的基本语法如下:
    一个模块的基本语法如下:
    module module_name (port1, port2, ......) ;
    // D e c l a r a t i o n s :
    input, output, inout,
    reg, wire, parameter,
    function, task, . . .

    //S t a t e m e n t s :
    Initial statement
    Always statement
    Module instantiation
    Gate instantiation
    Continuous assignment

    endmodule
    模块的结构需按上面的顺序进行,声明区用来对信号方向、信号数据类型、函数、任务、参
    数等进行描述。语句区用来对功能进行描述如:器件调用(Module instantiation )等。
    2. 书写语法建议
    一个模块用一个文件;
    模块名与文件名要同名;
    一行一句语句。
    信号方向按输入、输出、双向顺序描述。
    设计模块时可尽量考虑采用参数化,提高设计的重用。
    以上是初学者的建议,具体的或深入的方面可看相关的文档。下面的有关语法建议类似。



    www.ic72.com 达普IC芯片交易网
  • 行业动态
  • 市场趋势
  • 政策法规
  • 新品发布
  • Baidu

    IC快速检索:abcdefghijklmnopqrstuvwxyz0123456789
    COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
    客户服务:service@IC72.com 库存上载:IC72@IC72.com
    (北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
    京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质