基于FPGA/CPLD设计与实现UART
发布时间:2008/5/28 0:00:00 访问次数:399
摘 要:uart是广泛使用的串行数据通讯电路。本设计包含uart发送器、接收器和波特率发生器。设计应用eda技术,基于fpga/cpld器件设计与实现uart。 关键词:fpga/cpld;uart;vhdl |
---uart(即universal asynchronous receiver transmitter 通用异步收发器)是广泛使用的串行数据传输协议。uart允许在串行链路上进行全双工的通信。 ---串行外设用到rs232-c异步串行接口,一般采用专用的集成电路即uart实现。如8250、8251、ns16450等芯片都是常见的uart器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如fifo),有时我们不需要使用完整的uart的功能和这些辅助功能。或者设计上用到了fpga/cpld器件,那么我们就可以将所需要的uart功能集成到fpga内部。使用vhdl将uart的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。本文应用eda技术,基于fpga/cpld器件设计与实现uart。 一 uart简介 1 uart结构 ---uart主要有由数据总线接口、控制逻辑、波特率发生器、发送部分和接收部分等组成。 ---功能包括微处理器接口,发送缓冲器(tbr)、发送移位寄存器(tsr)、帧产生、奇偶校验、并转串、数据接收缓冲器(rbr)、接收移位寄存器(rsr)、帧产生、奇偶校验、串转并。 ---图1是uart的典型应用。 2 uart的帧格式 ---uart的帧格式如图2所示。
---包括线路空闲状态(idle,高电平)、起始位(start bit,低电平)、5~8位数据位(data bits)、校验位(parity bit,可选)和停止位(stop bit,位数可为1、1.5、2位)。 ---这种格式是由起始位和停止位来实现字符的同步。 ---uart内部一般有配置寄存器,可以配置数据位数(5~8位)、是否有校验位和校验的类型、停止位的位数(1,1.5,2)等设置。 二 uart的设计与实现 1 uart发送器 ---发送器每隔16个clk16时钟周期输出1位,次序遵循1位起始位、8位数据位(假定数据位为8位)、1位校验位(可选)、1位停止位。 ---cpu何时可以往发送缓冲器tbr写入数据,也就是说cpu要写数据到tbr时必须判断当前是否可写,如果不判这个条件,发送的数据会出错。 ---数据的发送是由微处理器控制,微处理器给出wen信号,发送器根据此信号将并行数据din[7..0]锁存进发送缓冲器tbr[7..0],并通过发送移位寄存器tsr[7..0]发送串行数据至串行数据输出端dout。在数据发送过程中用输出信号tre作为标志信号,当一帧数据发送完毕时,tre信号为1,通知cpu在下个时钟装入新数据。 ---发送器端口信号如图3所示。
---引入发送字符长度和发送次序计数器length_no,实现的部分vhdl程序如下。 ---if std_logic_vector(length_no) = “0001” then ---tsr <= tbr ; --发送缓冲器tbr数据进入发送移位寄存器tsr ---tre <= '0' ; --发送移位寄存器空标志置“0” ---elsif std_logic_vector(length_no) = “0010” then ---dout <= '0' ; --发送起始位信号“0” ---elsif std_logic_vector(length_no) >= “0011” and std_logic_vector(length_no) <= “1010” then ---tsr <= '0' & tsr(7 downto 1); --从低位到高位进行移位输出至串行输出端dout ---dout <= tsr(0) ; ---parity <= parity xor tsr(0) ; --奇偶校验 ---elsif std_logic_vector(length_no) = “1011” then ---dout <= parity ; 校验位输出 ---elsif std_logic_vector(length_no) = “1100” then ---dout <= '1' ; --停止位输出 ---tre <= '1' ; --发送完毕标志置“1” ---end if ; ---发送器仿真波形如图4所示。
摘 要:uart是广泛使用的串行数据通讯电路。本设计包含uart发送器、接收器和波特率发生器。设计应用eda技术,基于fpga/cpld器件设计与实现uart。 关键词:fpga/cpld;uart;vhdl |
---uart(即universal asynchronous receiver transmitter 通用异步收发器)是广泛使用的串行数据传输协议。uart允许在串行链路上进行全双工的通信。 ---串行外设用到rs232-c异步串行接口,一般采用专用的集成电路即uart实现。如8250、8251、ns16450等芯片都是常见的uart器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如fifo),有时我们不需要使用完整的uart的功能和这些辅助功能。或者设计上用到了fpga/cpld器件,那么我们就可以将所需要的uart功能集成到fpga内部。使用vhdl将uart的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。本文应用eda技术,基于fpga/cpld器件设计与实现uart。 一 uart简介 1 uart结构 ---uart主要有由数据总线接口、控制逻辑、波特率发生器、发送部分和接收部分等组成。 ---功能包括微处理器接口,发送缓冲器(tbr)、发送移位寄存器(tsr)、帧产生、奇偶校验、并转串、数据接收缓冲器(rbr)、接收移位寄存器(rsr)、帧产生、奇偶校验、串转并。 ---图1是uart的典型应用。 2 uart的帧格式 ---uart的帧格式如图2所示。
---包括线路空闲状态(idle,高电平)、起始位(start bit,低电平)、5~8位数据位(data bits)、校验位(parity bit,可选)和停止位(stop bit,位数可为1、1.5、2位)。 ---这种格式是由起始位和停止位来实现字符的同步。 ---uart内部一般有配置寄存器,可以配置数据位数(5~8位)、是否有校验位和校验的类型、停止位的位数(1,1.5,2)等设置。 二 uart的设计与实现 1 uart发送器 ---发送器每隔16个clk16时钟周期输出1位,次序遵循1位起始位、8位数据位(假定数据位为8位)、1位校验位(可选)、1位停止位。 ---cpu何时可以往发送缓冲器tbr写入数据,也就是说cpu要写数据到tbr时必须判断当前是否可写,如果不判这个条件,发送的数据会出错。 ---数据的发送是由微处理器控制,微处理器给出wen信号,发送器根据此信号将并行数据din[7..0]锁存进发送缓冲器tbr[7..0],并通过发送移位寄存器tsr[7..0]发送串行数据至串行数据输出端dout。在数据发送过程中用输出信号tre作为标志信号,当一帧数据发送完毕时,tre信号为1,通知cpu在下个时钟装入新数据。 ---发送器端口信号如图3所示。
---引入发送字符长度和发送次序计数器length_no,实现的部分vhdl程序如下。 ---if std_logic_vector(length_no) = “0001” then ---tsr <= tbr ; --发送缓冲器tbr数据进入发送移位寄存器tsr ---tre <= '0' ; --发送移位寄存器空标志置“0” ---elsif std_logic_vector(length_no) = “0010” then ---dout <= '0' ; --发送起始位信号“0” ---elsif std_logic_vector(length_no) >= “0011” and std_logic_vector(length_no) <= “1010” then ---tsr <= '0' & tsr(7 downto 1); --从低位到高位进行移位输出至串行输出端dout ---dout <= tsr(0) ; ---parity <= parity xor tsr(0) ; --奇偶校验 ---elsif std_logic_vector(length_no) = “1011” then ---dout <= parity ; 校验位输出 ---elsif std_logic_vector(length_no) = “1100” then ---dout <= '1' ; --停止位输出 ---tre <= '1' ; --发送完毕标志置“1” ---end if ; ---发送器仿真波形如图4所示。 -->
热门点击
推荐技术资料
|
|