EDA设计技术教学课件第11章ModelSim仿真工具_第1页
EDA设计技术教学课件第11章ModelSim仿真工具_第2页
EDA设计技术教学课件第11章ModelSim仿真工具_第3页
EDA设计技术教学课件第11章ModelSim仿真工具_第4页
EDA设计技术教学课件第11章ModelSim仿真工具_第5页
已阅读5页,还剩130页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

EDA设计技术教学课件第11章ModelSim仿真工具第一页,共135页。仿真的重要性功能验证和时序验证在EDA工程设计过程中具有极其重要的地位,一般要耗费设计者或设计团队约60%-80%的工作量。在实施验证的过程中,要求设计者遵循设计方法学和某种硬件描述语言,编写信号激励文件,编译并生成测试平台,借助仿真软件或硬件验证工具,以文本、图形或其他形式输出验证结果,分析、评价工程设计的可靠性、正确性。第二页,共135页。ModelSimSEModelSim有不同规模和容量配置:ModelSimSE、ModelSimPE、ModelSimLE,其中ModelSimSE的性能最强、容量最大,至今已发展到10.0版。ModelSimSE10.0e的主窗口由工具栏、库标签页、命令窗口与信息区、工作区四部分组成。第三页,共135页。ModelSimSEModelSim的库用于存放仿真数据。ModelSim将库分为两类:本地工作库和资源库。利用ModelSim进行仿真分析,一般有两种仿真流程:仿真基本流程和仿真工程流程。区别主要在于是否采用设计优化。第四页,共135页。ModelSimSE仿真基本流程包括创建工作库、编译设计、加载并运行仿真、结果分析与调试几个阶段。仿真工程流程的工作库是自动创建、自动保留的。第五页,共135页。创建工程和工作库无论功能仿真还是时序仿真,编译仿真设计文件之前,都必须先创建一个工程和工作库。创建工程是为了统一管理系统设计文件,而工作库的目的是存储编译结果。有两种方法:通过图形用户接口界面创建或通过命令窗口创建。第六页,共135页。创建工程和工作库例:对8位计数器及其测试平台创建工程。第一步,利用图形用户接口界面GUI创建工程。第七页,共135页。创建工程和工作库完成上述步骤之后,命令行显示如下信息:vlibworkvmapworkwork#Modifyingmodelsim.iniE:/EDA/counter#readingD:\modeltech64_10.0e\win64/../modelsim.ini#Loadingprojectcounter第八页,共135页。创建工程和工作库第二步,拷贝工程配置设置文件。第三步,添加工程文件。第九页,共135页。创建工程和工作库有四种创建文件的方式:CreatNewFile,新建一个设计文件;AddExistingFile,载入已编制的设计文件;CreatSimulation,创建其他类型仿真文件;CreatNewFolder,创建新文件夹,适于大型系统,按设计单元归类存放在相应文件夹中。第十页,共135页。创建工程和工作库在ModelSim的Workspace栏可见新建文件counter.v的状态信息。。第十一页,共135页。创建工程和工作库双击counter.v文件,在工作区中编制仿真源文件。若之前已编译过,则单击该文件并右键选择Edit。第十二页,共135页。创建工程和工作库完整的计数器源文件如下,并保存该文件。modulecounter(count,clk,reset);output[7:0]count;inputclk,reset;

reg[7:0]count;parametertpd_reset_to_count=3;parametertpd_clk_to_count=2;

