gechangkuan 发表于 2011-4-1 15:00:14

急求答案 fpga设计ASK调制解调器

先把代码弄上

module ASK_two(clk, reset, x, y);
input clk;
input reset;
input x;
output y;

reg y;

reg cnt; //计数器
reg 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,希望大家积极给予意见啊。

至芯兴洪 发表于 2011-4-2 09:00:48

建议:写个测试模块在Modelsim环境下仿真看看,Cnt==6,还是cnt==7,是沿触发条件,再进行修改

至芯兴洪 发表于 2011-4-2 09:02:32

另外:你的倒数第二个ELSE块是不是还差个begin--end

gechangkuan 发表于 2011-4-2 10:33:40

这个是教材上程序,应该没有错,已经被人调试过了
页: [1]
查看完整版本: 急求答案 fpga设计ASK调制解调器