精华内容
下载资源
问答
  • modelsim仿真中 do文件的写法技巧

    千次阅读 多人点赞 2018-05-25 00:02:54
    Modelsim之 DO文件简介 网上的关于DO文件的编写好像资料不多,比较杂,所以本人总结一下常用的简单语法,方便大家查看。其实本人也刚接触DO文件没多久,有纰漏很正常,欢迎指正批评,互相学习。PS:写得有点乱 还有...

    Modelsim之 DO文件简介

             网上的关于DO文件的编写好像资料不多,比较杂,所以本人总结一下常用的简单语法,方便大家查看。其实本人也刚接触DO文件没多久,有纰漏很正常,欢迎指正批评,互相学习。PS:写得有点乱

      还有一个值得注意的是 我在看到这篇文章的时候我正在仿真一个verilog文件,文件中调用了一个ROM , 但是我怎么仿真 rom的输出文件都有问题, 经过一个QQ好友的指点,我发现竟然是我 QUARTUS 下考过来的库文件 有问题, 自此提醒遇到过此问题 但还没有解决的同学。。

    一.DO文件的简介和工作方式

    DO文件是一次执行多条命令的脚本。这个脚本可以像带有相关参数的一系列ModelSim命令一样简单,或者是带有变量,执行条件等等的Tcl程序。可在GUI里或系统命令提示符后执行Do文件。

    由于TCL脚本语言内容很多,本人是刚学不久,菜鸟一个。但是针对我们这门课程的话,有些基本常用的语法还是值得提一下的,方便大家一起学习交流,如果以下内容有什么写错了,希望大家提出并批评,互相进步。

    首先,我们如何建立DO文件呢?

    方法挺多,一种是可以打开Modelsim,执行File/New/Source/Do命令,进入Do文件编辑方式,在编辑窗口输入仿真批处理文件的代码,以.do为扩展名保存文件。当然也可以在windows系统中新建一个记事本,在“另存为”的时候写上.do的后缀名,也是一种方法。调用方式是在Modelsim的Transcript窗口中使用指令:do filename.do,完成对设计的自动化仿真。

     

    下面简单讲讲仿真的步骤。首先我们要对一个设计进行仿真呢,我们一般需要进行以下几个步骤:

    ①创建一个工程和工程库;

    ②加载设计文件(包括你编写好的testbench);

    ③编译源文件;

    ④运行仿真,并查看结果;

    ⑤最后进行工程调试。

             而do文件,就是把上述的步骤①---④用tcl脚本语言来编写出来,让Modelsim来运行该do文件宏命令,并自动执行仿真的步骤。这种好处也许在小设计中没怎么表现,但是如果在一个大的工程中,常常需要对一个设计单元进行反复的调试和仿真,但是仿真时的设置是不变的,这时如果使用了do文件,把仿真中使用到的命令都保存下来了,就可以节省大量的人力,提高了工作效率。

     

    下面将对照一个简单的例子counter.do,讲一下我们常用的一些基本指令。

    PS:  do文件的注释是由#开始的,但不可以在代码行后面添加,只能另起一行。

    正确的是:

    vlib work  

    #新建一个work库

    错误的是:

    vlib work  #新建一个work库

     

    编写名为counter.do的文件,其内容为下
    vlib work (对应仿真步骤①:新建work库。该命令的作用是在当前目录下建立一个work目录,请注意不要直接在windows中新建一个work的文件夹,因为用操作系统建立的work文件夹并没有ModelSimSE自动生成的_info文件。)
    vmap work  work(对应仿真步骤①:该命令的作用是将目前的逻辑工作库work和实际工作库work映射对应。也可以直接用指令“vmap work”表示将work库映射到当前工作目录下。)
    vlog counter.v  counter_tb.v (对应仿真步骤②③:编译counter.v和counter_tb.v文件,默认编译到work库下。该命令的作用是编译这些文件,要注意的是文件可以单独分开编译,但是一定要先编译被调用的文件。假如是VHDL文件,只需要把指令vlog换成vcom即可。)
    vsim work.counter_tb  -t 1ns (对应仿真步骤④:仿真work库中名为counter_tb的模块,最小时间单位为1ns。)
    add  wave/counter_tb/ * (该命令的作用是将testbench文件camera_tb.v中模块camera_tb下所有的信号变量加到波形文件中去,注意在“*”前要加空格。这时候你也可以看到wave文件被打开。当然也可以单个信号的添加,例如添加时钟:addwave clk 等等。)
    run 2000  (该命令的作用是运行2000个单位时间的仿真。也可以用run–all命令来一直仿真下去。)

    这时候就可以在wave窗口文件中看到你的仿真结果。当然也可以观察其它窗口的结果,用view*命令显示 。view*命令可以观察包括signals、wave、dataflow等窗口文件,也可以分别打开。例如用view signals来观察信号变量。

    以上就是do文件的一些基本TCL脚本语言的使用,写得比较简单,但是其实复杂的也就是在添加信号线那里add wave 有比较多的参数设置而已,主要的指导仿真流程的指令还是这几条。

    编写好DO文件之后,在Modelsim中,将工作目录切换到counter.v、counter_tb.v和counter.do三个文件所在目录下,然后在Transcript窗口中的命令行输入 do counter.do即可。切换工作目录的方法如下图1,点击Change Directory:

     

    图1


    PS: 如果在仿真的时候要修改.do文件,需要现在modelsim里运行quit -sim,退出仿真,然后修改.do文件,再保存,然后再重新执行do filename.do指令即可。

    小技巧Tips:

             为了区分仿真波形窗口中的各种信号线,需要信号波形作设置,如不同信号线的颜色、显示基数、显示方式等要有区别,这时就需要在仿真波形窗口单独对每一个信号线手动进行设置,这对于不断修改源代码然后再不断地进行仿真来说,非常麻烦。

    这里,我说一下有个简单的自动生成这类个性化设置DO文件的方法。首先,我们需要先进行一次仿真,在波形窗口的时候先手动对需要的信号线进行一定的设置,如下图2所示:

                                                                                                              

    图2

     

    然后,点击wave窗口左上角的save图标,会出现一个保存DO文件的窗口,如图3所示:

                         

    图3

    它的路径Pathname表示Modelsim自动在当前的默认目录下新建了一个wave.do的DO文件,我们可以自己修改保存的路径和DO文件名。

    接下来我们来看一下上面保存的wave.do文件,打开如下图4所示:

    图4

     

             由wave.do文件中,可以见到我们定义的那些不同颜色、不同显示方式所用的TCL脚本语言,如add wave -color Yellow /freq_meter_tb/i1/freq_data表示让该freq_data信号显示黄色…如add wave-noupdate -radix decimal /freq_meter_tb/i1/div_coef 表示让div_coef信号用十进制decimal来显示…其他的信息可以对照自己的波形设置一一对应上,其他依次类推。

             细心的同学会发现这个DO文件根本不完整,基本都是一些add wave,即是对每个信号的各种设置的TCL代码而已。不错,因为它缺少了我们之前所讲的仿真步骤①②③④,那么我们可以利用上面已学过的TCL语言来补完整它。

    如在前面加上一下语句,使这个DO文件包括了仿真过程的完整指令,包括新建工作库、编译源文件、仿真testbench文件等:

    vlib work

    vmap work work

    vlog freq_meter.v

    vlog freq_meter_direct.v

    vlog freq_meter_tb.v

             新的DO文件如下所示:

              

    图5

    至此,该DO文件才能用来实现较完整的自动化仿真。

     

     

    二.交互式命令

    通过在主窗口的命令窗口输入命令来实现,具有更好的调试和交互功能,提供多种指令,既可以是单步指令,也可以构成批处理文件,用来控制编辑、编译和仿真流程;
    常见交互式命令如下:
    1.force-repeat指令
    指令格式:force 开始时间开始电平值,结束电平值忽略时间(即0电平保持时间) -repeat 周期
    force clk 0 0,1 30 -repeat 100 表示强制clk从0时间单元开始,起始电平为0,结束电平为1,0电平保持时间为30个默认时间单元,周期为100个默认时间单元,占空比为70%。
    指令功能:每隔一段的周期重复一定的force命令,用来产生时钟信号,也可用来产生周期的输入信号,如01010101,00110011等。
    2.force指令
    指令格式:force item_name value time,value time;item_name为端口信号或内部信号,支持通配符号,但只能匹配一个;value不能默认,time,可选项,支持时间单元;
    force din 16#40900000 从当前时刻起给din赋值16进制40900000;
    force bus 16#F @100ns 在100ns时刻给bus赋值16进制F;
    force clr 1 100 经历100个默认时间单元延迟后为clr赋值1;
    force clr 1,0 100 表示clr赋值1后,经历100个默认时间单元延迟后为clr赋值为0;
    3.run指令
    指令格式:run timesteps time_unit,timesteps时间步长,time_unit时间单元,可以是fs、ps、ns、us、ms、sec;
    指令功能:运行(仿真)并指定时间及单元;
    run 100,表示运行100个默认时间单元;
    run 2500ns,表示运行2500ns;
    run -all,表示运行全过程;
    run -continue,表示继续运行
    4.force-cancel指令
    指令格式:force-cancel period
    指令功能:执行period周期时间后取消force命令;
    force clk 0 0,1 30 -repeat 60-cancel 1000,表示强制clk从0时间单元开始,直到1000个时间单元结束;
    5.view指令
    指令格式:view 窗口名
    指令功能:打开Modelsim的窗口
    view souce,打开源代码窗口;
    view wave,打开波形窗口;
    view list,打开列表窗口;
    view varibles,打开变量窗口;
    view signals,打开信号窗口;
    view all,打开所有窗口;

    Modelsim之 DO文件简介

             网上的关于DO文件的编写好像资料不多,比较杂,所以本人总结一下常用的简单语法,方便大家查看。其实本人也刚接触DO文件没多久,有纰漏很正常,欢迎指正批评,互相学习。PS:写得有点乱

      还有一个值得注意的是 我在看到这篇文章的时候我正在仿真一个verilog文件,文件中调用了一个ROM , 但是我怎么仿真 rom的输出文件都有问题, 经过一个QQ好友的指点,我发现竟然是我 QUARTUS 下考过来的库文件 有问题, 自此提醒遇到过此问题 但还没有解决的同学。。

    一.DO文件的简介和工作方式

    DO文件是一次执行多条命令的脚本。这个脚本可以像带有相关参数的一系列ModelSim命令一样简单,或者是带有变量,执行条件等等的Tcl程序。可在GUI里或系统命令提示符后执行Do文件。

    由于TCL脚本语言内容很多,本人是刚学不久,菜鸟一个。但是针对我们这门课程的话,有些基本常用的语法还是值得提一下的,方便大家一起学习交流,如果以下内容有什么写错了,希望大家提出并批评,互相进步。

    首先,我们如何建立DO文件呢?

    方法挺多,一种是可以打开Modelsim,执行File/New/Source/Do命令,进入Do文件编辑方式,在编辑窗口输入仿真批处理文件的代码,以.do为扩展名保存文件。当然也可以在windows系统中新建一个记事本,在“另存为”的时候写上.do的后缀名,也是一种方法。调用方式是在Modelsim的Transcript窗口中使用指令:do filename.do,完成对设计的自动化仿真。

     

    下面简单讲讲仿真的步骤。首先我们要对一个设计进行仿真呢,我们一般需要进行以下几个步骤:

    ①创建一个工程和工程库;

    ②加载设计文件(包括你编写好的testbench);

    ③编译源文件;

    ④运行仿真,并查看结果;

    ⑤最后进行工程调试。

             而do文件,就是把上述的步骤①---④用tcl脚本语言来编写出来,让Modelsim来运行该do文件宏命令,并自动执行仿真的步骤。这种好处也许在小设计中没怎么表现,但是如果在一个大的工程中,常常需要对一个设计单元进行反复的调试和仿真,但是仿真时的设置是不变的,这时如果使用了do文件,把仿真中使用到的命令都保存下来了,就可以节省大量的人力,提高了工作效率。

     

    下面将对照一个简单的例子counter.do,讲一下我们常用的一些基本指令。

    PS:  do文件的注释是由#开始的,但不可以在代码行后面添加,只能另起一行。

    正确的是:

    vlib work  

    #新建一个work库

    错误的是:

    vlib work  #新建一个work库

     

    编写名为counter.do的文件,其内容为下
    vlib work (对应仿真步骤①:新建work库。该命令的作用是在当前目录下建立一个work目录,请注意不要直接在windows中新建一个work的文件夹,因为用操作系统建立的work文件夹并没有ModelSimSE自动生成的_info文件。)
    vmap work  work(对应仿真步骤①:该命令的作用是将目前的逻辑工作库work和实际工作库work映射对应。也可以直接用指令“vmap work”表示将work库映射到当前工作目录下。)
    vlog counter.v  counter_tb.v (对应仿真步骤②③:编译counter.v和counter_tb.v文件,默认编译到work库下。该命令的作用是编译这些文件,要注意的是文件可以单独分开编译,但是一定要先编译被调用的文件。假如是VHDL文件,只需要把指令vlog换成vcom即可。)
    vsim work.counter_tb  -t 1ns (对应仿真步骤④:仿真work库中名为counter_tb的模块,最小时间单位为1ns。)
    add  wave/counter_tb/ * (该命令的作用是将testbench文件camera_tb.v中模块camera_tb下所有的信号变量加到波形文件中去,注意在“*”前要加空格。这时候你也可以看到wave文件被打开。当然也可以单个信号的添加,例如添加时钟:addwave clk 等等。)
    run 2000  (该命令的作用是运行2000个单位时间的仿真。也可以用run–all命令来一直仿真下去。)

    这时候就可以在wave窗口文件中看到你的仿真结果。当然也可以观察其它窗口的结果,用view*命令显示 。view*命令可以观察包括signals、wave、dataflow等窗口文件,也可以分别打开。例如用view signals来观察信号变量。

    以上就是do文件的一些基本TCL脚本语言的使用,写得比较简单,但是其实复杂的也就是在添加信号线那里add wave 有比较多的参数设置而已,主要的指导仿真流程的指令还是这几条。

    编写好DO文件之后,在Modelsim中,将工作目录切换到counter.v、counter_tb.v和counter.do三个文件所在目录下,然后在Transcript窗口中的命令行输入 do counter.do即可。切换工作目录的方法如下图1,点击Change Directory:

     

    图1


    PS: 如果在仿真的时候要修改.do文件,需要现在modelsim里运行quit -sim,退出仿真,然后修改.do文件,再保存,然后再重新执行do filename.do指令即可。

    小技巧Tips:

             为了区分仿真波形窗口中的各种信号线,需要信号波形作设置,如不同信号线的颜色、显示基数、显示方式等要有区别,这时就需要在仿真波形窗口单独对每一个信号线手动进行设置,这对于不断修改源代码然后再不断地进行仿真来说,非常麻烦。

    这里,我说一下有个简单的自动生成这类个性化设置DO文件的方法。首先,我们需要先进行一次仿真,在波形窗口的时候先手动对需要的信号线进行一定的设置,如下图2所示:

                                                                                                              

    图2

     

    然后,点击wave窗口左上角的save图标,会出现一个保存DO文件的窗口,如图3所示:

                         

    图3

    它的路径Pathname表示Modelsim自动在当前的默认目录下新建了一个wave.do的DO文件,我们可以自己修改保存的路径和DO文件名。

    接下来我们来看一下上面保存的wave.do文件,打开如下图4所示:

    图4

     

             由wave.do文件中,可以见到我们定义的那些不同颜色、不同显示方式所用的TCL脚本语言,如add wave -color Yellow /freq_meter_tb/i1/freq_data表示让该freq_data信号显示黄色…如add wave-noupdate -radix decimal /freq_meter_tb/i1/div_coef 表示让div_coef信号用十进制decimal来显示…其他的信息可以对照自己的波形设置一一对应上,其他依次类推。

             细心的同学会发现这个DO文件根本不完整,基本都是一些add wave,即是对每个信号的各种设置的TCL代码而已。不错,因为它缺少了我们之前所讲的仿真步骤①②③④,那么我们可以利用上面已学过的TCL语言来补完整它。

    如在前面加上一下语句,使这个DO文件包括了仿真过程的完整指令,包括新建工作库、编译源文件、仿真testbench文件等:

    vlib work

    vmap work work

    vlog freq_meter.v

    vlog freq_meter_direct.v

    vlog freq_meter_tb.v

             新的DO文件如下所示:

              

    图5

    至此,该DO文件才能用来实现较完整的自动化仿真。

     

     

    二.交互式命令

    通过在主窗口的命令窗口输入命令来实现,具有更好的调试和交互功能,提供多种指令,既可以是单步指令,也可以构成批处理文件,用来控制编辑、编译和仿真流程;
    常见交互式命令如下:
    1.force-repeat指令
    指令格式:force 开始时间开始电平值,结束电平值忽略时间(即0电平保持时间) -repeat 周期
    force clk 0 0,1 30 -repeat 100 表示强制clk从0时间单元开始,起始电平为0,结束电平为1,0电平保持时间为30个默认时间单元,周期为100个默认时间单元,占空比为70%。
    指令功能:每隔一段的周期重复一定的force命令,用来产生时钟信号,也可用来产生周期的输入信号,如01010101,00110011等。
    2.force指令
    指令格式:force item_name value time,value time;item_name为端口信号或内部信号,支持通配符号,但只能匹配一个;value不能默认,time,可选项,支持时间单元;
    force din 16#40900000 从当前时刻起给din赋值16进制40900000;
    force bus 16#F @100ns 在100ns时刻给bus赋值16进制F;
    force clr 1 100 经历100个默认时间单元延迟后为clr赋值1;
    force clr 1,0 100 表示clr赋值1后,经历100个默认时间单元延迟后为clr赋值为0;
    3.run指令
    指令格式:run timesteps time_unit,timesteps时间步长,time_unit时间单元,可以是fs、ps、ns、us、ms、sec;
    指令功能:运行(仿真)并指定时间及单元;
    run 100,表示运行100个默认时间单元;
    run 2500ns,表示运行2500ns;
    run -all,表示运行全过程;
    run -continue,表示继续运行
    4.force-cancel指令
    指令格式:force-cancel period
    指令功能:执行period周期时间后取消force命令;
    force clk 0 0,1 30 -repeat 60-cancel 1000,表示强制clk从0时间单元开始,直到1000个时间单元结束;
    5.view指令
    指令格式:view 窗口名
    指令功能:打开Modelsim的窗口
    view souce,打开源代码窗口;
    view wave,打开波形窗口;
    view list,打开列表窗口;
    view varibles,打开变量窗口;
    view signals,打开信号窗口;
    view all,打开所有窗口;

    Modelsim之 DO文件简介

             网上的关于DO文件的编写好像资料不多,比较杂,所以本人总结一下常用的简单语法,方便大家查看。其实本人也刚接触DO文件没多久,有纰漏很正常,欢迎指正批评,互相学习。PS:写得有点乱

      还有一个值得注意的是 我在看到这篇文章的时候我正在仿真一个verilog文件,文件中调用了一个ROM , 但是我怎么仿真 rom的输出文件都有问题, 经过一个QQ好友的指点,我发现竟然是我 QUARTUS 下考过来的库文件 有问题, 自此提醒遇到过此问题 但还没有解决的同学。。

    一.DO文件的简介和工作方式

    DO文件是一次执行多条命令的脚本。这个脚本可以像带有相关参数的一系列ModelSim命令一样简单,或者是带有变量,执行条件等等的Tcl程序。可在GUI里或系统命令提示符后执行Do文件。

    由于TCL脚本语言内容很多,本人是刚学不久,菜鸟一个。但是针对我们这门课程的话,有些基本常用的语法还是值得提一下的,方便大家一起学习交流,如果以下内容有什么写错了,希望大家提出并批评,互相进步。

    首先,我们如何建立DO文件呢?

    方法挺多,一种是可以打开Modelsim,执行File/New/Source/Do命令,进入Do文件编辑方式,在编辑窗口输入仿真批处理文件的代码,以.do为扩展名保存文件。当然也可以在windows系统中新建一个记事本,在“另存为”的时候写上.do的后缀名,也是一种方法。调用方式是在Modelsim的Transcript窗口中使用指令:do filename.do,完成对设计的自动化仿真。

     

    下面简单讲讲仿真的步骤。首先我们要对一个设计进行仿真呢,我们一般需要进行以下几个步骤:

    ①创建一个工程和工程库;

    ②加载设计文件(包括你编写好的testbench);

    ③编译源文件;

    ④运行仿真,并查看结果;

    ⑤最后进行工程调试。

             而do文件,就是把上述的步骤①---④用tcl脚本语言来编写出来,让Modelsim来运行该do文件宏命令,并自动执行仿真的步骤。这种好处也许在小设计中没怎么表现,但是如果在一个大的工程中,常常需要对一个设计单元进行反复的调试和仿真,但是仿真时的设置是不变的,这时如果使用了do文件,把仿真中使用到的命令都保存下来了,就可以节省大量的人力,提高了工作效率。

     

    下面将对照一个简单的例子counter.do,讲一下我们常用的一些基本指令。

    PS:  do文件的注释是由#开始的,但不可以在代码行后面添加,只能另起一行。

    正确的是:

    vlib work  

    #新建一个work库

    错误的是:

    vlib work  #新建一个work库

     

    编写名为counter.do的文件,其内容为下
    vlib work (对应仿真步骤①:新建work库。该命令的作用是在当前目录下建立一个work目录,请注意不要直接在windows中新建一个work的文件夹,因为用操作系统建立的work文件夹并没有ModelSimSE自动生成的_info文件。)
    vmap work  work(对应仿真步骤①:该命令的作用是将目前的逻辑工作库work和实际工作库work映射对应。也可以直接用指令“vmap work”表示将work库映射到当前工作目录下。)
    vlog counter.v  counter_tb.v (对应仿真步骤②③:编译counter.v和counter_tb.v文件,默认编译到work库下。该命令的作用是编译这些文件,要注意的是文件可以单独分开编译,但是一定要先编译被调用的文件。假如是VHDL文件,只需要把指令vlog换成vcom即可。)
    vsim work.counter_tb  -t 1ns (对应仿真步骤④:仿真work库中名为counter_tb的模块,最小时间单位为1ns。)
    add  wave/counter_tb/ * (该命令的作用是将testbench文件camera_tb.v中模块camera_tb下所有的信号变量加到波形文件中去,注意在“*”前要加空格。这时候你也可以看到wave文件被打开。当然也可以单个信号的添加,例如添加时钟:addwave clk 等等。)
    run 2000  (该命令的作用是运行2000个单位时间的仿真。也可以用run–all命令来一直仿真下去。)

    这时候就可以在wave窗口文件中看到你的仿真结果。当然也可以观察其它窗口的结果,用view*命令显示 。view*命令可以观察包括signals、wave、dataflow等窗口文件,也可以分别打开。例如用view signals来观察信号变量。

    以上就是do文件的一些基本TCL脚本语言的使用,写得比较简单,但是其实复杂的也就是在添加信号线那里add wave 有比较多的参数设置而已,主要的指导仿真流程的指令还是这几条。

    编写好DO文件之后,在Modelsim中,将工作目录切换到counter.v、counter_tb.v和counter.do三个文件所在目录下,然后在Transcript窗口中的命令行输入 do counter.do即可。切换工作目录的方法如下图1,点击Change Directory:

     

    图1


    PS: 如果在仿真的时候要修改.do文件,需要现在modelsim里运行quit -sim,退出仿真,然后修改.do文件,再保存,然后再重新执行do filename.do指令即可。

    小技巧Tips:

             为了区分仿真波形窗口中的各种信号线,需要信号波形作设置,如不同信号线的颜色、显示基数、显示方式等要有区别,这时就需要在仿真波形窗口单独对每一个信号线手动进行设置,这对于不断修改源代码然后再不断地进行仿真来说,非常麻烦。

    这里,我说一下有个简单的自动生成这类个性化设置DO文件的方法。首先,我们需要先进行一次仿真,在波形窗口的时候先手动对需要的信号线进行一定的设置,如下图2所示:

                                                                                                              

    图2

     

    然后,点击wave窗口左上角的save图标,会出现一个保存DO文件的窗口,如图3所示:

                         

    图3

    它的路径Pathname表示Modelsim自动在当前的默认目录下新建了一个wave.do的DO文件,我们可以自己修改保存的路径和DO文件名。

    接下来我们来看一下上面保存的wave.do文件,打开如下图4所示:

    图4

     

             由wave.do文件中,可以见到我们定义的那些不同颜色、不同显示方式所用的TCL脚本语言,如add wave -color Yellow /freq_meter_tb/i1/freq_data表示让该freq_data信号显示黄色…如add wave-noupdate -radix decimal /freq_meter_tb/i1/div_coef 表示让div_coef信号用十进制decimal来显示…其他的信息可以对照自己的波形设置一一对应上,其他依次类推。

             细心的同学会发现这个DO文件根本不完整,基本都是一些add wave,即是对每个信号的各种设置的TCL代码而已。不错,因为它缺少了我们之前所讲的仿真步骤①②③④,那么我们可以利用上面已学过的TCL语言来补完整它。

    如在前面加上一下语句,使这个DO文件包括了仿真过程的完整指令,包括新建工作库、编译源文件、仿真testbench文件等:

    vlib work

    vmap work work

    vlog freq_meter.v

    vlog freq_meter_direct.v

    vlog freq_meter_tb.v

             新的DO文件如下所示:

              

    图5

    至此,该DO文件才能用来实现较完整的自动化仿真。

     

     

    二.交互式命令

    通过在主窗口的命令窗口输入命令来实现,具有更好的调试和交互功能,提供多种指令,既可以是单步指令,也可以构成批处理文件,用来控制编辑、编译和仿真流程;
    常见交互式命令如下:
    1.force-repeat指令
    指令格式:force 开始时间开始电平值,结束电平值忽略时间(即0电平保持时间) -repeat 周期
    force clk 0 0,1 30 -repeat 100 表示强制clk从0时间单元开始,起始电平为0,结束电平为1,0电平保持时间为30个默认时间单元,周期为100个默认时间单元,占空比为70%。
    指令功能:每隔一段的周期重复一定的force命令,用来产生时钟信号,也可用来产生周期的输入信号,如01010101,00110011等。
    2.force指令
    指令格式:force item_name value time,value time;item_name为端口信号或内部信号,支持通配符号,但只能匹配一个;value不能默认,time,可选项,支持时间单元;
    force din 16#40900000 从当前时刻起给din赋值16进制40900000;
    force bus 16#F @100ns 在100ns时刻给bus赋值16进制F;
    force clr 1 100 经历100个默认时间单元延迟后为clr赋值1;
    force clr 1,0 100 表示clr赋值1后,经历100个默认时间单元延迟后为clr赋值为0;
    3.run指令
    指令格式:run timesteps time_unit,timesteps时间步长,time_unit时间单元,可以是fs、ps、ns、us、ms、sec;
    指令功能:运行(仿真)并指定时间及单元;
    run 100,表示运行100个默认时间单元;
    run 2500ns,表示运行2500ns;
    run -all,表示运行全过程;
    run -continue,表示继续运行
    4.force-cancel指令
    指令格式:force-cancel period
    指令功能:执行period周期时间后取消force命令;
    force clk 0 0,1 30 -repeat 60-cancel 1000,表示强制clk从0时间单元开始,直到1000个时间单元结束;
    5.view指令
    指令格式:view 窗口名
    指令功能:打开Modelsim的窗口
    view souce,打开源代码窗口;
    view wave,打开波形窗口;
    view list,打开列表窗口;
    view varibles,打开变量窗口;
    view signals,打开信号窗口;
    view all,打开所有窗口;

    展开全文
  • do文件的编写

    千次阅读 2017-11-22 09:51:35
    一、编写基本的do文件下面按照实际仿真的步骤来说明do文件中需要用到的各个tcl命令。1、quit -sim —- 退出原来的仿真工程;2、cd —- 设置工作目录的路径,就是仿真工程路径;3、vlib work —- 在工作目录下建立一...
    以前在使用ModelSim进行仿真的时候,一直是使用其GUI进行操作的,但是这样很繁琐也很费时。故希望学习其自动化仿真do文件,下面是学习的一些总结。
    

    一、编写基本的do文件

    下面按照实际仿真的步骤来说明do文件中需要用到的各个tcl命令。

    1、quit -sim —- 退出原来的仿真工程;

    2、cd —- 设置工作目录的路径,就是仿真工程路径;

    3、vlib work —- 在工作目录下建立一个work目录,请注意不要用操作系统直接新建一个work的文件夹,因为用操作系统建立的work文件夹并没有modelsim SE自动生成的_info文件。还有个问题是,当你的软件工程里需要用到软核时,可能会需要一些库,但这些库ISE软件中是没有的,此时就需要我们自己新建库了,并映射到当前目录下。我们将自己新建的库一般放在work库前面建立;

    4、vmap work /vmap work work —- 将新建的work库映射到当前工作目录下(当前目录就是第一步中的目录了),其他新建的库也要这样的方法映射。此处需要注意的事逻辑库名与物理库名最好保持一致,后面的work为物理的库目录,即上一步的目录;

    5、vlog +acc –work work “file_path/*.v” —- 编译“file_path”目录下所有.v文件,并将其添加进工作库(work)中,包括IP生成的V文件也要编译的。编译时可以分开单独编译,但是一定要注意顺序,先编译被调用的文件。其中的“-work work”是将后面的源文件编译到哪个库中,如果是编译到默认的work库中,则也可以不写该参数。若只想编译其中某些文件,则可以直接写出这些文件的名字,比如下面两种写法等效:

    vlog div.v div_tb.v
    vlog -work work div.v div_tb.v

    若是要编译基本器件库,可参照下面的例子:

    vlib verilog_libs/altera_ver
    vmap altera_ver ./verilog_libs/altera_ver
    vlog -vlog01compat -work altera_ver {d:/quartus9.0/quartus/eda/sim_lib/altera_primitives.v
    vlog后面的两个参数“-vlog01compat”、“-work”是固定的。其中“-work”是必须保留的,“-vlog01compat”则在源文件为verilog文件时可以保留,如果为VHDL文件则不能使用该参数。需要注意的一点是该工程目录下的“verilog_libs”库文件夹需要手动建立,否则运行会出现错误。
    需要编译的文件有两种:源代码文件、库文件。对于库文件的编译可以有两种处理方式:
    1、将这些库文件与源代码文件一起编译到work库中,这样比较方便省事;
    2、将库文件单独编译到一个库中,在运行的时候需要通过参数设置来将库选择上。由于第一种方式较为简单,后面将采用第二种方式。
    当某一路径会经常用到时,可以通过设置一个路径变量来存储该路径,示例如下:
    set LIBPATH c:/altera/11.0/quartus/eda/sim_lib/
    vlib sim_lib
    vmap sim_lib sim_lib
    vlog -work sim_lib LIBPATH/alteramf.vvlogworksimlib LIBPATH/altera_primitives.v
    vlog命令负责编译verilog文件,如果是VHDL文件,则需要将vlog命令换成vcom命令。
    在该命令中,如果想要include某个文件,则可以通过vlog的incdir选项来实现,比如:
    vlog +incdir+d:/work

    6、vsim -novopt -quiet -c -L altera_ver -L E:/modeltech_6.6a/Xilinx_lib_edk/unimacro_ver -lib work div -t 1ns -do “run 2084655ns” —- 启动仿真命令,该命令可以有许多参数。

    参数“-L altera_ver”是添加仿真库,该处是直接使用逻辑库名称,也可以像后面一样使用物理库的名称及路径;若是库与源文件一起编译到work库中的,则不需要该参数;
    参数“-t 1ns”表示仿真时间单位为1ns;
    参数“-novopt”禁止优化(no vopt),可能会因为vopt的缘故使得一些不重要signal被modelsim自动忽略,一般会保留该参数;
    参数“-do”表示运行时间,该参数一般不用,在后面再运行该命令;
    参数“-c”表示进入命令行模式,如果没有该参数,则表示进行GUI模式。
    默认工作库为work,因而下面几种写法等效:
    vsim div_tb
    vsim -lib work div_tb
    vsim work.div_tb
    sim -L D:/Modelsim/Installfiles/altera/altera_mf work.videoin_tb

    7、view signals source wave —- 打开signal、source、wave窗口,也可以只打开wave窗口;

    8、delete wave * —- 删除原来wave窗口中的波形;

    9、add wave -binary clk rst —- 打添加要观察的波形信号,clk、rst为tb的顶层信号名,若要添加内部信号则要给出路径,-binary表示使用二进制显示;

    添加一个模块的所有信号则可以用下面的方式:
    add wave -dec sim:/div_tb/*
    若只是要添加单个信号,则把“*”换成对应的信号即可,比如:
    add wave -unsigned sim:/div_tb/clk
    在wave窗口中,可以对波形进行相关配置,下面是常用的配置命令:
    WaveRestoreCursors {{Cursors 1} {200ns} 0} {{Cursors 2} {400ns} 0}
    configure wave -rowmargin 4
    configure wave -childrowmargin 2
    configure wave -namecolwidth 150
    configure wave -valuecolwidth 100
    configure wave -signalnamewidth 0
    configure wave -justifyvalue left
    configure wave -snapdistance 10
    configure wave -datasetprefix 0
    configure wave -gridoffset 0
    configure wave -gridperiod 1
    configure wave -griddelta 40
    configure wave -timeline 0
    update
    WaveRestoreZoom {0 ns} {1000 ns}
    如果所有信号均采用同一种方式显示,则可以用如下方式设置,就不必要在每次添加信号时设置显示参数:
    radix -hex

    10、run 5000/run @5000 —- 开始运行仿真程序;

    没有“@”则表示在当前时刻继续运行5000个单位时间;
    有“@”则表示运行到5000这个时刻,如果当前程序仿真已经运行到了5000以后的时刻,则该方法不会继续向后运行,而会弹出一个错误信息,提示当前仿真时刻已经超过了该数值。
    run -all则表示一直运行,直到手动停止。
    在5000后面也可以跟上一个单位,不跟单位时则以仿真的最小单位为基准。

    11、quit -f/quit -sim —- 参数为“f”时则结束ModelSim,参数为“sim”时则结束该仿真进程。

    下图是我写的一个do文件的截图,能够正确运行。
    这里写图片描述

    这里只是编写了基本的do文件,需要在ModelSIm的Transcipts窗口输入相应的命令才可以执行。
    1、cd filepath —-进入do文件所在的目录;
    2、do filename.do —-执行do文件,开始仿真。

    二、进行优化

    还可以对上面的流程进行优化,真正达到自动仿真,使得仿真更有效率。
    1、批处理bat文件 —- 直接运行该文件即可启动仿真,而不需要首先进入ModelSim启动do文件;该方法还未实验成功。
    2、单独的文件存储文件路径 —-当有多个不同的文件路径时,为使do文件更加简洁,可以将所有路径存储在一个文件中。该方法也未实验成功。
    我是按照Modelsim中常用的Tcl命令中的方法实验的,以后有时间再来看看怎么弄这个。
    三、交互式命令
    通过在主窗口的命令窗口输入命令来实现,具有更好的调试和交互功能,提供多种指令,既可以是单步指令,也可以构成批处理文件,用来控制编辑、编译和仿真流程。
    1、force-repeat
    指令格式:force 开始时间开始电平值,结束电平值忽略时间(即0电平保持时间) -repeat 周期
    force clk 0 0,1 30 -repeat 100 表示强制clk从0时间单元开始,起始电平为0,结束电平为1,0电平保持时间为30个默认时间单元,周期为100个默认时间单元,占空比为70%。
    指令功能:每隔一段的周期重复一定的force命令,用来产生时钟信号,也可用来产生周期的输入信号,如01010101,00110011等。
    2、force
    指令格式:force item_name value time,value time;item_name为端口信号或内部信号,支持通配符号,但只能匹配一个;value不能默认,time,可选项,支持时间单元; force din 16#40900000 从当前时刻起给din赋值16进制40900000; force bus 16#F @100ns 在100ns时刻给bus赋值16进制F; force clr 1 100 经历100个默认时间单元延迟后为clr赋值1;
    force clr 1,0 100 表示clr赋值1后,经历100个默认时间单元延迟后为clr赋值为0。
    3、run
    指令格式:run timestepstime_unit,timesteps时间步长,time_unit时间单元,可以是fs、ps、ns、us、ms、sec;
    指令功能:运行(仿真)并指定时间及单元;
    run 100,表示运行100个默认时间单元;
    run 2500ns,表示运行2500ns;
    run -all,表示运行全过程;
    run -continue,表示继续运行。
    4、force-cancel
    指令格式:force-cancel period
    指令功能:执行period周期时间后取消force命令;
    force clk 0 0,1 30 -repeat 60-cancel 1000,表示强制clk从0时刻开始,直到1000个时间单元结束。
    5、view
    指令格式:view 窗口名
    指令功能:打开Modelsim的窗口
    view souce,打开源代码窗口;
    view wave,打开波形窗口;
    view list,打开列表窗口;
    view varibles,打开变量窗口;
    view signals,打开信号窗口;
    view all,打开所有窗口。

    展开全文
  • 如何建立DO文件

    千次阅读 2019-07-10 16:16:10
    如何建立DO文件? 方法:1、Modelsim→File→New→Source→Do命令 2、新建一个记事本,保存为.do格式 仿真步骤:1、创建一个工程和工程库 2、加载设计文件(包括编写好的testbench) 3、编译源文件 4、...

    如何建立DO文件?

    方法:1、Modelsim→File→New→Source→Do命令

          2、新建一个记事本,保存为.do格式

    仿真步骤:1、创建一个工程和工程库

             2、加载设计文件(包括编写好的testbench)

             3、编译源文件

             4、运行仿真,观察结果

    do文件就是把步骤1-4用tcl脚本语言来编写出来,让Modelsim来运行该do文件宏命令,并自动执行仿真的步骤。

    PS:do文件的注释是由#开始的,但不可以在代码行后面添加,只能另起一行。

    正确的是:

    vlib work 

    #新建一个work库

    错误的是:

    vlib work  #新建一个work库

     

    例:counter.do

    vlib work(对应仿真步骤①:新建work库。该命令的作用是在当前目录下建立一个work目录,请注意不要直接在windows中新建一个work的文件夹,因为用操作系统建立的work文件夹并没有ModelSim SE自动生成的_info文件。)

    vmap work work(对应仿真步骤①:该命令的作用是将目前的逻辑工作库work和实际工作库work映射对应。也可以直接用指令“vmap work”表示将work库映射到当前工作目录下。)

    vlog counter.v counter_tb.v(对应仿真步骤②③:编译counter.v和counter_tb.v文件,默认编译到work库下。该命令的作用是编译这些文件,要注意的是文件可以单独分开编译,但是一定要先编译被调用的文件。假如是VHDL文件,只需要把指令vlog换成vcom即可。)

    vsim work.counter_tb –t 1ns(对应仿真步骤④:仿真work库中名为counter_tb的模块,最小时间单位为1ns。)

    add wave/counter_tb/ *(该命令的作用是将testbench文件camera_tb.v中模块camera_tb下所有的信号变量加到波形文件中去,注意在“*”前要加空格。这时候你也可以看到wave文件被打开。当然也可以单个信号的添加,例如添加时钟:add wave clk 等等。)

    run 2000(该命令的作用是运行2000个单位时间的仿真。也可以用run –all命令来一直仿真下去。)

    展开全文
  • .do文件学习

    千次阅读 2019-04-09 17:52:01
    基本概念和入门案例 SpringMVC详解(二)------详细架构: https://www.cnblogs.com/ysocean/p/7375405.html SpringMVC详解(三)------基于注解的... ...1. 什么是.do文件 以do为扩展名的网页文件是java...

    基本概念和入门案例

    SpringMVC详解(二)------详细架构:
    https://www.cnblogs.com/ysocean/p/7375405.html
    SpringMVC详解(三)------基于注解的入门实例:https://www.cnblogs.com/ysocean/p/7400987.html

    1. 什么是.do文件

    • 以do为扩展名的网页文件是java语言写的,以Struts为框架的;它的运行环境是tomcat,weblogic等;通常用的数据库有oracle,mysql,mssql,access等。网页后台程序是*.jsp 或者 struts的组件文件*.do。
    • .do一般是servlet的映射。(即:.do是个请求,不是文件。系统遇到.do的请求后就会提交给某个servlet来处理,这个servlet会根据具体的配置转发给某个后台的程序进行数据处理,然后给数据传递到页面view,最终给页面展现在用户面前,不一定是struts的,这个请求是可以自己随便配置的,你可以配置成.html,这样就是经常看到假静态)
    //.do的请求都交给叫action的servlet处理。
    //action根据.do前面东西的不同,在转交给相应的Action类
    <servlet-mapping>
    	<servlet-name>action</servlet-name>
    	<url-pattern>*.do</url-pattern>
    <servlet-mapping>
    
    • .do是你在配置文件中配置的一种url模式
      当你提交的url地址以.do结尾的话就把它提交到你在配置文件中配置的action中处理。
      配置的url模式必须与你提交的url模式一样!这样才能把数据提交的相应的action中处理
    • do文件是一个网页后台程序,没有实体文件,不能直接打开。是servlet的“交换机”,用于将来自web浏览器的请求转到相应的serverpage
    • 开发web应用时有一个必须要写的部署描述文件
      这个文件描述了你的web应用的配置,包括欢迎页面(welcome pages)(当请求没有指定时,出现在目录下的文件)、servlet(路径或者扩展名)和那些servlets的参数的映射。 在这个文件中,你配置struts actionservlet作为一个操控所有指定映射(通常以.do为扩展名)请求的servlet——这就是“交换机”

    .do和.action的区别

    struts早期的1版本,以.do为后缀。
        同时spring的MVC也是以.do为后缀。
        几年前struts收购鼎鼎大名的webwork2和开发团队后,将webwork简单封装,原计划是叫做strutsTi,
        后来怕广大struts1的老用户有歧义,改名叫做struts2,并沿用了webwork2的规则,即.action为后缀

    总结

    .do的本质是一个servlet交换机,当系统遇到.do时会自动根据映射找到相应的servlet进行请求响应,然后通过view呈现给用户

    展开全文
  • Modelsim之 DO文件简介

    千次阅读 2016-05-25 19:28:16
    网上的关于DO文件的编写好像资料不多,比较杂,所以本人总结一下常用的简单语法,方便大家查看。其实本人也刚接触DO文件没多久,有纰漏很正常,欢迎指正批评,互相学习。PS:写得有点乱  还有一个值得注意的是 ...
  • ie浏览器下载rar文件,变成do文件

    千次阅读 2017-04-20 19:01:57
    使用ie浏览器下载页面上的rar文件,点击的使用迅雷下载,自动改为main.do文件,下载后打不开,使用过百度经验中的重新下载WinRAR,再次安装,添加关联文件rar方法,没有效果。 我的解决方法,将原下载页面换为360...
  • Modelsim do文件和批处理文件的使用

    千次阅读 2017-07-31 16:39:28
    Modelsim do文件和批处理文件的使用
  • 方法一:点击窗口左上角的file,根据不同文件类型进行导入,(注:如果不熟悉英语可以下载中文版的更方便文件的初导入,但个人建议还是用英文吧,其实都是一些最基本都词汇,实现不懂就百度一下吧) 方法二:当你...
  • 下载连玉君老师的profile.do文件出现的问题 下载安装步骤 1)首先下载地址:https://gitee.com/arlionn/StataProfile,一定从这里橙色按钮[克隆、下载]下载,不然点[左键点我]就是资源撤销分享(●’◡’●) 2)解压...
  • 搭建Modelsim SE仿真环境-使用do文件仿真

    万次阅读 多人点赞 2016-04-17 23:25:16
    sim.do:do文件是由tcl脚本语言编写的,这个参考例程中的do文件是最基本的tcl脚本语言。下面介绍一下关键脚本语言的用法。以下是do文件的内容。 1.  vlib  work  2.  vlog  ../sim/*.v 3.  vlog ...
  • Modelsim/QuestaSim教程——DO文件

    万次阅读 2015-11-23 21:38:24
    下面介绍使用DO文件实现自动仿真的功能。 先给个参考的文件/目录路径,建议大家按照这样的路径来放置文件。 源代码在最后面,先介绍如何配置它。 一、设置好testbench文件名。 不需要写后缀名,但必须是.v,....
  • .do文件详解

    万次阅读 2014-04-22 16:37:32
    1.楼:.do应该是用struts框架做的网站形式,你去你的应用服务器里的struts_config.xml文件中可以找到contentAction.do,这是一个类似于动态链接方法,该配置文件会告诉应用服务器该调用哪些文件,进行如何处理,它可以...
  • 什么是.do文件

    千次阅读 2013-06-06 15:50:48
    1)以do为扩展名的网页文件是java语言写的,以Struts为框架的;它的运行环境是tomcat,weblogic等;通常 用的数据库有oracle,mysql,mssql,access等。网页后台程序是*.jsp 或者 struts的组件文件*.do; 2).do一般...
  • 使用ModelSim do文件实现仿真(Verilog) QuartusII从9.1之后的版本都已经取消了内部自带的仿真器,都需要借助第三方仿真软件比如Modelsim才能实现仿真。一般在进行代码编写的时候,如果结合功能仿真,可以...
  • 【转载】Web .do文件详解

    千次阅读 2012-07-15 19:44:39
    1.楼:.do应该是用struts框架做的网站形式,你去你的应用服务器里的struts_config.xml文件中可以找到contentAction.do,这是一个类似于动态链接方法,该配置文件会告诉应用服务器该调用哪些文件,进行如何处理,它可以...
  • 为了每次仿真不添加信号,就保存了.do文件,但是一关modesim,下次打开就无法加载.do文件了(不关modesim可以),错误如下:[img=https://img-bbs.csdn.net/upload/202007/16/1594894542_406609.jpg][/img] ...
  • Stata 中 profile.do 的设定

    万次阅读 2018-11-13 09:49:26
    作者:连玉君 (知乎 | 简书 | 码云)   Stata连享会: 内生性专题现场班 下载:老连的 profile.do ...每次一开机,Stata 会自动找到这个名为 profile.do文件,并执行里面的所有命令,显示为 run...
  • Modelsim中.do脚本语言基本介绍

    千次阅读 2018-09-04 19:27:04
    网上的关于DO文件的编写好像资料不多,比较杂,所以本人总结一下常用的简单语法,方便大家查看。其实本人也刚接触DO文件没多久,有纰漏很正常,欢迎指正批评,互相学习。PS:写得有点乱  还有一个值得注意的是 我...
  • login.do不是文件

    千次阅读 2014-12-04 16:23:17
    login.do不是文件,是一种url访问的方式,跟.jsp .asp .php .aspx .html .htm 不一样,login.do之后,服务器所返回的页面有可能是.jsp .html等等。 如果是java的struts的话,一般都会返回.jsp或.html的内容,貌似...
  • 使用 Do 文件自动化执行3. 为什么我们想要 **if** 限定语句?4. 创建一个新命令:ado 文档4.1 编写 ado 文件4.2 ado 文件注意事项5. 典型流程归纳6. 添加更多的选项关于我们联系我们 谢作翰 [译] | (知乎 | 简书 |...
  • stata 命令文件和日志文件

    千次阅读 2020-12-24 20:16:43
    1、do文件(命令集) 打开方式:命令行:doedit 执行命令: 注释:(双斜杠或者星号) //this is a sample *this is a sample 2、log文件(日志) 保留所有的输出日志 打开:选择日志文件打开(可以选择...
  • 加上一行 response.reset(); 即可
  • 下载excel表格后缀名为.do形式

    千次阅读 2018-04-28 15:07:55
    最近用POI导出数据到excel,文件可以在浏览器下载,只是下载excel表格后缀名为.do形式。这里的do是我web.xml配置的filter过滤去的拦截方式,事实证明,这里配置什么拦截方式,后缀名就是什么。最后才发现是,我的响应...
  • Spring MVC映射 *.do过滤

    千次阅读 2018-07-06 16:07:17
    <description>spring mvc 配置文件 <param-name>contextConfigLocation <param-value><!-- classpath:applicationContext.xml --> <load-on-startup>1</load-on-startup> <servlet-name>springMvc *....
  • 致远OA webmail.do任意文件下载 CNVD-2020-62422 漏洞描述 致远OA存在任意文件下载漏洞,攻击者可利用该漏洞下载任意文件,获取敏感信息 漏洞影响 致远OA A6-V5 致远OA A8-V5 致远OA G6 漏洞复现 访问 url ...
  • SpringBoot的yaml配置文件,提示Do not use @ for indentation

    万次阅读 热门讨论 2018-07-10 14:08:49
    spring boot应用启动时,报不要使用@符号的错误: … Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found character ‘@’ ... (Do not use @ for indentat...
  • 各种波形文件 fsdb生成方法

    万次阅读 2017-09-21 12:26:18
    仿真是IC设计不可或缺的重要步骤,仿真后一般需要记录下波形文件,用于做详细分析和研究。说一下几种波形文件WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)文件、shm、vpd:   ...
  • 最近在一个项目的维护中,发现ie中下载文件的时候,下载框中的文件名为“download.do”。文件类型识别不了。保存后改了文件后缀是能够看到内容的。说明下载流数据那边是没有问题的。 但是查看了代码后,发现和其他...
  • STATA基础操作-快捷键

    千次阅读 2021-03-09 10:17:44
    do文件里的快捷键 1.Ctrl+O :打开do文档 【如果是在主界面中使用Ctrl+O,则是打开任何格式文档的快捷键】 2.Ctrl+D :在do文档中选中要执行语句的一部分或者全部,Ctrl+D后,会执行(do) 相当于点击工具栏中最右边的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,117,818
精华内容 447,127
关键字:

do文件

友情链接: java.rar