AS - 001基于FPGA的HDB3编译码的建模与实现 - 图文(3)

2020-02-21 13:27

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

ADD_V: PROCESS(CLK,CLR) --添加破坏符号V程序 BEGIN

IF(CLK'EVENT AND CLK='1')THEN IF(CLR='1')THEN CODEOUTV<=\ COUNT0<=0; ELSE

CASE CODEIN IS

WHEN '1'=>CODEOUTV<=\ --01表示1 COUNT0<=0; WHEN '0'=>

IF(COUNT0=3)THEN COUNT0_S<='1'; CODEOUTV<=\ COUNT0<=0; ???????????? END PROCESS ADD_V; S0(0)<=CODEOUTV(0); S1(0)<=CODEOUTV(1);

此添加破坏符号“V”功能程序设计了一个计数器COUNT0,用来作为应添加破坏符号“V”符号的标志。例如在程序代码中当CODEIN=1表示输入的信号为“1”COUNT0不计数,代码输出为CODEOUTV<=“01”,当CODEIN=0时表示输入的代码为“0”,此时判断COUNT0的状态,如果为“3”,则COUNT0_S=1,CODEOUTV=11,计“0”计数器COUNT0清0,即代码:COUNT0_S<='1'; CODEOUTV<=“11”;COUNT0<=0;这都是在进程PROCESS中,通过条件控制语句CASE完成添加破坏符号“V”功能。

假设输入某信息序列,根据设计思想,输入代码一添加破坏符号“V”后的关系如下:

信息序列: 10000100001100011

添加破坏符号V后:0100000011010000001101010000000101

2.添加符号“B”的实现

根据HDB3码的编码规则可知:添加破坏符号“V”模块的功能是为了保证

9

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

附加“V”符号后的序列不破坏“极性交替反转”造成的无直流特性,即当相邻“V”符号之间有偶数个非0符号的时候,把后一小段的第一个“0”变换成一个非破坏符号——“B”符号。如图3.3所示。

其中:

① FIRSTV作为前面是否出现“11”即符号“V”的标志位,其中0表示前面没有出现V,1表示前面已经出现过符号V。

② COUNT1作为记非0符号的奇偶数,其中0表示为偶数,1表示为奇数。 ③ FIRST_1遇1状态寄存器,1表示前面遇到过1,0表示没有遇到过。 ④ 在本程序中用“10”来标识符号“B”。 ⑤ 在本程序中用“01”来标识符号“1”。 ⑥ 在本程序中用“00”来标识符号“0”。 ⑦ 在本程序中用“11”来标识符号“V”。 代码 标识符

0 00 1 01 V 11 B 10

图3.3 添加符号“B”符号流程图

如图3.3所示可知,此添加符号“B”模块涉及到一个有现在事件的状态决定过去事件状态的问题,其次还有如何确定是“1”,还是“V”的问题,是本毕业设计所遇到的第一个难点。本程序处理难点的思路是:先把码元(经过添加破坏符号“V”处理过的)放入一个四位的移位寄存器中,在同步脉冲(时钟信号)

10

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

的作用下,同时进行是否添加符号“B”的判决,等到码元从移位寄存器里出来的时候,就可以决定是应该变换成“B”符号,还是照原码输出。因此,在程序的结构中进行元件声明(Component Declaration),调用库里的D触发来实现延迟作用。为了使程序的流程更加清晰,用了四个元件例化语句(Component Instantiation)——DFFX:DFF PORT MAP(),来说明信号的流向。

所谓元件例化就是引入一种连接关系,将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定的端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。在此程序中,当前的设计实体相当于一个较大的电路系统,所定义的例化元件相当于一个要插在这个电路系统板上的芯片,而当前设计实体中所指定的端口则相当于这块电路板准备接收此芯片的一个插座。元件例化是使VHDL设计实体构成自上而下层次化设计的一种重要途径。 以下给出添加符号“B”模块的部分程序,完整的程序见附录一。

DS11: DFF PORT MAP(S1(0),CLK,S1(1)); DS01: DFF PORT MAP(S0(0),CLK,S0(1)); DS12: DFF PORT MAP(S1(1),CLK,S1(2)); DS02: DFF PORT MAP(S0(1),CLK,S0(2)); DS13: DFF PORT MAP(S1(2),CLK,S1(3));

DS03: DFF PORT MAP(S0(2),CLK,S0(3)); --调元件DFF,即D触发器 BCLK: CLKB<=NOT CLK; ADD_B: PROCESS(CLKB) BEGIN

IF(CLKB'EVENT AND CLKB='1')THEN IF(CODEOUTV=\ ?????????? ELSIF(CODEOUTV=\

IF(COUNT1=0)THEN

FIRST_1<='1';

COUNT1<=1; S1(4)<=S1(3); S0(4)<=S0(3); ELSE

S1(4)<=S1(3);

S0(4)<=S0(3); END IF;

11

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

ELSE

COUNT1<=COUNT1; S1(4)<=S1(3); S0(4)<=S0(3); END IF; END IF;

END PROCESS ADD_B; CODEOUTB<=S1(4)&S0(4);

在此添加“B”的功能模块中,例如程序代码为:

(CODEOUTV=\

IF(COUNT1=0)THEN

FIRST_1<='1';

COUNT1<=1; S1(4)<=S1(3);

S0(4)<=S0(3);

表示当输入的代码CODEOUTV=01即1时,判断计“1”计数器COUNT1的状态,当为0时,即V之间的非0符号为偶数时,对遇一寄存器FIRST_1赋1,计“1”计数器COUNT1赋1,移位寄存器里的数值分别向高位移一位。

3.3编码中单/双极性转换的实现

3.3.1单/双极性转换的流程图

根据HDB3码的编码规则,可知 “V”的极性是正负交替变换的,而余下的“1”和“B”本毕业设计把其看成为一体且是正负交替变换的,同时满足“V”的极性与前面的非零码极性一致。由此本毕业设计就把“1”和“B”看成一组,而“V”单独作为一组来做正负交替变换。同时,从3.2.2节中的第2小节的代码中可知,“1”、 “V”,“B”已经分别用双相码“01”,“11”,“10”标识,所以对“1”,“V”, “B”的正负交替变换很容易实现。由此可得到程序流程图如图3.4、图3.5、图3.6所示。

12

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

图3.4 单双极性变换控制的程序流程图—“01”和“10”部分

图3.5 单双极性变换控制的程序流程图—“11”部分

图3.6单双极性变换控制的程序流程图--“00”部分

13


AS - 001基于FPGA的HDB3编译码的建模与实现 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2012修理厂激励方案(暂行)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: