烟允@ 2021-11-23 14:17 采纳率: 100%
浏览 58
已结题

am调制有符号的会了,如何在此基础上用无符号乘法器来设计实现am调制呢

rom表数据产生信号范围0-255,再使用无符号乘法器(自己设计的,不知道有没有错)将两信号相乘得不到正确的调制波形,只出来一半,该怎么做修改呢

img

img

img


module dds(
input wire sclk,
input wire rst,
output wire [15:0] wave
);
parameter M0 = 32'd17179869;//200kHz
parameter M1 = 32'd257698038;//20MHz
reg [31:0] sum0,sum1;
wire [7:0] addr0,addr1;
wire [7:0] wave_200k;
wire [7:0] wave_20M;
always@(posedge sclk or negedge rst)
if(rst == 1'b0)
sum0 <= 'd0;
else
sum0 <= sum0 + M0;
always@(posedge sclk or negedge rst)
if(rst == 1'b0)
sum1 <= 'd0;
else
sum1 <= sum1 + M1;
assign addr0 = sum0[31:24];
assign addr1 = sum1[31:24];
rom_256x8_200k rom_256x8_200k_inst (
.address ( addr0 ),
.clock ( sclk ),
.q ( wave_200k )
);
rom_256x8_20M rom_256x8_20M_inst (
.address ( addr1 ),
.clock ( sclk ),
.q ( wave_20M )
);
mult mult_inst (
.data_a ( wave_200k ),
.data_b ( wave_20M ),
.result ( wave )
);
endmodule

  • 写回答

3条回答 默认 最新

  • 老皮芽子 2021-11-23 16:13
    关注
    
    
    //wave 有符号数,仿真按有符号数来
    module dds(
        input wire            sclk,
        input wire            rst,
        output wire [15:0]    wave
    );
    
        parameter M0 = 32'd17179869;//200kHz
        parameter M1 = 32'd257698038;//20MHz
    
        reg [31:0] sum0,sum1;
        wire [7:0] addr0,addr1;
        wire [7:0] wave_200k;
        wire [7:0] wave_20M;
        wire [15:0] wave_x1;
        wire signed [16:0] wave_x2;
    
        always@(posedge sclk or negedge rst)
        if(rst == 1'b0)
            sum0 <= 'd0;
        else
            sum0 <= sum0 + M0;
    
        always@(posedge sclk or negedge rst)
        if(rst == 1'b0)
            sum1 <= 'd0;
        else
            sum1 <= sum1 + M1;
    
        assign    addr0    = sum0[31:24];
        assign    addr1    = sum1[31:24];
        assign    wave_x2 = wave_x1 + 16384 - (wave_200k << 7) - (wave_20M << 7);
        assign    wave    = wave_x2;
    
    rom_256x8_200k rom_256x8_200k_inst (
        .address ( addr0 ),
        .clock ( sclk ),
        .q ( wave_200k )
    );
    rom_256x8_20M rom_256x8_20M_inst (
        .address ( addr1 ),
        .clock ( sclk ),
        .q ( wave_20M )
    );
    mult mult_inst (
        .data_a ( wave_200k ),
        .data_b ( wave_20M ),
        .result ( wave_x1 )
    );
    endmodule
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 请采纳用户回复 6月10日
  • 系统已结题 12月2日
  • 已采纳回答 11月24日
  • 修改了问题 11月23日
  • 展开全部

悬赏问题

  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写