Modelsim是我们使用FPGA绕不开的一个东西,所以一定要加强练习知道如何使用。
今天用Modelsim仿真一下昨天例子里的东西。
具体的要求和说明我一般在代码的注释里给出,就不过多介绍。
计数器
module ex_cnt(
input wire sclk,//模拟晶振产生时钟震荡
input wire rst_n,//模拟复位信号
output wire [9:0] cnt
);//计数器
reg [9:0] cnt_r;//寄存器变量
always @(posedge sclk or negedge rst_n)
if(rst_n == 1'b0)
cnt_r<=10'd0;
else
cnt_r<=cnt_r+1'b1;//0-1023-0-1023不断循环
assign cnt=cnt_r;
//仿真工具
endmodule
大家要自己写一个测试程序
`timescale 1ns/100ps//延时的精度100ps为最小精度,单位时标声明
//#10.11--->10.10
module tb_ex_cnt;//测试模块没有输入输出,不需要端口列表
reg tb_sclk,tb_rst_n;//激励信号声明
initial//initial块内只能对寄存器变量赋值,上电初始化过程一次上电仅此一次
begin//begin在tb是顺序执行的
tb_sclk<=0;
tb_rst_n<=0;
tb_rst_n<=1;
end
always
//例化的方法
//原始模块的名字 例化的名字(可以自定义)
ex_cnt ex_cnt_inst(
.sclk (tb_sclk),//模拟晶振产生时钟震荡
.rst_n (tb_rst_n),//模拟复位信号
.cnt (tb_cnt)//例化模块的时候如果原始模块是输出信号,那么括号内必须是wire变量
);//计数器
endmodul
这个测试可以理解为你为自己的计数器提供信号激励。
仿真结果如下:(具体的软件使用流程,大家可自行百度)
Modelsim软件的破解和下载,大家可以通过以下链接(仅供学习)
见附件