主题中讨论的其他部件: AMC1304L25
为了获得来自ADC的数据,我们需要实施Sinc3过滤器。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //公司: //工程师: //// 创建日期:15:37:12 2016年26月10日 //设计名称: //模块名称:sinc3_Verilog //项目名称: //目标设备: //工具版本: //描述: //// 依赖项: //// 修订版: //修订0.01 版://创建的文件 //附加注释://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 模块dec256sinc24b ( 输入mclk1,/*用于clk filter */ 输入重置,/*用于重置filter */ 输入mdata1,/*要过滤的输入数据 */ 输出reg [15:0]数据,/*过滤输出 */ 输出reg data_en, 输入[15:0] dec_rate ); /*在正凝边缘上读取数据*/ reg [36:0] ip_data1; reg [36:0] acc1; reg [36:0] acc2; reg [36:0] acc3; reg [36:0] acc3_d2; REG [36:0] diff1; reg [36:0] diff2; reg [36:0] diff3; reg [36:0] diff1_d; reg [36:0] diff2_d; reg [15:0] word_count; reg word_clk; reg enable; /*执行sinc操作*/ always @(mdata1) if (mdata1=0) ip_data1=0 <=37 'd d0;/*将0更改为-1用于twos补码*/ else ip_data1 <=37 'd1;/*累 加器(R)以积分器的速度累加。 Z =一个样本延迟MCLKOUT =调制器 转换位速率*/ 始终@(negedge mclk1,POSedge reset) 如果(重置) 开始/* 重置时初始化ACC寄存器 */ ACC1 <= 37 'd 0; ACC2 <= 37 'd 0; ACC3 <= 37 'd 0; 否则 开始 /*执行累积过程*/ + ACC1 <= ACC1 ACC2 <= ACC2 + ACC1; ACC3 <= ACC3 + ACC2; 结束 /*抽取阶段(MCLKOUT/WORD_CLK)*/ 始终@(POSedge mclk1,POSegge reset) Begin if (reset) word_count <= 16; 否则 ,如果( word_count == dec_rate -1) word + word 0; End Always @( POSedge mclk1, POSedge reset ) BEGIN IF ( RESET ) WORD_clk <=1'b0; ELSE BEGIN IF ( WORD_COUNT == dec_RATE/2-1 ) WORD_clk <= 1'b1; ELSE IF ( WORD_dec_RATE -1) WORD_clk <= 1'b0; End /*区分因素(包括小数 阶段) 以 较低的速度执行区分阶段(FIR)。 Z =一个样本延迟WORD_CLK =输出字 速率*/ 始终@(POSedge word_clk,POSedge reset) BEGIN IF (RESET) BEGIN ACC3_D2 <= 37 'd 0; diff1_d <= 37 diffd 37;diff2_d <= 37 'd 0;1 <= 37 'd 0;diff2 <='d 0; diff3 <= 37 'd 0; end else begin diff1 <= ACC3 - ACC3_D2; diff2 <= diff1 - diff1_d; diff3 <= diff2 - diff2_d; acc3_d2 <= acc3; diff1_d <= diff1; diff2_d <= diff2; END END /*将sinc输出时钟转换为输出 寄存器 WORD_CLK =输出字速率*/ 始终@( POSedge word_clk ) 开始 大小写( dec_rate )16'd32:begin data <=(diff3[15:0]== 16'h8000)? 16'hFFFF :{diff3[14:0], 1'b0}; end 16'd 64: begin data <=(diff3[18:2]== 17'h1万)? 16'hFFFF : diff3[17:2]; end 128'd 16:begin data <=(df53[21:5]== 17'h1万)? 16'hFFFF : diff3[20:5]; end 16'd 256:begin data <=(ddiff3[24:8]== 17'h1万). 16'hFFFF : diff3[23:8]; end 16'd:begin data <=(diff3[27:11]== 17'h1万)? 16'hFFFF : diff3[26:11]; end 16'd:begin data <=(diff3[30:14]== 17'h1万)? 16'hFFFF:diff3[29:14]; end 16'd:begin data <=(df53[33:17]== 17'h1万)? 16'hFFFF : diff3[32:17]; end 16'd:begin data <=(df53[36:20]== 17'h1万)? 16'hFFFF : diff3[35:20]; END DEFAULT:BEGIN DATA <=(diff3[24:8]== 17'h1万)? 16'hFFFF : diff3[23:8]; 终端 机箱 结束 /*同步数据输出*/ 始终@( POSedge mclk1, POSedge reset ) BEGIN IF ( reset ) BEGIN DATA_EN <=1'b0; 启用<= 1'b1; END ELSE BEGIN IF ((word_count = dec_RATE/2-1)&&B1'en; <= b0; END ELSE IF ((word_count == dec_rate -1)&&~enable ) BEGIN DATA_en <= 1'b0; enable <= 1'b1; end else data_en <= 1'b0; end end end endmodule
在实施过滤器后,我们应该会看到一个带有一些噪音的信号。 我们只会听到任何输入信号的噪音。 FPGA中是否有要实施的示例代码?