|
最近在研究移频键控(FSK)。原理是:用低频的“1”发送高频,用低频的“0”发送低频(本质就是发送疏密波)。
我用CPLD产生了准确的高、低频率,问题出在:
1、高、低频率切换时出现一个幅度不一样的方波。
2、载频信号中有梯形波出现,正常应该都是完整的方波。
希望各位坛友,能帮忙看看程序,指出问题。代码如下:
module fsk(out,led,clk,key,beep,beep1);// 模块名及端口参数
input clk; //输入端口定义,50M 时钟
input[0:0] key; //调制用的低频信号
output out; //载频输出端
output[6:1] led; // 输出端口定义,6位二进制数,初始状态全部为“1”
output beep; //低频频率输出
output beep1; //高频频率输出
reg beep_r; //寄存器
reg beep_r1; //寄存器
reg out;
reg[6:1] led; //变量led_out 定义为寄存器型
reg[24:0] counter; //变量led_out 定义为寄存器型
reg[24:0] psk; //变量led_out 定义为寄存器型
reg[24:0] psk1; //变量led_out 定义为寄存器型
assign beep = beep_r; //脉冲输出
assign beep1 = beep_r1; //脉冲输出
always@(posedge clk) //有时钟上升沿时,
begin //
counter<=counter+1; //工作指示灯
if(counter==25'd25000000)//如果到了0.5s则begin程序,d'25表示25位十进制数字
begin
led[1]<=1; // 熄灭LED灯,Verilog 中操作位是用"[]",c中是用"^".
counter<=0; //计数器清0
if(led[1]==1) //
led[1]<=0; //点亮LED
end
end
always@(posedge clk) //当有时钟上升沿时
begin //
psk1<=psk1+1;
psk<=psk+1;
if(psk==25'd14784)//如果到十进制数字--d14784
begin //输出低频率信号
beep_r<=1; //
psk<=0; //计数器清0
if(beep_r==1) //
beep_r<=0; //
end
if(psk1==25'd14620)//如果到十进制数字---d14620
begin //输出高频率信号
beep_r1<=0; //
psk1<=0; //计数器清0
if(beep_r1==0) //
beep_r1<=1; //
end
end
always@(key) //按键切换,高低频信号输出
begin
if(key)out = beep_r1; //输出高频率信号
else out = beep_r; //输出低频率信号
end
endmodule
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|