FPGA实现ICA算法第四弹:顶层模块的设计

1.1 为什么要设计顶层模块?

FPGA开发可以采用由底层到顶层的设计方式,先设计一个个底层模块,最后使用顶层模块将各个底层模块连接起来,并搭建系统对外接口,这样设计比较简单,开发速度也比较块。

1.2 顶层模块设计

新建一个设计文件,命名为Top:
FPGA实现ICA算法第四弹:顶层模块的设计_第1张图片
加入下列代码:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2021/04/26 16:13:16
// Design Name: 
// Module Name: Top
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module Top(
    input clk,
    input AD15N,
    input AD15P,
    input AD7N,
    input AD7P,
    input rst_n,
    input [2:0] sw,
    output DIN,
    output _LDAC,
    output SCLK,
    output _CS
);
//reg[15:0] DataAD7;
//reg[15:0] DataAD15;
wire[15:0] _DataAD7;
wire[15:0] _DataAD15;

wire  Data_rdy;
design_1_wrapper   d1
         (.AD15N(AD15N),
          .AD15P(AD15P),
          .AD7N(AD7N),
          .AD7P(AD7P),
          .clk(clk),      
          .DataAD7(_DataAD7),
          .DataAD15(_DataAD15),
          .Data_rdy(Data_rdy)); 

wire da_invalid;    
wire [31:0] ICA_outdata1;
wire [31:0] ICA_outdata2; 
reg [15:0] da_indata;
wire [31:0] x1_out;
wire [31:0] x2_out;     
ICA_analyzer ica0(
        .clk(clk),
        .rst_n(rst_n),
        .data_invalid(Data_rdy),
        .s1_in({20'h0,_DataAD7[15:4]}),
        .s2_in({20'h0,_DataAD15[15:4]}),
        .x1_out(x1_out),
        .x2_out(x2_out),
        .data_outvalid(da_invalid),
        .y1_out(ICA_outdata1),
        .y2_out(ICA_outdata2)
        );
        
 //assign da_indata = ICA_outdata1[15:0];       
 PmodDA P1(
           .clk(clk),
           ._CS(_CS),
           .DIN(DIN),
           ._LDAC(_LDAC),
           .SCLK(SCLK), 
           .DATA(da_indata),
           .DA_drdy(da_invalid));
           
 
 parameter [2:0] x1_mix=3'b000;
 parameter [2:0] x2_mix=3'b001;
 parameter [2:0] y1 = 3'b010;
 parameter [2:0] y2 = 3'b100;
 
 always@(posedge clk)
 begin
        case(sw)
         x1_mix:da_indata <= x1_out[15:0];
         x2_mix:da_indata <= x2_out[15:0];
         y1:da_indata <= ICA_outdata1[19:4];//y1:da_indata <= ICA_outdata1[15:0];
         y2:da_indata <= ICA_outdata2[31:16];
         default:da_indata <= 'b0;
         endcase
end

此程序将各个模块连接起来,并搭建了开发板对外接口,开发板上开关控制相应输出,从左到右前三个为控制波形输出,第四个开关为reset键,清空所有输出和寄存器值。
注意:当AD7输入为正弦波或三角波,AD15输入为方波时且频率在500-700Hz时效果较好,如果需要输入其他波形,则需要更改上述代码最后一段中的ICA_outdata1和ICA_outdata2的输出位数,这需要根据仿真出的结果更改。

你可能感兴趣的:(fpga/cpld,算法)