您所在的位置:e-works首页 > 产品创新数字化(PLM) > EDA

基于EDA 技术的全双工UART 电路设计

发表时间:2007-10-12 张敏 刘小俊 来源:万方数据
介绍了利用EDA 技术设计出全双工异步接收发送器电路的方法,并通过计算机仿真和实验证明了设计的 正确性。
一、引言

 

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_outser _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。

责任编辑:童伟