小插曲3——Modesim仿真常见问题

起因

因为本学期的FPGA期末考试要使用机考,且需要使用Modesim进行波形仿真,所以最近也是在练习使用Modesim。

        不过在使用Modesim时我也遇到了不少的问题,所以想要发布一个总结帖子,希望能帮助到大家,而且也为自己以后的复习准备好资源。

问题整理

1.打开工程

如果有人发给你一个Modesim工程,那么该如何打开该工程呢?
直接打开左上角的文件,进入工程,选择显示所有文件,打开.mqf文件,就可以打开该工程了。这就类似于STM32的project,如果用keil5打开32工程的话,那就直接打开.projec
就行了。

2.打开文件

如何选Modesim工程里面的.v文件?这个最好不要直接双击project里的文件,因为很有可能让Modesim发生错误,造成不停自动打开。如果要打开一个文件的话,就点击左上角的文件夹,通过文件夹的方式打开文件。

3.Modesim不停自动打开

为什么有时候打开Modesim,Modesim会不停的自动打开?
遇到这种情况的,大部分是华为、荣耀类型的电脑,具体原因我也不清楚,解决办法是:按住Ctrl+ALT+Delete启动任务管理器,关闭荣耀/华为电脑管家。如果还是不行,那就退出,重新尝试。

4.登录错误(can't read_dients():no such variable)

这个错误的原因我也不清楚,解决办法是点击搜索,输入regedit ,打开注册登记表

点击HKEY_CURRENT_USER,找到SOFTWARE

点击Model Technology Incorporated,点击Modelsim,将Modelsim所有的内容全部删除。

然后再打开Modelsim就可以正常进入了。

4.如何仿真?

(1)编写程序文件test,和仿真文件test_top,test_top用于设置初始值,比如设置时钟频率,复位信号。

(2)开始编译,点击Comple All

若编译成功后,就点击Start Simulation,开始仿真。

打开work,点击编译成功的test_top仿真文件,取消Enable optimation,然后点击“OK”

然后会调转到这个界面

在左侧Skim处右击鼠标,按如下操作:

然后会进入如下界面,然后点击“run-all”

就大功告成了,如果还是没有显示,就点击放大镜图标

波形就成功仿真了。

5.如何修改代码?

切记,修改代码前一定要关闭仿真!点击STOP图标。

确保仿真关闭后,就可以进行代码修改了。

代码修改完后,就可以保存了。保存之后,再按照之前的步骤就可以继续仿真了。

6.添加时间尺度预编译指令

例如:

`timescale 100ns/10ps   

表示以100ns为单位,精度为10ps。要注意,“`”是键盘1左边的“'”,不是单引号。

timescale 时间单位/时间精度。

100ns表示时间单位,在仿真时用#+数字表示延时多久。如果没有加时间尺度预编译指令,则默认为1ns。举例:

  always begin
    #1 clk = ~clk;//表示每隔100ns,就转换一次时钟电平
  end

10ps表示时间精度

就是说不断放大波形,最多放大到10ps。

测试代码

test文件


module Moore(
    input 	clk,	//????
    input 	areset,  //??????????
    input 	in	,//????
    output 	reg[1:0] out //????
);
//------------<???????>------------------------------------------
//???????????
parameter 	A=2'b01; 
parameter	B=2'b10; 
//------------<reg??>-------------------------------------------------	
reg	[1:0]	cur_state;	//???????
reg	[1:0]	next_state;     //???????

always @(posedge clk or posedge areset) begin    
if(areset)
	cur_state <= B;	//???????
else 
	cur_state <= next_state;	//????????
end
always @(*) begin
	if(areset)
	next_state = B;	//???????
	else
case(cur_state)	//?????????
A:	
if(!in)	
next_state = B;	//??????
else
next_state = A;	//???????
B:	
if(!in)
	next_state = A;	//??????
	else
	next_state = B;	//???????				
default:;
	endcase
end
always @(posedge clk or posedge areset) begin    
    if(areset)
	out <= 1'b1;//??????
else 
case(next_state)//???????????????????
A:	out <= 1'b0;
B:	out <= 1'b1;
default:out <= 1'b1;
  endcase
end
endmodule

test_top文件


`timescale 10ns / 10ns
module moore_tb;  
    reg clk; 
    reg areset; 
    reg in;  
    wire out;  
    Moore u_Moore(
    .clk(clk),
    .areset(areset),
    .in(in),
    .out(out)
    );
initial
begin
  in=1;
  clk=0; 
  areset=1;
  #200 areset=0;
end
always #10 clk=~clk;

always#10  in=~in;

endmodule

感谢大家观看!

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ModelSim是一种广泛使用的硬件描述语言(HDL)仿真和验证工具,常用于验证数字电路设计的正确性。而DDR3是一种高速的双数据率(Double Data Rate)随机存取存储器(SDRAM),用作计算机和其他电子设备中的主存储器。Xilinx是一家知名的可编程逻辑器件(FPGA)供应商,提供了许多用于设计和实现数字电路的工具和设备。因此,我们可以使用ModelSim来仿真DDR3的设计和集成到Xilinx FPGA中。 首先,我们需要在ModelSim中创建一个新的仿真环境。在这个环境中,我们将加载DDR3的设计文件,该文件包含了DDR3的电路和操作逻辑。然后,我们可以设置仿真时钟,并为DDR3配置适当的输入和输出信号。 接下来,我们需要编写一个测试程序,用于模拟DDR3的工作情况。测试程序可以生成各种读写操作,在不同的时钟周期下模拟DDR3的读取和写入操作。我们可以模拟周期性的读写请求,并根据DDR3的规范和要求来验证正确性。仿真的结果可以通过观察信号波形和电路的正确反应来评估。 通过使用ModelSim进行DDR3仿真,我们可以验证DDR3设计在不同的时钟频率、数据传输速率和读写延迟等方面的性能和正确性。我们可以通过观察波形和分析仿真结果来检查DDR3是否能够按照预期的方式工作。如果有任何问题或错误,我们可以通过调整设计参数和逻辑,以及修改测试程序来进行调试和验证。 总结而言,ModelSim是一种强大的工具,可以帮助我们仿真和验证DDR3在Xilinx FPGA中的设计。通过验证DDR3设计的正确性和性能,我们可以确保其在实际应用中的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值