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

本文档详细介绍了作者如何优化FPGA设计,实现了AD9854正弦波生成并配合AD7606实时显示在4.3寸LCD上,同时提供频率分析和测量功能。通过SOPC技术和Verilog编程,展示了硬件描述语言在高级应用中的实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

第一部分、前言

1、闲话

2、效果图

3、增加的功能

4、设计思想

第二部分、工程代码

1、软核的搭建

2、顶层文件代码

3、Ecplise代码

第三部分、总结

1、实现的功能阐述

2、接线图

 3、演示视频

4、个人感悟

5、完整资料


第一部分、前言

1、闲话

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

2、效果图

3、增加的功能

我不知你看了效果有没有那么一点点惊讶,如果你看我的《第一篇、FPGA驱动AD9854基础篇:https://blog.youkuaiyun.com/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.youkuaiyun.com/Learning1232/article/details/111193587

第三部分、总结

1、实现的功能阐述

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

2、接线图

AD9854接线图

 3、演示视频

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

4、个人感悟

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

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

5、完整资料

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

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大屁桃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值