序列检测器仿真结果

序列检测器仿真结果

 

1,序列发生器

设计了一个码型长度为256的8位宽度的伪随机序列。反馈方程为:f(x)=x8+x3+X2+X1+1;

在程序设计中,用shift_reg[6:0]表示这8位宽度,用shift_reg[7]表示输出,并将反馈函数通过移位操作送进下一个时钟的移位寄存器中。其中,反馈函数的值为:feedback = Shift_reg[0]^Shift_reg[1]^Shift_reg[2]^Shift_reg[7];即对应着上面反馈函数中的:x8+x3+X2+X1

 

 

 

如图,使用modelsim仿真可以得到,红色的曲线输出的就是随机序列。

2,误码插入

设计了一个长度为256的计数器,用来控制对特定输出的系列信号进行取反操作。由于使用了时钟触发,故而输出比输入的序列延迟一个时钟。

 

核心代码如下:

process(clk)

begin

if rising_edge(clk)then

case cnt_m is-----取反12位

when 11 =>m_o<=not m_i;

when 33 =>m_o<=not m_i

when 55=>m_o<=not m_i;

when 88 =>   m_o<=not m_i;

when 111 =>m_o<=not m_i;

when 133 =>m_o<=not m_i;

when 155 =>m_o<=not m_i;

when 166 =>m_o<=not m_i;

when 199 =>m_o<=not m_i;

when 211 =>m_o<=not m_i;

when 233 =>m_o<=not m_i;

when 245 =>m_o<=not m_i;

when others=>m_o<=m_i;

end case;

end if;

end process;


 

modelsim的仿真结果:

 

 

从图中也能看出,正常情况下,输出m_o比输入M_i延迟一个时钟,当cnt_m为11,33时,输出的信号m_O是输入信号m_i的取反信号。

3,误码统计单元

该单元用来统计每接收到的256个经过模拟信道的输出码中,通过和标准码进行对比,来统计其中有多少个错误码。

核心代码如下:

process(clk,rst,start)

begin

if rst='0'then

m<=0;

cnt<=1;

elsif rising_edge(clk)then

if start='0' then

m<=0;

cnt<=1;

else--同步成功使能有效时

if cnt>=255 then--循环255个时钟周期内,对比接收和本地M序列,统计误码数

err_cnt<=m;

cnt<=1;

m<=0;

else

cnt<=cnt+1;

end if;

if m_1 /= m_loc then--对比不相同,误码数+1

m<=m+1;

end if;

end if;

end if;

end process;

 

如图,modelsim下的仿真如图所示:当计数满255时,将误码统计数进行锁存输出,如图,此次统计到的256个错误码中有12个错误码,符合我们上面模块插入错误码的数量。

 

4,同步模块

在将经过模拟信道输出的序列信号和标准码进行比较前,需要先将输出码和标准码进行同步,同步通过状态机进行设计。

 

 

St0表示起始状态,st1是用来计数,当接收到连续15个序列码中错误码不超过3个时,表示码同步成功,进入状态st2,进行错误码数量的统计。若连续15个序列码中错误码超过3个时,进入st3状态,表示同步未成功。对本地码进行暂停一个周期,从新进入状态st0重新同步。直到同步成功,状态维持在st2,此时start信号有效,进行错误码数量的统计。

5,显示模块

显示模块分为数字解码模块和显示驱动模块。

数字解码模块将一个10进制的数的各个位分解出来,用于显示模块使用。

显示模块实现对数码管的动态扫描。依次显示刷新解码出的10进制的各个位。

 

 

6,顶层电路设计

将各个子模块例化到顶层模块,生成下列的方块图:

 

syn_reset_inst:用于产生同步复位信号。

sim_channel_inst:用于模拟通信信道。实际操作为生成m序列码并插入错误码。

local_m_sequence_inst:本地序列码生成器。用于和信道输出码进行比较,用于统计错误码的数量。

Code_Sync_inst:码同步模块。用于把本地码和模拟信道输出码进行同步。

Error_Code_Counter_inst:错误码计数模块。用于统计错误码的数量。

err_cnt_display_inst:错误码数量显示模块。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值