|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
先把代码弄上
module ASK_two(clk, reset, x, y);
input clk;
input reset;
input x;
output y;
reg y;
reg [2:0] cnt; //计数器
reg [2:0] m; // 记录x的脉冲数数
always @(posedge clk) begin //完成cnt的循环计数
if(!reset) begin
cnt <= 3'b000;
end
else if(cnt == 3'b111)
cnt <= 3'b000;
else
cnt <= cnt +1 ;
end
always @(posedge x) begin // 此过程完成2_ASK信号的解调
if(!reset) begin
m <= 3'b000;
end
else begin
if(cnt == 3'b110) begin
if (m <= 3'b010) // 只要m计数器超过3,就判决为1
y <= 1'b0;
else
y <= 1'b1;
m <= 3'b000; // 清空m计数器
end
else
m <= m+1;
end
end
endmodule
这是某本书上的程序
有两个疑问:
1、为什么选择m的阈值为3而不是其他值
2、也是最难理解的问题 if(cnt == 3'b110) begin 这步开始,触发条件是posedge x即x的上升沿,现在的问题是,要是恰好x上升沿的时候不是在cnt=6处,而是在cnt=7处呢?(即在cnt=6时x是个下降沿)那么就无法判断了啊,不是就出现错误了吗?
小弟是刚开始接触verilog,希望大家积极给予意见啊。 |
|