资源描述:
《混频器设计分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、混频器设计分析1、实验环境a)FPGA与ISE联合使用b)FPGA使用的VHDL语言2、实验原理与步骤a)在FPGA中实现一个简单的混频器电路,模拟仿真两个625kHz信号相乘输出,其屮625kHZ的木振信号由FPGA内部的直接数字频率合成器产生,625kHZ输入正弦波信号通过读取RAM的FPGA屯路产生。b)两路信号经过混频后,滤除直流分量。3、买验结果a)顶层RTL图MyMixerelkV、dput(19:0)rstS_in(9:Q)SOc(9:0)LDmixLDocMyMixerb)Wave图4、
2、实验分析a)RTL图说明从实验结果RTL图中可以看岀,顶层图主要是时钟elk输入和混频dout输出。那么下面将开始分析代码,看看是如果将输入的吋钟驱动FPGA产生dout输出。b)FPGA程序分析说明:将以注释的方式进行程序分析-首先需要连接库,包含几个常用的包libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useieee.std_logic_arith.all;useieee.std_logic_signed.all;entityMyMixerisport(rst,clk
3、:instd」ogic;・・clk5MHzdoutioutstd_logic_vector(19downto0);■■混频输出端口S_in,S_Oc:outstd_logic_vector(9downto0);"混频信号出入端口LDoc,LDmix:outstd_logic);endMyMixer;architectureBehavioralofMyMixeris-实例化名为“sin”的ROM,产生正弦波输出componentsinport(clka:instd_logic;addra:instd_lo
4、gic_vector(9downto0);douta:outstd」ogic_vector(9downto0));endcomponent;-实例化-个DDS,产生木振信号componentocport(clk:instd_logic;sine:outstd_logic_vector(9downto0));endcomponent;signalInSin,OcSin,Addr:std_logic_vector(9downto0);signalmult,mean5mt:std_logic_vector(1
5、9downto0);signalmadd:std_logic_vector(22downto0);signalml,m2,m3,m4,m5,m6,m7:std」ogic_vector(19downto0);signalDoc,Dmix:std_logic;begin-实例化sin输入信号组件及本振信号DDS核的oc组件ul:sinportmap(clk,Addr,InSin);—625kHzu2:ocportmap(clk,OcSin);—625KHzS_in<=InSin;S_Oc<=OcSin;pr
6、ocess(rst,clk)beginifrst=*1'thenmult<=(others=>'0');Addr<=(others=>'0');elsifrising_edge(clk)thenmultv=InSin*OcSin;■■实现混频输出Addr<=Addr+l;-产生正弦信号RAM的地址信号endif;endprocess;-求均值process(rst,clk)—elk为5MHzbeginifrst=*1'thenm1<=(others=>,0,);m2<=(others=>'0,);m3<
7、=(others=>,0');m4<=(others=>,0,);m5<=(others=>*0');m6<=(others=>'0,);m7<=(others=>'0,);elsifrising_edge(clk)thenml<=mult;m2<=m1;m3<=m2;m4<=m3;m5<=m4;m6<=m5;m7<=m6;endif;endprocess;-这里采样8次数据,也就是这8次的数据符号位都是相同的,所以-mult(19)就能表示符号位了-这里我们分析一下,为什么可以使用mult(19)来填
8、充后三位。-首先我们要知道,在计算机中,数的加减运算是以补码的形式进行的。-而正数的反码和补码都是木身,负数的补码是反码加1,也就是说,补码-的出现时为了解决负数的运算的。-现在假设我们采样的是止数。也就是说mult(19)都为0,所以填充没影-响,这不难理解。-如果假设为负数,则符号位nwlt(19)就是1了,咋一看,好像不太对。-其实还是对的。前面我们知道,负数的补码是反码加1,所以当进行加运-算的时候,倒数第二、第三位变成了反码0,倒