基于FPGA的通信卡设计和实现
2008-07-18
作者:马尚行,倪美强
摘 要: 基于FPGA的通信卡设计原理。通信卡实现了4路ISDN U接口、4路RS232串口" title="串口">串口、2路音频接口及1路PCI总线之间的通信,该卡以FPGA(现场可编程门阵列)和MPC860为核心进行设计,利用FPGA的可编程性灵活实现了各接口之间的数据通信" title="数据通信">数据通信。本文给出了系统的硬件构架,并对串口传输" title="串口传输">串口传输功能和数字交换网络功能的FPGA实现进行了分析。
关键词: 通信卡 FPGA 串口传输 数字交换网络
FPGA是20世纪80年代中期以后发展起来的一种现场可编程的大规模集成器件,具有高集成、高速度、低功耗、体积小、可靠性高等一系列优点,含有丰富的查找表(LUT)资源,允许设计师在不改变硬件电路板的情况下实现不同的功能[1]。因此,FPGA在数字电路的设计中得到了广泛应用。
通信卡采用的FPGA是XILINX的SPARTAN-Ⅱ系列的XC2S50芯片。该芯片具有176个用户I/O接口、32Kbit的RAM块及24 576bit的分散RAM等丰富资源。在通信卡中,FPGA芯片实现了串口的透明传输和解析传输功能、PCI总线的控制功能、4路ISDN U接口数据的复接和分离功能、各接口数据间的交换功能等。本文分析了基于FPGA的通信卡的设计原理,给出了系统的硬件构架框图,并对串口传输功能和数字交换网络功能的实现进行了重点分析。
1 设计介绍
通信卡的硬件构架组成框图如图1所示。CPU控制模块采用MPC860小系统, MPC860芯片不仅具有普通CPU的运算和处理功能,其外围还集成了一些控制领域的常用接口,可支持多种协议,如HDLC/SDLC协议、UART协议等;另外,该芯片还具有一个时隙" title="时隙">时隙分配器,可支持T1、CEPT、PCM公共模块和ISDN的基本速率的传输[2]。本设计中传输的通道信号采用ISDN的基本速率,CPU信号由地址信号、数据信号和控制信号三部分组成,实现对通信卡各芯片的配置及对一些公共资源的分配和管理;PCI总线控制器采用PLX公司生产的PCI通用接口芯片PCI9054实现,本设计中,该芯片在本地总线侧采用M模式,可以与MPC860芯片进行无缝连接;音频口的编/译码器芯片采用TP3067,该芯片实现了模拟音频信号和PCM数据信号的相互转换;在本卡中,RS232串口的最大速率为19.2kb/s;U接口控制器采用MOTOROLA公司的MC145572芯片,该芯片用于综合业务数字网基本接入接口,即适用于NT(网络终端)也适应于LT(线路终端)[3]。MC145572可工作于多种不同模式,本文采用的是MCU模式的短帧操作模式,接口数据为MOTOROLA的IDL型时分2B(B通道数据为64Kb/s)+D(D通道数据为16Kb/s)数据接口,通信卡的四个ISDN U接口作为NT使用;两路音频接口为用户的语音通信提供接口。
实现图1所用的FPGA是XILINX的SPARTAN-Ⅱ系列的XC2S50芯片,该芯片负责通信卡各接口数据的控制和相互通信,包括:CPU对PCI总线控制器、串口控制器、U接口控制器等芯片的控制;PCI总线接口与CPU间的数据通信;音频口与U接口间的数据通信;RS232串口的透明传输方式" title="传输方式">传输方式(串口与串口、串口与U口间的数据传输)和解析传输方式(串口与CPU间的数据传输)的控制;U接口与CPU的数据通信;U接口与串口间的数据通信。通信卡各接口间数据的交换和通信都由FPGA交换控制模块的数字交换网络完成,其工作原理图如图2所示。图2中所示的8路64kb/s的HDLC收发器和4路16kb/s的HDLC收发器由MPC860芯片提供。本文将对由FPGA实现的串口传输功能和数字交换网络功能的实现进行详细分析。
2 功能实现
本设计中,FPGA是通信卡功能实现的关键芯片,是各接口数据通信的桥梁。下面就FPGA实现的串口传输功能(包括串口工作方式,即透明传输方式和解析传输方式的切换及透明传输方式时不同速率数据间的转换)及用于各接口数据通信的数字交换网络功能的实现进行详细分析。
2.1 串口传输功能的实现
通信卡的串口功能芯片由串口扩展芯片ST16C654和收发器芯片LTC1387组成,ST16C654可扩展4个串口,串口传输功能示意图见图3。在通信卡中,串口的数据传输方式有透明传输方式和解析传输方式两种,利用FPGA的可编程性灵活实现了串口传输方式的切换。在解析方式下,只需将ST16C654的收发数据线与LTC1387的收发数据线相连,如要使串口1工作在解析模式下,通过FPGA将L_TD1与ST_TD1连接及L_RD1与ST_RD1连接便可;在透传方式下,由于串口的传输速率不定(在本卡中,串口的传输速率≤19.2Kb/s),而ISDN U接口一个时隙的传输速率为64kb/s,因此,在串口与U口进行数据透传时,需要编写一个具有速率转换功能的编/解码器。根据抽样原理,对串口输入的数据(速率≤19.2kb/s),用64kb/s(64>19.2×2)速率进行抽样,根据抽样值能准确地确定原信号[4]。本文以如图3所示的串口1与串口5间的数据透传为例进行说明,其工作过程描述如下:首先,通过CPU控制FPGA,使串口1和串口5工作在透传模式下,将串口1的L_RD1数据线连接到FPGA的编/解码器,编/解码器以64Kb/s的速率对串口数据进行采样,并将采样数据放到U接口中的一个B通道的一个时隙上进行传输。通过ISDN通道传输到另一个的U接口,该U接口将透传的数据送往本地FPGA,并经过FPGA编/解码器后将数据送往串口5,这样便完成了数据从串口1到串口5的透传。同理,可实现数据从串口5到串口1的透传。本设计串口数据的FPGA编/解码功能的实现采用VHDL语言编写。编码时,根据抽样原理采用64kb/s速率进行采样便可;解码时,只需将FPGA收到的数据以64Kb/s速率发往LTC1387的收数据端口即可。其功能实现代码如下所示。其中CLK2M为2MHz时钟信号,C64K为与2MHz时钟信号的下降沿对齐的64kb/s采样信号,C64K_1n的上升沿与C64K信号的下降沿对齐且其高电平宽度为(1/2M)s,DATA_SR为串口输入的数据,DATA_SR_N为串口输入数据的取反,Q为编码后的数据,asyn_out为解码后送给串口的数据。
下面是FPGA编/解码器编码部分的代码:
process(CLK2M,C64K)
begin
if C64K=′1′ then QQ1 <=(others=>′0′);else if CLK2M′
event and CLK=′1′ then if DATA_SR=′1′ then
QQ1 <=QQ1+1;end if;end if;
end process;
Q1 <=QQ1;
process(CLK2M,C64K)
begin
if C64K=′1′ then QQ <=(others =>′0′);else if CLK2M′
event and CLK2M=′1′ then if DATA_SR_N=′1′ then
QQ2 <=QQ2+1;end if;end if;
end process;
Q2 <=QQ2;
Q1_compare_Q2<=′1′ when Q1(7 downto 0)>Q2(7 downto 0)
else ′0′;
process(CLK2M)
begin
if CLK2M′ event and CLK2M=′1′ then if C64K_1n=′1′ then
Q<=Q1_compare_Q2;end if;end if;
end process;
以下为FPGA编/解码器解码部分的代码:
process(CLK2M,F8K)
begin
if CLK2M′event and CLK2M=′1′ then if F8K=′0′ then
p<=(others =>′0′);else p<=p+1;end if;end if;
count<=p;
end process;
process(count(7 downto 5)) --msb comes out first;
begin
case count(7 downto 5) is
when ″000″=>Dout <=locked_ts(7);--locked_ts存储的数据为解码前的串口数据
when ″001″=>Dout<=locked_ts(6);
when ″010″=>Dout<=locked_ts(5);
when ″011″=>Dout<=locked_ts(4);
when ″100″=>Dout<=locked_ts(3);
when ″101″=>Dout<=locked_ts(2);
when ″110″=>Dout<=locked_ts(1);
when ″111″=>Dout<=locked_ts(0);
when others=>Dout<=′Z′;
end case;
end process;
asyn_out<=′0′ or Dout;
2.2 数字交换网络功能的实现
数字交换网络是通信卡实现数据交换的核心部分,其基本功能是在两个不同时隙间进行交换(每个时隙对应一个用户)。数字交换网络由数据存储器和控制存储器两部分组成。数据存储器的工作方式是“顺序写入,控制读出”,即由定时脉冲控制,按顺序将不同时隙的数据写入相应的单元中,写入的单元号和时隙号一一对应,读出时则要根据控制存储器的控制信息(读出数据)进行;控制存储器是“控制写入,顺序读出”,即数据写入由CPU控制进行,而数据读出由定时脉冲控制,按照时隙号读出相对应单元内容[5]。
本设计的交换网容量为128(条)×128(条),假设基地址为BASE_ADDR,按单字节寻址,每个地址代表接收时隙号(目的时隙号),该地址对应的内容字节最高位指示是否做交换,“0”代表不交换,“1”代表做交换,低7位数据表示发送时隙号(源时隙号)。例如:要将N时隙发送到M时隙,使用如下等式:BASE_ADDR[M]=N|0X80,其中BASE_ADDR[M]为(BASE_ADDR+M)的地址;BASE_ADDR[M]=N|0X80表示将N与0X80相或后的值赋予(BASE_ADDR+M)的地址空间。
通信卡FPGA数字交换网络的VHDL语言实现代码如下所示。其中CLK2M为2MHz时钟信号,F8K_1D为与CLK2M上升沿对齐的同步信号。
process(CLK2M) --产生读CM的地址
begin
if CLK2M′event and CLK2M=′0′ then if F8K_1D=′0′ then
sm_ram_addr(6 downto 0)<=″0000001″;
else sm_ram_addr(6 downto 0)<=sm_ram_addr(6 downto 0)+1;
end if;end if;end if;
end process;
cm_ram_addr(6 downto 0)<=sm_ram_addr(6 downto 0)–′1′;
DRAM_SM:dual_ram_8_128 --数据存储器
PORT MAP( addra =>sm_ram_addr(6 downto 0),
addrb =>cm_to_sm_addr(6 downto 0),
clka =>CLK2M,
clkb =>not CLK2M,
dina =>sm_in_data(7 downto 0), --数据存储器输入数据
doutb =>sm_out_data(7 downto 0),--数据存储器读出数据
ena =>′1′,
enb =>cm_to_sm_addr(7),--是否允许数据输出
wea =>′1′);
DRAM_CM:dual_ram_8_128 --控制存储器
PORT MAP( addra =>cpu_a(6 downto 0), --cpu地址
addrb =>cm_ram_addr(6 downto 0),
clka =>cpu_clk, --cpu时钟信号
clkb =>CLK2M,
dina =>cpu_din(7 downto 0),--cpu输入数据
doutb =>cm_to_sm_addr(7 downto 0),
ena =>not cs,--cs为FPGA的片选信号
enb =>′1′,
wea =>not cpu_rw);--cpu_rw为cpu的读写信号
基于FPGA设计的通信卡具有灵活性强、可控性好、硬件构架简单等优点。通信卡在实际应用中,很好地实现了各接口间的数据通信且其性能非常稳定。另外,通信卡能根据需要对一些功能进行删除和添加,方便了系统功能的调试,满足了用户的不同需求。
参考文献
[1] 王俊雄,黄铉,刘正义.基于FPGA的嵌入式系统设计.电子工程师,2006,(10).
[2] 陈晓竹,道克刚.PowerPC860嵌入式系统及应用.北京:机械工业出版社,2006.
[3] 钱志军,邓志宏.MC145572 ISDN U接口收发器与MC145574 ISDN S/T接口收发器用户手册.北京:人民邮电出版社,1998.
[4] 樊昌信,张甫翊.通信原理(第5版).国防工业出版社,2002.
[5] 叶敏.程控数字交换与现代通信网.北京:北京邮电大学出版社,1997.