设为首页 加入收藏

TOP

目标反射回波检测算法及其FPGA实现 之三:平方、积分电路及算法的顶层实现(二)
2019-08-24 00:06:55 】 浏览:198
Tags:目标 反射 检测 算法 及其 FPGA 实现 之三 平方 积分 电路 顶层
2[11:0];
//通道a输出的数据 44 //assign data_chb[11:0] = conv_res[26:15];//通道b输出的数据 45 //系数本身是16bit带符号的,由于FIR滤波器的系数之和为1,则16bits带符号的所有系数之和是32768, 46 //因此需要将滤波结果右移15bit,所以取结果的26:15。但由于DA参考电压为2.048V,小于AD的3.3V因此滤波结果还是略小。 47 //assign data_chb[11:0] = data_out[14:3];//通道b输出累加结果开方 48 assign data_chb[11:0] = acc_out[28:17];//通道b输出64个点能量累加结果 49 //assign data_chb[11:0] = pow_sig[20:9];//通道b输出交流信号的平方 50 //assign data_chb[11:0] = acc_sum[26:15];//通道b输出滤波/卷积结果 51 //assign data_chb[11:0] = conv_res1[26:15];//通道b输出的数据 52 53 /////以下系数配置中用到的连线///// 54 wire rdy_work;//配置完成信号,高电平表示配置完成 55 wire[7:0] wr_blk_addr;//向后级系数blk配置的地址 56 wire[15:0] data_bank;//向各级系数blk配置的数据 57 wire csh0,csh1,csh2,csh3;//每一节配置的系数blk的选通线 58 PLL20_100 i_pll20_100(//例化PLL产生时钟 59 .inclk0(iclk20), 60 .c0(clk)//pll输出的100M工作时钟 61 ); 62 63 always @ (posedge clk or negedge rdy_work) 64 begin 65 if(!rdy_work) 66 begin 67 start <= 1'd0; 68 cnt[15:0] <= 16'd0; 69 tst_data[11:0] <= 12'd0; //用作测试的计数器 70 end 71 else begin 72 //////////维护周期计数器/////////// 73 if(cnt < CNT_NUM-1) begin 74 cnt[15:0] <= cnt[15:0] + 16'd1; 75 tst_data[11:0] <= tst_data[11:0]; 76 end 77 else begin 78 cnt[15:0] <= 16'd0; 79 tst_data[11:0] <= tst_data[11:0] + 12'd1; //用作测试的计数器 80 end 81 82 ////////产生启动信号///// 83 if((cnt > 102)&(cnt <= 105))//在第105个clk产生启动信号 84 start <= 1'D1;//启动MCP4822输出状态机 85 else 86 start <= 1'D0; 87 end 88 end 89 90 init_coe_blk i_init_coe_blk(//例化系数配置模块,起到从系数池中读取系数并向系数blk中配置数据的作用,只在复位后的开始阶段有效,通过ready信号控制后续模块 91 .clk(clk), 92 .rst_n(rst_n),//整体复位信号 93 .ready(rdy_work),//配置完成信号,高电平表示配置完成 94 .wr_blk_addr(wr_blk_addr),//向后级系数blk配置的地址 95 .data_bank(data_bank),//向各级系数blk配置的数据 96 .csh0(csh0),//第一节配置的系数blk的选通线 97 .csh1(csh1),//第二节配置的系数blk的选通线 98 .csh2(csh2),//第三节配置的系数blk的选通线 99 .csh3(csh3)//第四节配置的系数blk的选通线 100 ); 101 102 CONV_SER16 i_conv_ser16_I(//例化第一个16阶卷积/fir电路 103 .clk(clk), 104 .a({4'd0,ad_data}),//AD转换结果作为数据输入 105 //.a({4'd0,tst_data[11:0]}),//AD转换结果作为数据输入 106 .en(rdy_work),//系数配置完成后才能使能 107 .coe_data_in16(data_bank),//初始化系数的数据输入端 108 .wr_coe_addr(~wr_blk_addr[3:0]),//初始化系数的地址输入端 109 ////!!!特别注意这里,乘加时数据从大地址进入乘加操作,因此地址要求补码,将系数翻转过来。相当于:fliplr();!!!!!// 110 .wr_coe_clk(clk),//初始化系数写入时钟 111 .wr_coe_en(csh0),//系数配置的使能端,由初始化模块地址译码产生,方便不同系数blk的选通 112 .start(start),//输入的启动卷积和fir的控制端 113 //.shft_out_dp_data(), 114 .shft_out_dp_data(shft_data1[15:0]), 115 //.s_latch(conv_res) 116 .s_latch(conv_res1[39:0]) 117 ); 118 CONV_SER16 i_conv_ser16_II(//例化第二个16阶卷积/fir电路 119 .clk(clk), 120 .a(shft_data1[15:0]),//由级联的第一节移出的数据 121 .en(rdy_work),//系数配置完成后才能使能 122 .coe_data_in16(data_bank),//初始化系数的数据输入端 123 .wr_coe_addr(~wr_blk_addr[3:0]),//初始化系数的地址输入端 124 ////!!!特别注意这里,乘加时数据从大地址进入乘加操作,因此地址要求补码,将系数翻转过来。相当于:fliplr();!!!!!// 125 .wr_coe_clk(clk),//初始化系数写入时钟 126 .wr_coe_en(csh1),//系数配置的使能端,由初始化模块地址译码产生,方便不同系数blk的选通 127 .start(start),//输入的启动卷积和fir的控制端 128 .shft_out_dp_data(shft_data2[15:0]), 129 .s_latch(conv_res2[39:0]) 130 ); 131 CONV_SER16 i_conv_ser16_III(//例化第3个16阶卷积/fir电路 132 .clk(clk), 133 .a(shft_data2[15:0]),//由级联的第一节移出的数据 134 .en(rdy_work),//系数配置完成后才能使能 135 .c
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇接口与协议学习笔记-USB协议_USB2.. 下一篇基于Verilog HDL的二进制转BCD码..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目