用Modelsim实现几个verilog基础电路的前仿(1)

我用的是modelsim SE-64 10.1c,希望能和各路大神多多交流。
首先是一个4位计数器。具体代码如下:

module counter(count,clk,rst,initial_value);

input clk,rst;
input [3:0] initial_value;
output [3:0] count;

reg [3:0] count;

always@(posedge clk,posedge rst)
	if(rst)
		count<=initial_value; //复位count被赋予初值
	else if(count==4'b1111)
		count<=4'b0000; //到了15归0,其实这段可以不加,15+1后会自动归0
	else
		count<=count+4'b0001;

endmodule

代码应该比较容易理解,下面开始写testbench。其实testbench这个东西有固定的模板,各种不同电路的testbench基本上差异不大,请看:

`timescale 1ns/1ns //仿真时间间隔1ns
module test_counter;

reg clk,rst;
reg [3:0] initial_value;
wire [3:0] count;

counter u1(count,clk,rst,initial_value);

initial clk=0;
initial initial_value=4'b0000;
initial
	begin
		rst=0;//复位
		#5 rst=1;
		#4 rst=0;
	end
	
always #50 clk=~clk; //时钟频率 1/100ns=10MHZ
endmodule

就是模块里的wire,reg类型和testbench里面的是相反的(体现出一个闭环的感觉),实例化一个顶层module,然后initial,最后always就行了。

.v文件都写完啦,下面开始仿真,File->New->Project,新建一个工程,将两个.v文件加进去。
这里要注意,Library中一定得有个Project目录下的work库,否则会报错,如果没有,请新建一个。具体如下图:

在这里插入图片描述
如上图,可以看到project下有两个v文件,Library栏的work显示了两个module,只要对test_counter仿真就行了,右键选中simulate(简单电路一般without optimization),进入仿真模式,选中想看的信号,右键add wave。如图:
在这里插入图片描述
既然时钟周期是100ns,那么仿真时长选择20个周期,也就是2us,再点击开始按钮即可开始仿真。如下图:
在这里插入图片描述
有的时候仿真时间太长,不能在一个页面内同时显示,点击上图的full按钮即可。后面还会写一些别的模块。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值