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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数电实验2

一.实验目的

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

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源代码如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY EXORGATE IS

PORT(A,B:IN STD_LOGIC;

C:OUT STD_LOGIC);

END EXORGATE;

ARCHITECTURE fwm OF EXORGATE IS

BEGIN

C<=A XOR B;

END;

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

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY sevendecoder IS

PORT (data_in:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

dis_out:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

END sevendecoder;

ARCHITECTURE fwm OF sevendecoder IS

BEGIN

PROCESS(data_in)

BEGIN

CASE data_in IS

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

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

END CASE;

END PROCESS;

END fwm;

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

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY counter IS

PORT ( clk,RST : IN STD_LOGIC;

DOUT : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); --四位计数

COUT : OUT STD_LOGIC); --进位位

END counter;

ARCHITECTURE fwm OF counter IS

SIGNAL Q1 : STD_LOGIC_VECTOR (3 DOWNTO 0);

BEGIN

PROCESS(clk,RST)

BEGIN

IF RST = '0' THEN Q1<=(OTHERS => '0'); COUT<= '0';

ELSIF clk'EVENT AND clk='1' THEN

Q1<=Q1+1;

COUT<= '0';

IF Q1 >= "1001" THEN Q1<=(OTHERS => '0'); COUT<= '1';

END IF;

END IF;

END PROCESS;

DOUT<=Q1 ;

END fwm;

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

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY fpq IS

PORT(clk:IN STD_LOGIC;

clk_out,clk_out1:OUT STD_LOGIC);

END fpq;

ARCHITECTURE fwm OF fpq IS

CONSTANT m : INTEGER:= 25000000; --50M 分频到 1Hz 时=25000000。CONSTANT m1 : INTEGER:= 2500000; --5M 分频到 10Hz 时=2500000。SIGNAL tmp :STD_LOGIC;

SIGNAL tmp1 :STD_LOGIC;

BEGIN

PROCESS(clk, tmp)

VARIABLE cout : INTEGER:=0;

BEGIN

IF clk'EVENT AND clk='1' THEN

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

IF cout<=m THEN tmp<='0'; --计数小于等于 25000000,输出 0

相关文档
最新文档