课程设计总结报告模板 - 图文(10)

2019-08-29 20:04

.txd(txd), // 发送线 .txd_busy(txd_busy) // 表示没有发送完毕,发送忙 );

//***************************************************************************** // 模块名称:Chan_Select_0

// 功能描述:处理通信协议,选择数据通道

//***************************************************************************** Chan_Select Chan_Select_0 (

.clk_48m(clk_48m), // 48M时钟输入 .reset(reset), // 高电平有效的异步复位信号 .txd_busy(txd_busy), // 发送忙标志

.fsk_over(fsk_over), // FSK通道结束信号 .adc_over(adc_over), // ADC通道结束信号 .dtmf_over(dtmf_over), // DTMF通道结束信号 .CS(CS), // 通道选择信号 .FSK_data(fsk_data), // FSK解码数据 .ADC_data(ADC_data), // AD采样数据 .DTMF_data({4'b0,dtmf_data}), // DTMF解码数据 .FSK_trig(fsk_trig), // FSK数据发送触发 .ADC_trig(ADC_trig), // AD采样数据发送触发 .DTMF_trig(dtmf_trig), // DTMF数据发送触发 .txd_trig(txd_trig), // UART发送触发

.txd_data(txd_data) // UART待发送8位并行数据 );

//***************************************************************************** // 模块名称:MT8870_0

// 功能描述:DTMF解码模块

//***************************************************************************** MT8870 MT8870_0 (

.clk_48m(clk_48m), // 48M时钟

.reset(reset), // 高电平有效的异步复位 .q(q), // MT8870解码输出 .std(std), // 解码有效标识信号 .dtmf_data(dtmf_data), // 解码模块数据输出 .dtmf_trig(dtmf_trig) // 数据发送触发 );

//***************************************************************************** // 模块名称:decoder_0 // 功能描述:FSK解码模块

//***************************************************************************** decoder_0 (

.fre_in(fsk_in), // FSK信号输入 .clk(clk_48m), // 48M时钟

.reset(reset), // 高电平有效的异步复位信号 .decode_out(decode_out), // 解码输出 .ring_out(ring_out), // 振铃信号 .decode_cr(), // 数据有效标识 .ring_up() // 振铃边沿 );

//***************************************************************************** // 模块名称:uart_rxd_0

decoder

// 功能描述:UART接收模块,用于将FSK解码模块的数据输出速率由1200改为115200

//****************************************************************************** uart_rxd uart_rxd_0 (

.reset(reset), // 高电平有效的异步复位信号 .clk(clk_48m), // 48M时钟输入 .Dataout(Dataout), // 8位数据输出 .RXD(decode_out), // 数据串行输入

.trig(trig) // 标识一个字节接收完毕 );

//***************************************************************************** // 模块名称:core_ctrl_0

// 功能描述:控制Chan_Select_0选择不同的数据通道

//***************************************************************************** core_ctrl core_ctrl_0 (

.clk_48m(clk_48m), // 48M时钟输入

.reset(reset), // 高电平有效的异步复位 .ring(ring_out), // 振铃信号 .hold(hold), // 摘机信号 .std(dtmf_trig), // 指示有拨号 .CS(CS), // 通道选择信号

.fsk_over(fsk_over), // FSK通道结束信号 .adc_over(adc_over), // ADC通道结束信号 .dtmf_over(dtmf_over), // DTMF通道结束信号 .ctrl(ctrl), // 语音采集电路选通信号 .busy_snd(busy_snd) // 忙音信号 );

//***************************************************************************** // 模块名称:vr_15_0

// 功能描述:产生1.5V的内核电压

//***************************************************************************** vr_15 vr_15_0 (

.PUB(pub), // 唤醒信号 .VRPU(1'b0), // 使能信号

.FPGAGOOD(vr_ok), // VR初始化完毕标识 .PUCORE() );

//***************************************************************************** // 模块名称:ring_send_0

// 功能描述:标识有振铃到来

