modelsim ,如果不会用,自己找教程多练习一下
1.仿真文件放在同一个文件夹里。
其中altera_mf.v可以到C:\altera\13.1\quartus\eda\sim_lib (quartus安装的位置)
port1_rom_ipcore.v 这个是rom ipcore的文件。
rom_top_tb.v 是测试文件。
2.我用的是modelsim SE-64 10.4版本,新建一个工程,
3.添加文件
4.添加后,如下图所示:
5.编译所有文件
6.运行仿真tb文件
7.启动仿真如下图
8.添加变量,到仿真波形中
9.会跳出下面的界面
10.启动仿真,将rom_rd_data进制修改一下(unsigned),还有就是格式修改一下analog(Automatic)
11.
如果你的仿真结果一直为0,可以参考下面的博客:
https://blog.csdn.net/chuoshumi7080/article/details/99906866
测试文件代码:rom_top_ tb.v
`timescale 1ns/1ns // 定义仿真时间单位1ns和仿真时间精度为1ns
module rom_top_tb; // 测试模块
parameter T = 20; // 时钟周期䶿0ns
reg sys_clk; // 时钟信号
reg sys_rst_n; // 复位信号
initial begin
sys_clk = 1'b0;
sys_rst_n = 1'b0; // 复位
#(T+1) sys_rst_n = 1'b1; // 在第21ns的时候复位信号信号䋊end
always #(T/2) sys_clk = ~sys_clk;
//例化led模块
rom_top rom_top_uut (
.sys_clk (sys_clk ),
.sys_rst_n (sys_rst_n)
);
endmodule
rom_top.v代码
module rom_top(
input sys_clk , //时钟信号
input sys_rst_n //复位信号,低电平有效
);
wire [7:0] rom_rd_data; //数据
wire [7:0] rom_addr ; //地址
wire rom_rd_en;
//ROM读模块
rom_rw u1_rom_rw(
.clk (sys_clk),
.rst_n (sys_rst_n),
.rom_rd_en (rom_rd_en ),
.rom_addr (rom_addr),
.rom_rd_data (rom_rd_data)
);
//rom ip core
port1_rom_ipcore rom_1port_ipcore_inst (
.address ( rom_addr ),
.clock ( sys_clk ),
.rden ( rom_rd_en ),
.q ( rom_rd_data )
);
endmodule
rom_rw.v代码
//ROM读模块
module rom_rw(
input clk , //时钟信号
input rst_n , //复位信号,低电平有效
output rom_rd_en , //rom读使能
output reg [7:0] rom_addr , //rom读写地址
input [7:0] rom_rd_data //rom读数据
);
assign rom_rd_en =1'b1;
//读写地址信号 范围:0~31
always @(posedge clk or negedge rst_n) begin
if(rst_n == 1'b0)
rom_addr <= 8'd0;
else begin
rom_addr <= rom_addr + 1'b1;
end
end
endmodule
其他的代码就不附上去了,mif文件如何生成,还有rom ipcore 如何使用,可以参考我之前的博客