⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decoder.vhd

📁 《CPLD_FPGA设计及应用》课件与实例
💻 VHD
字号:
--分频与计数
PROCESS(clk2x,clr,den)         
BEGIN
IF(clr='1')THEN                             --清零
count17<="00000"; 
ELSIF(clk2x'EVENT AND clk2x='1')THEN        --clk2x上升沿
IF(count17="10000")THEN
count17<="00000";                           --计数0-16即17计数
ELSIF(den='1')THEN
count17<=count17+'1';
END IF;
END IF;
END PROCESS;

--同步字头检测
IF(clk1x'EVENT AND clk1x='1')THEN
reg1<=d;reg2<=reg1;reg3<=reg2;          --6位移位寄存器
reg4<=reg3;reg5<=reg4;reg6<=reg5;
IF(clr='1')THEN
cd<='0';
ELSIF((reg1='1' AND reg2='1' AND reg3='1')AND(reg4='0' AND reg5='0' AND reg6='0'))THEN
cd<='0';
ELSIF((reg1='0' AND reg2='0' AND reg3='0')AND(reg4='1' AND reg5='1' AND reg6='1'))THEN
cd<='1';                                       --判别数据类型
END IF;
END IF;

IF(clk1x'EVENT AND clk1x='1')THEN               --计0,1个数
IF(clr='1' OR ct1="111" OR ct0="111")THEN
ct1<="000";ct0<="000";
ELSIF(d='1')THEN
ct0<="000";
ct1<=ct1+"001";                                --出现1,ct1加1,ct0清零
ELSIF(d='0')THEN
ct1<="000";
ct0<=ct0+"001";                                --出现0,ct1清零,ct0加1
END IF;
END IF;

IF(clr='1' OR count17="10000")THEN          
sc<='0';
ELSIF(ct0="010")THEN
sc<='1';
END IF;
IF(clr='1' OR count17="10000")THEN
sd<='0';
ELSIF(ct1="010")THEN
sd<='1';                 --sc,sd分别为ct0,ct1计数到3个的0或1产生的信号
END IF;
IF(clr='1' OR count17="10000")THEN
den<='0';
ELSIF(sc='1' AND sd='1')THEN   --sc=1,sd=1说明出现了111000或000111的数据
den<='1';                      --信号den为高表示解码周期开始
ELSE
den<='0';
END IF;
IF(count17>="00000" AND count17<="01111")THEN
sentd<='1' AND den;            --生成sentd信号,后面再将其输出到sentdata
ELSE
sentd<='0';
END IF;

--解码与奇校验
IF(clr='1')THEN
data<='0';
END IF;
data<=NOT(clk2x XOR d);                 --解码
IF(count17="10000")THEN
jo<=data;                               --jo为编码的奇校验
ELSE
jo<='0';
END IF;
IF(clk2x'EVENT AND clk2x='1')THEN
IF(sentd='1')THEN
jojy<=jojy XOR d;                       --jojy为解码输出数据的奇校验
ELSE
jojy<='0';
END IF;
END IF;

IF(clr='1')THEN
f<='0';
ELSIF(count17="10000")THEN
f<=jo XOR jojy;                          --判断数据是否有错误
ELSE
f<='0';
END IF;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -