您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于FPGA的数字系统设计_4
1第4章Verilog逻辑设计介绍设计者用Verilog完成:(1)编写文本形式的电路建模描述;(2)编译所完成的描述,验证其语法;(3)编写testbench测试平台文件;(4)对模型及其设计功能进行仿真验证;(5)对设计进行综合实现,时序验证。2抽象级(LevelsofAbstraction)Verilog既是一种行为描述的语言,也是一种结构描述语言。Verilog模型可以是实际电路的不同级别的抽象。系统说明-设计文档/算法描述RTL/功能级-Verilog门级/结构级-Verilog34.1组合逻辑的结构化模型结构化模型类似于创建电路图。主要由Verilog原语和模块连接构成。Verilog原语(primitive):Verilog原语提供基本的逻辑功能,即这些逻辑功能是预定义的,用户不需要再定义。原语是Verilog开发库的一部分。大多数ASIC和FPGA元件库是用这些原语开发的。原语库是自下而上的设计方法的一部分。4原语名称功能andornotbufxornandnorxnorLogicalAndLogicalOrInverterBufferLogicalExclusiveOrLogicalAndInvertedLogicalOrInvertedLogicalExclusiveOrInverted5原语引脚(pin)的可扩展性原语引脚的数目由连接到门上的net的数量决定。因此当原语输入或输出的数量变化时用户不需要重定义一个新的逻辑功能。所有门(除了not和buf)可以有多个输入,但只能有一个输出。not和buf门可以有多个输出,但只能有一个输入。6带条件的原语Verilog有四种不同类型的条件原语这四种原语只能有三个引脚:output,input,enable这些单元由enable引脚使能。当条件基本单元使能信号无效时,输出高阻态。原语名称功能bufif1条件缓冲器,逻辑1使能bufif0条件缓冲器,逻辑0使能notif1条件反相器,逻辑1使能notif0条件反相器,逻辑0使能7带条件的原语(续)条件原语有三个端口:输出、数据输入、使能输入8MUX的结构级描述,采用Verilog原语(基本门)描述。描述中含有传播延时。moduletwomux(outputout,inputa,b,sl);wirensl,sela,selb;notu1(nsl,sl);and#1u2(sela,a,nsl);and#1u3(selb,b,sl);or#2u4(out,sela,selb);endmodule基本门原语的输出端口必须要写在端口列表的前面,基本门原语的例化名(instancename)是可选的。9自顶向下的设计和嵌套模块例4.216位行波进位(ripple-carry)加法器1011moduleAdd_rca_16(outputc_out,output[15:0]sum,input[15:0]a,b,inputc_in);wirec_in4,c_in8,c_in12,c_out;Add_rca_4M1(c_in4,sum[3:0],a[3:0],b[3:0],c_in);Add_rca_4M2(c_in8,sum[7:4],a[7:4],b[7:4],c_in4);Add_rca_4M3(c_in12,sum[11:8],a[11:8],b[11:8],c_in8);Add_rca_4M4(c_out,sum[15:12],a[15:12],b[15:12],c_in12);endmodule12moduleAdd_rca_4(outputc_out,output[3:0]sum,input[3:0]a,b,inputc_in);wirec_in2,c_in3,c_in4;Add_fullM1(c_in2,sum[0],a[0],b[0],c_in);Add_fullM2(c_in3,sum[1],a[1],b[1],c_in2);Add_fullM3(c_in4,sum[2],a[2],b[2],c_in3);Add_fullM4(c_out,sum[3],a[3],b[3],c_in4);endmodule13moduleAdd_full(outputc_out,sum,inputa,b,c_in);wirew1,w2,w3;Add_halfM1(w2,w1,a,b);Add_halfM2(w3,sum,c_in,w1);orM3(c_out,w2,w3);EndmodulemoduleAdd_half(outputc_out,sum,inputa,b;);xorM1(sum,a,b);andM2(c_out,a,b);endmodule1416位行波进位加法器的设计层次15结构化模型中模块使用特点(1)模块可以嵌套在其他模块内,但不能以循环方式嵌套。(2)模块嵌套的层次可以有任意深度,只受限于计算机的主存储器容量。(3)模块端口可按任意次序列出。(4)例化模块必须有一个例化名,该例化名在父模块中是唯一的。16(5)模块之间的连接采用线网net(wire)类型,端口连接方式分为两种:a.位置关联:以原模块端口位置顺序,列出对应的实际端口信号名。b.名称关联:.formal_name(actual_name)17例4.3名称关联方式例化Add_halfAdd_halfM1(.b(b),.c_out(w2),.a(a),.sum(w1));形式名称实际名称184.2逻辑系统、设计验证与测试方法常用的验证方法:逻辑仿真:施加激励波形,验证输出特性。形式验证:数学论证194.2.1Verilog中的四值逻辑和信号解析Verilog采用的四值逻辑系统’0’,Low,False,LogicLow,Ground,VSS,NegativeAssertion‘1’,High,True,LogicHigh,Power,VDD,VCC,PositiveAssertion’X’Unknown:OccursatLogicalWhichCannotbeResolvedConflictHiZ,HighImpedance,Tri-Stated,DisabledDriver(Unknown)20Nets类在发生逻辑冲突时的决断Verilog有预定义的决断函数支持与工艺无关的逻辑冲突决断wire-and用于集电极开路电路wire-or用于射极耦合电路214.2.2测试方法验证数字电路功能的基本方法是构造一个测试平台,该平台能将激励模板加到被测电路,并显示测试波形。用户自己(或用软件)验证响应的正确性。测试平台是一个具有独立结构的Verilog模块。它位于一个新的设计层次的顶部,该新设计层次包含激励发生器、响应显示器和被测试单元(UUT)。22验证被测试单元的测试平台结构23好的测试平台应该:1、有比较全的代码覆盖率2、能自动对各种情况进行测试3、能将测试结果与预期的结果进行比较4、能判断待测模块的功能是否正确,时序关系是否满足设计要求24例4.7半加器的测试平台modulet_Add_half();wiresum,c_out;rega,b;Add_halfM1(c_out,sum,a,b);//被测单元UUTinitialbegin//时间控制#100$finish;endinitialbegin//激励模板#10a=0;b=0;#10b=1;#10a=1;#10b=0;endendmodule254.2.3测试平台信号发生器测试平台使用行为级描述。采用过程语句和过程赋值运算符“=”来描述激励模板。所有过程在时间0执行一次,过程之间是并行执行的过程语句有两种:–initial:只执行一次–always:循环执行26过程语句的活动与执行的差别:所有过程在时间0处于活动状态,并根据用户定义的条件等待执行;所有过程并行执行,以描述硬件内在的并行性;测试平台中待测单元端口类型定义:待测单元输入端口定义为reg类型,确保变量由过程赋值给它值的时刻起,其变量值将一直存在,直至以后的某条过程语句的执行使它改变为止。待测单元的输出端口定义为线型(wire)27测试平台中的结果显示:Verilog提供了一些系统任务和系统函数,可显示测试结果。如:$time系统函数,给出当前仿真时间$monitor系统任务,若参数列表中的参数值发生变化,则在时间单位末显示参数值。$monitor([“format_specifiers”,]arguments);例如:$monitor($time,o,in1,in2);$monitor($time,,out,,a,,b,,sel);$monitor($time,“%b%h%d%o”,sig1,sig2,sig3,sig4);284.2.5测试平台模板moduletestbench;//Datatypedeclarationreg…;//UUT输入寄存器变量声明wire…;//UUT输出声明//Instantiatemodules//Applystimulus//Displayresultsendmodule29例:4位计数器及其测试平台modulecounter(outputreg[3:0]count,inputclk,reset,enable);always@(posedgeclk)if(reset==1'b1)count=0;elseif(enable==1'b1)count=count+1;elsecount=count;endmodule30modulecounter_tb;regclk,reset,enable;wire[3:0]count;initialbeginenable=0;clk=0;reset=0;endalways#10clk=~clk;initial#1000$finish;counteruut(.clk(clk),.reset(reset),.enable(enable),.count(count));31eventreset_trigger;eventreset_done_trigger;initialbeginforeverbegin@(reset_trigger);@(negedgeclk);reset=1;@(negedgeclk);reset=0;-reset_done_trigger;endend32initialbegin:test_case1#10-reset_trigger;@(reset_done_trigger);@(negedgeclk);enable=1;repeat(20)begin@(negedgeclk);endenable=0;endendmodule33测试结果:34initialbegin:test_case2//随机测试#10-reset_trigger;@(reset_done_trigger);forkrepeat(100)begin@(negedgeclk);enable=$random;endrepeat(100)begin@(negedgeclk);reset=$random;endjoinend35随机测试结果:364.3传播延时Verilog中的基本门原语被默认为零延时。零延时模型仿真:优点:快速验证模型的功能特性。缺点:无法反映信号动作的时间顺序,无时序特性。可采用单位延时模型进行仿真。见例4.8设计的中心思想:通过工艺独立的行为级电路模型,并利用标准单元或是FPGA来综合门级结构。相应精确的定时特性已嵌入到单元模型或FPGA综合工具中。37延时模型类型延时有三种描述模型:将全部延时集中到最后一个门延时分布在每一个门上用专用块说明每一个路径pin-to-pin延时典型的延时说明:DelayfromAtoO=2DelayfromBtoO=3DelayfromCtoO=1分布延时块延时路径延时38惯性(inertial)和传输(transport)延时模型惯性延迟(inertial):是器件的固有延
本文标题:基于FPGA的数字系统设计_4
链接地址:https://www.777doc.com/doc-4891416 .html