modelsim仿真基本流程

时间:2023-03-10 07:17:54
modelsim仿真基本流程

好久没再用过modelsim,都忘的一干二净了。刚换了份工作,又要重新拾起来,不过现在感觉modelsim的仿真其实是比较快的,很有用处。再者这么长时间老是学了忘,忘了再学,觉得真浪费时间,平时确实应该好好总结下的,关于modelsim的仿真这一次一定要系统的总结出来,顺便再练下写文档的能力。

modelsim仿真方法1:用modelsim直接建立工程。

1、建工程

modelsim仿真基本流程

输入工程名,选择工程路径。

modelsim仿真基本流程

添加源文件及测试文件。

modelsim仿真基本流程

在这里为什么要选择第二项,我也不在了然的,改天再查下。

modelsim仿真基本流程

文件添加进来之后就是编译了。

modelsim仿真基本流程

如果编译通过会出现下面的对勾,如果不对当然就是XX了

modelsim仿真基本流程

下一步是仿真

modelsim仿真基本流程

选择测试脚本。另外把下面的优化去掉,不然有些信号优化就没有了,具体是怎么回事我还不明白,再查吧。

modelsim仿真基本流程

单击OK进入下面的界面,选择信号右击添加信号到wave文件中。

modelsim仿真基本流程

设置下仿真时间。就可以run了。

modelsim仿真基本流程

可以看到波形了

modelsim仿真基本流程

这个过程还是比较简单的,有些Ip的仿真却要添加库,怎样处理,在随后的modelsim仿真2中再说了。

附录:

源文件.v

module counter(

rst_n,

clk,

valid

);

parameter CNT_WIDTH = 3'd4 ;

parameter CNT_NUM = 4'd15;

input clk ;

input rst_n ;

output valid ;

reg  valid;

reg [CNT_WIDTH-1:0] cnt ;

always@( posedge clk )

begin

if (rst_n == 0)

begin

cnt <= 4'd15;

end

else

begin

cnt <= cnt + 1'b1;

end

end

always@( posedge clk)

begin

if(rst_n == 0)

begin

valid <= 1'b0;

end

else if(cnt == CNT_NUM)

begin

valid <= 1'b1;

end

else

begin

valid <= 1'b0;

end

end

endmodule

测试脚本.v

module counter_tb;

reg rst_n;

reg clk;

wire valid;

counter u_counter(

.rst_n (rst_n),

.clk(clk),

.valid(valid)

);

initial

begin

#0 rst_n = 0;

clk = 0;

#100

rst_n = 1;

end

always

begin

#10 clk = ~clk;

end

endmodule