Verilog HDL数字设计与综合(一)Verilog基础知识,重要设计流程及设计思路
层次建模的概念
设计方法学
对应有两种设计方法:自底向上的设计方法和自顶向下的设计方法
对于自顶向下而言
我们首先定义顶层功能块,进而分析需要哪些构成顶层模块的必要的子模块,然后进一步对各个子模块进行分解,直至达到无法进一步分解的底层功能块
对自底向上的设计方法
我们首先对现有的功能块进行分析,然后使用这些模块来搭建规模大一些的功能块,如此继续直至顶层模块。
模块
Verilog使用模块(module)的概念来代表一个基本的功能块。
一个模块可以是一个元件,也可以是低层次模块的组合。
模块通过接口(输入和输出)被高层的模块调用,但隐藏了内部的实现细节。这样设计者就可以方便的对某个模块进行修改,而不影响其他部分。
模块的描述方法有下列几个层次:
Verilog允许设计者在一个模块里混合使用多个抽象层次。
一般来说,抽象的层次越高,那么设计的灵活性和工艺无关性就越强,随着抽象层次的降低,灵活性和工艺无关性都会变差,微小的调整可能也意味着对设计的多处更改。
这就类似于C语言和汇编语言的对比,像C语言这样的高级语言的好处就是编码简单并且可移植性好,然而如果使用汇编语言,则需要针对特定的计算机,移植到其他计算机的时候可能出现问题。
模块实例化
模块声明就像一个模板,使用这个模板就可以创建实际的对象,当一个模板被调用的时候,Verilog会根据模板创建出来唯一一个模块对象,从模板创建对象的过程就称为实例化
注意:在Verilog之中,不允许在模块声明中嵌套模块,不要将模块定义和模块声明相混淆。 模块声明只是说明了模块如何工作,期内不得结构和外部接口,对模块的调用必须通过其实例化来完成。
在一个模块定义的内布不能嵌套定义其他模块
逻辑仿真的构成
在设计完成之后,还必须要对设计的正确性进行测试,我们对设计模块增加激励,通过检查其输出来检验功能的正确性;
将激励块和设计块分开写是一种良好的设计风格
激励块同样是用Verilog语言来写的
激励块的设计有两种模式:
(1)在激励块中直接调用并直接驱动设计块,顶层块就是激励块
(2)在一个虚拟的顶层模块里调用激励块和设计块,激励块和设计块之间通过接口进行交互,激励块驱动信号d_clk和d_reset,这两个信号则连接到设计块的clk和reset输入端口,激励块同时还要检查和显示信号c_q,这个信号连接到设计块的输出端口q,顶层模块的作用只是调用激励块和设计块
实例:脉动进位模块
在上面模块调用的时候使用了四个T触发器模块
T触发器模块之中又调用了D触发器模块
我们按自顶向下的方法,对所有的模块都进行了定义,完成了设计块的设计
下面来处理激励块:
激励块设计好了之后,就可以通过仿真来验证其功能了,如下图所示: