数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx
《数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx》由会员分享,可在线阅读,更多相关《数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx(21页珍藏版)》请在冰豆网上搜索。
![数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx](https://file1.bdocx.com/fileroot1/2023-4/16/492a6130-71a2-4c3f-85d8-2d38b34d5c68/492a6130-71a2-4c3f-85d8-2d38b34d5c681.gif)
数字逻辑电路课程设计4B5B编码VHDL实现含完整代码
电子科技大学
UNIVERSITYOFELECTRONICSCIENCEANDTECHNOLOGYOFCHINA
数字逻辑设计
实验报告
实验题目:
4B5B编码器
学生姓名:
指导老师:
一、实验内容
4B/5B编码是百兆以太网中线路层编码类型之一,该试验需要实现用5bit的二进制数来表示4bit二进制数。
二、实验要求
1、功能性要求:
能够实现4B5B编码,即输入4bit数据时能输出正确的5bit编码结果。
2、算法要求:
利用卡诺图对编码真值表进行化简,得出其逻辑表达式,并基于此进行硬件设计。
3、设计性要求:
使用代码及原理图两种设计方式来进行设计。
采用基本门结构化描述。
能够编写TestBench文件,并利用Modelsim进行仿真。
三、实验原理及设计思路
1、实验原理:
在IEEE802.9a等时以太网标准中的4B:
5B编码方案,因其效率高和容易实现而被采用。
这种编码的特点是将欲发送的数据流每4bit作为一个组,然后按照4B/5B编码规则将其转换成相应5bit码。
5bit码共有32种组合,但只采用其中的16种对应4bit码的16种,其他的16种或者未用或者用作控制码,以表示帧的开始和结束、光纤线路的状态(静止、空闲、暂停)等。
4B5B编码表如下:
2、设计思路:
(1)整体思路:
对已知的编码真值表,首先利用卡诺图对其进行化简,得出其逻辑表达式,再用基本门结构将其实现。
(2)卡诺图与表达式:
设输入的4位编码为:
ABCD,输出的5位编码为:
VWXYZ,则分别画出其卡诺图并得出表达式如下:
1.V:
V=A+B’D’+B’C
2.W:
W=B+A’C’
3.X:
X=C+A’B’D’
4.Y:
Y=A’B+AB’+C’D’+AC’
5.Z:
Z=D
(3)基本门结构设计:
由上述表达式可见,用到的基本门有:
非门、2输入与门、3输入与门、2输入或门、3输入或门、4输入或门,用not、and、or将其一一表示出即可。
四、程序设计
1、顶层模块:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
entitymainis
Port(a:
inSTD_LOGIC;
b:
inSTD_LOGIC;
c:
inSTD_LOGIC;
d:
inSTD_LOGIC;
v:
outSTD_LOGIC;
w:
outSTD_LOGIC;
x:
outSTD_LOGIC;
y:
outSTD_LOGIC;
z:
outSTD_LOGIC);
endmain;
architectureBehavioralofmainis
COMPONENTnoti
PORT(
i:
INstd_logic;
o:
OUTstd_logic
);
ENDCOMPONENT;
COMPONENTand2i
PORT(
i1:
INstd_logic;
i2:
INstd_logic;
o:
OUTstd_logic
);
ENDCOMPONENT;
COMPONENTand3i
PORT(
i1:
INstd_logic;
i2:
INstd_logic;
i3:
INstd_logic;
o:
OUTstd_logic
);
ENDCOMPONENT;
COMPONENTor2i
PORT(
i1:
INstd_logic;
i2:
INstd_logic;
o:
OUTstd_logic
);
ENDCOMPONENT;
COMPONENTor3i
PORT(
i1:
INstd_logic;
i2:
INstd_logic;
i3:
INstd_logic;
o:
OUTstd_logic
);
ENDCOMPONENT;
COMPONENTor4i
PORT(
i1:
INstd_logic;
i2:
INstd_logic;
i3:
INstd_logic;
i4:
INstd_logic;
o:
OUTstd_logic
);
ENDCOMPONENT;
signalnota,notb,notc,notd,v1,v2,v3,w1,w2,x1,x2,y1,y2,y3,y4,vv,ww,xx,yy,zz:
std_logic;
begin
--not--
Inst_noti_nota:
notiPORTMAP(
i=>a,
o=>nota
);
Inst_noti_notb:
notiPORTMAP(
i=>b,
o=>notb
);
Inst_noti_notc:
notiPORTMAP(
i=>c,
o=>notc
);
Inst_noti_notd:
notiPORTMAP(
i=>d,
o=>notd
);
--v--
v1<=a;
Inst_and2i_v2:
and2iPORTMAP(
i1=>notb,
i2=>notd,
o=>v2
);
Inst_and2i_v3:
and2iPORTMAP(
i1=>notb,
i2=>c,
o=>v3
);
Inst_or3i_vv:
or3iPORTMAP(
i1=>v1,
i2=>v2,
i3=>v3,
o=>vv
);
--w--
w1<=b;
Inst_and2i_w2:
and2iPORTMAP(
i1=>nota,
i2=>notc,
o=>w2
);
Inst_or2i_ww:
or2iPORTMAP(
i1=>w1,
i2=>w2,
o=>ww
);
--x--
x1<=c;
Inst_and3i_x2:
and3iPORTMAP(
i1=>nota,
i2=>notb,
i3=>notd,
o=>x2
);
Inst_or2i_xx:
or2iPORTMAP(
i1=>x1,
i2=>x2,
o=>xx
);
--y--
Inst_and2i_y1:
and2iPORTMAP(
i1=>nota,
i2=>b,
o=>y1
);
Inst_and2i_y2:
and2iPORTMAP(
i1=>a,
i2=>notb,
o=>y2
);
Inst_and2i_y3:
and2iPORTMAP(
i1=>notc,
i2=>notd,
o=>y3
);
Inst_and2i_y4:
and2iPORTMAP(
i1=>a,
i2=>notc,
o=>y4
);
Inst_or4i_yy:
or4iPORTMAP(
i1=>y1,
i2=>y2,
i3=>y3,
i4=>y4,
o=>yy
);
--z--
zz<=d;
--not--
Inst_noti_v:
notiPORTMAP(
i=>vv,
o=>v
);
Inst_noti_w:
notiPORTMAP(
i=>ww,
o=>w
);
Inst_noti_x:
notiPORTMAP(
i=>xx,
o=>x
);
Inst_noti_y:
notiPORTMAP(
i=>yy,
o=>y
);
Inst_noti_z:
notiPORTMAP(
i=>zz,
o=>z
);
endBehavioral;
2、非门:
entitynotiis
Port(i:
inSTD_LOGIC;
o:
outSTD_LOGIC);
endnoti;
architectureBehavioralofnotiis
begin
o<=noti;
endBehavioral;
3、2输入与门:
entityand2iis
Port(i1:
inSTD_LOGIC;
i2:
inSTD_LOGIC;
o:
outSTD_LOGIC);
endand2i;
architectureBehavioralofand2iis
begin
o<=i1andi2;
endBehavioral;
4、3输入与门:
entityand3iis
Port(i1:
inSTD_LOGIC;
i2:
inSTD_LOGIC;
i3:
inSTD_LOGIC;
o:
outSTD_LOGIC);
endand3i;
architectureBehavioralofand3iis
begin
o<=i1andi2andi3;
endBehavioral;
5、2输入或门:
entityor2iis
Port(i1:
inSTD_LOGIC;
i2:
inSTD_LOGIC;
o:
outSTD_LOGIC);
endor2i;
architectureBehavioralofor2iis
begin
o<=i1ori2;
endBehavioral;
6、3输入或门:
entityor3iis
Port(i1:
inSTD_LOGIC;
i2:
inSTD_LOGIC;
i3:
inSTD_LOGIC;
o:
outSTD_LOGIC);
endor3i;
architectureBehavioralofor3iis
begin
o<=i1ori2ori3;
endBehavioral;
7、4输入或门:
entityor4iis
Port(i1:
inSTD_LOGIC;
i2:
inSTD_LOGIC;
i3:
inSTD_LOGIC;
i4:
inSTD_LOGIC;
o:
outSTD_LOGIC);
endor4i;
architectureBehavioralofor4iis
begin
o<=i1ori2ori3ori4;
endBehavioral;
五、仿真与硬件调试
1、仿真:
(1)顶层仿真:
1.仿真文件:
LIBRARYieee;
USEieee.std_logic_1164.ALL;
ENTITYtest1IS
ENDtest1;
ARCHITECTUREbehaviorOFtest1IS
--ComponentDeclarationfortheUnitUnderTest(UUT)
COMPONENTmain
PORT(
a:
INstd_logic;
b:
INstd_logic;
c:
INstd_logic;
d:
INstd_logic;
v:
OUTstd_logic;
w:
OUTstd_logic;
x:
OUTstd_logic;
y:
OUTstd_logic;
z:
OUTstd_logic
);
ENDCOMPONENT;
--Inputs
signala:
std_logic:
='0';
signalb:
std_logic:
='0';
signalc:
std_logic:
='0';
signald:
std_logic:
='0';
--Outputs
signalv:
std_logic;
signalw:
std_logic;
signalx:
std_logic;
signaly:
std_logic;
signalz:
std_logic;
--Noclocksdetectedinportlist.Replacebelowwith
--appropriateportname
BEGIN
--InstantiatetheUnitUnderTest(UUT)
uut:
mainPORTMAP(
a=>a,
b=>b,
c=>c,
d=>d,
v=>v,
w=>w,
x=>x,
y=>y,
z=>z
);
--Stimulusprocess
stim_proc:
process
begin
a<='0';b<='0';c<='0';d<='0';
waitfor100ns;
a<='0';b<='0';c<='0';d<='1';
waitfor100ns;
a<='0';b<='0';c<='1';d<='0';
waitfor100ns;
a<='0';b<='0';c<='1';d<='1';
waitfor100ns;
a<='0';b<='1';c<='0';d<='0';
waitfor100ns;
a<='0';b<='1';c<='0';d<='1';
waitfor100ns;
a<='0';b<='1';c<='1';d<='0';
waitfor100ns;
a<='0';b<='1';c<='1';d<='1';
waitfor100ns;
a<='1';b<='0';c<='0';d<='0';
waitfor100ns;
a<='1';b<='0';c<='0';d<='1';
waitfor100ns;
a<='1';b<='0';c<='1';d<='0';
waitfor100ns;
a<='1';b<='0';c<='1';d<='1';
waitfor100ns;
a<='1';b<='1';c<='0';d<='0';
waitfor100ns;
a<='1';b<='1';c<='0';d<='1';
waitfor100ns;
a<='1';b<='1';c<='1';d<='0';
waitfor100ns;
a<='1';b<='1';c<='1';d<='1';
--insertstimulushere
wait;
endprocess;
END;
2.仿真结果:
(2)非门仿真:
(3)2输入与门仿真:
(4)2输入或门仿真:
(5)3输入或门仿真:
(6)4输入或门仿真:
2、硬件调试:
(1)管脚配置:
NET"a"LOC=P6;#sb1
NET"b"LOC=P141;
NET"c"LOC=P136;
NET"d"LOC=P129;
NET"v"LOC=P122;
NET"w"LOC=P123;
NET"x"LOC=P124;
NET"y"LOC=P125;
NET"z"LOC=P126;
(2)调试结果:
如上图所示,4B码为“0000”,其对应的5B码为“11110”。
如上图所示,4B码为“1100”,其对应的5B码为“11010”。
六、结束语
这次实验是我第一次用VHDL编写程序,并对其进行仿真和硬件调试。
虽然这个实验很简单,但是在此过程中我还是有所收获,其中让我收获最大的就是使我在编程时脑海中开始有了“器件描述”的思想,使自己原本脑海中C语言的实现换成了实在的对电路器件与功能的描述。
并且感谢同学及老师在试验中的帮助!