武汉理工大学《FPGA原理与应用》课程设计说明书
variable latch_cfm : std_logic; --差分码信号寄存器 variable latch_cnt : std_logic; --基带码同步信号 variable count_fri : integer range 0 to 8; --分频计数器(码宽定义) variable count_mov : integer range 0 to 16; --移位计数器 begin
if start='0' then latch_cnt:='0'; --异步复位 latch_cfm:='0'; latch_sig:='0';
count_fri:=7;count_mov:=16; --异步置位 latch_dat:=\
elsif rising_edge(clk) then count_fri:=count_fri+1; --分频计数器+1 if count_fri=8 then count_fri:=0; --计数到8
if count_mov<16 then count_mov:=count_mov+1; --移位计数器+1 latch_sig:=latch_dat(15); --二进制码高位移入latch_sig 中 latch_dat:=latch_dat(14 downto 0)&'0'; --二进制数据向高位移动一位,低位补零 else latch_dat:=dat;count_mov:=0; --载入下一轮将发送的数据 latch_cfm:='0';latch_sig:='0';latch_cnt:='0'; --寄存器复位 end if;
if latch_sig='1' then latch_cfm:=not(latch_cfm); --差分码信号寄存器中信号取反 end if; end if;
if count_fri<4 then latch_cnt:='1'; --基带码同步信号的占空比调节 else latch_cnt:='0';
end if; end if; --码形转换部分 NRZ<=latch_sig; --非归零码信号 DRZ<=latch_sig and latch_cnt; --单极性归零码信号 SRZ(0)<=latch_cnt; --双极性归零码信号 SRZ(1)<=not(latch_sig); --SRZ(1)=‘1’表示负极性 AMI(0)<=latch_sig and latch_cnt; --极性交替码信号
AMI(1)<=not(latch_cfm); --AMI(1)=‘1’表示负极性 CFM<=latch_cfm; --差分码信号
12
武汉理工大学《FPGA原理与应用》课程设计说明书
FXM<=latch_cnt xnor latch_sig; --分相码信号 if latch_sig='1' then CMI<=latch_cfm; --编码信号反转码 else CMI<=not(latch_cnt); end if; end process; end Behavioral;
5.2 软件仿真及结果分析
5.2.1 器件仿真结果
设计的器件形状如图5-1,有3 输入,9 输出。CLK 是时钟信号输入,START 是始能输入,高电平有效,DAT 是16 位2 进制数据输入,FS 是帧同步信号输出,NRZ 是非归零码输出,DRZ 是单极性归零码输出,SRZ 是双极性归零码输出,高位作为符号位,0 为正,1 为负,AMI 是极性交替码输出,高位作为符号位,0 为正,1 为负,HDB3 是三阶高密度双极性码输出,高位作为符号位,0 为正,1 为负,CFM 是差分码输出,CMI 是编码信号反转码输出,FXM 是分相码(曼彻斯特码)输出。
图5-1 器件模型
5.2.2 波形仿真结果
运行程序后所得波形如图所示:
13
武汉理工大学《FPGA原理与应用》课程设计说明书
图5-2 NRZ仿真波形
从图5-2 可以看出,START 为高电平时,开始编码,每8 个时钟信号作为一个码元,上升沿触发,输入数据为1100111010100011,FS 作为帧同步信号,每次跳变为高电平时表示帧的开始,且高电平期间输出的是0 和7 位巴克码1110010,SRZ0 作为位同步信号,跳变一次为一个码元,可以看出NRZ 输出符合单极性非归零码的编码规则,其输出数据为1100111010100011。
图5-3 DRZ仿真波形
从图5-3 可以看出,与前面相同,DRZ 输出符合单极性归零码的编码规则。
图5-4 CFM波形结果
从图5-4 可以看出,与前面相同,CFM 输出符合差分码的编码规则。
14
武汉理工大学《FPGA原理与应用》课程设计说明书
图5-5 CMI波形结果
从图5-5 可以看出,与前面相同,CMI 输出符合传号反转码的编码规则。
图5-6 FXM仿真结果
从图5-6 可以看出,与前面相同,FXM 输出符合分相码的编码规则。
图5-7 SRZ仿真结果
从图5-7 可以看出,与前面相同,SRZ1 作为SRZ 的符号位,高电平表示负极性,再通过外部电路,即可实现双极性归零码的波形输出。
15
武汉理工大学《FPGA原理与应用》课程设计说明书
图5-8 AMI仿真结果
从图5-8 可以看出,与前面相同,AMI1 作为AMI 的符号位,高电平表示负极性,再通过外部电路,即可实现交替极性码的波形输出。
图5-9 综合仿真波形
如图5-9综合仿真波形所示,START 为高电平时,开始编码,每8 个时钟信号作为一个码元,上升沿触发,输入数据为1100111010100011,FS 作为帧同步信号,每次跳变为高电平时表示帧的开始,且高电平期间输出的是0 和7 位巴克码1110010,SRZ0 作为位同步信号,跳变一次为一个码元,可以看出NRZ 输出符合单极性非归零码的编码规则,其输出数据为1100111010100011。DRZ 输出符合单极性归零码的编码规则。CFM 输出符合差分码的编码规则。CMI 输出符合传号反转码的编码规则。FXM 输出符合分相码的编码规则。SRZ1 作为SRZ 的符号位,高电平表示负极性,再通过外部电路,即可实现双极性归零码的波形输出。AMI1 作为AMI 的符号位,高电平表示负极性,再通过外部电路,即可实现交替极性码的波形输出。
16