基于FPGA的DDS在Gowin和combat开发板的实现(二)

上文描述了DDS在Gowin的创建、编写和综合,本文将继续介绍DDS在Gowin&modelsim的仿真、以及在combat上板的过程。

接着上一节的内容,在Gowin成功综合后,接下来联合modelsim进行仿真。联合仿真需要在modelsim中编译Gowin的库。

附上上一篇链接:基于FPGA的DDS在Gowin和combat开发板的实现(一)

目录

一、编译库

二、Modelsim仿真

三、上板


一、编译库

Gowin联合modelsim进行仿真,首先在modelsim中添加源文件和testbench文件,再进行编译和仿真。由于Gowin的ip core仅在对应平台里使用,modelsim无法获取Gowin的ip core内部的运行逻辑结果,无法直接进行仿真,需要进行Gowin库的编译。

1. 创建文件夹

首先要在modelsim软件目录下创建gowin文件夹,再在gowin文件夹下创建gw2a。如图所示:

2. 修改目录

打开modelsim,修改目录,在此处选择刚才创建的文件夹

3. 编译库

1)新建library

新建library,命名为prim_sim,点击OK

此时这里是empty

2)compile建立的库

选中prim_sim,接下来编译库,点击compile->compile..

library选择prim_sim,查找范围选择Gowin下gw2a库文件

(如本文选择F:\Gowin\Gowin_V1.9.7.06Beta\IDE\simlib\gw2a)

点击compile, “compile”后modelsim界面左下有百分比进度条,100%后点击“done”,完成编译库

二、Modelsim仿真

1. 添加文件

在modelsim新建工程->添加文件(之前在高云综合的.v文件我复制在了modelsim/project目录下;tb文件需要新建,我也放在了相同目录下,因此这里直接添加)。

这里附上仿真文件(DDS_tb.v):

`timescale 1ns/1ps
module DDS_tb;
        reg clk;
		reg rst_n;
		wire [11:0] Data;
		reg [1:0] Mode_Sel;
		reg [1:0] fword_sel;
		
		DDS DDS0 (
		  .clk   (clk),
		  .rst_n (rst_n),
		  .Mode_Sel (Mode_Sel),
		  .fword_sel (fword_sel),
		  .Data (Data)    
		);

		initial clk = 1;
		always #5 clk = ~clk;
		
		initial begin
        rst_n = 0;           //combat开发板复位低有效
		Mode_Sel=0;          //正弦波
		fword_sel=0;
	    #1000 
	    rst_n = 1;
		end	
			
endmodule

2. 编译compile

空白处右键编译选择compile all

3. 仿真Simulation

1)编译成功后“Statuts”处由蓝色问号变为绿色对勾。之后选择Simulate->Start Simulation。

2)Design处选择work下tb文件,去掉“Enable optimization”处的对勾。(不要点击OK,还要添加库!)

在libraries处,添加库(本文为F:\modelsim\gowin\gw2a\prim_sim),完成后点击OK

3)弹出仿真界面,右键添加wave

仿真成功,出现波形。如下:

 

 

 

三、上板

本文使用的是国产高云半导体combat开发板(GW2A-LV18PG484C7/16)

1. 配置管脚

首先需要配置管脚,它有两种方法,一种是双击FloorPlanner,设置相应管脚

另一种是添加.cst约束文件,手动输入。在这里附上本文使用的约束文件:

//Copyright (C)2014-2021 Gowin Semiconductor Corporation.
//All rights reserved. 
//File Title: Physical Constraints file
//GOWIN Version: 1.9.7.06Beta
//Part Number: GW2A-LV18PG484C7/I6
//Device: GW2A-18
//Created Time: Thu 07 08 14:17:49 2021

IO_LOC "Data[11]" AB14;
IO_PORT "Data[11]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8;
IO_LOC "Data[10]" AB13;
IO_PORT "Data[10]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8;
IO_LOC "Data[9]" AA15;
IO_PORT "Data[9]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8;
IO_LOC "Data[8]" AB15;
IO_PORT "Data[8]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8;
IO_LOC "Data[7]" AA16;
IO_PORT "Data[7]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8;
IO_LOC "Data[6]" AB16;
IO_PORT "Data[6]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8;
IO_LOC "Data[5]" AB18;
IO_PORT "Data[5]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8;
IO_LOC "Data[4]" AB17;
IO_PORT "Data[4]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8;
IO_PORT "Data[3]" IO_TYPE=LVCMOS33;
IO_PORT "Data[2]" IO_TYPE=LVCMOS33;
IO_PORT "Data[1]" IO_TYPE=LVCMOS33;
IO_PORT "Data[0]" IO_TYPE=LVCMOS33;
IO_LOC "DA_clk" AB19;
IO_PORT "DA_clk" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8;
IO_LOC "fword_sel[1]" AB22;
IO_PORT "fword_sel[1]" IO_TYPE=LVCMOS33 PULL_MODE=UP;
IO_LOC "fword_sel[0]" W20;
IO_PORT "fword_sel[0]" IO_TYPE=LVCMOS33 PULL_MODE=UP;
IO_LOC "Mode_Sel[1]" V20;
IO_PORT "Mode_Sel[1]" IO_TYPE=LVCMOS15 PULL_MODE=UP;
IO_LOC "Mode_Sel[0]" R19;
IO_PORT "Mode_Sel[0]" IO_TYPE=LVCMOS15 PULL_MODE=UP;
IO_LOC "rst_n" U20;
IO_PORT "rst_n" IO_TYPE=LVCMOS15 PULL_MODE=UP;
IO_LOC "clk" M19;
IO_PORT "clk" IO_TYPE=LVCMOS33 PULL_MODE=UP;

推荐读者直接添加.cst文件,省去查管脚的步骤

2. 布线

双击Place&Route完成布线,成功后显示如图所示绿色对勾

3. 烧录

将开发板连接至电脑,双击“Program Device”,将程序烧录到开发板中

这时还未生成.fs文件,如图所示。

需要将此界面关闭,然后再次点击“Program Device”,发现已自动生成的.fs文件,点击“Program”,烧录成功

4. 生成波形

在示波器可以观测到生成的正弦波、方波、锯齿波、三角波,并且可以通过开发板上开关进行频率和波形的切换。附上波形

本系列文章DDS波形实现过程至此结束。此外,就操作过程中的注意事项和常见问题,我们也汇总了一篇文章,可供参考。

基于FPGA的DDS在Gowin和combat开发板的实现(三)——注意事项及部分问题补充

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值