我是一入门新手,在网上下了一个16AQM的调制程序,但是在寄存器赋值那快看不懂,求大牛解答,先在这里谢谢了!!程序如下:
module DATA_16QAM_mapper(DM_DIN,DM_ND,DM_RST,DM_CLK,DM_RE,DM_IM,DM_INDEX,
DM_RDY);
input DM_DIN; //输入信号
input DM_CLK; //脉冲
input DM_ND; //来自上一模块的信号提示
input DM_RST; //复位信号
output[7:0] DM_RE; //输出16QAM调制的实部,八位,一位符号位,一位整数位,六位小数位
output[7:0] DM_IM; //输出16QAM调制的虚部
output[5:0] DM_INDEX;//输出标号
output DM_RDY; //输出信号提示
reg[7:0] DM_RE;
reg[7:0] DM_IM;
reg DM_RDY;
reg[7:0] RE_TEMP; //输出实部暂存
reg[7:0] IM_TEMP; //输出虚部暂存
reg[3:0] STOR; //由于四个输入信号对应一个星座点,因此需要四位的存储器存放
reg MAPEN;
reg[5:0] DM_COUNT;
reg[5:0] DM_INDEX;
reg OUTEN; //使Q_RDY比输入四个信号中最后一个晚一个脉冲的过渡,保证转换完成
reg[1:0] counter; //四个输入信号的计数
reg[1:0] OUT_COUNT;
always @(negedge DM_RST or posedge DM_CLK) //Q_RST高电平异步清零
if(!DM_RST)
begin
MAPEN<=1'b0;
DM_RE[7:0]<=8'b00000000;
DM_IM[7:0]<=8'b00000000;
DM_COUNT[5:0]<=6'b000000;
DM_INDEX[5:0]<=6'b000000;
DM_RDY<=0;
RE_TEMP[7:0]<=8'b00000000;
IM_TEMP[7:0]<=8'b00000000;
STOR[3:0]<=4'b0000;
OUTEN<=0;
counter[1:0]<=2'b00;
OUT_COUNT<=2'b00;
end
else
begin
if(DM_ND) //16QAM encoding
begin
counter<=counter+1;
case(counter)
2'b00:STOR[0]<=DM_DIN;
2'b01:STOR[1]<=DM_DIN; //存入输入数值
2'b10:STOR[2]<=DM_DIN;
2'b11:STOR[3]<=DM_DIN;
endcase
end
else
begin
counter[1:0]<=2'b00;
STOR[3:0]<=4'b0000;
end
if (counter==2'b11) // MAPEN 标记四个信号是否已经存入
MAPEN<=1'b1;
else
MAPEN<=1'b0;
if(MAPEN)
begin //就是这一块,看了另外一个程序也是这样,只是所赋的值不一样,不懂什么意思啊
case(STOR[1:0])
2'b00:RE_TEMP[7:0]<=8'b11000011;
2'b10:RE_TEMP[7:0]<=8'b11101100;
2'b01:RE_TEMP[7:0]<=8'b00111101;
2'b11:RE_TEMP[7:0]<=8'b00010100;
endcase
case(STOR[3:2])
2'b00:IM_TEMP[7:0]<=8'b11000011;
2'b10:IM_TEMP[7:0]<=8'b11101100;
2'b01:IM_TEMP[7:0]<=8'b00111101;
2'b11:IM_TEMP[7:0]<=8'b00010100;
endcase
OUTEN<=1;
end
else
begin
OUTEN<=0;
RE_TEMP[7:0]<=8'b00000000;
IM_TEMP[7:0]<=8'b00000000;
end
if(OUTEN) // 输出
begin
DM_RE<=RE_TEMP;
DM_IM<=IM_TEMP;
DM_COUNT<=DM_COUNT+1;
DM_INDEX<=DM_COUNT;
DM_RDY<=1'b1;
end
if (DM_INDEX==47)
OUT_COUNT<=OUT_COUNT+1;
else
OUT_COUNT<=0;
if (OUT_COUNT==2'b11)
begin
DM_RE[7:0]<=8'b00000000;
DM_IM[7:0]<=8'b00000000;
DM_INDEX[5:0]<=6'b000000;
DM_COUNT[5:0]<=6'b000000;
DM_RDY<=0;
end
end
endmodule
2015-12-29 09:29:22
你需要查看星座映射图;
这里将输入的比特串,每4bits映射到星座图上的某个点上,而这个点,使用1个复数来表示值,实部和虚部分别用一个有符号数表示其坐标值,也就是映射的同相分量和正交分量的电平值。
随后可以送上变频芯片。
你需要查看星座映射图;
这里将输入的比特串,每4bits映射到星座图上的某个点上,而这个点,使用1个复数来表示值,实部和虚部分别用一个有符号数表示其坐标值,也就是映射的同相分量和正交分量的电平值。
随后可以送上变频芯片。
举报