数电第二次实验报告西工大.docx

上传人:b****5 文档编号:27696433 上传时间:2023-07-04 格式:DOCX 页数:18 大小:1.15MB
下载 相关 举报
数电第二次实验报告西工大.docx_第1页
第1页 / 共18页
数电第二次实验报告西工大.docx_第2页
第2页 / 共18页
数电第二次实验报告西工大.docx_第3页
第3页 / 共18页
数电第二次实验报告西工大.docx_第4页
第4页 / 共18页
数电第二次实验报告西工大.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数电第二次实验报告西工大.docx

《数电第二次实验报告西工大.docx》由会员分享,可在线阅读,更多相关《数电第二次实验报告西工大.docx(18页珍藏版)》请在冰豆网上搜索。

数电第二次实验报告西工大.docx

数电第二次实验报告西工大

数电实验2

一.实验目的

1.学习并掌握硬件描述语言(VHDL或VerilogHDL);熟悉门电路的逻辑功能,并用硬件描述语言实现门电路的设计。

2.熟悉中规模器件译码器的逻辑功能,用硬件描述语言实现其设计。

3.熟悉时序电路计数器的逻辑功能,用硬件描述语言实现其设计。

4.熟悉分频电路的逻辑功能,并用硬件描述语言实现其设计。

二.实验设备

1.Quartus开发环境

2.ED0开发板

三.实验内容

要求1:

编写一个异或门逻辑电路,编译程序如下。

1)用QuartusII波形仿真验证;

2)下载到DE0开发板验证。

要求2:

编写一个将二进制码转换成0-F的七段码译码器。

1)用QuartusII波形仿真验证;

2)下载到DE0开发板,利用开发板上的数码管验证。

要求3:

编写一个计数器。

1)用QuartusII波形仿真验证;

2)下载到DE0开发板验证。

要求4:

编写一个能实现占空比50%的5M和50M分频器即两个输出,输出信号频率分别为10Hz和1Hz。

1)下载到DE0开发板验证。

(提示:

利用DE0板上已有的50M晶振作为输入信号,通过开发板上两个的LED灯观察输出信号)。

2)电路框图如下:

扩展内容:

利用已经实现的VHDL模块文件,采用原理图方法,实现0-F计数自动循环显示,频率10Hz。

(提示:

如何将VHDL模块文件在逻辑原理图中应用,参考参考内容5)

四.实验原理

1.实验1实现异或门逻辑电路,VHDL源代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYEXORGATEIS

PORT(A,B:

INSTD_LOGIC;

C:

OUTSTD_LOGIC);

ENDEXORGATE;

ARCHITECTUREfwmOFEXORGATEIS

BEGIN

C<=AXORB;

END;

2.实验2实现一个将二进制码转换成0-F的七段译码器,VHDL源代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYsevendecoderIS

PORT(data_in:

INSTD_LOGIC_VECTOR(3DOWNTO0);

dis_out:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDsevendecoder;

ARCHITECTUREfwmOFsevendecoderIS

BEGIN

PROCESS(data_in)

BEGIN

CASEdata_inIS

WHEN"0000"=>dis_out<="1000000";--显示0

WHEN"0001"=>dis_out<="1111001";--显示1

WHEN"0010"=>dis_out<="0100100";--显示2

WHEN"0011"=>dis_out<="0110000";--显示3

WHEN"0100"=>dis_out<="0011001";--显示4

WHEN"0101"=>dis_out<="0010010";--显示5

WHEN"0110"=>dis_out<="0000010";--显示6

WHEN"0111"=>dis_out<="1111000";--显示7

WHEN"1000"=>dis_out<="0000000";--显示8

WHEN"1001"=>dis_out<="0010000";--显示9

WHEN"1010"=>dis_out<="0001000";--显示A

WHEN"1011"=>dis_out<="0000011";--显示b

WHEN"1100"=>dis_out<="1000110";--显示C

WHEN"1101"=>dis_out<="0100001";--显示d

WHEN"1110"=>dis_out<="0000110";--显示E

WHEN"1111"=>dis_out<="0001110";--显示F

WHENOTHERS=>dis_out<="1111111";--灭灯,不显示

ENDCASE;

ENDPROCESS;

ENDfwm;

3.实验3完成一个计数器,VHDL源代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcounterIS

PORT(clk,RST:

INSTD_LOGIC;

DOUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);--四位计数

COUT:

OUTSTD_LOGIC);--进位位

