基于ISE的仿真(波形图法&V文件法)

来源:互联网 发布:神作小说 知乎 编辑:程序博客网 时间:2024/06/03 17:19

在代码编写完毕后,需要借助于测试平台来验证所设计的模块是否满足要求。ISE提供了两种测试平台的建立方法,一种是使用HDL Bencher的图形化波形编辑功能编写,另一种就是利用HDL语言。由于后者使用简单、功能强大,所以本节主要介绍基于Verolog语言的测试平台建立方法。 


1.测试波形法 

在ISE中创建testbench波形,可通过HDL Bencher修改,再将其和仿真器连接起来,再验证设计功能是否正确。首先在工程管理区将Sources for设置为Behavioral Simulation,然后在任意位置单击鼠标右键,在弹出的菜单中选择“New Source”命令,然后选中“Test Bench WaveForm”类型,输入文件名为“test_bench”,点击Next进入下一页。这时,工程中所有Verilog Module的名称都会显示出来,设计人员需要选择要进行测试的模块。由于本工程只有一个模块,所以只列出了test,如图4-30所示。

<img id="uchomelocalimg[]" src="http://blog.eccn.com/attachment/200909/8/777141_12523787969v18.jpg" color:="" #333333;="" font-family:="" tahoma;="" mso-bidi-font-size:="" 10.5pt;="" mso-font-kerning:="" 0pt"="" style="word-wrap: break-word; word-break: break-all; max-width: 720px;">

图4-30 选择待测模块对话框


用鼠标选中test,点击“Next”后进入下一页,直接点击“Finish”按键。此时HDL Bencher程序自动启动,等待用户输入所需的时序要求,如图4-31所示。

图4-31 时序初始化窗口


时钟高电平时间和时钟低电平时间一起定义了设计操作必须达到的时钟周期,输入建立时间定义了输入在什么时候必须有效,输出有效延时定义了有效时钟延时到达后多久必须输出有效数据。默认的初始化时间设置如下:

·   时钟高电平时间(Clock High Time):100ns

·    时钟低电平时间(Clock Low Time):100ns

·   输入建立时间(Input Setup):15ns

·   输出有效时间(Output Valid):15ns

·   偏移时间(Offset):100ns

单击“OK”按钮,接受默认的时间设定。测试矢量波形显示如图4-32所示。

图4-32 测试矢量波形


接下来,初始化输入(注:灰色的部分不允许用户修改),修改的方法为:选中信号,在其波形上单击,从该点击所在周期开始,在往后所有的时间单元内该信号电平反相。点击din信号前面的“+”号,在din[7]的第2个时钟周期内单击,使其变高;在din[6]的第3个时钟周期内单击,使其变高;同样的方法修改din[5]~din[0]信号,使其如图4-33所示。

图4-33 初始化输入


然后将testbench文件存盘,则ISE会自动将其加入到仿真的分层结构中,在代码管理区会列出刚生成的测试文件test_bench.tbw,如图4-34所示。

图4-34 测试文件列表


选中test_bench.tbw文件,然后双击过程管理区的“Simulate Behavioral Model”,即可完成功能仿真。同样,可在“Simulate Behavioral Model”选项上单击右键,设置仿真时间等。例4-3的仿真结果如图4-35所示。从中,可以看出,dout信号等于din信号加1,功能正确。

 

图4-35 功能仿真结果


2.测试代码法 

下面介绍基于Verilog语言建立测试平台的方法。首先在工程管理区将“Sources for”设置为Behavioral Simulation,在任意位置单击鼠标右键,并在弹出的菜单中选择“New Source”命令,然后选中“Verilog Test Fixture”类型,输入文件名为“test_test”,再点击“Next”进入下一页。这时,工程中所有Verilog Module的名称都会显示出来,设计人员需要选择要进行测试的模块。 

用鼠标选中test,点击“Next”后进入下一页,直接点击“Finish”按键,ISE会在源代码编辑区自动显示测试模块的代码: 

`timescale 1ns / 1ps 
module test_test_v;

// Inputs 
reg clk; 
reg [7:0] din; 
// Outputs 
wire [7:0] dout; 

// Instantiate the Unit Under Test (UUT) 
test uut ( 
         .clk(clk), 
         .din(din), 
         .dout(dout) 
); 

initial begin 
         // Initialize Inputs 
        clk = 0; 
        din = 0; 
        // Wait 100 ns for global reset to finish 
       #100; 
       // Add stimulus here 
end

endmodule

由此可见,ISE自动生成了测试平台的完整架构,包括所需信号、端口声明以及模块调用的完成。所需的工作就是在initial…end模块中的“// Add stimulus here”后面添加测试向量生成代码。添加的测试代码如下: 

forever begin

#5; 
clk = !clk; 
if(clk == 1) 
         din = din + 1; 
else 
         din = din;

end

完成测试平台后。在工程管理区将“Sources for”选项设置为Behavioral Simulation,这时在过程管理区会显示与仿真有关的进程,如图4-36所示。

图4-36 选择待测模块对话框

选中图4-36中Xilinx ISE Simulator下的Simulate Behavioral Model项,点击鼠标右键,选择弹出菜单的Properties项,会弹出如图4-37所示的属性设置对话框,最后一行的Simulation Run Time就是仿真时间的设置,可将其修改为任意时长,本例采用默认值。

图4-37 仿真过程示意图

仿真参数设置完后,就可以进行仿真了,直接双击ISE Simulator软件中的Simulate Behavioral Model,则ISE会自动启动ISE Simulator软件,并得到如图4-38所示的仿真结果,从中可以看到设计达到了预计目标。

图4-38 test模块的仿真结果

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 办房产证前加户主姓名怎么办手续 孩子上学户口跟房产不在一起怎么办 我家小孩被别的家长打了怎么办 要是小孩骗家长说老师打他怎么办 孩子在学校被家长打小孩怎么办 小孩在学校被老师打淤青家长怎么办 小孩和家长一吵架就说死怎么办 王者荣耀号被别人家长联接了怎么办 儿子12岁总是跟大人顶嘴怎么办 课堂上有学生和你顶嘴你怎么办 小孩看到大人吵架就哭了 怎么办 五年级的孩子叛逆爱发脾气怎么办 6个月孩子多动怎么办呀 小孩被大人打了很生气该怎么办 小孩在学校调皮被老师打了怎么办 四岁宝宝咳嗽半个月了怎么办 三岁宝宝咳嗽半个月了还不好怎么办 孩子在幼儿园不听话天天罚站怎么办 孩子个性太强脾气太倔不听话怎么办 孩子有十七了太不听话了怎么办 小孩的学籍填错了怎么办还能改吗 生完孩子后脾气暴躁易怒怎么办 生完孩子之后变懒了怎么办呀? 孩子三年级了成绩不突出家长怎么办 自私势力的父母想把我害死怎么办 父母如果养出自私的孩子怎么办 大人得了地图舌怎么办要怎么治疗 请问我家小孩有心理儿问题怎么办 想离婚妻子拿孩子命威胁怎么办 爸妈50多岁了吵架很严重怎么办 我和别人没离婚的老婆在一起怎么办 老婆起诉我离婚我不想理怎么办 上大学的孩子对考试无所谓怎么办 家里的人对我已经没有信心了怎么办 我是做股票配资的找不到客户怎么办 心理健康类的课程总是选不了怎么办 孩子该上初三了英语基础差怎么办 初二学生辍学半年又想上学怎么办 保险用的小红本丢了怎么办 孩子的小红本丢了怎么办 宝宝打针的小红本丢了怎么办