信号发⽣器的设计与实现
1.输出波形:⽅波(占空⽐50%)、锯⻮波、三⻆波、脉冲信号(占空⽐连续可调)、正弦波、任意波等
2.输出频率:100KHz
3.波形选择:使⽤拨码开关选择
 
思路:
使用FPGA搭建信号发生器DDS,重点是制作能够提前下载进开发板板载ROM的数据文件,这里用到的是mif文件,里面保存了数种波形(正弦波,方波,三角波,锯齿波)的点值,这些点值是由前期采样得来的,然后编写verilog代码,实现功能选择(波形选择等),在quartus中配置所选器件的ROM,将mif文件加载进去,在代码中调用rom中的数据,然后仿真时绘制显示波形,这时显示的是离散的数字信号,可以在仿真端modsim里选择模拟信号显示
 
查阅相关资料:
 
 
  
    (本次实验中,没有用到LPF低通滤波,但大体不影响)
mif文件的创建:
   这里用的是matlab编程,生成正弦波,方波,三角波,锯齿波,然后利用Fs采样频率对其采样,提取其离散值保存到创建的mif文件中
   同时使用plot函数输出波形,检查
    
    
    波形图示:
     
   检查生成的mif文件:(以文本方式打开   共有16384
    
quartus端的文件:
 
其中
dds.v是主模块,在编译前要设置为顶层文件set as the top-level-entity,里面包含了调用的模块及其对应端口赋值(连线) key_ctrl.v和dds_ctrl.v
dds_ctrl.v中包含了对ROM的初始化,这里调用了rom_wave(一会在rom中添加文件的名称要与rom_wave一致
 key_ctrl.v实现对波形的选择
在ROM中添加已经创建好的mif文件:
        在IP catalog中搜索rom,选择rom port1,注意这里的ip variation file name要与程序中的一致
 
注意 q的输出位宽和数据数要与创建的mif文件内容一致
在创建成功后可以发现quartus的file左栏出现生成的romwave.v:
仿真:
这次没有单独在modsim中添加文件仿真,因为经常报错,因此采用quartus唤起modsim仿真的方法
1.要在quartus中设置modsim的启动程序的路径,不然无法拉起仿真
   
2.要在settings中添加仿真文件testbench,告诉modsim拿什么仿真
   
启动仿真:
 
tb_dds_ctrl.v文件
延迟800000000个时间单位后,进行wave切换
波形设置为模拟:
结果:
 
 
 
     
 
 

【FPGA & Verilog】手把手教你实现一个DDS信号发生器的更多相关文章

  1. 只有20行Javascript代码!手把手教你写一个页面模板引擎

    http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...

  2. iOS回顾笔记(05) -- 手把手教你封装一个广告轮播图框架

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  3. PWA入门:手把手教你制作一个PWA应用

    摘要: PWA图文教程 原文:PWA入门:手把手教你制作一个PWA应用 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. 简介 Web前端的同学是否想过学习app开发,以弥补自 ...

  4. R数据分析:跟随top期刊手把手教你做一个临床预测模型

    临床预测模型也是大家比较感兴趣的,今天就带着大家看一篇临床预测模型的文章,并且用一个例子给大家过一遍做法. 这篇文章来自护理领域顶级期刊的文章,文章名在下面 Ballesta-Castillejos ...

  5. 用Python手把手教你搭一个Transformer!

    来源商业新知网,原标题:百闻不如一码!手把手教你用Python搭一个Transformer 与基于RNN的方法相比,Transformer 不需要循环,主要是由Attention 机制组成,因而可以充 ...

  6. 手把手教你画一个 逼格满满圆形水波纹loadingview Android

    才没有完结呢o( ̄︶ ̄)n .大家好,这里是番外篇. 拜读了爱哥的博客,又学到不少东西.爱哥曾经说过: 要站在巨人的丁丁上. 那么今天,我们就站在爱哥的丁丁上来学习制作一款自定义view(开个玩笑,爱 ...

  7. 手把手教你实现一个完整的 Promise

    用过 Promise,但是总是有点似懂非懂的感觉,也看过很多文章,还是搞不懂 Promise的 实现原理,后面自己边看文章,边调试代码,终于慢慢的有感觉了,下面就按自己的理解来实现一个 Promise ...

  8. 用Python手把手教你搭建一个web框架-flask微框架!

    在之前的文章当中,小编已经教过大家怎么搭建一个Django框架,今天我们来探索另外的一种框架的搭建,这个框架就是web框架-flask微框架啦!首先我们带着以下的几个问题来阅读本文: 1.flask是 ...

  9. Vue+ElementUI: 手把手教你做一个audio组件

    目的 本项目的目的是教你如何实现一个简单的音乐播放器(这并不难) 本项目并不是一个可以用于生产环境的element播放器,所以并没有考虑太多的兼容性问题 本项目不是ElementUI的一个音频插件,只 ...

  10. 手把手教你打造一个纯CSS图标库

    来,干了这碗安利 写这篇文章的目的其实就是为了安利一下我的图标库:iconoo,所以,开门见山,star吧少年少妇们!(这样的我是不是应该要加个github互粉的团伙了?) 主题说完了,下面进入正题. ...

随机推荐

  1. sqlite没法查出数据

    能够正常插入数据,再次运行插入数据的代码,报错主键重复,说明数据库数据是存在的. 只是插入后再查出就没有数据,显示得是undefined. 检查一下语法,没问题啊,到底啥问题(图中的红色波浪线是ts的 ...

  2. spring 特性

    1.Aware系列接口 spring 6.0提供了一系列的Aware接口,方便我们在Bean加载时获取信息 如 @Service public class study implements BeanN ...

  3. 关于MFC程序关闭之后仍有线程存留

    最近弄了一个项目,关闭之后在任务管理器中依然存留,刚开始以为是因为子线程没能退出,就用ExitThread来终止,终止之后发现好像并不是子线程的原因 查了好久没能找到原因 最后只能通杀 HANDLE ...

  4. flask 项目构建

    创建虚拟环境 mkvirtualenv 环境名 安装所需要的包 pip install  flask == 0.12.4 pip install redis pip install flask-ses ...

  5. vue框架3

    js的几种循环方式 1.v-for可以循环的变量 <!DOCTYPE html> <html lang="en"> <head> <met ...

  6. Pyodide 中实现网络请求的 3 种方法

    原文:https://lwebapp.com/zh/post/pyodide-fetch 需求 小编之前提过一个在线 Python 工具,核心技术是用到了一个叫 Pyodide 的库,能够让 Pyth ...

  7. Echarts 圆形立体柱状图

    先放个效果图 const resData = [ { label: "上海", value: 66 }, { label: "北京", value: 26 }, ...

  8. java短链接生成二维码

    import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxi ...

  9. 使用stream流对数据进行处理

    1. 使用场景 本次使用是通过条件查询出所需要的多个字段后,对其进行处理(一个条件查询多个下拉框内容,并对每个下拉框内容封装对象,进行返回) 2. 代码 点击查看代码 //获取所有需要的数据 List ...

  10. harbor 修改主机地址

    harbor 修改主机地址 1 # cd /var/lib/wise2c/harbor/harbor 2 # docker-comppose down 3 # vi harbor.cfg 4 host ...