基于Verilog的系统设计流程

基于Verilog的系统设计流程

(注:以下内容摘自书上,非本人原创。在这整理作为学习笔记,仅供参考)

已知电子系统的基本设计方法,包括传统的自底向上(Bottom-Up)和现代的自顶向下(Top-Down)设计方法,我们采用Verilog HDL进行复杂数字逻辑电路和系统的设计过程中,通常将以上两种设计方法结合起来运用。

在定义高层系统结构和系统模块时采用Top-Down设计方法,划分好系统所需要的各个子模块,根据系统性能的总体考虑和指标要求,对高层次模块往往编写一些行为级的代码,进行功能仿真和验证。而在设计实现时使用Bottom-Up的方法,从库元件或数据库中调用已有的单元或采用可综合的行为描述方式来设计底层的子模块,并且进行电路综合、优化,以及功能、性能的仿真和验证;再实现大一些的子模块,最后构建出整个系统。
基于Verilog的系统设计流程_第1张图片
硬件描述语言HDL为我们提供了在所希望的层次级别中描述电路的方法。用Verilog HDL设计电路的基本流程如图所示。

小资料:
设计验证是在系统设计的过程中,进行包括功能、性能等各种参数指标的仿真,如果在仿真过程中发现问题,就返回设计的输入阶段进行修改,然后再重复各项仿真,直至达到各项系统指标的要求。

对一个系统设计的验证工作通常采用Bottom-Up的方法,即先验证底层模块,保证每个底层模块的正确性后,再验证顶层模块的正确性。

1.电路需求分析

需求分析是进行电路系统设计的起点。工作人员需要对用户提出的功能要求进行分析理解,做出电路系统的整体规划,形成详细的技术指标,确定初步方案。例如,要设计一个数字密码锁,需要考虑供电方式、电路工作频率、开锁方式、设码/解码方式、产品体积、成本、功耗和安装位置,电路实现采用ASIC还是选用哪种FPGA/CPLD器件等。需求分析的结果是否准确将直接影响到后面各阶段的设计过程,并影响到设计结果是否合理和实用。做好电路的需求分析,必定会大大缩短产品开发周期。

2.电路功能设计与逻辑划分

正确地分析了用户的电路需求后,就可以进行逻辑功能的总体设计,设计整个电路的功能、接口和总体结构,考虑功能模块的划分和设计思路,各子模块的接口和时序(包括接口时序和内部信号的时序)等,向项目组成员合理分配子模块设计任务。

3.HDL描述的电路设计

按照电路的功能设计及性能要求,用硬件描述语言来描述各个子模块。

小提示:
电路设计也可以按照传统的画电路图的设计方式来完成。但是,当今电路系统的逻辑关系和时序关系往往非常复杂。按照以往传统的画电路图设计方式且没有计算机辅助仿真工具的条件下,开发一个电路系统需要很长的周期。HDL的出现使电路设计的工作效率大幅提高,如今一个成熟的数字电路设计师所做的工作,在早期的20世纪80年代则需要十几个人乃至一个研究所才能完成。因此,要做一个硬件设计师,如果不学会像写程序一样地用HDL来描述电路系统,则很难适应高速发展的信息时代。

4.电路逻辑功能仿真(前仿真)

电路逻辑功能仿真的目的是对所描述的电路功能正确与否进行验证,经过功能仿真找出设计的错误并进行修正,因此功能仿真在整个电路系统的设计过程中具有重要的作用。

电路逻辑功能仿真时并不考虑信号的时间延迟等因素对电路性能的影响,只是验证功能的正确性。

小知识: 一般的EDA(Electric Design
Automation:电子设计自动化)综合工具都提供了电路逻辑仿真的环境,可以采用图形方式编辑激励信号,对电路进行功能仿真。仿真还可以使用专门的仿真工具。例如,FPGA设计中最常用的仿真工具是Mentor
Graphics公司的产品Modelsim仿真软件。

除了用图形方式编辑激励信号仿真电路功能以外,还可以用HDL编写测试程序。例如,对一个2输入与非门的逻辑仿真编写的测试程序nand2_test.tst如下所示。

