📄 hdb3decoder.vhd
字号:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
entity HDB3DECODER is
port(POS_IN,NEG_IN: in std_logic;
CLK,CLR: in std_logic;
NRZ: out std_logic);
end ENTITY HDB3DECODER;
ARCHITECTURE ONE of HDB3DECODER is
SIGNAL SEQUENCE: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL POS_FLAG, NEG_FLAG: STD_LOGIC;
SIGNAL POS_IN_TMP,NEG_IN_TMP: STD_LOGIC;
BEGIN
P1: PROCESS(CLR,CLK)
BEGIN
IF CLR='0' THEN
SEQUENCE<="0000";
ELSIF CLK'EVENT AND CLK='0' THEN
IF POS_IN_TMP='1' AND NEG_IN_TMP='0' THEN
IF SEQUENCE(2 DOWNTO 0)="100" AND POS_FLAG='1' THEN
SEQUENCE<="0000";
ELSIF SEQUENCE="1000" AND POS_FLAG='1' THEN
SEQUENCE(3 DOWNTO 1)<=SEQUENCE(2 DOWNTO 0);
SEQUENCE(0)<='0';
ELSE
SEQUENCE(3 DOWNTO 1)<=SEQUENCE(2 DOWNTO 0);
SEQUENCE(0)<='1';
END IF;
ELSIF POS_IN_TMP='0' AND NEG_IN_TMP='1' THEN
IF SEQUENCE(2 DOWNTO 0)="100" AND NEG_FLAG='1' THEN
SEQUENCE<="0000";
ELSIF SEQUENCE="1000" AND NEG_FLAG='1' THEN
SEQUENCE<="0000";
ELSE
SEQUENCE(3 DOWNTO 1)<=SEQUENCE(2 DOWNTO 0);
SEQUENCE(0)<='1';
END IF;
ELSE
SEQUENCE(3 DOWNTO 1)<=SEQUENCE(2 DOWNTO 0);
SEQUENCE(0)<='0';
END IF;
END IF;
END PROCESS P1;
P2:PROCESS(CLR,CLK)
BEGIN
IF CLR='0' THEN
POS_IN_TMP<='0';
NEG_IN_TMP<='0';
NRZ<='0';
ELSIF CLK'EVENT AND CLK='1' THEN
POS_IN_TMP<=POS_IN;
NEG_IN_TMP<=NEG_IN;
NRZ<=SEQUENCE(3);
END IF;
END PROCESS P2;
P3: PROCESS(CLR,CLK)
BEGIN
IF CLR='0' THEN
POS_FLAG<='0';
NEG_FLAG<='0';
ELSIF CLK'EVENT AND CLK='0' THEN
IF POS_IN_TMP='1' AND NEG_IN_TMP='0' THEN
POS_FLAG<='1';
NEG_FLAG<='0';
ELSIF POS_IN_TMP='0' AND NEG_IN_TMP='1' THEN
POS_FLAG<='0';
NEG_FLAG<='1';
ELSE
NULL;
END IF;
END IF;
END PROCESS P3;
END ONE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -