【NiosII训练】第二篇、FPGA驱动AD9854高级篇 您所在的位置:网站首页 ad9954驱动程序51 【NiosII训练】第二篇、FPGA驱动AD9854高级篇

【NiosII训练】第二篇、FPGA驱动AD9854高级篇

2024-01-21 08:46| 来源: 网络整理| 查看: 265

目录

第一部分、前言

1、闲话

2、效果图

3、增加的功能

4、设计思想

第二部分、工程代码

1、软核的搭建

2、顶层文件代码

3、Ecplise代码

第三部分、总结

1、实现的功能阐述

2、接线图

 3、演示视频

4、个人感悟

5、完整资料

第一部分、前言 1、闲话

第一篇是我题目的基本要求,实现起来太容易了。为了让我的作品变得更加完美,我又在题目的基本要求下优化了一下自己的作品,首先直接看效果图吧。

2、效果图

3、增加的功能

我不知你看了效果有没有那么一点点惊讶,如果你看我的《第一篇、FPGA驱动AD9854基础篇:https://blog.csdn.net/Learning1232/article/details/111193587》这一篇文章,你肯定知道我优化了哪些部分。

首先是我把2.8寸的LCD9341换成了4.3寸的大LCD;

其次我在大屏上面显示了AD9854产生的正弦波波形;

最后还显示的当前波形的频率,最大幅值,最小幅值,峰峰值。

4、设计思想

是不是觉得有一点高级,其实在这其中我也是在别人的工程基础上更改了一下代码而已。首先这个屏幕显示波形的原理,是我又增加AD7606这个模块,这是一块8通道、16位的ADC模块、最高采样速率为200KSPS(kilo Samples per Second ,即采样千次每秒),按照我现在的理解应该是最高采样频率200KHz,如果错了请纠正。实物图如下

这块4.3寸的LCD显示屏是和正点原子家的407上那块屏幕同款的,他的驱动是小梅哥写的,如果你买了他家的开发板,那个例程里面应该有。实物图如下:

第二部分、工程代码 1、软核的搭建

图中是软核系统内所有的IP核,这里我就不详细介绍了,看不懂的小伙伴可以私信我。

2、顶层文件代码

说实话,这部分代码,如果前面的【NiosII学习】篇文章你都看了,那这里你应该会觉得没什么看头,无非就是对自己新添加的端口进行例化和定义。

module AC620_GHRD( input wire clk, // clk.clk input wire reset_n, // reset.reset_n output wire lcd_rst, // lcd_rst.export output wire lcd_rd_n, // lcd_rd.export output wire lcd_bl, // lcd_bl.export output wire lcd_wr_n, // lcd_wr.export output wire lcd_rs, // lcd_rs.export output wire lcd_cs_n, // lcd_cs.export inout wire [15:0] lcd_data, // lcd_db.export output wire sdram_clk, // sdram_clk.clk output wire [11:0] sdram_addr, // sdram.addr output wire [1:0] sdram_ba, // .ba output wire sdram_cas_n, // .cas_n output wire sdram_cke, // .cke output wire sdram_cs_n, // .cs_n inout wire [15:0] sdram_dq, // .dq output wire [1:0] sdram_dqm, // .dqm output wire sdram_ras_n, // .ras_n output wire sdram_we_n, // .we_n input wire uart_0_rxd, // uart_0.rxd output wire uart_0_txd, // .txd output wire epcs_dclk, // epcs.dclk output wire epcs_sce, // .sce output wire epcs_sdo, // .sdo input wire epcs_data0, // .data0 output wire touch_tcs, // touch_tcs.export inout wire touch_int, // touch_int.export output wire ad7606_cs_n_o, // ad7606.cs_n_o output wire ad7606_rd_n_o, // .rd_n_o input wire ad7606_busy_i, // .busy_i input wire [15:0] ad7606_db_i, // .db_i output wire [2:0] ad7606_os_o, // .os_o output wire ad7606_range_o, // .range_o output wire ad7606_reset_o, // .reset_o output wire ad7606_convst_o, // .convst_o output wire ad7606_stdby_o, // .stdby_o inout wire iic_bus_scl, // oc_iic_0.scl_pad_io inout wire iic_bus_sda, // .sda_pad_io output wire [13:0] pio_c, output wire rst, output wire uclk, output wire wd, output wire rd, output wire osk, output wire fsk, input wire uart_1_rxd, // uart_0.rxd output wire uart_1_txd ); wire [1:0]myiic_in_port; wire [1:0]myiic_out_port; assign iic_bus_scl = myiic_out_port[0]?1'bz:0; assign iic_bus_sda = myiic_out_port[1]?1'bz:0; assign myiic_in_port[0] = iic_bus_scl; assign myiic_in_port[1] = iic_bus_sda; mysystem u0 ( .clk_clk (clk), // clk.clk .reset_reset_n (reset_n), // reset.reset_n .uart_0_rxd (uart_0_rxd), // uart_0.rxd .uart_0_txd (uart_0_txd), // .txd .epcs_dclk (epcs_dclk), // epcs.dclk .epcs_sce (epcs_sce), // .sce .epcs_sdo (epcs_sdo), // .sdo .epcs_data0 (epcs_data0), // .lcd_rst_export (lcd_rst), // lcd_rst.export .lcd_bl_export (lcd_bl), // lcd_bl.export .lcd_wr_n (lcd_wr_n), // lcd.wr_n .lcd_rd_n (lcd_rd_n), // .rd_n .lcd_data (lcd_data), // .data .lcd_rs (lcd_rs), // .rs .lcd_cs_n (lcd_cs_n), // .sdram_clk_clk (sdram_clk), // sdram_clk.clk .altpll_0_phasedone_conduit_export (), // altpll_0_phasedone_conduit.export .altpll_0_locked_conduit_export (), // altpll_0_locked_conduit.export .altpll_0_areset_conduit_export (), // altpll_0_areset_conduit.export .sdram_addr (sdram_addr), // sdram.addr .sdram_ba (sdram_ba), // .ba .sdram_cas_n (sdram_cas_n), // .cas_n .sdram_cke (sdram_cke), // .cke .sdram_cs_n (sdram_cs_n), // .cs_n .sdram_dq (sdram_dq), // .dq .sdram_dqm (sdram_dqm), // .dqm .sdram_ras_n (sdram_ras_n), // .ras_n .sdram_we_n (sdram_we_n), // .we_n .touch_tcs_export (touch_tcs), // touch_tcs.export .touch_int_export (touch_int), // touch_int.export .ad7606_cs_n_o (ad7606_cs_n_o), // ad7606.cs_n_o .ad7606_rd_n_o (ad7606_rd_n_o), // .rd_n_o .ad7606_busy_i (ad7606_busy_i), // .busy_i .ad7606_db_i (ad7606_db_i), // .db_i .ad7606_os_o (ad7606_os_o), // .os_o .ad7606_range_o (ad7606_range_o), // .range_o .ad7606_reset_o (ad7606_reset_o), // .reset_o .ad7606_convst_o (ad7606_convst_o), // .convst_o .ad7606_stdby_o (ad7606_stdby_o), // .stdby_o .myiic_in_port (myiic_in_port), // myiic.in_port .myiic_out_port (myiic_out_port), // .out_port .pio_c_export (pio_c), // pio_c.export .rst_export (rst), // rst.export .uclk_export (uclk), // uclk.export .wd_export (wd), // wd.export .rd_export (rd), // rd.export .osk_export (osk), // osk.export .fsk_export (fsk), // fsk.export .uart_1_rxd (uart_1_rxd), // uart_1.rxd .uart_1_txd (uart_1_txd) // .txd ); endmodule 3、Ecplise代码

这部分代码太多这里就不附上了,基本都是一些模块的驱动和LCD显示的程序,核心代码还是第一篇中驱动AD9854的那几行代码《第一篇、FPGA驱动AD9854基础篇:https://blog.csdn.net/Learning1232/article/details/111193587》。

第三部分、总结 1、实现的功能阐述

我实现的完整功能就是:能够控制AD9854产生可控的正弦信号,同时通过AD7606模块对AD9854产生的正弦信号进行采集,并且将采集到的波形实时显示在4.3寸的TFTLCD显示频上,并且能够得到信号的频率,最大幅值,最小幅值,峰峰值。

2、接线图

AD9854接线图

 3、演示视频

视频200多兆,我就不放上来了,在下面的文件中,你也可以点击这里看一下演示效果(https://live.csdn.net/v/121240)。这里放几张图片

4、个人感悟

说实话,我把这个搞出来后,我就发现我SOPC技术其实没什么,这无非就是在FPGA上面玩单片机开发罢了,这简直就是浪费资源,还不如直接去玩高档的单片机。

我个人认为,FPGA的核心是Verilog硬件描述语言,那个才是最重要的东西,FPGA之所以那么高级,就是因为你可以通过硬件描述语言描述电路,通过电路来达到你想要的逻辑功能,这才是核心嘛!所以我觉得SOPC技术你了解了解简单的开发就可以,我认为重心还是应该放到硬件描述语言上面,学会去写简单电路,学会用Verilog封装一个IP核这才是FPGA的本质。

5、完整资料

欢乐的嫖嫖怪时间从不缺席,我这里还说一下,我会把我调试这个作品所参考的资料,工程,演示视频等都会放到文件中,想要的可以去群文件自取,不想加群私聊我,我悄悄地把链接发给你,或者老板大气🐶🐶🐶(【NiosII训练】第二篇、FPGA驱动AD9854高级篇:https://download.csdn.net/download/Learning1232/13694081)。

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有