1先上程序(verilog语言编写)`timescale1ns/1ns//测试程序moduletest;regclk1,rst1,clk2,rst2;regdin1;wiredout1,ddout1;modulatormy1(.clk(clk1),.rst(rst1),.din(din1),.dout(dout1));demodulatormy2(.clk(clk2),.rst(rst2),.ddin(dout1),.ddout(ddout1));initialbeginclk1=0;forever#25clk1=~clk1;endinitialbeginclk2=0;forever#10clk2=~clk2;endinitialbeginrst1=1;#15rst1=0;#50rst1=1;endinitialbeginrst2=1;#5rst2=0;#25rst2=1;endinitialbegin#25din1=1;#400din1=1;#400din1=0;#400din1=1;#400din1=0;#400din1=1;2#400din1=0;#400din1=1;#400din1=1;#400din1=0;#400din1=1;#400din1=1;#400din1=1;#400din1=0;#400din1=1;#400din1=0;#400din1=0;#400din1=1;#400din1=0;#400din1=0;#400din1=0;#400din1=1;#400din1=1;#400din1=0;#400din1=0;#400din1=1;#400din1=0;#400din1=0;#400din1=0;#400din1=0;#400din1=1;#1000$stop;endendmodulemoduledemodulator(clk,rst,ddin,ddout);//解调inputclk,rst;inputddin;outputddout;regddout;reg[3:0]cnt3;regtemp;reg[3:0]cnt4;regclk1;always@(posedgeclkornegedgerst)beginif(!rst)cnt3=4'b0000;3elseif(!ddin)cnt3=cnt3+1;elsecnt3=4'b0000;endalways@(posedgeclkornegedgerst)beginif(!rst)temp=0;elseif(cnt36)temp=1;elsetemp=0;endalways@(posedgeclkornegedgerst)beginif(!rst)begincnt4=0;clk1=0;endelseif(cnt4==4'b1001)beginclk1=~clk1;cnt4=0;endelsecnt4=cnt4+1;endalways@(posedgeclk1ornegedgerst)beginif(!rst)ddout=0;elseddout=temp;endendmodule4modulemodulator(clk,rst,din,dout);//调制inputclk,rst;inputdin;outputdout;reg[1:0]cnt1;regcnt2;regf1;regf2;always@(posedgeclkornegedgerst)beginif(!rst)begincnt1=2'b00;f1=0;endelseif(cnt1==2'b11)begincnt1=2'b00;f1=~f1;endelsecnt1=cnt1+1;endalways@(posedgeclkornegedgerst)beginif(!rst)begincnt2=0;f2=0;endelseif(cnt2==1)begincnt2=2'b00;f2=~f2;endelsecnt2=cnt2+1;5endassigndout=(din==1)?f1:f2;endmodule硬件设计方案(1)调制模块设计频移键控即FSK(Frequency-ShiftKeying)数字信号对载波频率调制,主要通过数字基带信号控制载波信号的频率来来传递数字信息。在二进制情况下,“1”对应于载波频率,“0”对应载波频率,但是它们的振幅和初始相位不变化。FSK信号产生的两种方法:直接调频法和频率键控法。FPGA载波f1clkstart基带信号分频器1分频器2载波f2二选一选通开关调制信号FSK的调制方框图(2)解调模块设计数字频率键控(FSK)信号常用的解调方法有很多种如:同步(相干)解调法、FSK滤波非相干解调法。clkstart基带信号寄存器XX分频器q判决调制信号FPGA计数器m软件设计方案由于在Verilog语言中各个模块电路同时工作采用并行执行的,时序逻辑由时6钟驱动,因此在程序中一定要注意时序的设计及时钟的设计,在各个不同的时钟驱动下电路响应的方式。在设计之初应该特别注意Verilog语言的类型。FSK调制部分:系统是利用2个独立的分频器来改变输出载波频率,以数字键控法来实现FSK捌制。数字键控法也称为频率选择法,他有2个独立的振荡器,数字基带信号控制转换开关,选择不同频率的高频振荡信号实现FSK调制。键控法产生的FSK信号频率稳定度可以做到很高并且没有过渡频率,他的转换速度快,波形好,频率键控法在转换开天发生转换的瞬刚,2个高频振荡的输出电压通常不相等,于是已调信号在基带信息变换时电压会发生跳变,这种现象称为相位不连续,这是频率键控特有的情况。FSK解调部分:通过对clk上升沿和cin上升沿的计数,cnt为clk计数器,而count为cin的计数器,当cnt==11时,查看count的值,如果大于等于3,那么此时也就检测到四分频,所以此时cout输出低电平0,否则输出高电平1.也就是这样就完成了频率-幅度变换,把码元“1”与“0”在幅度上区分开来,恢复出数字基带信号。直接用Modelsim仿真即可7调制+解调8调制9解调