每个模块要进行端口定义亚搏官方娱乐

当前位置:亚搏体育客户端 > 亚搏官方娱乐 > 每个模块要进行端口定义亚搏官方娱乐
作者: 亚搏体育客户端|来源: http://www.k-srv.net|栏目:亚搏官方娱乐

文章关键词:亚搏体育客户端,构造程序

  设计的语言。用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。亚搏官方娱乐Verilog HDL既是一种行为描述的语言,也是一种结构描述的语言。也就是说,既可以用电路的功能描述,也可以用元器件和它们之间的连接来建立所设计电路的Verilog HDL模型。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别和它们对应的模型类型共有以下5种。

  一个复杂电路系统的完整Verilog HDL模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或激励信号源。利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计,并对所作设计的逻辑电路进行严格的验证。

  Verilog HDL行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算法级和RTL级的模型设计。这种行为描述语言具有以下功能。

  Verilog HDL的构造性语句可以精确地建立信号的模型。这是因为在Verilog HDL中,提供了延迟和输出强度的原语来建立精确程度很高的信号模型。信号值可以有不同的强度,可以通过设定宽范围的模糊值来降低不确定条件的影响。

  Verilog HDL作为一种高级的硬件描述编程语言,有着类似C语言的风格。其中if语句、case语句等和C语言中的对应语句十分相似。如果读者已经掌握C语言编程的基础,那么学习Verilog HDL并不困难,只要对Verilog HDL某些语句的特殊方面着重理解,并加强上机练习就能很好地掌握它,利用它的强大功能来设计复杂的数字逻辑电路。下面将介绍Verilog HDL中的基本结构和语法。

  这个例子通过连续赋值语句描述了一个名为adder的三位加法器可以根据两个三比特数a、b和进位(cin)计算出和(sum)和进位(count)。从例子中可以看出整个Verilog HDL程序是嵌套在module和endmodule声明语句里的。

  这个程序通过连续赋值语句描述了一个名为compare的比较器。对两比特数a、b进行比较,如a与b相等,则输出equal为高电平,否则为低电平。在这个程序中,“/*........*/”和“//.........”表示注释部分,亚搏官方娱乐注释只是为了方便程序员理解程序,对编译是不起作用的。

  这个例子描述了一个名为trist2的三态驱动器。程序通过调用一个在Verilog语言库中现存的三态驱动器实例元件bufif1来实现其功能。

  这个例子通过另一种方法描述了一个三态门。在这个例子中存在着两个模块。模块trist1调用由模块mytri定义的实例元件tri_inst。模块trist1是顶层模块。亚搏官方娱乐模块mytri则被称为子模块。

  Verilog HDL程序是由模块构成的。每个模块的内容都是嵌在module和endmodule两个语句之间。每个模块实现特定的功能。模块是可以进行层次嵌套的。正因为如此,才可以将大型的数字电路设计分割成不同的小模块来实现特定的功能,最后通过顶层模块调用子模块来实现整体功能。

  每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行行为逻辑描述。

  Verilog HDL程序的书写格式自由,一行可以写几个语句,一个语句也可以分写多行。

  可以用“/*.....*/”和“//.......”对Verilog HDL程序的任何部分作注释。一个好的、有使用价值的源程序都应当加上必要的注释,以增强程序的可读性和可维护性。

  输入口:input 端口名1,端口名2,,端口名i; //(共有i个输入口)

  输出口:output 端口名1,端口名2,,端口名j; //(共有j个输出口)

  这种方法的句法很简单,只需写一个“assign”,后面再加一个方程式即可。例子中的方程式描述了一个有两个输入的与门。

  采用实例元件的方法在电路图输入方式下,调入库元件。键入元件的名字和相连的引脚即可,表示在设计中用到一个跟与门(and)一样的名为and_inst的与门,其输入端为a、b,输出为q。要求每个实例元件的名字必须是惟一的,以避免与其他调用与门(and)的实例混淆。

  采用“assign”语句是描述组合逻辑最常用的方法之一,而“always”块既可用于描述组合逻辑,也可描述时序逻辑。上面的例子用“always”块生成了一个带有异步清除端的D触发器。

  “always”块可用很多种描述手段来表达逻辑,例如上例中就用了“if...else”语句来表达逻辑关系。如按一定的风格来编写“always”块,可以通过综合工具把源代码自动综合成用门级结构表示的组合或时序逻辑电路。需要注意的是,如果用Verilog模块实现一定的功能,首先应该清楚哪些是同时发生的,哪些是顺序发生的。

  上面3个例子分别采用了“assign”语句、实例元件和“always”块。这3个例子描述的逻辑功能是同时执行的。也就是说,如果把这3项写到一个Verilog模块文件中去,它们的次序不会影响逻辑实现的功能。这3项是同时执行的,也就是并发的。

  然而,在“always”模块内,逻辑是按照指定的顺序执行的。“always”块中的语句称为“顺序语句”,因为它们是顺序执行的。请注意,两个或更多的“always”模块也是同时执行的,但是模块内部的语句是顺序执行的。

  看一下“always”内的语句,就会明白它是如何实现功能的。“ifelse if”必须顺序执行,否则其功能就没有任何意义。如果else语句在if语句之前执行,功能就会不符合要求。为了能实现上述描述的功能,“always”模块内部的语句将按照书写的顺序执行。

  硬件描述语言Verilog HDL设计进阶之:有限状态机的设计原理及其代码风格

  硬件描述语言Verilog HDL设计进阶之: 逻辑综合的原则以及可综合的代码设计风格

  硬件描述语言Verilog HDL设计进阶之:自动转换量程频率计控制器

  硬件描述语言Verilog HDL设计进阶之:使用函数实现简单的处理器

网友评论

我的2016年度评论盘点
还没有评论,快来抢沙发吧!