/*  nand2_test.tst  */
timescale  1ns/1ns              //将仿真的时间单位设置为1ns,精度为1ns

module
nand2_ex_test;           //定义测试程序模块nand2_ex_test
    reg a,b;                   //将被测试模块的输入信号定义为reg寄存器型
    wire f;                     //将被测试模块的输出信号定义为wire线网型

    nand2_ex_1 U1  (a,b,f);    //说明被测试电路U1为模块nand2_ex_1

    initial begin               //保留字initial后描述的是仿真波形的变化情
                                //况,所描述的内容写在begin和end之间
      a=1′b0;  b=1′b0;        //输入信号波形起始状态:a=0,b=0
      #100  a=1′b1;           //“#100”表示经过100ns的延迟后a=1,b没变
      #100  a=1′b0;  b=1′b1; //经过第二个100ns的延迟后a=0,b=1
      #100  a=1′b1;           //经过第三个100ns的延迟后a=1,而b仍为0
      #200  $finish;          //再经过200ns的延迟后结束仿真
    end
endmodule

这样的测试程序在仿真软件中要产生出所需的激励波形,并将它加载到电路模块上。仿真软件再控制显示出仿真后产生的输出信息。测试程序也称为验证程序、测试文件、测试模块或顶层模块。这段测试程序中出现的语句“a=1′b0;”和“b=1′b1;”,其含义分别是将1位位宽的二进制数0和1赋值给寄存器变量a和b。

5.电路逻辑综合

当逻辑仿真验证正确以后,就可以进行逻辑综合,将电路模块的逻辑描述文件根据选定的ASIC类型或FPGA/CPLD器件类型的硬件结构和约束控制条件进行编译、优化和转换,最后获得可以实现的基本门级电路的网表文件。

逻辑综合的目的是决定电路门级结构,寻求时序与面积、功耗与时序的平衡,增强电路的可测试性。

能够完成逻辑综合的工具软件称为逻辑综合器,它借助于计算机强大的计算能力,自动完成逻辑综合的过程,产生优化的电路结构网表,输出.edf文件。

不是所有的HDL语句和程序都可以进行逻辑综合,自动产生真实电路。对于HDL的可综合性研究已有十多年的历史,但目前尚未形成国际标准,各厂商的综合器所支持的可综合HDL语法也不相同。因此,为了能转换成标准的门级电路网表,编写HDL程序时必须符合特定的综合器需求的风格。目前所有的逻辑综合器基本上都支持门级结构和RTL(寄存器传输级)结构的HDL程序的综合。

6.电路优化及布局布线

由于各种ASIC和FPGA/CPLD器件的工艺各不相同,因而当用不同厂家的不同器件来实现已通过验证的电路逻辑网表时,不但需要使用该器件类型对应的基本单元库,还必须使用相应的布线延迟模型,才能进行精确的电路优化和布局布线,使设计能与实际电路的情况一致。

基本单元库与布线延迟模型由器件厂家提供,并由EDA工具厂商的工程师将其编入到相应的处理程序中。逻辑电路设计师在进行逻辑综合时只需调用一个说明了工艺器件和约束条件的文件,EDA工具就会自动地根据这一个文件选择相应的库和模型进行准确的处理。

7.电路时序仿真

完成了逻辑综合和电路的优化及布局布线工作后,结合为电路实现所选定的器件类型,还需要考虑信号的延迟对电路进行仿真。由于不同器件的内部时延以及布局、布线方案都会给电路的功能及时延造成很大的影响,因此在设计实现后,对电路进行时延仿真,分析定时关系,估计设计性能非常有必要。

不考虑信号时延等因素的功能仿真称为前仿真,时序仿真称为后仿真。

8.FPGA/CPLD下载或ASIC制造工艺文件产生

完成了电路的设计、仿真验证后,就可以通过EDA工具生成由基本门电路组成的逻辑网表目标文件,再通过开发工具将目标文件下载到FPGA/CPLD芯片中,然后在电路板上进行实际环境的调试。如果电路要在ASIC上实现,则在EDA工具上生成集成电路制造的工艺文件,再将工艺文件送到Foundry开始制造芯片。

你可能感兴趣的:(FPGA)