基于EDA 技术的全双工UART 电路设计
EDA 技术是以大规模可编程逻辑器件为设计载体,以硬件描述语言为主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、仿真,直至最终形成集成电子系统或专用集成芯片的一门新技术。本课题采用A1tera 公司的MAX+plusII为设计平白,以超高速集成电路硬件描述语言VHDL 为系统逻辑描述的唯一表达方式,采用自顶向下的设计原则,对全双工异步接收发送器(UART) 进行设计。同时选用Altera 公司的ACEX lK 系列器件EPIK100QC208-2来实现最终的UART 电路。由于篇幅的关系,笔者不打算对开发平台、开发工具以及最终实现硬件电路的可编程逻辑芯片进行介绍,而是着重介绍怎样用VHDL 语言来实现符合要求的UART 电路模块。
二、系统功能简介
图1是一个8位全双工UART的硬件组成框图。该电路的主要功能是: (1)从计算机接收8 位并行数据并写到串行输出; (2) 从南口读入外部数据并将其转换为8 位并行数据送往计算机。该系统主要由四个模块构成,PAR_IN_SER_OUT 执行并入串出操作, SER _IN_ PAR_OUT 执行串入并出操作, INTERFACE 是并行数据与外部的接口, CLOCK_GEN 产生工作时钟。

串入并出操作由串行输入的下降沿触发,串行输入要保持低电平半个周期以上。此半周期时钟同时作为输入移位时钟, 8 位数据输入结束后,结信号NINTI 变为O 并维持到下一次数据输入。井入串出操作由输入信号LOAD 的高电平出发,串行输出结束后,结束信号NINTO 变为00 8 位数据口是双向的。
三、系统实现
1.顶层设计
基于自顶至下的和基于库的设计方法是VHDL 的一大优点。因此按照层次式的设计方法,首先写出系统的顶层描述。在顶层文件中首先在work 库中建立一个名为uart_package 的程序包。程序包中定义一个常量word_length: integer: =8 再自定义一种类型TYPEword IS STD_LOGIC_VECTOR (word_length-l DOWN TO0) .其目的是方便日后对UARTA升级。其后就是按照图1所示,对4 个底层原件进行例化,例化的过程比较简单。
2. 低层设计
(1)并行数据与外部电路的接口电路interface
下面的VHDL 源代码描述的是元件interface 及其"位"单元的模型。元件interface 用来隔离串入并出电路的输出与8 位并行数据双向端口data 。在其位单元中,当使能端为'0' 时,输出高阻态,这时可以从外部向data 端写入数据。通过IEEE 的STD_LOGIC 决断函数的判断,par_in_sec_out 执行并串转换。当使能端为`1'时,执行串并转换, ser _in_ par _out 的输出写到data 端。在综合时,综合器根据三态推断的原则,用三态缓冲器实现这个电路。程序中的GENERIC用于形成8 位缓冲器电路。
ENTITY interface_std _logic IS
PORT (A: IN STD_LOGIC; E: IN STD_LOGIC; z: OUT STD_LOGIC);
END interface_std_logic;
ARCHITECTURE alg OF interface_std_logic IS
BEGIN
PROCESS (a, e)
BEGIN
IF E= '0' THEN
Z<= ‘ Zi
ELSE
Z<=A;
END PROCESS;
END alg;
ENTITY interface IS
PORT (in_word: INward; out_word: OUTward Enable: IN STD_LOGIC);
END interface;
ARCHITECTURE struc OF interface IS
BEGIN
GEN interface:
FOR I IN word_length-l DOWN TO 0 GENERATE
Ul: interface_std_logic PORT MAP (in_word (i) ,Enable, out_word (i);
END GENERATE;
END struc;
(2) 时钟产生电路
设计的这段VHDL 程序产生两个时钟信号-oclk 和iclk,分别用于par_in_see_out和ser _in_ par _out 模块。在串入并出操作中,工作时钟需要高子移位时钟,才能检测是否开始一次新的输入过程,因此iclk 的频率是oclk 频率的4 倍。注意此程序模块只能用于仿真,不能被综合。本部分的程序比较简单,在此不加详述。
(3) 并入串出模块
此模块实际上就是一个9 位的移位寄存器。Load 信号有效时('1`),移位寄存器的低8 位载入8 位并行数据,并在最高位写入`1 '。然后在时钟上升沿到来时,寄存器依次右移,并在左端输入'0' ,当移位开始时位于最高位的‘1 '被移到最低位时,即移位寄存器高8 位全位O 时,位移过程结束,并输出结束信号niito= ‘ 0' 。这段程序由两个进程组成,进程seq_par_in 在Load 信号有效时(`1`)装载寄存器;否则,在时钟上升沿更新状态,装入移位数据。进程corn_par_in在每次移位完成后,检查移位是否已经结束,并产生各路输出。限于篇幅,具体程序从赂。图2 是使用Altera 公司的MAX+plusII 进行编译、仿真后的结果。

(4) 串入并出模块
串入并出模块也采用了一个类似移位寄存器的结构,输入时钟是采祥频率的4 倍,该时钟4 分频后用作移位时钟,该模块内嵌有一个有限状态机控制器。控制器在串行输入转为低电平后继续进行检查,如果串行输入转为低电平后继续进行检查,如果串行输入保持两个‘ 0' 状态则确认开始串并转换。结束信号也由有限状态机产生,这时复位信号reset信号赋值‘ 1' ,使移位寄存器装入初值。实现该模块的核心代码如下:
ENTITY ser_in_par_out IS
PORT (I : IN STD_LOGIC;
clock : IN STD_LOGIC;
ninti : BUFFER STD_LOGIC;
Output: OUT word;
END ENTITY ser_in_par_out;
ARCHITECTURE active OF seein_par_out IS
TYPE estate IS (reset_state , lowl , low2 ,low3, running);
SIGNAL state, nextstate: estate;
SIGNAL ireg: STD_LOGIC_VECTOR (8 downto0);
SIGNAL div_elk , reset , running...state
STD_LOGIC;
BEGIN
......
Save_state:
PROCESS
BEGIN
WAIT UNTIL clock='I' and clock'EVENT;
state<=next_state;
END PROCESS;
Find_state:
PROCESS (I , state , ireg)
BEGIN
CASE state IS
WHEN reset_state=>
IF 1='0' THEN next_state<=lowl;
ELSE
nexCstate<=reset_state;
END IF;
ninti<='I';
WHEN lowl=>
IF 1='0' THEN
Next_state<=low2;
ELSE
next_state<=reset_state;
END IF;
ninti<=' 1';
WHEN low2=>
IF 1='0' THEN
next_state<=low3 ;
ELSE
next_state<=reset_state;
END IF;
ninti<;'I';
WHEN low3=>
IF 1;'0' THEN
next_state<=running;
ELSE
next_state<=reset_state;
END IF;
ninti<='I';
WHEN running=>
IF ireg (word_length)='1' THEN
next_state<=running;
ninti<='I';
next_state<=reset_state;
ninti<='I';
END IF;
END CASE;
IF state=running THEN
reset<='O';
runnin!Lstate<=' 1';
ELSE
reset<=`1`;
running_state<=`0`
END IF;
END PROCESS;
END ARCHITECTURE active;
图3 是使用Altera 公司的MAX+pluslI进行编译、仿真后的结果

四、结束语
EDA 技术的出现从根本上改变了以往数字电路的设计模式,使电路设计由硬件设计转变为软件设计,这样提高了设计约灵活性,降低了电路的复杂程度,修改起来也很方便。本文设计出全双工UART 电路不仅通过了软件仿真,而且已经应用于实际系统中,工作稳定,达到了设计要求。
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。
- 上一篇文章:基于EDA 技术的等效采样的设计实现
- 下一篇文章:EDA工具最好理念:端到端流程优化
