东北林业大学课程设计
4 FPGA程序设计
4.1 总体结构设计
FPGA程序的总体结构框图如图4—1所示,核心控制逻辑通过检测振铃和摘机信号来控制通道选择模块选择相应的传输通道,其中摘机信号由摘机检测电路产生,振铃信号由FSK解码模块产生。FSK解码模块、ADC采样模块和DTMF解码模块的数据输出时序与UART发送模块相匹配,它们通过通道选择模块相连。UART发送模块以115200 b/s的波特率发送数据,它的输入数据来自通道选择模块,通道选择选择模块则在核心控制模块的控制下将UART发送模块与FSK解码模块、ADC采样模块或DTMF解码模块接通。
核心 控制 振铃信号 FSK解码 AD采样 DTMF解码 通道 选择 UART 发送
图 4—1 总体结构框图
4.2 核心控制模块设计
4.2.1 端口介绍
图 4—2 核心控制模块端口结构图
核心控制模块的端口结构如图4—2所示,左边是输入端口,右边是输出端口,关于各个端口的功能描述请参见表 4—1。
14
东北林业大学课程设计
表 4—1 核心控制模块端口描述 名称 clk_48m reset ring hold std CS fsk_over adc_over dtmf_over ctrl
方向 输入 输入 输入 输入 输入 输出 输出 输出 输出 输出
宽度 1 1 1 1 1 3 1 1 1 1
功能描述 48MHz时钟信号 高电平有效的复位信号
振铃信号,当有振铃时该信号为变为高电平
摘机信号,摘机时该信号低电平,挂机时该信号为高电平 DTMF有效信号,解码芯片有数据输出时,该信号会被置高 通道选择信号,每个位对应着一个数据通道 用于结束FSK通道的标志信号 用于结束ADC通道的标志信号 用于结束DTMF通道的标志信号 语音提取电路的选通信号
4.2.2 工作原理
核心控制模块是一个米利型状态机,它根据hold、ring和std信号进行状态跳转并对CS、fsk_over等输出信号进行控制,核心控制模块的状态转移图如图4—3所示,关于各个状态的详细描述请参见表4—2所示。状态所对应的输出列中未描述的信号表示该信号的值与前一个状态相同。
图 4—3 核心控制模块状态转移图
15
东北林业大学课程设计
表 4—2 核心控制模块状态描述 状态 描述 循环检测hold_valid和ring信号,当发现hold_valid为0时则
IDLE
表明用户摘机拨号,状态跳转到DTMF,当发现ring信号为1时,则表明有电话呼入,状态跳转到FSK。
启动wait_cnt计数,用户的每次拨号都会使wait_cnt清零,当
DTMF
wait_cnt超过某值后则表明用户拨号结束,状态跳转到DTMF_idle
DTMF_idle DTMF_over
该状态用于使输出信号dtmf_over产生一个宽度为一个时钟周期的高电平信号
该状态用于使输出信号dtmf_over产生一个宽度为一个时钟周期的高电平信号,状态跳转到ADC
启动fsk_wait计数并检测hold_valid,fsk_wait超过某值后则表
FSK
明主叫方放弃呼叫,状态跳转到FSK_out,hold_valid为0表明用户摘机接听电话,状态跳转到ADC。
FSK_out FSK_over ADC ADC_over
该状态用于使输出信号fsk_over产生一个宽度为一个时钟周期的高电平信号
该状态用于使输入信号fsk_over产生一个宽度为一个时钟周期的高电平信号,状态跳转到ADC。
检测hold_valid信号,若为1则表明用户挂机,状态跳转到ADC_over
该状态用于使输出信号adc_over产生一个宽度为一个时钟周期的高电平信号
CS=2 ctrl=0 adc_over=1; fsk_over=1 fsk_over=1 CS=1 dtmf_over=1 dtmf_over=1 输出 fsk_over=0 dtmf_over=0 adc_over=0 ctrl=1 CS=0 CS=4
4.3 通道选择模块设计
4.3.1 端口介绍
图 4-4 通道选择模块端口结构图
通道选择模块的端口结构如图4—4所示,详细描述了各个端口的属性和功能。
16
东北林业大学课程设计
表 4—3 通道选择模块端口描述
名称 clk_48m reset txd_busy fsk_over adc_over dtmf_over CS FSK_data ADC_data
方向 输入 输入 输入 输入 输入 输入 输入 输入 输入
宽度 1 1 1 1 1 1 3 8 8 8 1 1 1 1 8
功能描述 48MHz时钟信号 高电平有效的复位信号
UART发送忙信号,高电平时表示UART模块正在发送数据 用于结束FSK通道的标志信号 用于结束ADC通道的标志信号 用于结束DTMF通道的标志信号
通道选择信号,每个位对应着一个数据通道 来自FSK解码模块的8位并行数据 来自AD采样模块的8位并行数据 来自DTMF解码模块的8位并行数据
当FSK_data上的数据有效时,该端口上会产生一个上升沿触发UART发送模块将数据发出
当ADC_data上的数据有效时,该端口会产生一个上升沿触发UART发送模块将数据发出
当ADC_data上的数据有效时,该端口会产生一个上升沿触发UART发送模块将数据发出
该端口直接与UART发送模块相连,当系统工作时它会被选择连接到FSK_tirg、ADC_trig或DTMF_trig上
该端口直接与UART发送模块相连,当系统工作时它会被选择连接到FSK_data、ADC_data或DTMF_data上
DTMF_data 输入 FSK_trig ADC_trig DTMF_trig txd_trig txd_data
输入 输入 输入 输出 输出
4.3.2 工作原理
通道选择模块也是一个米利型的状态机,它的状态转移图如图4—5所示。表中“—”表示该状态下的输出不是确定电平状态,而是一串序列。
图 4—5 通道选择模块状态转移图
17
东北林业大学课程设计
表 4—4 通道选择模块状态描述 状态 IDLE Pre_FSK FSK Pre_ADC ADC Pre_DTMF DTMF
描述 该状态循环检测CS的值,当CS为1时跳转到Pre_FSK,该状态发送1024个CCH前导,发送完成后跳转到FSK 该状态将输出与FSK解码模块相连,当检测fsk_over信号为1时跳转到IDLE
该状态发送1024个BBH前导,发送完成后跳转到ADC 该状态将输出与AD采样模块相连,当检测到adc_over信号为1时跳转到IDLE
该状态发送1024个AAH前导,发送完成后跳转到DTMF状态
该状态将输出与DTMF解码模块相连,当检测到dtmf_over信号为1时跳转到End_DTMF。
输出 txd_trig <= 0; —
txd_trig<=FSK_trig; txd_data<=FSK_data; —
txd_trig<=ADC_trig; txd_data<=ADC_data; —
txd_trig<=DTMF_trig; txd_data<=DTMF_data; —
当CS为2时跳转到Pre_ADC,当CS为4跳转到Pre_DTMF txd_data <= 0;
End_DTMF 该状态用于发送DTMF结束标志DDH
4.4 UART发送模块
UART发送模块的端口结构如图4—6所示,txd_start是发送触发信号,该端口上的
上升沿会触发UART发送模块将txd_data端口上的8位数据通过txd异步串行发出,在发送期间txd_busy端口会被置位成高电平。
图 4—6 UART发送模块端口结构图
UART发送模块取自Fusion StartKit开发板的例程,为了满足系统的需求,在此我们将它的发送波特率由9600bps改为了115200bps。
4.5 FSK解码模块设计
4.5.1 端口介绍
fre_inclkresetdecode_outring_outdecode_cr
图 4—7 FSK解码模块端口结构图
FSK解码模块的端口结构如图4—7所示,详细描述了各个端口功能和属性。
18