FPGA实现ICA算法第三弹:Pmod DA3模块的使用

1.1 Pmod DA3模块简介

本设计采用的DA模块为专用Pmod接口,16bits高精度串行DA,适配zynq7020开发板的Pmod接口,简单易用,但是需要编写相应的接口电路。
在这里插入图片描述
Pmod DA3的时序图:
在这里插入图片描述
具体参数和接口请参考Pmod DA3的使用手册

1.2 DA模块设计

接上一篇博客,新建一个设计文件:
在这里插入图片描述
模块命名为PmodDA:
在这里插入图片描述
将下列代码添加到PmodDA模块中,以便设计相应的电路接口(根据时序图编写):
在这里插入图片描述

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2021/04/26 20:01:33
// Design Name: 
// Module Name: PmodDA
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//
module PmodDA(
    input [15:0] DATA,
    input DA_drdy,
    input clk,
    output reg _CS,
    output reg DIN,
    output reg _LDAC,
    output SCLK
    );
  reg [4:0] counter=0;
  reg clk_div_25M;
  reg[1:0] _clk_div_25M;
  always @(posedge clk)
       if(counter==4) counter <= 0;
       else counter <= counter+1;
  always @(posedge clk)
       if(counter<2) clk_div_25M <= 1;
       else clk_div_25M <= 0;
  assign SCLK=clk_div_25M;
  //reg _CS=1; 
  //reg DIN;
  //reg _LDAC;
  reg[4:0] tempcounter=0;
  reg[1:0] _drdy=0;
  reg[15:0] temp;
  reg[2:0] state=0;
 parameter[2:0]   Idle=0; 
 parameter[2:0]   Start=1; 
 parameter[2:0]   SendData=2;
 parameter[2:0]   LoadData=3;
  always@(posedge clk)
            _drdy <= {_drdy[0],DA_drdy};
  always@(posedge clk)
            _clk_div_25M <= {_clk_div_25M[0],clk_div_25M};
  always@(posedge clk) 
        case(state)                      
           Idle:                       
               begin 
                    _LDAC<=1 ;
                     _CS<=1;                 
                    if (_drdy == 2'b10)
                    begin // on negative edge
                          temp<=DATA;
                          DIN<=DATA[15];
                          state<=Start; 
                    end 
               end
           Start:                       
               begin                     
                    if (_clk_div_25M == 2'b10)
                    begin // on negative edge
                       _CS<=0;
                       state<=SendData;
                    end                              
               end                         
           SendData:                       
               begin                     
                   if (tempcounter!=16)
                     begin   if (_clk_div_25M == 2'b01)
                                  begin // on postive edge
                                     tempcounter<=tempcounter+1;
                                     temp<=temp<<1;
                                 end                      
                             if (_clk_div_25M == 2'b10)
                                  begin // on negative edge
                                     DIN<=temp[15]; 
                                  end
                     end            
                    else
                            if (_clk_div_25M == 2'b10)
                                  begin // on negative edge
                                    _CS<=1;
                                    tempcounter<=0;
                                    state<=LoadData;
                                  end                   
                end                       
            LoadData:
                begin
                        if (_clk_div_25M == 2'b01)
                            begin // on postive edge
                                if(_LDAC==1)_LDAC<=0;
                                else
                                    begin
                                        _LDAC<=1;
                                        state<=Idle;
                                   end
                            end  
                end               
            endcase                       
endmodule

PmodDA模块的接口设计是为了与Pmod DA3连接,后面通过约束文件绑定相应端口,即可实现DA直插,无需连线,这也是FPGA设计电路的好处,根据需要设计相应接口。

工程中的AdDA_top文件连接了片上XADC和Pmod DA3,可以下载到板上直接测试·,实现的功能是AD7端口输入信号,DA连接示波器与下图所示的开发板Pmod接口,在示波器上可以观察到输入的信号,具体测试流程为(其他测试流程可参考此流程,过程相似):

下图红圈所示为Pmod DA3与开发板连接点,直插上排接口即可,蓝线所示为AD7,信号驶入端口,上为AD7P,接信号红线,下为AD7N,接信号蓝线(此接线方式是按照工程中的端口约束文件连接)
在这里插入图片描述
约束文件(XDC文件)改成下面代码:

## This file is a general .xdc for the Zybo Z7 Rev. B
## It is compatible with the Zybo Z7-20 and Zybo Z7-10
## To use it in a project:
## - uncomment the lines corresponding to used pins
## - rename the used ports (in each line, after get_ports) according to the top level signal names in the project

# ports used: clk, led, ja

#Clock signal
set_property -dict {PACKAGE_PIN K17 IOSTANDARD LVCMOS33} [get_ports clk]
#create_clock -period 8.000 -name sys_clk_pin -waveform {0.000 4.000} -add [get_ports clk]

set_property -dict {PACKAGE_PIN L15 IOSTANDARD LVCMOS33} [get_ports AD7P]
set_property -dict {PACKAGE_PIN K16 IOSTANDARD LVCMOS33} [get_ports AD15P]
set_property -dict {PACKAGE_PIN L14 IOSTANDARD LVCMOS33} [get_ports AD7N]
set_property -dict {PACKAGE_PIN J16 IOSTANDARD LVCMOS33} [get_ports AD15N]

##Pmod Header JB (Zybo Z7-20 only)
set_property -dict {PACKAGE_PIN V8 IOSTANDARD LVCMOS33} [get_ports _CS]
set_property -dict {PACKAGE_PIN W8 IOSTANDARD LVCMOS33} [get_ports DIN]
set_property -dict {PACKAGE_PIN U7 IOSTANDARD LVCMOS33} [get_ports _LDAC]
set_property -dict {PACKAGE_PIN V7 IOSTANDARD LVCMOS33} [get_ports SCLK]

将该模块设置为顶层:
选中该模块,右键单击找到set as top ,点击即可(设置完成会出现一个小三角,表示此模块为顶层,综合,布线等操作只对此模块进行)
在这里插入图片描述
综合操作,下图红圈地方可以更改,我的电脑为八核,这可以提高软件运行速度,要查看电脑为几核请百度:
在这里插入图片描述
布线操作:
在这里插入图片描述
生成比特流:
在这里插入图片描述
完成后连接开发板,下载即可:
在这里插入图片描述
然后输入信号,可以在示波器上看到相应波形。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值