//***************************************************************************** ring_send ring_send_0 (

.clk_48m(clk_48m), // 48M时钟输入

.reset(reset), // 高电平有效的异步复位信号 .ring(ring_out), // 振铃信号 .trig(trig), // 发送触发信号 .data(Dataout), // 8位并行数据

.fsk_data(fsk_data), // FSK解码数据输出 .fsk_trig(fsk_trig) // FSK数据发送触发 );

//*****************************************************************************

// 模块名称:busy_snd_0 // 功能描述:检测忙音

//***************************************************************************** busy_sound busy_snd_0 (

.clk(clk_48m), // 48M时钟输入

.reset(reset), // 高电平有效的异步复位信号 .phonesnd(phonesnd), // 忙音输入 .busy_snd(busy_snd) // 检测输出 );

Endmodule

/*============================================ File: uart_rxd.v

Function: uart的接收模块,接收采样率为波特率的16倍 =============================================*

module uart_rxd(reset,clk,Dataout,RXD,trig); input clk,RXD; // 时钟与数据输入 input reset; output trig; // 数据有效标志 output [7:0] Dataout; // 并行数据输出 reg StartF; // 开始与接收中断标志 reg [9:0] UartBuff; // 接收缓存区 reg [3:0] count,count_bit; // 位接收计数器 reg [15:0] cnt; // 时钟节拍计数器 reg [2:0] bit_collect; // 采集数据缓存区 reg edge_detect1,edge_detect2; reg RI;

wire clk_equ,bit1,bit2,bit3,bit4;// 连线

parameter cout = 2500; // 时钟是48M所以16*1200的分频数为2500,这里取整数 assign trig=edge_detect1 &&(~edge_detect2); always @(posedge clk or posedge reset) begin

if(reset==1'b1) begin

edge_detect1<=0; edge_detect2<=0; end else begin

edge_detect1<=RI;

edge_detect2<=edge_detect1; end end

/*************波特率发生进程****************************/ always@(posedge clk or posedge reset) // 时钟节拍计数器 begin

if(reset) cnt<=0; else

begin

if(clk_equ)

cnt <= 16'd0; else

cnt<=cnt+1'b1; end end

assign clk_equ = (cnt == cout);

assign bit1 = bit_collect[0]&bit_collect[1]; assign bit2 = bit_collect[1]&bit_collect[2]; assign bit3 = bit_collect[0]&bit_collect[2]; assign bit4 = bit1|bit2|bit3;

// 采样时钟

// 对采样数据进行判断 // 对采样数据进行判断 // 对采样数据进行判断

// 对采样数据进行判断,只要有两次相同就可以

always@(posedge clk or posedge reset) begin

if(reset) begin

StartF<=0; RI<=0;

UartBuff<=0; end else if(clk_equ) begin if(!StartF) // 是否处于接收状态 begin if(!RXD) begin count <= 4'b0; // 复位计数器 count_bit <= 4'b0; RI <= 1'b0; StartF <= 1'b1; End else

RI <= 1'b1; end else begin count <= count+1'b1; // 位接收状态加1 if(count==4'd6) bit_collect[0] <= RXD; // 数据采集 else if(count==4'd7) bit_collect[1] <= RXD; // 数据采集 else if(count==4'd8) begin bit_collect[2] <= RXD; // 数据采集 UartBuff[count_bit] <= bit4; count_bit <= count_bit+1'b1; // 位计数器加1 if((count_bit==4'd1)&&(UartBuff[0]==1'b1)) begin // 判断开始位是否为0 StartF <= 1'b0; // 标志开始接收 end RI <= 1'b0; // 中断标志位低

end else if(count_bit>4'd9) begin RI <= 1'b1; StartF <= 1'b0; end end end end

assign Dataout = UartBuff[8:1]; endmodule

// 检测是否接收结束 // 中断标志为高标志转换结束

// 取出数据位


课程设计总结报告模板 - 图文(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:工程力学专业毕业论文质量保障与评估体系

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: