摘要:简要介绍串行通信口芯片的接口、功能,详细讨论了串行通信口的系统级、行为级、RTL级的设计过程,并在RTL级设计中提出了几种实现资源共享的方法,精简了系统设计结构,有效地减小了芯片的面积。
关键词:串行通信;帧同步;行为级;寄存器级;资源共享
1 引言
数字信号处理的技术已经广泛地用到许多方面。基于DSP的基本运算而设计的通用DSP和面向语言的计算机相比有几个特点:具有适应数字信号处理算法基本运算的指令;有适应信号处理数据结构的寻址机构;充分利用算法中的并行性。因此,通用DSP在数字信号处理技术应用中具有很高性能[6]。
串行通信接口8251A以其较齐全功能和灵活的配置得到广泛的应用。但当它工作在同步方式下,发送开始,需要搜索同步信号,而内部同步信号由一、二同步字符的匹配来触发,这样势必会降低其通信速率;同时传输的字长相对较短,而且在异步方式下,其波特率相对固定,因此从总体来说,其整体性能不高,适合应用在较低端的微处理器串行通信。
在通用DSP中,作为整机性能的考虑,要求有高性能的串行通信口匹配。
2 总体功能的考虑
在32位浮点DSP中,将高性能的串行通信口和内部基于数值RISC体系的高性能微处理器(MPU)集成在同一芯片上构成一个片上系统[1~3,7],接口和片上系统的MPU部分以及和外围通信设备的接口关系如图1所示。
发送时钟(TCLK)、接收时钟(RCLK)、发送帧同步信号(TFS)和接收帧同步信号(RFS) 各引脚的功能显然,它们可配置成串行通信口方式和通用的I/O方式,在串行通信口方式下,它们可由内部产生,也可由外部设备给出,因此是双向的;在通用的 I/O方式,它们可作为通用的输入和输出口,因此也是双向的。
发送端口(TD)、接收端口(RD)也可配置成串行通信口方式和通用的I/O方式,在串行通信口方式下分别作为数据的发送和接收端口,是单向的;在通用的I/O方式,它们可作为通用的输入和输出口,因此是双向的。
与MPU输入输出控制接口相连的信号有地址总线、数据总线、时钟及复位信号,而发送中断、接收中断信号则是作为串行通信口向CPU的中断请求信号,用来指示CPU可以向发送缓冲器加载和读取接收缓存器的数据中断标志。
基于32位浮点DSP芯片的RISC体系结构的考虑,以硬件空间的并行性来达到执行速度的大幅度提高,在此确定串行通信口的整体要求如下:① 仅设计同步工作和握手方式,可以传输的字长为8、16、24、32位的数据;② 串行通信口可以工作于串行接口方式和通用的I/O方式;③ 硬件上发送部分和接收部分并行,构成全双工通信;④ 本设计中的变量寄存器均采用小端序排列,且发送端口和发送移位寄存器的高端相连,而接收操作则是将接收端口和接收移位寄存器的LSB相连,在DSP上可集成两个相同的串行通信口,这样一个串行通信口发送的数据,可以被另外一个串行通信口按原来的顺序接收,反之也成立,这样传输的数据在两个串行通信口形成通路,可以很方便地验证其数据传输的正确性。
3 串行通信口的设计
3.1 系统级设计
为了实现上述要求,串行通信口在系统级上由与MPU接口电路、 波特率发生器、发送电路和接收电路四部分构成。
3.1 .1 MPU接口模块
MPU接口电路实现内部CPU对串行通信口写控制字,读状态字、读取接收来的数据和加载待发送的数据;设计了总体控制寄存器、发送端口(TCLK、 TFS、TD)配置寄存器、接收端口(RCLK、RFS、RD)配置寄存器、波特率发生器控制寄存器、波特率发生器计数器、波特率发生器周期寄存器来构成控制和状态寄存器,设计了发送缓冲器和接收缓冲器构成数据寄存器。
3.1.2 波特率发生器模块
波特率发生器模块给发送器和接收器提供发送数据和接收数据的比特时钟,包括提供标准波特率和各种非标准波特率的比特时钟,标准波特率一般式用作通信双方进行异步串行通信,而非标准波特率一般用作高速同步通信。要实现上述功能,首先需要一个60MHz的主时钟,主时钟先经过2分频,再通过2^n分频器,n值最大为16,根据n值的不同能得到28.6bps~ 1.875M bps的各种标准波特率。
3.1.3 发送和接收电路模块[3]
发送和接收电路的框图如图2所示,包括数据通道和控制逻辑两部分的设计。数据通道部分实现的数据发送和接收,同时实现必要的并串和串并转换。
发送通道:32位发送缓冲寄存器TRR、32位发送移位寄存器TSR、发送端口TD;
接收通道:接收口RD、32位接收移位寄存器RSR、32位接收缓冲寄存器DRR;
在字长计数器控制下可以传输8、16、24或32位/字符的数据。
控制逻辑实现数据通道按配置的工作方式进行发送和接收数据,控制字和状态字分别由控制寄存器和状态寄存器给出,这样可有效地实现其时钟同步。
3.2 行为级设计
行为级设计是将硬件的系统级自然语言描述转换为真值表、状态图或算法模型的过程,其实质对应着进程的划分。因发送和接收电路构成串行通信口的主体,故本部分较为详细地阐述发送和接收部分的行为级设计[4,5]。
3.2.1 数据发送
数据发送电路可由如下两个进程组成,如图3所示。
① 发送缓冲器加载进程。如果发送移位寄存器为空,且是时钟的上升沿,发送缓冲器的数据加载到发送移位寄存器,同时TRDY信号置位,从而使发送中断信号TINT置位,以作为请求CPU加载发送缓冲寄存器的中断信号。
等待扩展总线对发送缓存器加载,如一旦加载,则TRDY='0' ,如果帧同步信号由内部产生,则在TDRY的下降沿2.5个发送时钟周期后,帧同步信号TFS被置位。
② 移位以及数据的发送进程。设计中考虑串行通信口能够工作于标准和连续方式。
在标准方式下,由帧同步信号TFS来启动发送移位寄存器的移位以实现数据的发送,同时字长计数器也被启动以控制发送的字长。
在连续的方式下,当连续方式控制位置位,则由TRR_TO_TSR ='1' 来启动器移位进程;当该位不置位的情况,早于一个发送字的最后三位之前加载发送缓存器,这样在TRR_TO_TSR='1'时,TFS也已经置位,从而连续方式亦可建立。下面是它的部分VHDL程序:
Run_loop:loop
Load_TSR: Process ( empty ) --加载移位寄存器进程
begin
Wait until TCLK'event and TCLK='1' and empty='1';
TRR_to_TSR<='1'; --实现对发送移位寄存器的加载
TRDY<='1';
TINT<='1';
End processs;
Load_TRR:process( write ) --加载发送缓冲器进程
begin
Wait until TCLK'event and TCLK='1' and write ='1'; --利用write对发送缓冲器的加载
TRDY<='0';
TINT<='0';
Wait until TCLK'event and CLK='1';
Wait until TCLK'event and TCLK='1';
Wait until TCLK'event and TCLK='0'; --帧同步信号在加载TRR后的2.5个TCLK
TFS<='1'; --自动产生(标准方式)
End process;
Transmitt:Process --移位及串行发送进程
Variable count :integer:=0 ;
begin
If (count<=wordsize)
Wait until TRR_to_TSR='1'and TFS'lastvalue='1'and TFS'event and TCLK'event and TCLK='1';
TSR[wordsize-1:0]=TSR[worsize-2:0]&
'0'; --左移
TD<=TSR[wordsize-1];--从高位发送
count:=count+1;
empty<='0';
elsif
empty<='1';
end if;
end process;
end loop;
3.2.2 数据接收
数据接收部分的串并转化电路,在设计中可由 Huffman式Moore 状态机或者微代码控制单元来实现其控制单元的设计。图4给出8位数据的状态转换图。
当RSR_to_DRR='1'时,即出现接收移位寄存器对接收缓冲器的加载,则RRDY='1',从而使RINT='1' 置位,作为指示CPU可通过扩展数据总线将接收缓存器的数据读走的信号;同时设计中需要另外考虑CPU内部数据总线是32位的,当接收的数据是8位、16 位时,需将移位寄存器中的数据拼接成32位,再一起将其加载到DRR中,这样可以减小对扩展总线带宽的要求和不必要的总线冲突。
3.3 寄存器传输级的设计
根据结构化的设计方法,在寄存器传输级的设计中[4],首先将行为级的算法描述进一步分解成数据流和控制流,在硬件上对于其数据通道和控制通道;同时将算子调度后不在同一控制步执行的同类运算及路径,尽量共用同一个功能部件。本设计重点考虑了其资源共享问题。以下以发送过程为例,进行阐述。
通过扩展数据总线对发送缓存器的数据加载,到发送移位缓冲器被加载以及移位寄存的数据移位到发送端口,这些构成了数据发送的路径。在移位过程中,字长计数器执行对字长的计数。这部分构成发送过程的数据通道。
本串行通信口是基于RISC面向寄存器堆的体系结构,因此其控制字、状态字和外围通信设备接口信号的配置、发送时钟的设置,都是通过对和用户接口寄存器的加载和读取来实现的。在设计中通过设定工作方式、控制字等寄存器变量,利用这些变量,通过硬布线逻辑实现对数据通道的控制。
发送时钟的生成也是设置了三组变量寄存器:16位预置周期大小的寄存器、16位行波计数器构成的数据通道、16位发送时钟配置的变量寄存器,且通过硬布线逻辑构成控制通道来实现所需配置的功能。此设计考虑的资源共享主要有以下五种情况:
① 串行通信口可以配置成固定发送时钟频率的标准、连续方式、可变发送频率的标准、连续方式以及握手方式五种不同方式,但都共用同一个数据通道。
② 对发送时钟引脚、发送帧同步信号引脚以及发送端口,可以配置成串行通信口方式和通用I/O方式,也是分别共用一个数据路径,利用选择器对不同情况进行选择来实现资源的共享。
③ 对于字长计数器而言,分别有8、16、24和32位的情况,应用6位的计数器加和一个四端口选择器来实现其资源共享。
④ 共用一个内部总线缓冲器,当CPU需要读取相关寄存器中的内容时,由读信号将其内容读到内部缓存器中加以寄存,等到外部总线为空闲时,才将其内容读到外部总线,因为同一控制步中不可能同时有两个或两个以上的读寄存器的操作发生,故可以共享同一内部总线缓冲器。
⑤ 地址译码的资源共用,对不同寄存器的访问,因为其高位相同,可共用其高位的地址译码;对于上述第四种情况的内部总线缓存器的读出,因其低位不同在此由高位来构成译码即可将读信号选中的寄存器的内容读出。
4 仿真结果
下面给出串行通信口两种工作方式的RTL级静态功能仿真波形。
图5所示是串行通信口工作于握手方式,发送8位数据下的波形图,由TFS的下降沿启动数据的发送,TD首先发送一个前导"1"作为发送的请求位,而接收端口RD在接收数据之后发送一个"0"作为发送请求的回应位,TCNT为发送的字长计数器的满标记。
图6所示为串行通信口配置成固定标准方式,发送8位数据下的波形图,其中TFS的电平极性为负,由TFS的上升沿启动数据的发送,且它在发送数据的最后一位已被触发,因此可实现连续发送数据,即可实现连续工作方式,TCNT为发送的字长计数器的满标记。
5 设计结果
在整个设计过程中,首先用C语言实现串行通信口的算法级,然后用VHDL设计RTL级电路,在View logic 系统中进行模拟验证;接着用Synopsys 工具综合得到门级电路,设计采用0.6μm CMOS工艺库;最后,采用Cadence 软件中的 Silicon Ensemble 进行版图设计。电路规模为 6000 门左右,此电路目前正在进行验证。串行通信口模块总面积约为 7mm.2 ,同时,经过32位浮点DSP系统级的总体功能仿真验证和版图寄生参数提取后时序性能仿真验证,串行通信口模块逻辑功能和性能设计可以满足系统的总体要求。
6 结束语
前端设计是获得高性能串行通信口电路的前提。本文较为详细地讨论了串行通信口系统级、行为级和寄存器传输级设计。在此基础上,根据其工作特点,即算子调度后结果的特点,提出资源共享的五种方案,可大大优化硬件资源的分配,并有效减小芯片面积和功耗。
参考文献:
[1] MONTANARO J, et al. A 160MHz 32b 0.5W CMOS RISC microprocessor [A]. Int Solid-state Circuits Conf, Digest of Technical Papers[C]. Itami,Japan 1996,214-215.
[2] DOLLE M, JHAND S, LEHNER W, et al. A 32bit RISC/DSP microprocessor with reduced complexity [J]. IEEE Solid-state Circuit, 1997, 32,1056-1065.
[3] TMS320C3X User's guide[M]. Texas Instruments,1997.
[4] 王志华. 数字集成系统的结构化设计与高层次综合[M]. 北京:清华大学出版社, 2000.
[5] 夏宇闻. 复杂数字电路与系统的Verilog HDL设计技术[M]. 北京:北航出版社,1998.
[6] 沈绪榜. 数字信号处理计算机[M]. 北京:宇航出版社, 1991.
[7] 沈绪榜. RISC 及后编译技术[M]. 广西出版社, 1994.
文章评论(0条评论)
登录后参与讨论