function[7:0]increment;input[7:0]val;reg[3:0]i;regcarry;beginincrement=val;carry=1'b1;for(i=4'b0;((carry==4'b1)&&(i<=7));i=i+4'b1)beginincrement[i]=val[i]^carry;carry=val[i]&carry;endendendfunctionalways@(posedgeclkorposedgereset)if(reset)count=#tpd_reset_to_count8'h00;elsecount<=#tpd_clk_to_countincrement(count);

/*****************************************************************Usethefollowingblocktomakethedesignsynthesizable.

always@(posedgeclkorposedgereset)if(reset)count=8'h00;elsecount<=count+8'h01;******************************************************************/endmodule第十三页,共135页。创建工程和工作库新建测试平台文件test_bench.v`timescale1ns/1nsmoduletest_bench;regclk,reset;wire[7:0]count;counterdut(count,clk,reset);

initial//Clockgeneratorbeginclk=0;forever#10clk=!clk;end

initial //Teststimulusbeginreset=0;#5reset=1;#4reset=0;end

initial$monitor($stime,,reset,,clk,,,count);

endmodule第十四页,共135页。编译仿真文件ModelSim支持多种硬件描述语言,包括Verilog、VHDL、SystemC等。针对不同的语言采用不同的渐进式编译器和编译命令,将设计文件以任意顺序编译为可执行的目标代码:VerilogHDL语言的编译器和编译命令:vlogVHDL语言的编译器和编译命令:vcomSystemC语言的编译器和编译命令:sccom第十五页,共135页。编译仿真文件例:编译仿真文件。通过下拉菜单Compile>Compile开始编译。第十六页,共135页。编译仿真文件也通过命令窗口启动VerilogHDL语言编译器并编译counter.v和test_bench.v文件:vlogcounter.vtest_bench.v#Compileofcounter.vwassuccessful.#Compileoftest_bench.vwassuccessful.#2compiles,0failedwithnoerrors.第十七页,共135页。编译仿真文件编译成功第十八页,共135页。加载顶层设计模块例:加载顶层设计模块。顶层设计模块为“counter.v”和“test_bench.v”,由测试平台向计数模块输入激励信号,计数模块返回激励响应。第十九页,共135页。加载顶层设计模块输入vsimwork.test_bench.v命令或者vsimwork.counter.v可加载模块并启动仿真器vsim-novoptwork.test_bench#Loadingwork.test_bench#Loadingwork.counter第二十页,共135页。加载顶层设计模块加载成功后,主窗口出现Objects设计对象clk、reset、count的类型和值。第二十一页,共135页。加载顶层设计模块Workspace和Objects面板显示设计对象。第二十二页,共135页。执行仿真加载设计模块之后,仿真时标以零时刻为起始点开始仿真,输入run命令即可开始仿真。仿真命令有addwave、force、bp、run、step。例:执行仿真。

在命令行输入run命令并回车,得到100ns的仿真运行结果。#000x#510x#8100#9000#10010#12011#20001#30011#32012#40002#50012#52013#60003#70013#72014#80004#90014#92015第二十三页,共135页。执行仿真为了便于直观地观察仿真结果,需要在波形视图增加设计对象。addwave是调出波形视图命令,在命令之后增加信号名-r/*,即:VSIMaddwave–r/*。第二十四页,共135页。执行仿真第二十五页,共135页。执行仿真在GUI方式下执行仿真任务,可选择“Simulate”、“Run”、“Run”,波形文件的仿真显示结果与文本方式一致。第二十六页,共135页。调试调试命令有bp、describe、drivers、examine、force、log、checkpoint、restore、show等。例:调试前述例子的仿真结果。1,断点bp

检查HDL描述文件的基本形式如下:bp{<><line_number>}[-appendinst][-cond"<condition_expression>"][-disable][-id<id_number>|-label"<label>"][-inst<region>[-inst<region>...]][<command>…]第二十七页,共135页。调试如,在仿真文件test_bench.v的第18行设置断点: bptest_bench.v18第二十八页,共135页。调试2,显示仿真信息describe

调试命令describe用于显示VHDL、Verilog、C、SystemC描述的对象信息和设计区域信息。3,显示驱动强度drivers

调试命令drivers显示指定对象的驱动强度,可以指定多个对象,但要求是合法对象。语法格式为: drivers<object_name>第二十九页,共135页。调试如,检查test_bench.v文件中count的驱动强度:driverscount检查结果如下:#Driversfor/test_bench/count(7:0):#St1:Net/test_bench/count[7]#St1:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St0:Net/test_bench/count[6]#St0:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St1:Net/test_bench/count[5]#St1:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St0:Net/test_bench/count[4]#St0:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St0:Net/test_bench/count[3]#St0:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St0:Net/test_bench/count[2]#St0:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St0:Net/test_bench/count[1]#St0:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St0:Net/test_bench/count[0]#St0:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#第三十页,共135页。调试4,检查对象及对象的值examine例:检查count的当前值: examinecount

文本信息窗口显示count的当前值为8’b10100000:#10100000第三十一页,共135页。调试5,交互激励force例:将clk强制指向5ns时刻(采用二进制时间单位表示): forceclk0101

或者指定clk在0时刻开始为逻辑1,至100ns为逻辑0,重复200次,1000ns后结束:forceclk10,0100-repeat200-cancel1000第三十二页,共135页。调试6,记录波形文件log例:创建当前仿真工程所有对象的波形文件: log–r/*第三十三页,共135页。调试7,保存仿真状态checkpoint

调试命令checkpoint用于保存仿真状态,包括modelsim.ini设置、仿真内核状态、波形记录文件、端口列表和波形窗口的设计对象、VHDL或Verilog利用$fopen系统任务打开的文件指针位置、外部结构、VCD输出文件等检查点。checkpoint<>第三十四页,共135页。调试8,恢复仿真状态restore

调试命令restore用于恢复checkpoint设置的仿真状态。restore<>第三十五页,共135页。调试9,对象列表输出show

调试命令show用于显示HDL对象的列表。

语法形式为: show[-all][<pathname>]例:显示本节测试平台test_bench的对象列表: showtest_bench#Moduletest_bench{#{Root..}#{Registerclk}#{Registerrst}#{Netcount}#{Moduledut}#}第三十六页,共135页。库的创建和运用例:创建并链接一个8位二进制递增计数器的资源库resource_library。第一步,创建资源库存储路径。第二步,改变库路径。第三十七页,共135页。库的创建和运用第三步,添加并创建文件。第三十八页,共135页。库的创建和运用第四步,创建工程。第三十九页,共135页。库的创建和运用第四十页,共135页。库的创建和运用第五步,利用资源库进行仿真测试。第四十一页,共135页。库的创建和运用第四十二页,共135页。波形文件分析波形分析主要是从仿真波形的窗口文件中采用光标操作、缩放操作、图形文件输出,提取设计者关心的有价值信息,供仿真设计、调试之用。第四十三页,共135页。仿真波形窗口介绍包括波形端口名、端口值、波形窗口、时标名、时标值、时标窗口。第四十四页,共135页。缩放波形缩放模式命令第四十五页,共135页。缩放波形ZoomIn(放大)、ZoomOut(缩小)、ZoomFull(显示全范围波形)、ZoomCursor(用光标缩放)、ZoomRange(按范围缩放)。第四十六页,共135页。时标1)用时标显示仿真时间

选择鼠标操作时标的命令是第四十七页,共135页。时标2)命名时标第四十八页,共135页。时标3)插入时标

插入时标命令第四十九页,共135页。时标4)删除时标

删除命令第五十页,共135页。时标5)锁定时标

右键选择LockXX命令第五十一页,共135页。输出波形文件ModelSim可输出多种文件格式的波形文件:位图bmp格式文件、vcd格式文件、evcd格式文件。第五十二页,共135页。时序仿真在ModelSim下进行时序仿真,必须首先经过综合工具(如Synopsys或QuartusII等)对设计文件进行编译、综合,再利用网表写入器生成综合网表,导出含有延时信息的“.sdf”反向标注文件,最后启动ModelSim进行时序仿真。第五十三页,共135页。时序仿真在ModelSim下进行时序仿真,必须首先经过综合工具(如Synopsys或QuartusII等)对设计文件进行编译、综合,再利用网表写入器生成综合网表,导出含有延时信息的“.sdf”反向标注文件,最后启动ModelSim进行时序仿真。第五十四页,共135页。时序仿真例:利用ModelSim对8位通用二进制计数器进行时序仿真,行为建模源文件bin_counter.v。

modulebin_counter #(parameterword_size=8)(count,max_tick,min_tick,clk,reset,Syn_clr,Load,Mode,d);inputclk,reset;inputSyn_clr,Load,Mode;input[word_size-1:0]d;outputmax_tick,min_tick;output[word_size-1:0]count;reg[word_size-1:0]r_reg,r_next;

assigncount=r_reg; assignmax_tick=(r_reg==2**word_size-1)?1'b1:1'b0; assignmin_tick=(r_reg==0)?1'b1:1'b0;always@(posedgeclk,posedgereset)if(reset)r_reg<=0;elser_reg<=r_next;

always@*beginif(Syn_clr) r_next<=0;elseif(Load) r_next<=d;elseif(Mode) r_next=r_reg+1;elseif(!Mode) r_next<=r_reg-1;else r_next<=r_reg;end

endmodule第五十五页,共135页。时序仿真测试平台源文件test_bench.v:

`timescale1ns/1nsmoduletest_bench;regclk,reset;regSyn_clr,Load,Mode;reg[7:0]d;wiremax_tick,min_tick;wire[7:0]count;bin_counter#3dut(.count(count),.max_tick(max_tick),.min_tick(min_tick),.clk(clk),.reset(reset),.Syn_clr(Syn_clr),.Load(Load),.Mode(Mode),.d(d));//生成时钟信号clkinitialbegin#1clk=1'b0;#1forever#1clk=~clk;end

//生成复位信号resetinitialbegin#3reset=1'b1;#3reset=1'b0;end;第五十六页,共135页。时序仿真测试平台源文件test_bench.v:

//初始化激励信号、同步清零测试、预置加载测试、递增/递减计数方式测试initialbegin//初始化激励信号Syn_clr=1'b0;Load=1'b0;Mode=1'b1;d=8'b0111_1000;@(negedgereset);@(negedgeclk);

//预置加载测试Load=1'b1;d=8'b0111_0100;@(negedgeclk);Load=1'b0;repeat(200)@(negedgeclk);

//testsyn_clrSyn_clr=1'b1;@(negedgeclk);Syn_clr=1'b0;

//递增、递减测试Load=1'b1;Mode=1'b1;repeat(10)@(negedgeclk);

Load=1'b0;repeat(2)@(negedgeclk);Load=1'b1;repeat(2)@(negedgeclk);Mode=1'b0;repeat(10)@(negedgeclk);wait(count==2);@(negedgeclk);Mode=1'b1;

//连续计数测试@(negedgeclk);wait(min_tick);@(negedgeclk);Mode=1'b0;#80;Load=1'b0;#80;$stop;end

endmodule第五十七页,共135页。时序仿真第一步,用VerilogHDL编写并保存行为建模源文件counter.v和测试平台源文件test_bench.v。第五十八页,共135页。时序仿真创建QuartusII下创建工程counter,添加counter.v和test_counter.v。第五十九页,共135页。时序仿真第三步,指定ModelSim可执行程序的启动位置。第六十页,共135页。时序仿真第四步,指定时序仿真所需的网表文件和测试平台文件设置。第六十一页,共135页。时序仿真testbench设置项第六十二页,共135页。时序仿真指定test_bench文件位置并添加之。第六十三页,共135页。时序仿真第五步,编译所有工程文件。选择Processing、StartCompilation命令,或点击

,启动编译器。第六十四页,共135页。时序仿真第六步,点击Tools、RunSimulationTool的子菜单RTLSimulation,启动RTL仿真。第六十五页,共135页。例化存储器ModelSim支持寄存器型、网络型、整型数组的存储器例化。例:例化随机存储器模块。

本例引用ModelSim安装目录下的例程sp_syn_ram.v、dp_syn_ram.v、ram_tb.v为例说明存储器例化过程。第六十六页,共135页。例化存储器例化随机存储器模块的存储空间。

数据总线宽度地址总线宽度寻址范围例化模块spram181212'h000~12'hFFF\sp_syn_ram-rtlspram2171111'h000~11'h7FFspram3321616'h0000~16'hFFFFspram41688'h00~8'hFF\sp_syn_ram-3Ddpram1844'h0~4'hF\dp_syn_ram-rtl第六十七页,共135页。例化存储器\sp_syn_ram-rtl模块结构。第六十八页,共135页。例化存储器`timescale1ns/1nsmodule\sp_syn_ram-rtl#(parameterdata_width=8,parameteraddr_width=3)(input[addr_width-1:0]addr,input[data_width-1:0]data_in,inputinclk,inputoutclk,inputwe,outputreg[data_width-1:0]data_out);

reg[data_width-1:0]mem[0:(2**addr_width)-1];

always@(posedgeinclk)begin:write_procif(we==1)//写时钟上升沿,若写控制有效,将数据data_in写入addr地址单元mem[addr]<=data_in;end

always@(posedgeoutclk)begin:read_procdata_out=mem[addr];//读时钟上升沿,将addr地址单元的数据发送//data_out总线end

endmodule第六十九页,共135页。例化存储器\sp_syn_ram-3D模块结构。第七十页,共135页。例化存储器`timescale1ns/1nsmodule\sp_syn_ram-3D#(parameterdata_width=8,parameteraddr_width=3)(input[addr_width-1:0]addr,input[data_width-1:0]data_in,inputinclk,inputoutclk,inputwe,outputreg[data_width-1:0]data_out);

reg[data_width-1:0]mem[0:3][0:(2**(addr_width-2))-1];

always@(posedgeinclk)begin:write_procif(we==1)beginmem[addr[addr_width-1:addr_width-2]][addr[addr_width-3:0]]<=data_in;endend

always@(posedgeoutclk)begin:read_procdata_out=mem[addr[addr_width-1:addr_width-2]][addr[addr_width-3:0]];end

endmodule第七十一页,共135页。例化存储器\dp_syn_ram-rtl模块结构。第七十二页,共135页。例化存储器`timescale1ns/1nsmodule\dp_syn_ram-rtl#(parameterdata_width=8,parameteraddr_width=3)(input[addr_width-1:0]inaddr,input[addr_width-1:0]outaddr,input[data_width-1:0]data_in,inputinclk,inputoutclk,inputwe,outputreg[data_width-1:0]data_out);

reg[data_width-1:0]mem[0:(2**addr_width)-1];

always@(posedgeinclk)begin:write_procif(we==1)beginmem[inaddr]<=data_in;endend

always@(posedgeoutclk)begin:read_procdata_out=mem[outaddr];end

endmodule第七十三页,共135页。例化存储器测试平台文件如下:`defineclk_pd100`timescale1ns/1nsmoduleram_tb();regwe;regclk;reg[19:0]addr;reg[3:0]inaddr;reg[3:0]outaddr;reg[31:0]data_in;

wire[7:0]data_sp1;wire[16:0]data_sp2;wire[31:0]data_sp3;wire[15:0]data_sp4;wire[7:0]data_dp1;

\sp_syn_ram-rtl#(.data_width(8),.addr_width(12))spram1(.inclk(clk),.outclk(clk),.we(we),.addr(addr[11:0]),.data_in(data_in[7:0]),.data_out(data_sp1));

\sp_syn_ram-rtl#(.data_width(17),.addr_width(11))spram2(.inclk(clk),.outclk(clk),.we(we),.addr(addr[10:0]),.data_in(data_in[16:0]),.data_out(data_sp2));\sp_syn_ram-rtl#(.data_width(32),.addr_width(16))spram3(.inclk(clk),.outclk(clk),.we(we),.addr(addr[15:0]),.data_in(data_in[31:0]),.data_out(data_sp3));

\sp_syn_ram-3D#(.data_width(16),.addr_width(8))spram4(.inclk(clk),.outclk(clk),.we(we),.addr(addr[7:0]),.data_in(data_in[15:0]),.data_out(data_sp4));

\dp_syn_ram-rtl#(.data_width(8),.addr_width(4))dpram1(.inclk(clk),.outclk(clk),.we(we),.inaddr(inaddr),.outaddr(outaddr),.data_in(data_in[7:0]),.data_out(data_dp1));

initialbegin:clock_driverclk=0;forever#(`clk_pd/2)clk=~clk;end

integeri;

第七十四页,共135页。例化存储器initialbegin:ctrl_simfor(i=0;i<1024;i=i+1)begin//读写操作1024次we<=1;//写数据操作data_in<=16'd9000+i;//测试I,写入第一组数16'd9000~16'd10023addr<=i;inaddr<=i;outaddr<=i;@(negedgeclk);@(negedgeclk);

data_in<=16'd7+i;//测试II,写入第二组数据16'd7~16'd1030addr<=1+i;inaddr<=1+i;@(negedgeclk);@(negedgeclk);

data_in<=16'd3;//测试III,写入第三组数据16'd3~16'd1026addr<=2+i;inaddr<=2+i;@(negedgeclk);@(negedgeclk);data_in<=16'd30330;//测试IV,写入第四组数据16'd30330~16'd31353addr<=3+i;inaddr<=3+i;@(negedgeclk);@(negedgeclk);

we<=0;//读数据操作addr<=i;outaddr<=i;@(negedgeclk);@(negedgeclk);

addr<=1+i;outaddr<=1+i;@(negedgeclk);@(negedgeclk);

addr<=2+i;outaddr<=2+i;@(negedgeclk);@(negedgeclk);

addr<=3+i;outaddr<=3+i;@(negedgeclk);@(negedgeclk);end

$display("###EndofSimulation!");$stop;endendmodule

第七十五页,共135页。例化存储器选择work.ram_tb开始仿真第七十六页,共135页。例化存储器在Workspace的Memories栏,可看到所有存储器的存储容量、数据宽度、范围。第七十七页,共135页。例化存储器观察存储器例化的地址和数据第七十八页,共135页。例化存储器改变地址排列方式。第七十九页,共135页。例化存储器更改存储器的显示属性。第八十页,共135页。例化存储器选择十进制地址、二进制数据显示。第八十一页,共135页。例化存储器输出存储器文件。第八十二页,共135页。用Profiler进行性能分析profiler是一种性能分析交互式图形接口工具,很多EDA设计工具都嵌入profiler引擎,以帮助设计者掌握存储器和CPU的资源使用情况,从而快速地定位、查找设计过程中的问题所在,提高设计效率和系统的可靠性。第八十三页,共135页。用Profiler进行性能分析例:说明利用ModelSim的profiler引擎分析通用先进先出(FIFO)存储器及其测试平台的性能。第一步,将FIFO模块Generic_FIFO.v及测试平台test_bench.v文件复制到工程文件夹下,建立工程、加载文件、编译文件、启动仿真。第八十四页,共135页。用Profiler进行性能分析Generic_FIFO.vmoduleGeneric_FIFO#(parameterMSB=7,LSB=0,DEPTH=4)//8位FIFO存储器,存储深度为24字节(input[MSB:LSB]in,//数据输入口inputclk,read,write,reset,//控制信号outputempty,full,//存储器状态指示output[MSB:LSB]out//数据输出口);reg[MSB:LSB]array_reg[2**DEPTH-1:0];//存储深度为24字节reg[DEPTH-1:0]wr_ptr_reg,wr_ptr_next,wr_ptr_succ;//写数据寻址变量reg[DEPTH-1:0]rd_ptr_reg,rd_ptr_next,rd_ptr_succ;//读数据寻址变量regfull_reg,empty_reg,full_next,empty_next;//存储器状态指示变量wirewrite_enbale;//写使能控制信号

always@(posedgeclk)if(write_enbale)array_reg[wr_ptr_reg]<=in;

assignout=array_reg[rd_ptr_reg];assignwrite_enbale=write&~full_reg;

always@(posedgeclk,posedgereset)if(reset)//复位存储器beginwr_ptr_reg<=0;rd_ptr_reg<=0;

full_reg<=1'b0;empty_reg<=1'b1;endelse//存储器读写操作及指示信号beginwr_ptr_reg<=wr_ptr_next;rd_ptr_reg<=rd_ptr_next;full_reg<=full_next;empty_reg<=empty_next;end第八十五页,共135页。用Profiler进行性能分析Generic_FIFO.valways@*beginwr_ptr_succ=wr_ptr_reg+1;rd_ptr_succ=rd_ptr_reg+1;wr_ptr_next=wr_ptr_reg;rd_ptr_next=rd_ptr_reg;full_next=full_reg;empty_next=empty_reg;case({write,read})2'b01://读数据if(~empty_reg)beginrd_ptr_next=rd_ptr_succ;full_next=1'b0;if(rd_ptr_succ==wr_ptr_reg)empty_next=1'b1;end2'b10://写数据

if(~full_reg)beginwr_ptr_next=wr_ptr_succ;empty_next=1'b0;if(wr_ptr_succ==rd_ptr_reg)full_next=1'b1;end2'b11://读、写数据beginwr_ptr_next=wr_ptr_succ;rd_ptr_next=rd_ptr_succ;endendcaseend

assignfull=full_reg;assignempty=empty_reg;

endmodule第八十六页,共135页。用Profiler进行性能分析test_bench.v`timescale1ns/10ps

moduletest_bench;reg[7:0]in;regclk,read,write,reset;wireempty,full;wire[7:0]out;

Generic_FIFOdut(//例化FIFO模块.in(in),.clk(clk),.read(read),.write(write),.reset(reset),.empty(empty),.full(full),.out(out));

initial//输出时钟激励信号 begin clk=1'b0; #5forever#5clk=~clk; end

initial//输出复位信号beginreset=1'b0;@(negedgeclk);reset=1'b1;@(negedgeclk);reset=1'b0;endinitialbegin{read,write}=2'b01;//写操作测试@(negedgeclk);repeat(100)@(negedgeclk);{read,write}=2'b10;//读操作测试@(negedgeclk);repeat(100)@(negedgeclk);{read,write}=2'b11;//读写测试 @(negedgeclk); repeat(100)@(negedgeclk);endinitial#20forever#20in=$random;//输入随机数always@(out)$display($time,,"out=%h",out);//输出测试信息endmodule第八十七页,共135页。用Profiler进行性能分析例:说明利用ModelSim的profiler引擎分析通用先进先出(FIFO)存储器及其测试平台的性能。第一步,将FIFO模块Generic_FIFO.v及测试平台test_bench.v文件复制到工程文件夹下,建立工程、加载文件、编译文件、启动仿真。第八十八页,共135页。用Profiler进行性能分析第二步,仿真运行1ms,观察分析结果。第八十九页,共135页。用Profiler进行性能分析Profile显示窗口第九十页,共135页。用Profiler进行性能分析第三步,过滤与保存分析结果。

在Profiler工具条输入过滤条件:第九十一页,共135页。用Profiler进行性能分析符合筛选条件的分析结果。

第九十二页,共135页。用Profiler进行性能分析输出并保存分析结果第九十三页,共135页。用Profiler进行性能分析pro分析结果的内容:ModelTechnologyModelSimSE-64vsim10.0eSimulator2012.03Mar162012Platform:win64RankedproSunMay1201:29:252013Numberofsamples:422Numberofsamplesinusercode:405(96%)Cutoffpercentage:2%Keepunknown:0Collapsesections:0Collectcallstacks:0Memorytrimheight:0Keepfree:1Pro:vsimk(ModelSimkernel)

NameUnder(raw)In(raw)Under(%)In(%)----------------------------------ZwWaitForMultipleObjects17117140.540.5ClientThreadSetup434310.210.2NtWriteFile38389.09.0F:/EDA/PUB/test_bench.v:463901892.44.3PeekMessageW2331655.23.8IsDialogMessageW16163.83.8ZwWaitForSingleObject15153.63.6ZwCreateFile992.12.1GetCurrentThread173241.00.5WriteFile4029.50.5第九十四页,共135页。用Profiler进行性能分析TclpCreateProcess3027.10.5PeekMessageA1824.30.5WaitForMultipleObjectsEx174141.20.2fdopen44110.40.2WaitForSingleObjectEx1613.80.2ftell1112.60.2Tcl_DoOneEvent275065.20.0Tcl_WaitForEvent240056.90.0MsgWaitForMultipleObjects217051.40.0MsgWaitForMultipleObjectsEx217051.40.0fflush45010.70.0fflush_nolock44010.40.0write43010.20.0lseeki644109.70.0GetWindowLongPtrA1603.80.0SendMessageA1603.80.0Tcl_MakeTcpClientChannel1503.60.0fread1102.60.0freopen1102.60.0sopen_s1102.60.0Tcl_CreateChannel1002.40.0Tcl_Flush1002.40.0Tcl_ServiceEvent1002.40.0flsbuf1002.40.0ftell_nolock1002.40.0CreateFileA902.10.0第九十五页,共135页。用Profiler进行性能分析CreateFileW902.10.0commit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论