数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx

上传人:b****4 文档编号:12022834 上传时间:2023-04-16 格式:DOCX 页数:21 大小:695.02KB
下载 相关 举报
数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx_第1页
第1页 / 共21页
数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx_第2页
第2页 / 共21页
数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx_第3页
第3页 / 共21页
数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx_第4页
第4页 / 共21页
数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx

《数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx》由会员分享,可在线阅读,更多相关《数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx(21页珍藏版)》请在冰豆网上搜索。

数字逻辑电路课程设计4B5B编码VHDL实现含完整代码.docx

数字逻辑电路课程设计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语言的实现换成了实在的对电路器件与功能的描述。

并且感谢同学及老师在试验中的帮助!

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1