用VHDL语言实现拔河电路功能

2025-08-13

实验四 基于QuartusⅡ的硬件描述语言的拔河电路设计

一、实验内容

基于前期原理图电子拔河电路,甲、乙双方分别按动己方按键,按键的次数分别在双方的两个数码管上显示,当喊停止的时候,数码管数字较大的一方获胜,连续比赛多局以定胜负。 二、实验工具

1、DE0开发板一个 2、Quartus2 16软件 3、VHDL语言 三、实验准备

1、学习VHDL语言,了解基本语法规则和基本语句。

2、明确所实现的电路所需要的器件,并且明确用VHDL实现该器件的基本逻辑关系和基本语句。实验所需要的器件为百进制计数器、比较器和译码器。

3、明确VHDL实体的定义,明确实体的输入输出,并且明确实现该实体的基本语法和基本步骤。

4、必须明确实体层次的概念,在低层次实体中,必须明确各个输入输出之间的联系,以结构的方式构建高层次实体。

四、实验程序 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY test4 IS

PORT(KEY1,KEY2,KEY3,CLOCK_IN: IN STD_LOGIC;

HEX0,HEX1,HEX2,HEX3,HEX4,HEX5: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); com:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END test4;

--以下为百进制计数器设计实体--

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY COUNT_100 IS

PORT(clk,clr: IN STD_LOGIC;

--date_in: IN STD_LOGIC_VECTOR(3 DOWNTO 0); lo_out,hi_out:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END COUNT_100;

ARCHITECTURE fwm OF COUNT_100 IS

SIGNAL hi_tmp,lo_tmp: STD_LOGIC_VECTOR(3 DOWNTO 0); --SIGNAL load_cnt : STD_LOGIC_VECTOR(1 DOWNTO 0);

BEGIN

--load_cnt<=load&hi_lo; --数据写入与置数位控制的并置 PROCESS(clk,clr)

--hi_lo='1'时为高位置数,hi_lo='0'时为低位置数

--VARIABLE q_tmp : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

IF clr='0'THEN hi_tmp<=\异步清零

ELSIF clk'EVENT AND clk='1'THEN

--IF load_cnt=\低位置数

--IF date_in>=\ --ELSE lo_tmp<=date_in; --END IF;

--ELSIF load_cnt=\高位置数

--IF date_in>=\ --ELSE hi_tmp<=date_in; --END IF;

--ELSIF load_cnt=\ IF lo_tmp=\低位等于9 IF hi_tmp/=\THEN --如果高位不等于9

lo_tmp<=\--那么高位加1

ELSE

hi_tmp<=\

--ELSE lo_tmp<=\除此之外,低位9保持不变

END IF;

ELSE lo_tmp<=lo_tmp+1; --如果低位不是9,那么低位加1

END IF; --END IF; END IF; END PROCESS;

lo_out<=lo_tmp; --低位信号赋值给低位输出端 hi_out<=hi_tmp; --高位信号赋值给高位输出端 END fwm;

--以下为计算胜的局数的10进制计数器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY COUNT_10 IS

PORT(clk,clr: IN STD_LOGIC;

COUNT_10_OUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END COUNT_10;

ARCHITECTURE fwm OF COUNT_10 IS

SIGNAL COUNT_10_TMP: STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS(clk,clr)

BEGIN IF clr='0'THEN COUNT_10_TMP<= \异步清零 ELSIF clk'EVENT AND clk='1'THEN COUNT_10_TMP<=COUNT_10_TMP+1;

IF COUNT_10_TMP=\如果加到十,归零

COUNT_10_TMP<=\

END IF; END IF;

END PROCESS;

COUNT_10_OUT<=COUNT_10_TMP;

END fwm;

--以下为分频器实体电路 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY FP IS

PORT(clk_in:IN STD_LOGIC;

clk_out:OUT STD_LOGIC); END FP;

ARCHITECTURE fwm OF FP IS

CONSTANT M:INTEGER:=25000000; --50M分频到1HZ

SIGNAL FP_TMP:STD_LOGIC; BEGIN

PROCESS(clk_in)

VARIABLE COUNT :INTEGER:=0; BEGIN

IF clk_in'EVENT AND clk_in='1' THEN COUNT:=COUNT+1; --计数器+1 IF COUNT<=M THEN FP_TMP<='0'; ELSIF COUNT

ELSE COUNT :=0; END IF; END IF; END PROCESS;

clk_out<=FP_TMP; END fwm;

--以下为七段数码管显示译码电路设计实体

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY DIS IS

PORT(date_in:IN STD_LOGIC_VECTOR(3 DOWNTO 0); dis_out: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END DIS;

ARCHITECTURE fwm OF DIS IS BEGIN

PROCESS(date_in) BEGIN

CASE date_in IS

WHEN\显示0; WHEN\显示1; WHEN\显示2; WHEN\显示3; WHEN\显示4; WHEN\显示5; WHEN\显示6; WHEN\显示7; WHEN\显示8; WHEN\显示9; WHEN OTHERS=>dis_out<=\不显示; END CASE; END PROCESS; END fwm;

--以下为8位无符号整数比较器设计实体

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY COMPARE IS

PORT(a,b:IN STD_LOGIC_VECTOR(7 DOWNTO 0); eq,lt,gt: OUT STD_LOGIC); END COMPARE;

ARCHITECTURE fwm OF COMPARE IS BEGIN

PROCESS(a,b) BEGIN

eq<='0';lt<='0';gt<='0'; IF a=b THEN eq<='1';


用VHDL语言实现拔河电路功能.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:做好新时期督查工作的几点体会

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219