VHDL语言实现的帧同步算法
扫描二维码
随时随地手机看文章
1 工作原理
实现帧同步的基本方法是在发送端预先规定的时隙,即帧同步码时隙,插入一组特殊码型的帧同步码组。在接收端利用同步码的自相关性确定帧的同步位置。帧同步码组可以是集中插入的,也可以是分散插入的。对于分散的帧同步码插入方式,其工作原理与集中插入方式相类似,下面就以集中插入帧同步码为例来说明帧同步的工作原理。
帧同步过程有搜索态、校核态和同步态。其状态转换图如图1所示。
搜索态 在数据接收的起始时刻或帧未同步时,帧同步进入搜索态。在数据流中寻找帧同步码(111lOlOOOO);当数据流与帧同步码相同时,表明已搜索到一个同步帧头;可启动进入帧同步的校核状态。
校核态 为了防止信号中出现虚假同步;找到第1组同步码后跳过1帧长度必须再次确认帧同步码。若连续经过M帧同步码确认均同步正确,则系统立即转入同步状态;否则存在假同步;返回搜索态。由首次搜索到帧同步头到进入同步态的M帧时叫后方保护时间。
同步态 帧同步处于同步状态时;若连续N帧帧同步正确则仍保持在同步状态。考虑到接收的数据流帧同步码可能受外界干扰而存在误码,在同步状态中只有连续N帧丢失同步码才进入失步状态,并返回搜索态。其中N帧时叫前方保护时间。由于有前方保护时间,在接收过程中虽然出现某帧同步码误码,但系统并不会立即进入失步状态。由此可减少因误码而进入失步状态的可能性。
2 帧同步实现
我们VHDL语言实现了帧同步的设计,设计程序如下:
首先对相关参数进行定义:
type state_type is (s0,s1,s2);
//系统状态(搜索态、校核态、同步态)
constant syn_code:bit_vector:=〞110100〞; //帧同步码
constant syn_code_length:integer:=6; //帧同步码长度
constant max_m:integer:=2; //前方保护帧数
constant max_n:integer:=3; //后方保护帧数
variable m:integer range 0 to max_m:=0;
//连续获取同步码数
variable n:integer range 0 to max_n:=0;
//连续丢失同步码数
variable reg:bit_vector(syn_code_length downto 1);
//移位寄存器
variable state:state_type:=s0; //初始状态
其次,把接收到的数据送人移位寄存器,并对送人的数据同步码检测。当系统处于不同状态时,其状态转换如下:
(1)在搜索态,其VHDL语言描述如下:
if(clk'event and clk='1')then
case state is
when so=>if(reg=syn_code)then //搜索态
state:=sl;
m:=1,
else
m:=0;
end if;
(2)在校核态,其VHDL语言描述如下
if(clk'event and clk='1')then
case state is
when s1=>if(reg=syn_code)then //校核态
m:=m+1;
if(m=max_m)then
state:=s2;
m:=O;
end if;
else
state:=s0;
m:=0;
end if;
(3)在同步态,其VHDL语言描述如下:
if(clk'event and clk='1')then
case state is
when s2=>if(reg=syn_code)then //同步态
n:=0;
else
n:=n+1;
if(n=max_n)then
state:=s0;
n:=Os
end if
end if
3 系统仿真
假定同步码为110100,帧长为14,前方保护为2帧,后方保护为3帧,输人数据data为:
010 11010001010100 010 11010001010100 1010001010100 01010101010100 11010001010100 10000001010100 10000001010100 10000001010100 10
则输出syn的仿真波形如图2所示。
由图2可以看出,系统刚开始时处于搜索态,当系统捕获到同步码时,即进入校核态;当系统连续2次捕获到同步码时,系统进入同步状态。在同步态,系统只有连续3次丢失帧同步码时才确认失步,重新进入搜索态。在具体应用中,可根据实际需要对程序中的同步码、帧长、前后方保护时间进行调整,使系统处于最佳工作状态。
4 结 语
由于VHDL对设计的描述具有相对独立性,因此设计者可以不懂硬件的结构,只需知道设计的目标。这种设计方法集设计、模拟、综合为一体的设计方法,能有效地缩短电路设计周期,减少可能发生的错误,降低了开发成本,在未来现代数字系统中将会起着越来越重要的作用。用VHDL来进行数字系统设计既方便又简单,还具有良好的可移植性和维护性,代表着现代数字系统设计的走向。