基于FPGA的DDS在Modelsim与TD的联合仿真(三)


前言

TD 支持用户使用第三方工具(如 Synopsys VCS、 Mentor Graphics Modelsim 等) 来进行功能验证和时序验证。仿真包括功能仿真和时序仿真,功能仿真又叫逻辑仿真,是指在不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验证;而时序仿真是在布局布线后进行,它与特定的器件有关,又包含了器件和布线的延时信息,主要验证程序在目标器件中的时序关系。这里主要介绍使用Modelsim进行功能仿真。

一、前期准备

生成安路IP核在Modelsim里的库。

1.打开安路TD安装位置,找到sim_release,复制文件内容。

在这里插入图片描述
2.打开modelsim安装位置,新建文件夹Anlogic,在Anlogic内新建文件夹src,将第一步复制内容粘贴进去。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.打开modelsim,点击file-change directory
在这里插入图片描述
4.修改路径为modelsim安装路径下新建的Anlogic,点击确定.
在这里插入图片描述
5. 点击file – new – library,新建库.该库为安路的仿真库。该库命名为EG4_ver,点击OK。
在这里插入图片描述
在这里插入图片描述
6、向新建的EG4_ver内添加安路的ip,选中EG4_ver,点击compile-compile。
在这里插入图片描述
Library选择刚刚建立的EG4_ver,文件选择modelsim – Anlogic – src – eg,选中eg内所有的文件,点击Compile,点击Done即完成IP的添加。
在这里插入图片描述

二、仿真步骤

1.打开在已经建立的工程wave_produce,点击process – properties,修改simulation里lib位置为modelsim路径下Anlogic – EG4_ver,点击save。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2. 点击左下角optimize RTL

在这里插入图片描述
3.点击tool – simulation – post-RTL simulation,点击Yes。
在这里插入图片描述
4.新建测试文件,或导入已有测试文件,点击OK。将测试文件放在wave_produce/simulation/路径下。在这里插入代码片
在这里插入图片描述
测试文件代码如下:

// Verilog testbench created by TD v5.0.27252
// 2021-06-30 18:22:52

`timescale 1ns / 1ps

module DDS_tb();

reg clk;
reg rst_n;
wire [11:0] Data;

//Clock process
parameter PERIOD = 10;
always #(PERIOD/2) clk = ~clk;

//glbl Instantiate
glbl glbl();

//Unit Instantiate
DDS uut(
	.clk(clk),
	.rst_n(rst_n),
	.Data(Data));

//Stimulus process
initial begin
//To be inserted
    clk = 1;
    rst_n = 1;
    #1000 
    rst_n = 0;
    #100000
    $stop;
end

endmodule

此测试文件只仿真正弦波,其他波形同。
5.打开Modelsim新建工程。
在这里插入图片描述
将工程位置放在第一步建立的TD工程wave_produce下的simulation。
在这里插入图片描述
6.点击添加文件。
在这里插入图片描述
分别添加文件工程wave_produce下al_ip下的DDS.v文件、sine_wave_sim.v和simulation里的测试文件DDS.tb.v。
在这里插入图片描述
由于此仿真只仿真正弦波,而DDS.v文件包括所有波形。此时导入的.v文件如下:

module DDS(
  input clk,
  input rst_n,  
  output DA_clk,
  output reg [11:0] Data
);
  reg [31:0] cnt;
  wire [11:0] rom_addr;
   
  always@(posedge clk or posedge rst_n)
     if(rst_n)
	    cnt <= 32'd0;
	   else
	    cnt <= cnt +8590; 
assign rom_addr = cnt[31:20];	    
assign DA_clk=clk;		
	//例化不同的波形IPæ ¸
wire [11:0]Data_sin;
sine_wave sine_DDS(
  .clka(clk),    // input wire clka
  .addra(rom_addr),  // input wire [11 : 0] addra
  .doa(Data_sin) // output wire [11 : 0] doa
);//正弦

//波形的显示
 always@(*)
     Data=Data_sin;//正弦波
 endmodule

在这里插入图片描述
在这里插入图片描述
7.编译文件
在这里插入图片描述
8.仿真
在这里插入图片描述
9.选择测试文件,取消 Enable optmization。
在这里插入图片描述
添加库文件,选择modelsim路径下Anlogic – EG4_ver. 点击OK即可仿真。
在这里插入图片描述
10.调整波形显示。
选择Data信号,右击—>Radix—>Unsigned进制改为无符号。
在这里插入图片描述
选择Data信号,右击—>Format—>Analog(automatic)设置数据以模拟波形显示。
在这里插入图片描述
即可得到仿真波形。
在这里插入图片描述

总结

以上就是正弦波发生器使用Modelsim与联合仿真的操作步骤,本文仅仅介绍了正弦波发生器的仿真。锯齿波、三角波、方波同理。

  • 10
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值