FPGA实验五:信号发生器设计

目录

一、实验目的

二、设计要求

三、实验代码

1.代码原理分析

2.代码设计思路

3.IP核的设计与配置

四、实验结果及分析

1、引脚锁定

2、仿真波形及分析

(1)关于波形一些指标的介绍

(2)对波形转换功能的验证

(3)对幅度调节功能的验证------三角波幅度的变化 

(4)对调频功能的验证---以三角波频率的变化为例

3、下载测试结果及分析

五、实验心得


一、实验目的

(1)掌握信号发生器的原理;

(2)学习复杂数字系统设计;

(3)学习用IP核进行设计;

(4)学习用在线逻辑分析仪观察FPGA产生的信号。

二、设计要求

(1)数字化波形数据存在ROM中,ROM用IP核进行设计;

(2)正弦波或方波、锯齿波波形可选并数码管显示所选波形种类;

(3)信号频率、幅度可调并用数码管显示频率和幅值;

(4)连接开发板,用在线观察信号的幅度、频率调制波形;

(5)可采用DDS原理产生正弦信号。

三、实验代码

限于篇幅,此处仅给出顶层文件代码

  1. module TOP(
    input clk,
    input rst_n,
    input [1:0] wave,            
    //input [11:0]  p_word,   
    input [2:0]  AM,          
    input [3:0]    f_set,
    //output [11:0] dac_dataa,
    output[10:0] count_display//数码管输出    
    );
    wire [31:0] f_word;
    wire [4:0] amplitude;
    wire [11:0] dac_dataa;
    wire [1:0] cnt_1;
    wire [6:0] cnt_2;
    wire [2:0] cnt_3;
    wire [31:0] fre;//   分频:
    reg[26:0] clk_cnt;
    reg  [2:0]  sel=4'b0;
    reg clk1;
    //reg  [10:0] count_display=11'b1111_1111111;
    always @(posedge clk)begin clk_cnt=clk_cnt+1;if(clk_cnt==100000000)beginclk_cnt=0;clk1=1'b1;endelseclk1=1'b0;if(clk_cnt%100000==0) beginsel=sel+1;if(sel==4) sel=0;endend
    DDS uut1(
    .clk(clk),
    .rst_n(rst_n),
    .wave(wave),
    .f_word(f_word),
    //.p_word(p_word),
    .amplitude(amplitude),
    .dac_dataa(dac_dataa),
    .cnt_1(cnt_1)
    );
    F_word_set uut2(
    .clk(clk),
    .rst_n(rst_n),
    .f_set(f_set),
    .f_word(f_word),
    .fre(fre),
    .cnt_2(cnt_2)
    );     
    A_set uut3(
    .clk(clk),
    .rst_n(rst_n),
    .AM(AM),
    .amplitude(amplitude),
    .cnt_3(cnt_3)
    );
    display SG_display(.clk (clk),.rst (rst_n),.counter_1 (cnt_1),.counter_2 (cnt_2),.counter_3 (cnt_3),.count_display (count_display),.sel(sel)
    );ila_0 ila (.clk(clk), // input wire clk.probe0(dac_dataa), // input wire [11:0]  probe0  .probe1(wave), // input wire [1:0]  probe1 .probe2(AM), // input wire [2:0]  probe2 .probe3(f_set) // input wire [3:0]  probe3
    );
    endmodule

    1.代码原理分析

正弦信号发生器由计数器或地址发生器(6位)、正弦信号数据 ROM6位地址线,8位数据线,含有 64 个 8 位数据,一个周期)、原理图顶层设计和 8 位D/A。其框图如图 1 所示。其中信号产生模块将产生所需的各种信号,这些信号的产生可以有多种方式,如用计数器直接产生信号输出,或者用计数器产生存储器的地址,在存储器中存放信号输出的数据。信号发生器的控制模块可以用数据选择器实现。将波形数据送入 D/A 转换器,将数字信号转换为模拟信号输出。 

2.代码设计思路

3.IP核的设计与配置

(以ila_0为例) 

 

在线逻辑分析仪的配置

 

此处设置了5个探针,在逻辑分析仪中显示出频率、幅度、波形类型额变化。

四、实验结果及分析

1、引脚锁定

set_property -dict { PACKAGE_PIN W5   IOSTANDARD LVCMOS33 } [get_ports clk]

create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports clk]

## Switches

set_property -dict { PACKAGE_PIN V17   IOSTANDARD LVCMOS33 } [get_ports {wave[0]}]

set_property -dict { PACKAGE_PIN V16   IOSTANDARD LVCMOS33 } [get_ports {wave[1]}]

set_property -dict { PACKAGE_PIN W16   IOSTANDARD LVCMOS33 } [get_ports {f_set[0]}]

set_property -dict { PACKAGE_PIN W17   IOSTANDARD LVCMOS33 } [get_ports {f_set[1]}]

set_property -dict { PACKAGE_PIN W15   IOSTANDARD LVCMOS33 } [get_ports {f_set[2]}]

set_property -dict { PACKAGE_PIN V15   IOSTANDARD LVCMOS33 } [get_ports {f_set[3]}]

set_property -dict { PACKAGE_PIN W14   IOSTANDARD LVCMOS33 } [get_ports {AM[0]}]

set_property -dict { PACKAGE_PIN W13   IOSTANDARD LVCMOS33 } [get_ports {AM[1]}]

set_property -dict { PACKAGE_PIN V2    IOSTANDARD LVCMOS33 } [get_ports {AM[2]}]

set_property -dict { PACKAGE_PIN R2    IOSTANDARD LVCMOS33 } [get_ports {rst_n}]

##7 Segment Display

set_property -dict { PACKAGE_PIN W7   IOSTANDARD LVCMOS33 } [get_ports {count_display[6]}]

set_property -dict { PACKAGE_PIN W6   IOSTANDARD LVCMOS33 } [get_ports {count_display[5]}]

set_property -dict { PACKAGE_PIN U8   IOSTANDARD LVCMOS33 } [get_ports {count_display[4]}]

set_property -dict { PACKAGE_PIN V8   IOSTANDARD LVCMOS33 } [get_ports {count_display[3]}]

set_property -dict { PACKAGE_PIN U5   IOSTANDARD LVCMOS33 } [get_ports {count_display[2]}]

set_property -dict { PACKAGE_PIN V5   IOSTANDARD LVCMOS33 } [get_ports {count_display[1]}]

set_property -dict { PACKAGE_PIN U7   IOSTANDARD LVCMOS33 } [get_ports {count_display[0]}]

#set_property -dict { PACKAGE_PIN V7   IOSTANDARD LVCMOS33 } [get_ports dp]

set_property -dict { PACKAGE_PIN U2   IOSTANDARD LVCMOS33 } [get_ports {count_display[7]}]

set_property -dict { PACKAGE_PIN U4   IOSTANDARD LVCMOS33 } [get_ports {count_display[8]}]

set_property -dict { PACKAGE_PIN V4   IOSTANDARD LVCMOS33 } [get_ports {count_display[9]}]

set_property -dict { PACKAGE_PIN W4   IOSTANDARD LVCMOS33 } [get_ports {count_display[10]}]

2、仿真波形及分析

(1)关于波形一些指标的介绍

rst_n:表示使能端   clk:表示时钟周期   wave:波形类型0-正弦波 1-矩形波  2-三角波 3-锯齿波

AM:波形幅度     f_set:波形频率

(2)对波形转换功能的验证

I:波形类型的变化:从正弦波到矩形波               II:从矩形波到锯齿波的变化

 

III :从锯齿波到三角波的变化     

(3)对幅度调节功能的验证------三角波幅度的变化 

(4)对调频功能的验证---以三角波频率的变化为例

 

分析:

当信号的类型、频率、幅度发生变化时,具体的波形也会立即出现明显的变化,实现了频率、幅度、波形类型的可调性。

3、下载测试结果及分析

包含在线逻辑分析仪情况及开发板情况

波形类型:0-正弦波      1-矩形波      2-三角波       3-锯齿波  

不断改变波形类型、幅度及频率

  1. 锯齿波                                                       

幅度:3      频率:12     波形类型:3                               开发板

(2)正弦波

幅度:4      频率:8      波形类型:0                                  开发板

(3)矩形波

幅度:1      频率:7      波形类型:1                                 开发板

 

(4)三角波

幅度:2      频率:10      波形类型:2                           开发板

 

五、实验心得

1.实验过程中在完成仿真实验后准备上开发板进行测试,但发现此次实验与之前的实验上板子有点不一样。在查阅相关资料后,才知道此次实物实验不能仅依靠bassy3开发板,还需要使用在线逻辑分析仪观察FPGA产生的信号,实现波形的显示,展示其频率、幅度及波形类型,这让我对实物实验有了不一样的认识。

2.最初实验刚开始的时候真的是一头雾水,实验要求用IP核进行设计虽然有一定的思路,但也不清楚到底如何下手,最后还是参考了网上的方法程序,一点点理解下来。当然,网上的内容和我们的实验有许多出入,所以还是要在理解之后进行诸多修改。像数字化波形数据存在ROM中,ROM用IP核进行设计”这类步骤,如果不是参考网上的教程,我得花很多时间去消化理解虽然是借着别人的经验前进,但我认为只要最后能消化吸收转化为自己的知识,也能够被理解。经过这次实验,我真的是收获良多,如理解了信号发生器的设计原理学会了使用DDS原理产生正弦信号特别是对ip核设计的理解,这也给我在今后对于verilog编程也提供了更多的选择也能为我之后的实验提供不少帮助。

2022-05-05

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/13191.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CPU】关于x86、x86_64/x64、amd64和arm64/aarch64

为什么叫x86和x86_64和AMD64? 为什么大家叫x86为32位系统? 为什么软件版本会注明 for amd64版本,不是intel64呢? x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令…

Haskell 入门学习(一)之安装试用 Haskell

Haskell 入门学习(一)之安装试用 Haskell 文章目录 Haskell 入门学习(一)之安装试用 Haskell前言:安装Windows 安装Linux、MacOs 使用 VSCode 进行代码编写创建一个简单的项目使用 Cabal 管理项目项目大致结构运行项目…

python验证公网ip与内网ip

公网IP和内网IP都是用于标识网络设备的地址,但它们有着不同的作用和特点。 公网IP是由互联网服务提供商(ISP)分配给用户设备的唯一标识符。它是全球范围内唯一的,并且可以被其他网络设备使用来寻找和连接特定的设备。公网IP通常用…

python_day2

猜数字-while循环 import randomnum random.randint(1, 10) while True:x int(input("输入&#xff1a;"))if x > num:print("大了")elif x < num:print("小了")else:print("猜对了")break打印九九乘法表-while循环 i 1 wh…

MySQL索引优化整合案例实现

目录 1 JOIN优化1.1 JOIN算法原理1.2 in和exists函数 2 order by优化2.1 索引排序2.2 额外排序2.3 排序优化 3 索引单表优化案例3.1. 建表3.2. 单表索引分析3.1.1 需求3.1.2 优化 4 索引多表优化案例 1 JOIN优化 1.1 JOIN算法原理 1) JOIN回顾 JOIN 是 MySQL 用来进行联表操作…

Spring Boot中的Hibernate是什么,如何使用

Spring Boot中的Hibernate是什么&#xff0c;如何使用 Hibernate是一个流行的Java ORM框架&#xff0c;它提供了一种将Java对象映射到关系数据库表的方法。Spring Boot集成了Hibernate&#xff0c;使得在开发Web应用程序时可以轻松地使用Hibernate操作数据库。本文将介绍Sprin…

插值算法

插值法在较少的数据模型的基础上模拟产生新的靠谱数值&#xff0c;可以用来预测。 利用已知的点建立合适的插值函数 f(x) ,未知点 x_i 由插值函数 f(x) 可以求出函数值 f(x_i) &#xff0c;用求得的 (x_i,f(x_i))近似代替未知点。 基本概念&#xff1a; yf(x)在[a,b]上有定义 x…

机器学习基础之《特征工程(2)—特征工程介绍、特征抽取》

一、什么是特征工程 机器学习领域的大神Andrew Ng(吴恩达)老师说“Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learning” is basically feature engineering. ” 注&#xff1a;业界广泛流传&#xff1a;数据和特…

vue创建项目报错npm install --loglevel error --legacy-peer-deps

vue创建项目报错npm install --loglevel error --legacy-peer-deps 如图所示&#xff1a; 话不多说&#xff0c;直接上解决方法&#xff1a; 1、找到这两个文件&#xff08;每个人的位置不一样&#xff0c;像我是安装在D盘&#xff09; 2、分别点进去&#xff0c;右键—属性…

时间序列预测 | Matlab麻雀算法(SSA)优化极限梯度提升树XGBoost时间序列预测,SSA-XGBoost时间序列预测模型,单列数据输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 麻雀算法(SSA)优化极限梯度提升树XGBoost时间序列预测,SSA-XGBoost时间序列预测模型,单列数据输入模型 评价指标包括:MAPE、RMSE等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码

0基础学习VR全景平台篇 第57篇:高级功能-多语言

功能位置示意 一、本功能将用在哪里&#xff1f; 多语言功能&#xff0c;可一键设置作品界面语言为中/英文&#xff0c;或跟随系统自动切换中/英文&#xff0c;各位可以用户可以轻松制作英文版VR全景作品&#xff0c;满足国外用户访问的需求。 此外蛙色VR平台&#xff0c;可通…

Linux内核源码下载

参考文章&#xff1a;https://blog.csdn.net/m0_49328056/article/details/121669035 一、git命令下载 1、进入官网&#xff1a;https://www.kernel.org/ mainline&#xff08;主线版本&#xff09;、stable&#xff08;稳定版本&#xff09;、longterm&#xff08;长期演进版…