一个简单的比较器仿真modelsim仿真总是过不去,求解

Modelsim简单排错_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
Modelsim简单排错
大小:2.13KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢modelsim仿真学习笔记
> modelsim仿真学习笔记
modelsim仿真学习笔记
  1、 的目的:本文引用地址:
  在软件环境下,验证电路的行为和设想中的是否一致。
  2、 的分类:
  a) 功能:在RTL层进行的仿真,其特点是不考虑构成电路的逻辑和门的时间延迟,着重考虑电路在理想环境下的行为和设计构想的一致性;
  b) 时序仿真:又称为后仿真,是在电路已经映射到特定的工艺环境后,将电路的路径延迟和门延迟考虑进对电路行为的影响后,来比较电路的行为是否还能够在一定条件下满足设计构想。
  3、 功能仿真的目的:
  a) 设计出能工作的电路:因此功能仿真不是一个孤立的过程,其和综合、时序分析等形成一个反馈工作过程,只有这个过程收敛,各个环节才有意义。而孤立的功能仿真通过是没有意义的,如果在时序分析过程中发现时序不满足需要更改代码,则功能仿真必须从新进行。因此正确的工作流程是:
  b)代码排错:功能仿真是代码排错的最重要的手段之一。
  4、 modelsim的高级功能:Code Coverage
  a) 代码覆盖率是验证激励是否完备,检验代码质量的一个重要手段。测试激励的代码覆盖率至少要达到95%以上,才能基本认为代码在逻辑上是通过质量控制的,才能进入综合步骤;
  b) 代码覆盖率是保证高质量代码的必要条件,但却不是充分条件。即便代码行覆盖和分支覆盖都能够达到100%,也不能肯定的说代码已经得到100%的验证。除非所有的分支覆盖都能够进行组合遍历。
  c) 在大的设计中,如果想通过一个激励就验证完一个设计或者模块是不现实的。一方面是从逻辑功能上很难做到;另外一方面是因为如果在一个激励中包括了各种情况,整个仿真过程的速度会随着计算机内存的消耗而成线性下降,效率低下。
  d) 通常的做法是每一个激励只验证电路功能的某个方面。整个电路的功能验证由数个激励共同完成。在这种验证方法中代码覆盖率更显重要,因为可以通过代码覆盖率来控制激励对功能的覆盖程度。
  e) modelsim的Code coverage不但能记录各个激励对代码的&行覆盖&和&分支覆盖&,而且能够将各个激励的覆盖记录进行合并,做到对覆盖率的全面监测。
  f) 演示。。。。。。。。。。。。。。。。。。。。。。。。
  5、 Debussy:仿真辅助调试工具:
  a) 看仿真波形无疑是代码排错的主要手段,在 中的波形窗口在大的仿真中有如下缺陷:a、只能显示出在仿真前设置好的信号波形,如果在仿真完成后想观察其他的信号,唯一的办法就是添加需要观察的信号从新开始仿真。b、波形只是简单显示,和代码没有对应和关联关系,不能借助波形直观的调试代码;c、如果观察的信号太多,由于其是实时全信号显示,在仿真时间较长后,仿真速度明显减慢,屏幕的刷新速度也明显减慢。
  b) 这些缺点不单有,其他的优秀仿真工具也有,而且历史由来以久,因此很早人们就提出了&先转储后观察调试&方法,在verilog语言中以$dumpXXX开头的系统函数就是做波形转储用的。就是先将波形先存在文件中,等仿真结束后在调出来显示观察和调试。
  c) 这种观察功能很多EDA工具都有,并不足为奇;但Debussy的独特之处在于,它不但能显示波形,而且还能非常智能化的将波形中的任何一个变化和引起这个变化的RTL代码联系起来,使代码排错的效率大幅度提高。在原来IC所的一个大型项目中,由于引进了Debussy,使调试效率至少提高了3倍。
  d) 先介绍verilog语言中的转储系统函数。其实转储函数就是一种典型的文件操作函数,最为常用的为一下几种:
  i. $dumpfile(&filename.vcd&):打开一个文件准备转储波形数据;
  ii. $dumpall:转储所有信号的波形数据;
  iii. $dumpvars:转储层次信号;
  iv. $dumpon:开始转储;
  v. $dumooff:停止转储;
  e) 演示转储功能
  f) 演示Debussy工具中的辅助调试功能;
  6、 SDF反标注
  a) SDF是一种标准延时格式文件,用于记录综合布线后电路的线延迟和门延迟信息。如果在仿真输出的波形上叠加上这些信息,将使波形更接近实际。
  b) 演示。。。。。。。。。。。。。。。。。。。。。。。。。。
  c) 但是由于电路已经被综合布线过,原来的RTL代码的逻辑层次和代码命名都已经发生变化,即便看到波形也很难直接对应到RTL代码上,因此后仿真来确定电路是否符合要求的方法已经逐渐被新的方法所代替。另外还有后仿真速度缓慢也是一个主要原因。新的方法是:时序分析、静态时序分析、形式验证。
  7、 一个重要的观念:电路的性能取决于电路构思和Coding Style:
  a) 经常有人说&不要用写软件的方法去写硬件&,或者说&要用朴实无华的语言风格来写代码&,这些说法只是描述了事务的表明现象,并没有真正指出问题的真正症结所在;
  b) RTL描述语言,虽然是一种语言,但它是描述RTL的语言,所以其着眼点是电路实现而非逻辑推理;RTL就是电路在寄存器层的一种表现,虽然已经不像门级那样具体,但也没有抽象到逻辑层。
  c) 因此写代码的真正正确的方法是:在大脑中构思出电路的结构,然后用代码把它点滴不漏的表现出来,而不是先写一些只是逻辑上行得通的代码等待工具帮你综合成能实现的电路。工具永远只能做繁重而低级的工作,至少要比人的工作低级,这是未来几百年内不会改变的公理。因此如果你的电路性能不好,说明你对如何实现电路还没有清晰的思路。
  d) 不要只使像通过提高器件的速度等级来使你的电路达到要求,恰恰相反,正确的方法是:如果你的电路在第一次综合后已经有80%的路径满足时间要求了,那么就不要想着用更快的器件,而应该考虑改变你的电路拓扑结构和设计构架,来使另外的20%逐渐达到要求。
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一易懂的modelsim学习笔记
> 易懂的modelsim学习笔记
易懂的modelsim学习笔记
1.建一个总文件夹,如cnt2.为源代码,测试台文件,仿真各建一文件夹。如src,tb,sim3.编写源代码,testbench。如cnt.v,tb_cnt.v文件,同时文件名里的模块名与文件名相同,如module cnt( ), module tb_cnt( )。4.再sim文件夹里加入tb.f文件:../tb/tb_cnt.v ../src/cnt.v ../tb/tb_cnt-y ../src +libext+.v(这里源代码中可有许多,下一次做的DPLL必须要用第二种)5.下面开始仿真,仿真,顾名思义要在仿真文件夹sim中进行。pwd 出现当前目录cd ..当前目录向上一级 cd e:/进入e盘中的目录6.vlib work (建工作库),此时从库文件中含有自动生成的_into文件。7.vlog –f tb.f (编译 .v文件),此时库文件加入了cnt.v 和 tb_cnt.v模块8.vsim -voptargs=”+acc” tb_cnt (在testbench中测试源代码),此时sim文件夹里出现了vsim文件,work文件夹里有一些仿真文件。同时在modelsim中出现sim项。9.右击sim项中的实例名称,点击 add to wave all items in design 。本例中实例项是inst_cnt。(cnt inst_cnt(端口连接) 其中cnt为实例引用的模块名称,inst_cnt为实例引用中的实例名称),在wave窗口中出现的信号为/tb_cnt/clk/tb_cnt/rstn/tb_cnt/cnt(它们为连到端口的信号)/tb_cnt/inst_cnt/i_clk/tb_cnt/inst_cnt/i_rstn/tb_cnt/inst_cnt/o_cnt (它们为模块cnt中定义的端口)。10.出现wave窗口,仿真即可。其中wave窗口中的按钮doom in ,doom out ,doom full。可调整波形大小。11.批处理文件(do文件):quit -sim vlog -f tb.f vsim -voptargs=”+acc” tb_cnt add wave sim:/tb_cnt/inst_cnt/* 保存为sim.do文本文件,它等同于7—9步。
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一在用Modelsim加激励仿真时总是显示# Error loading design
UID1176866&帖子20&精华0&积分244&资产244 信元&发贴收入125 信元&推广收入0 信元&附件收入0 信元&下载支出301 信元&阅读权限20&在线时间30 小时&注册时间&最后登录&
在用Modelsim加激励仿真时总是显示# Error loading design
在用Modelsim编译代码时没问题,但是加激励仿真时总是显示# Error loading design,我看网上说是因为不在同一个目录下,我把它们重新加到一个新建立的工程里 还是不行&&求帮助
UID1166800&帖子9&精华0&积分3088&资产3088 信元&发贴收入50 信元&推广收入0 信元&附件收入0 信元&下载支出532 信元&阅读权限50&在线时间118 小时&注册时间&最后登录&
& &遇到过类似的问题,代码编译没问题,但modelsim启动仿真的时候会报错,说Error loading design。一般都是一些内部信号定义不一致之类的问题。比如设计中有两个子模块A和B,A给B传递一个信号,但是A的输出端口和B的输入端口中,这个信号的类型、位宽等定义的不一致。这样的代码在编译时是检查不到语法错误的,在启动仿真时才能检测到两个模块之间的这个信号对接不上,所以才会报错。你再检查一下modelsim的日志文件(工程目录下的transcript),一般都能找到出问题的模块。Ps:编译通过只是说明代码中没有语法错误了,所以编译通过不代表代码就没问题了。
UID1176866&帖子20&精华0&积分244&资产244 信元&发贴收入125 信元&推广收入0 信元&附件收入0 信元&下载支出301 信元&阅读权限20&在线时间30 小时&注册时间&最后登录&
恩,端口写错了&&改好了 谢谢你了
[通过 QQ、MSN 分享给朋友]首先,要安装matlab和modelsim,这个是不用说的了。然后要在matlab里对modelsim进行配置,在命令窗口中输入configuremodelsim,根据提示一步一步进行即可。然后在matlab的File/Set Path菜单中加入Modelsim所在的路径。把matlab的当前路径切换到modelsim的可执行文件所在的目录,在命令窗口中输入vsim('socketsimulink',4449)则modelsim软件被启动,在modelsim中创建一个inverter.v文件:module inverter(sin,sout,clk);input [7:0]output [7:0]reg [7:0]always @(posedge clk)begin& sout&=~endendmodule这个程序很简单,就是个取反逻辑。在modelsim的命令窗口输入:vlib workvmap work workvlog inverter.v如果有出错信息,注意检查modelsim的工作路径与文件的路径是否一致,代码是否有输入错误。如果编译没有错误,就在命令窗口继续输入:vsimulink work.inverter现在modelsim的仿真已经运行起来了,但是这个仿真没有测试向量输入,实际上,modelsim是作为一个服务器,等待着simulink发送输入信号,并把输出信号返回给simulink。所以我们现在回到matlab,在命令窗口输入simulink,进入simulink环境。建立一个新的模型文件,在文件窗口内,建立如下的模型:模型由三个模块组成:最左侧的是一个信号源,最右侧的是一个示波器,中间就是simulink和modelsim的桥梁--HDL Cosimulation模块。Counter Free-Running的参数设置如下:Number of Bits:8Sample time:1这表示信号源输出一个8位二进制数,采样周期为1秒,每个1秒输出值加1。示波器参数不需要设置,比较复杂的是HDL Cosimulation模块的参数设置,为了描述简单,我这里直接给出参数设置的图片,具体参数的解释在下一篇里讲。(1)Ports参数(2)Clocks参数&(3)Timescales参数(4)Connection参数(5)Tcl参数设置好模块参数后,再设置仿真的配置参数如下:下面就可以点击仿真按钮,如果没有错误的话,双击示波器模块,就可以看到输出信号波形,和输入信号相比,两者在数值上正好是二进制的取反。好,一个simulink和modelsim仿真的完整过程就实现了,有时间再仔细讨论具体的参数。
旗下网站:
与非门科技(北京)有限公司 All Rights Reserved.
京ICP证:070212号
北京市公安局备案编号: 京ICP备:号}

我要回帖

更多关于 modelsim仿真实例 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信