重庆邮电大学本科毕业设计(论文)
ADD_B <= 0; else
ADD_B <= ADD_B + ADD_A; //ADD_B为累加的结果 end
always @ (posedge clk or posedge reset) begin
if(reset)
cose_DR <= 0; else
cose_DR <= cose_D; end
always @ (posedge clk or posedge reset) begin
if(reset)
sine_DR <= 0; else
sine_DR <= sine_D; end
//调用两个ROM,存储着正余弦波形一个周期的数值。 rom_cose cose1( .addra(ROM_A), .clka(clk),
.douta(cose_D)); rom_sine sine1( .addra(ROM_A), .clka(clk),
.douta(sine_D)); endmodule
module rom_sine( //产生sin信号模块 addra, clka, douta); input clka; input [9:0] addra; output [15:0] douta; reg signed[15:0] douta; always @(posedge clka) begin case(addra)
10'd 1 : douta= 16'd 1 ; 10'd 2 : douta= 16'd 1 ; 10'd 3 : douta= 16'd 2 ; …………………………
- 21 -
重庆邮电大学本科毕业设计(论文)
endcase end
endmodule
module rom_cose( //产生cos信号模块 addra, clka, douta); input clka; input [9:0] addra; output [15:0] douta; reg signed[15:0] douta;
always @(posedge clka) begin case(addra)
10'd 0 : douta=16'd1 ; 10'd 1 : douta=16'd1 ; 10'd 2 : douta=16'd2 ; 10'd 3 : douta=16'd3 ; 10'd 4 : douta=16'd3 ;
………………………… endcase end
endmodule
第四节 差分编码和星座映射模块
在本模块,同样根据调制方式不同,选用不同位的数据来进行处理。由于几乎都采用相干检测的方式进行解调,因此在解调端载波恢复存在着4个相位稳定点,即提取的相干载波可能与接收信号载波有4种相位关系,称作4重相位模糊度旧3。部分差分编码能消除4重相位模糊度对解调的影响。而部分差分编码相对于全差分编码由于减少了差分编码的bit数。因而减少了误码扩散,具有较好的误码性能。由于同样的符号误码率下,采用格雷编码比自然码的比特误码率小,所以多幅度电平的电平逻辑采用格雷编码映射。星座影射模块输入4bit并行数据,输出为I/Q路对应的四幅值之一。4 bit并行信号需要将其影射到信号平面,星座影射实现采用查表法分别输出I/Q对应的幅值.对应的量化表如表3.1:
- 22 -
重庆邮电大学本科毕业设计(论文)
表3.1星座映射
I/Q路输入数据 00 01 11 10 对应的量化值 -2 -1 1 2 模块源代码
//差分模块和星座映射模块
module diff(clk,
data_in, // 输入信号
data_out_i, //I路对应的量化值 data_out_q, //Q路对应的量化值 rst,
data); //输出信号 input clk,rst;
input [3:0] data_in;
output signed [3:0] data_out_i,data_out_q; reg [3:0] data_out_i,data_out_q; output reg [3:0] data; wire a,b,c,d;
reg dataa,datab; reg prea,preb; reg [1:0]regi,regq; assign a=data_in[3]; assign b=data_in[2]; assign c=data_in[1]; assign d=data_in[0];
//assign data={regi,regq};
always @ (posedge clk or posedge rst) begin if (rst) begin
prea<=0; end else
begin
dataa <= (a==0)? prea : ~prea; prea <= dataa; end end
- 23 -
重庆邮电大学本科毕业设计(论文)
always @ (posedge clk or posedge rst) begin if (rst) begin
preb<=0; end else
begin
datab <= (b==0)? preb : ~preb; preb <= datab; end end
always @ (posedge clk or posedge rst) begin if (rst) begin
regi<=0; regq<=0; end else
begin
regi<={dataa,c}; regq<={datab,d}; end end
always @ (posedge clk ) begin
case(regi)
'b00 : data_out_i<=-'d2; 'b01 : data_out_i<=-'d1; 'b11 : data_out_i<='d1; 'b10 : data_out_i<='d2; endcase end
always @(posedge clk) begin
case(regq)
'b00 : data_out_q<=-'d2; 'b01 : data_out_q<=-'d1; 'b11 : data_out_q<='d1; 'b10 : data_out_q<='d2; endcase end
- 24 -
重庆邮电大学本科毕业设计(论文)
always @(posedge clk or posedge rst) begin
if(rst) begin
data<=0; end else
begin
data<={regi,regq}; end end
endmodule
第五节 时钟分频模块
时钟分频模块clk利用N分频器对10MHz系统时钟信号进行N分频,以产生调制器模块所需的工作时钟。N分频器是由模N/2计数器实现的,分频输出信号模N/2可自动取反,以产生占空比为1:1的时钟信号。由于信号源产生的基带信号为1bit串行数据,其速率为100 kbps,经并串转换后的4 bit并行数据速率为400 kbps,所以,本设计还采用了100分频器和400分频器。另外将10Mhz直接送入到DDS模块,使得输出的载波频率为1Mhz。
模块源代码
//时钟分频模块
module clk( clk_sys, //10MHz rst,
clk_dds, //10MHz clk_400, // 25Kbs clk_100); //100Kbs input clk_sys; input rst;
output clk_dds,clk_400,clk_100; reg clk_400,clk_10,clk_100; reg [7:0] count2,count3,count4; assign clk_dds=clk_sys;
always @(posedge clk_sys or posedge rst) begin if (rst) begin
count2<=0;
- 25 -
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库基于FPGA的16QAM调制解调电路设计(6)在线全文阅读。
相关推荐: