集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1978|回复: 3

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

[复制链接]
gechangkuan 发表于 2011-4-1 15:00:14 | 显示全部楼层 |阅读模式
先把代码弄上

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,希望大家积极给予意见啊。
至芯兴洪 发表于 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 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-22 18:53 , Processed in 0.067387 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表