【基于Lattice MXO2的小脚丫FPGA核心板】02ModelSim仿真 - FPGA开发者技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

【基于Lattice MXO2的小脚丫FPGA核心板】02ModelSim仿真

FPGA开发过程中,对设计好的模块进行仿真可以更详细地了解模块运行时的时序逻辑,帮助开发者更好地了解模块的运行,为后续的模块调试和优化提供依据。Lattice的FPGA开发工具Diamond配套有ModelSim软件用于FPGA的模块仿真

软件安装

ModelSim仿真软件随着Diamond一同安装,软件的安装和证书申请流程很简单可以参考电子森林Lattice Diamond教程

注意:使用仿真功能时需要使用Lattice的3.13版本,3.10版本使用的仿真工具为Active HDL,在申请的证书中包含的仿真工具为ModelSim,这会导致使用3.10时由于没有Active HDL的证书而无法进行仿真。值得一提的是,在中文官网和英文官网,Diamond提供的版本号不同,下载时要选择正确的软件版本。

Lattice_en_page.png

Lattice_zh_page.png

模块仿真的基础步骤

参考Lattice创建FPGA工程,创建一个0.5s翻转LED的控制模块,实现LED闪烁的功能。模块的设计代码如下

module LED_Shining (
input clk,      //clk = 12mhz
input rst_n,    //rst_n, active low
output led1,    //led1 output
output led2     //led2 output
);

parameter CNT_1S = 12_000_000 - 1;  //time 1S
parameter CNT_05S = CNT_1S >> 1;    //time 0.5S

reg [23:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) cnt <= 1'b0;
else if (cnt >= CNT_1S) cnt <= 1'b0;
else cnt <= cnt + 1'b1;
end

wire clk_div = (cnt>CNT_05S)? 1'b1 : 1'b0;

assign led1 = clk_div;
assign led2 = ~clk_div;

endmodule

接下来设计仿真使用到的Test Bench模块,其设计代码如下

`timescale 1ns / 100ps  #设定仿真的时间基准为1ns
module LED_shining_tb;  #模块名称


parameter CLK_PERIOD = 10; #设定仿真使用到的时钟为10个时钟周期

reg clk;
initial clk = 1'b0;
always #(CLK_PERIOD/2) clk = ~clk;

reg rst_n;  //active low
initial begin
rst_n = 1'b0;
#20;
rst_n = 1'b1;
end

wire led1,led2;
LED_Shining #(.CNT_1S ( 19 )) u_LED_shining (
.clk                     ( clk     ),
.rst_n                   ( rst_n   ),

.led1                    ( led1    ),

.led2                    ( led2    )

);

endmodule

保存后,在工程的文件树中选择设计的测试模块(这里为LED_shining_tb.v),将其包含在“Simulation”选项中。

TB_include_for_sim.png

在Diamond的Tool->Simulation Wizard进入仿真配置界面。

sim_wizard.png

打开配置工具后,根据页面提示,设定仿真的工程名、仿真顶层模块等信息。

sim_w1.png

sim_w2.png

sim_w3.png

sim_w4.png

sim_w5.png

sim_w6.png

保存后,会在工程的文件树中产生一个.spf文件,其中保存了相关的配置参数,可以用于之后的重复仿真。在配置完成的界面点击Finish后,会自动进入ModelSim软件中进行模块仿真。在仿真界面中,可以将模块的输入输出添加到监视界面,便于进行模块的程序逻辑分析。

sim_addwave.png

设定仿真的运行时间后,点击运行,可以得到模块的仿真结果。

sim_wave_default.png

从仿真结果中可以看到控制LED1和LED2的引脚以20个时钟为周期,周期性地进行翻转,从而实现LED的闪烁。

更多回帖

×
发帖