《基于vhdl的fpga串口通信dkcg》由会员分享,可在线阅读,更多相关《基于vhdl的fpga串口通信dkcg(21页珍藏版)》请在金锄头文库上搜索。
1、- 本本模块的的功能是是验证实实现和PPC机进进行基本本的串口口通信的的功能。需需要在-PCC机上安安装一个个串口调调试工具具来验证证程序的的功能。- 程程序实现现了一个个收发一一帧100个biit(即即无奇偶偶校验位位)的串串口控-制器器,100个biit是11位起始始位,88个数据据位,11个结束束-位。串串口的波波特律由由程序中中定义的的divv_paar参数数决定,更更改该参参数可以以实-现相相应的波波特率。程程序当前前设定的的divv_paar 的的值是00x1004,对对应的波波特率是是-96600。用用一个88倍波特特率的时时钟将发发送或接接受每一一位biit的周周期时间间-划分
2、分为8个个时隙以以使通信信同步.-程序序的工作作过程是是:串口口处于全全双工工工作状态态,按动动keyy2,CCPLDD向PCC发送皐皐elccomee-字符符串(串串口调试试工具设设成按AASCIII码接接受方式式);PPC可随随时向CCPLDD发送00-F的的十六进进制-数据据,CPPLD接接受后显显示在77段数码码管上。librraryy IEEEE;use IEEEE.SSTD_LOGGIC_11664.AALL;use IEEEE.SSTD_LOGGIC_ARIITH.ALLL;use IEEEE.SSTD_LOGGIC_UNSSIGNNED.ALLL; ENTIITY UARRT
3、IIS PPORTT ( cclk : INN sttd_llogiic; rrst : INN sttd_llogiic; rrxd : INN sttd_llogiic; -串行行数据接接收端 ttxd : OUUT sstd_loggic; -串行数数据发送送端 een : OUUT sstd_loggic_vecctorr(7 dowwntoo 0); - 数数码管使使能 sseg_datta : OUUT sstd_loggic_vecctorr(7 DOWWNTOO 0); -数码码管数据据 kkey_inpput : INN sttd_llogiic -按按键输入入 ); END
4、 UARRT;ARCHHITEECTUURE arcch OOF UUARTT ISS -/innnerr reeg/ SSIGNNAL divv_reeg : sttd_llogiic_vvecttor(15 DOWWNTOO 0);-分频计计数器,分分频值由由波特率率决定。分分频后得得到频率率8倍波波特率的的时钟 SSIGNNAL divv8_ttrass_reeg : sttd_llogiic_vvecttor(2 DDOWNNTO 0);-该该寄存器器的计数数值对应应发送时时当前位位于的时时隙数 SSIGNNAL divv8_rrec_regg : sttd_llogiic_vvect
5、tor(2 DDOWNNTO 0); -寄存存器的计计数值对对应接收收时当前前位于的的时隙数数 SSIGNNAL staate_traas : sttd_llogiic_vvecttor(3 DDOWNNTO 0); - 发发送状态态寄存器器 SSIGNNAL staate_recc : sttd_llogiic_vvecttor(3 DDOWNNTO 0); - 接受受状态寄寄存器 SSIGNNAL clkkbauud_ttrass : sttd_llogiic; -以以波特率率为频率率的发送送使能信信号 SSIGNNAL clkkbauud_rrec : sttd_llogiic; -以以
6、波特率率为频率率的接受受使能信信号 SSIGNNAL clkkbauud8xx : sttd_llogiic; -以以8倍波波特率为为频率的的时钟,它它的作用用是将发发送或接接受一个个bitt的时钟钟周期分分为8个个时隙 SSIGNNAL reccstaart : sttd_llogiic; - 开始发发送标志志 SSIGNNAL reccstaart_tmpp : sttd_llogiic; -开开始接受受标志 SSIGNNAL traassttartt : sttd_llogiic; SSIGNNAL rxdd_reeg1 : sttd_llogiic; -接接收寄存存器1 SSIGNNA
7、L rxdd_reeg2 : sttd_llogiic; -接接收寄存存器2,因因为接收收数据为为异步信信号,故故用两级级缓存 SSIGNNAL txdd_reeg : sttd_llogiic; -发发送寄存存器 SSIGNNAL rxdd_buuf : sttd_llogiic_vvecttor(7 DDOWNNTO 0);-接接受数据据缓存 SSIGNNAL txdd_buuf : sttd_llogiic_vvecttor(7 DDOWNNTO 0);-发发送数据据缓存 SSIGNNAL sennd_sstatte : sttd_llogiic_vvecttor(2 DDOWNNTO
8、0);-每每次按键键给PCC发送Wellcomme字字符串,这这是发送送状态寄寄存器 SSIGNNAL cntt_deelayy : sttd_llogiic_vvecttor(19 DOWWNTOO 0);-延时去去抖计数数器 SSIGNNAL staart_dellayccnt : sttd_llogiic; -开始延延时计数数标志 SSIGNNAL keyy_enntryy1 : sttd_llogiic; -确定有有键按下下曛? SSIGNNAL keyy_enntryy2 : sttd_llogiic; -确定有有键按下下标志 -/ CCONSSTANNT divv_paar : s
9、ttd_llogiic_vvecttor(15 DOWWNTOO 0) := 0000000000100000001000; -分频频参数,其其值由对对应的波波特率计计算而得得,按此此参数分分频的时时钟频率率是波倍倍特率的的8倍,此此处值对对应96600的的波特率率,即分分频出的的时钟频频率是996000*8 SSIGNNAL txdd_xhhdl33 : sttd_llogiic; BEGIIN een =00101101001 ;-7段数数码管使使能信号号赋值 ttxd = txdd_xhhdl33; ttxd_xhddl3 = txdd_reeg ; PPROCCESSS(cllk,rr
10、st) BBEGIIN IIF (NOTT rsst = 11) THEEN ccnt_dellay = 000000000000000000000000000; sstarrt_ddelaaycnnt = 0; EELSIIF(cclkEVEENT ANDD cllk=1)THEEN IIF (staart_dellayccnt = 1) THHEN IIF (cntt_deelayy /= 111000001110110100000000000) THHEN ccnt_dellay = cntt_deelayy + 000000000000000000000000011; EELSEE ccnt_dellay = 000000000000000000000000000; sstarrt_ddelaaycnnt = 0; EEND IF; EELSEE IIF (NOOT kkey_inpput=1) AAND (cnnt_ddelaay = 000000000000000000000000000) TTHENN sstarrt_ddelaaycnnt = 1; EEND IF; EEND IF; EEND IF; EEND PROOCESSS; PPROCCESSS(cllk,rrst) BBEGIIN IIF (NOTT rsst = 11) THEEN