孩子都能学会的FPGA:第十二课——利用内存产生正弦波

这篇具有很好参考价值的文章主要介绍了孩子都能学会的FPGA:第十二课——利用内存产生正弦波。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(原创声明:该文是作者的原创,面向对象是FPGA入门者,后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门作者不光让大家知其然,还要让大家知其所以然!每个工程作者都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真(前提是安装了modelsim),降低了初学者的门槛。如需整个工程请留言(WX:Blue23Light),不收任何费用,但是仅供参考,不建议大家获得资料后从事一些商业活动!

上节课说到可以利用异步缓存完成多比特数据的跨时钟域同步,但是很多人对FPGA内部的存储还不太了解。这儿我们先介绍一下。

FPGA内部的缓存其实都是RAM (Random Access Memory)随机访问存储器,但是生成IP核的时候可以选择是RAM或者ROM。

RAM又称随机存取存储器,存储单元的内容可按照需要随机取出或存入,且存取的速度与存储单元的位置无关。这种存储器在断电时,将丢失其存储内容,所以主要用于存储短时间使用的程序。

ROM全称Read Only Memory,顾名思义,它是一种只能读出事先所存的数据的固态半导体存储器。ROM中所存数据稳定,一旦存储数据就再也无法将之改变或者删除,断电后所存数据也不会消失。其结构简单,因而常用于存储各种固化程序和数据。

但是在FPGA内部,ROM其实也是由RAM构造而成的,所以FPGA内部的ROM不是真正的ROM,因为ROM内部的数据不是从硬件上固化的,是初始化的时候才将数据固定住,掉电里面的信息还是会消失的。就是FPGA内部的ROM只是模拟了ROM的功能,并不是实际的ROM。

所以不管是FPGA内部的RAM还是ROM,都不具备掉电数据存储的功能。如果FPGA内部只有RAM而没有Flash,那FPGA的配置程序必须放在片外Flash里面,上电的时候从外部Flash中读取配置的信息对FPGA进行配置。

本工程是实现正弦波的输出,我们可以根据实际的需要产生一组数据来表示一个周期正弦波的值。比如我们可以用128个8bit的数据来表示一个周期的正弦波数据,也可以用256个8bit的数据来表示一个周期正弦波的数据,当然也可以用1024个16bit的数据来表示一个周期的正弦波的数据,这个根据实际的需求,比如精度。

那我们可以先生成一组的正弦波数据,然后把这组数据存储在RAM或者ROM中,然后需要的时候从RAM或者ROM读出这组数据就是输出了正弦波。

本工程采用ROM,用256个8bit的数据来表示一个周期的正弦波,Xilinx的内存初始化要使用coe文件,这个coe文件可以通过matlab或者python来产生。如下所示,产生的是256个8bit的定点数。如果想产生其它的波形,比如三角波,余弦波思路都是一样的,只需要把下面生成数据的地方相应修改即可。运行matlab即可以生成sp_ram_256x8.coe文件。

fpga生成正弦波,轻松入门FPGA,fpga开发,fpga

vivado软件中,建立一个名为sp_rom_256x8ROMIP核,如下所示,选择Single Port ROM即了,当然选择Single Port RAM也可以,只是使用的时候不用RAM的写功能即可。

fpga生成正弦波,轻松入门FPGA,fpga开发,fpga

然后设置ROM的位宽核深度,这个可以根据实际需求进行调节。

fpga生成正弦波,轻松入门FPGA,fpga开发,fpga

最后一定要Load Init File,也就是load coe文件。

fpga生成正弦波,轻松入门FPGA,fpga开发,fpga

FPGA设计非常简单,只需要用计数器产生一个累计的地址信号给到ROM,下个时钟周期相应地址内的数据就会被读出来。

fpga生成正弦波,轻松入门FPGA,fpga开发,fpga

如果用vivado自带的仿真软件进行仿真或者vivado和modelsim联合仿真都很简单,因为vivado会自动生成相关的文件。但是笔者用的是自动化仿真,就是用双击top_tb.bat文件直接开始仿真,不需要打开vivado软件。这就需要首先完成vivado编译库的编译和modelsim的配置,这个网上有很大教程,笔者后续也会详细介绍。

有了vivado的仿真库,只需要ROM的仿真文件sp_rom_256x8.v和编译的数据文件sp_rom_256x8.mif即可以完成仿真。将run.do 文件修改如下所示。

fpga生成正弦波,轻松入门FPGA,fpga开发,fpga

最后双击sim目录下的top_tb.bat文件,即可实现全自动化的仿真。

fpga生成正弦波,轻松入门FPGA,fpga开发,fpga

最后将doutRadix设置成DecimalFormat设置成Analog,当然也可以在run.do文件里面设置,如下所示dout如果是正弦波,就说明功能设计正确。

fpga生成正弦波,轻松入门FPGA,fpga开发,fpga

有了正弦波,后续就可以进行DDS,混频,滤波等功能的开发。文章来源地址https://www.toymoban.com/news/detail-770872.html

到了这里,关于孩子都能学会的FPGA:第十二课——利用内存产生正弦波的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 孩子都能学会的FPGA:第十一课——基于握手机制的跨时钟域同步

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月04日
    浏览(53)
  • 孩子都能学会的FPGA:第八课——状态机

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年01月21日
    浏览(51)
  • 孩子都能学会的FPGA:第三十课——用FPGA实现均值滤波

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月02日
    浏览(55)
  • 孩子都能学会的FPGA:第二十五课——用FPGA实现频率计

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月02日
    浏览(46)
  • 孩子都能学会的FPGA:第二十课——用FPGA实现定点数的开方运算

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月03日
    浏览(60)
  • 孩子都能学会的FPGA:第九课——多字节数据的发送和接收

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月04日
    浏览(61)
  • 孩子都能学会的FPGA:第三十一课——用FPGA实现SPI主机发送数据

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月04日
    浏览(43)
  • 孩子都能学会的FPGA:第二十八课——用FPGA实现最近最少使用(LRU)算法

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月19日
    浏览(43)
  • 从0开始学习C++ 第十二课:指针强化

    学习目标: 理解常量指针与指针常量的区别。 学习如何使用函数指针。 掌握指针与数组的高级使用技巧。 学习内容: 常量指针与指针常量 概念: 常量指针是一个指向常量的指针,这意味着不能通过这个指针来修改其指向的值。指针常量是一个指针,其自身的值不可以修改

    2024年01月22日
    浏览(42)
  • 无人驾驶实战-第十二课(强化学习自动驾驶系统)(完)

    在七月算法上报了《无人驾驶实战》课程,老师讲的真好。好记性不如烂笔头,记录一下学习内容。 课程入口,感兴趣的也可以跟着学一下。 ————————————————————————————————————————— 强化学习:通过和环境交互学习到如何

    2024年02月13日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包