ENDcounter;

ARCHITECTUREfwmOFcounterIS

SIGNALQ1:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(clk,RST)

BEGIN

IFRST='0'THENQ1<=(OTHERS=>'0');COUT<='0';

ELSIFclk'EVENTANDclk='1'THEN

Q1<=Q1+1;

COUT<='0';

IFQ1>="1001"THENQ1<=(OTHERS=>'0');COUT<='1';

ENDIF;

ENDIF;

ENDPROCESS;

DOUT<=Q1;

ENDfwm;

4.实验4编写一个能实现占空比50%的5M和50M分频器即两个输出,输出信号频率分别为10Hz和1Hz,VHDL源代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYfpqIS

PORT(clk:

INSTD_LOGIC;

clk_out,clk_out1:

OUTSTD_LOGIC);

ENDfpq;

ARCHITECTUREfwmOFfpqIS

CONSTANTm:

INTEGER:

=25000000;--50M分频到1Hz时=25000000。

CONSTANTm1:

INTEGER:

=2500000;--5M分频到10Hz时=2500000。

SIGNALtmp:

STD_LOGIC;

SIGNALtmp1:

STD_LOGIC;

BEGIN

PROCESS(clk,tmp)

VARIABLEcout:

INTEGER:

=0;

BEGIN

IFclk'EVENTANDclk='1'THEN

cout:

=cout+1;--计数器+1

IFcout<=mTHENtmp<='0';--计数小于等于25000000,输出0

ELSIFcout

ELSEcout:

=0;--计数器清零

ENDIF;

ENDIF;

ENDPROCESS;

clk_out<=tmp;--50M分频器输出

PROCESS(clk,tmp1)

VARIABLEcout1:

INTEGER:

=0;

BEGIN

IFclk'EVENTANDclk='1'THEN

cout1:

=cout1+1;--计数器+1

IFcout1<=m1THENtmp1<='0';--计数小于等于2500000,输出0

ELSIFcout1

ELSEcout1:

=0;--计数器清零

ENDIF;

ENDIF;

ENDPROCESS;

clk_out1<=tmp1;--5M分频器输出

ENDfwm;

五:

拓展内容

首先需要一个分频器分频得到10Hz的时钟信号

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYtuozhanIS

PORT(clk:

INSTD_LOGIC;

clk_out1:

OUTSTD_LOGIC);

ENDtuozhan;

ARCHITECTUREfwmOFtuozhanIS

--CONSTANTm:

INTEGER:

=25000000;--50M分频到1Hz时=25000000。

CONSTANTm1:

INTEGER:

=2500000;--5M分频到10Hz时=2500000。

SIGNALtmp:

STD_LOGIC;

SIGNALtmp1:

STD_LOGIC;

BEGIN

PROCESS(clk,tmp1)

VARIABLEcout1:

INTEGER:

=0;

BEGIN

IFclk'EVENTANDclk='1'THEN

cout1:

=cout1+1;--计数器+1

IFcout1<=m1THENtmp1<='0';--计数小于等于2500000,输出0

ELSIFcout1

ELSEcout1:

=0;--计数器清零

ENDIF;

ENDIF;

ENDPROCESS;

clk_out1<=tmp1;--5M分频器输出

ENDfwm;

然后需要一个计数器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYdecoderIS

PORT(clk:

INSTD_LOGIC;--接收10HZ的时钟信号

dis_out:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDdecoder;

ARCHITECTUREfwmOFdecoderIS

BEGIN

PROCESS(clk)

VARIABLEcount:

INTEGER:

=0;

BEGIN

CASEcountIS

WHEN0=>dis_out<="0000";

WHEN1=>dis_out<="0001";

WHEN2=>dis_out<="0010";

WHEN3=>dis_out<="0011";

WHEN4=>dis_out<="0100";

WHEN5=>dis_out<="0101";

WHEN6=>dis_out<="0110";

WHEN7=>dis_out<="0111";

WHEN8=>dis_out<="1000";

WHEN9=>dis_out<="1001";

WHEN10=>dis_out<="1010";

WHEN11=>dis_out<="1011";

WHEN12=>dis_out<="1100";

WHEN13=>dis_out<="1101";

WHEN14=>dis_out<="1110";

WHEN15=>dis_out<="1111";

WHENOTHERS=>count:

=0;

ENDCASE;

IFclk'EVENTANDclk='1'THEN

count:

=count+1;

END IF;

ENDPROCESS;

ENDfwm;

最后使用七段译码器译码为七段码

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYsevendecoderIS

PORT(data_in:

INSTD_LOGIC_VECTOR(3DOWNTO0);

dis_out:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDsevendecoder;

ARCHITECTUREfwmOFsevendecoderIS

BEGIN

PROCESS(data_in)

BEGIN

CASEdata_inIS

WHEN"0000"=>dis_out<="1000000";--显示0

WHEN"0001"=>dis_out<="1111001";--显示1

WHEN"0010"=>dis_out<="0100100";--显示2

WHEN"0011"=>dis_out<="0110000";--显示3

WHEN"0100"=>dis_out<="0011001";--显示4

WHEN"0101"=>dis_out<="0010010";--显示5

WHEN"0110"=>dis_out<="0000010";--显示6

WHEN"0111"=>dis_out<="1111000";--显示7

WHEN"1000"=>dis_out<="0000000";--显示8

WHEN"1001"=>dis_out<="0010000";--显示9

WHEN"1010"=>dis_out<="0001000";--显示A

WHEN"1011"=>dis_out<="0000011";--显示b

WHEN"1100"=>dis_out<="1000110";--显示C

WHEN"1101"=>dis_out<="0100001";--显示d

WHEN"1110"=>dis_out<="0000110";--显示E

WHEN"1111"=>dis_out<="0001110";--显示F

WHENOTHERS=>dis_out<="1111111";--灭灯,不显示

ENDCASE;

ENDPROCESS;

ENDfwm;

五.实验结果

实验1:

VHDL源代码输入

波形仿真

配置针脚

在计算机上完成模拟实验之后,重新进行编译,然后将程序下载到DE0开发板上并对异或门逻辑电路进行验证。

验证结果无误。

 

实验2:

VHDL源代码输入

波形仿真

配置针脚

在计算机上完成模拟实验之后,重新进行编译,然后将程序下载到DE0开发板上并对二进制码转换成0-F的七段码译码器进行验证。

验证结果无误。

实验3:

VHDL源代码输入

波形仿真

配置针脚

在计算机上完成模拟实验之后,重新进行编译,然后将程序下载到DE0开发板上并对计数器进行验证。

验证结果无误。

实验4

VHDL源代码输入

波形仿真:

因为要使分频器达到能使人类肉眼能够分别的级别,仿真所需要的时间非常久,所以无法进行完整的仿真,只能下载到ED0板上进行验证。

在这里附上输入波形的波形图。

 

配置针脚

在计算机上完成模拟实验之后,重新进行编译,然后将程序下载到DE0开发板上并对分频器进行验证。

验证结果无误。

拓展:

将之前分析使用VHDL写出来的每个模块生成对应的原件,然后将原件连接起来,分配针脚重编译后下载到开发板进行验证;结果无误

六.故障排除&实验心得

本次实验中,我们学习并且理解了异或门逻辑电路、二进制码转换成0-F的七段码译码器、计数器和分频器的工作原理。

我们感觉困难的阶段在于编译程序的时候。

因为我们并不熟悉VHDL语言,所以在对老师给出的各个逻辑电路的参考程序的改进优化中遇到了许多困难,走了很多的弯路,不过同时也对我们的编译能力进行了考验,让我们充分意识到自己的缺点。

尤其是在数电实验这门课中,编译能力是何等的重要。

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

当前位置:首页 > 高中教育 > 英语

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

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