第一篇:实验四 用VHDL设计组合电路教案
实验四
用VHDL设计组合电路教案
一、实验目的 熟悉使用VHDL进行简单组合电路的设计; 2 熟悉使用VHDL进行简单层次电路的设计; 熟悉使用VHDL文本输入法设计PLD芯片的流程;
二、实验内容
用VHDL语言完成3—8线译码器设计;
三、实验原理
二进制译码器的输入是一组二进制代码,输出是一组与输入代码一一对应的高、低电平信号。某三位二进制译码器的真值表及示意图如下:
BIN / OCTA0A1A2SA124&EN01234567SBSC(a)Y0Y1Y2Y3Y4Y5Y6Y7Y7Y6Y5Y4Y3Y2Y1Y074138A2A1A0(b)SASBSC
三、实验步骤及要求
1、请根据以上图原理图,编写一个3—8译码器的VHDL源程序。(只考虑三个输入A2A1A0和8个输出y7y6y5y4y3y2y1y0 ,不考虑它的使能控制输入端)。
2、对DEC3_8.vhd文件编译后,再进行波形仿真,完成输入信号A、Y 输入的设置,启动仿真器Simulator,观察输出波形的情况。
3、锁定引脚、编译并编程下载。参选实验电路模式5和附表一,键
1、键
2、键3为输入信号A0、A1、A2分别锁定在EP1K30/50144-PIN TQFP 目标芯片的输入引脚,输出信号y7、y6、y5、y4、y3、y2、y1、y0分别锁定在目标芯片的输出引脚上。
4、硬件实测3—8线译码器的逻辑功能。按动GW48实验板上的高低电平输入键
1、键
2、键3,得到不同的A0、A1、A2输入组合;观察输出发光二极管Di的亮灭,检查3—8线译码器的设计结果是否正确。
思考题
如果有一个模6计数器采用约翰逊尾变码编码。其顺序为: 000->001-> 011 ->111 ->110 ->100->000 试设计一个由时钟CLK触发,复位控制端RESET=0进行复位操作的模6计数器。
实验报告要求:
写出实验源程序,画出仿真波形。分析实验结果,以及它们的硬件测试实验结果写进实验报告。写出心得体会。
重点内容是分析原理图,写出对应的VHDL代码
对思考题注意加入时钟和复位控制信号,注意其相关语法现象。
参考VHDL源代码 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DEC3_8 IS
PORT(A : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
Y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END DEC3_8;ARCHITECTURE beh OF DEC3_8 IS BEGIN
PROCESS(A)
BEGIN
CASE A IS
WHEN “000” => Y <= “00000001”;
WHEN “001” => Y <= “00000010”;
WHEN “010” => Y <= “00000100”;
WHEN “011” => Y <= “00001000”;
WHEN “100” => Y <= “00010000”;
WHEN “101” => Y <= “00100000”;
WHEN “110” => Y <= “01000000”;
WHEN “111” => Y <= “10000000”;
WHEN OTHERS => NULL;
END CASE;
END PROCESS;END beh;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CNT6 IS
PORT(clk,resset : IN STD_LOGIC;
COUNTOUT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END CNT6;ARCHITECTURE beh OF CNT6 IS Signal NEXT_COUNT: STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN
PROCESS(clk,resset)
BEGIN IF resset='0' THEN NEXT_COUNT <=“000”;Elsif CLK'event and CLK='1' then CASE NEXT_COUNT IS
WHEN “000” => NEXT_COUNT <= “001”;
WHEN “001” => NEXT_COUNT <= “011”;
WHEN “011” => NEXT_COUNT <= “111”;
WHEN “111” => NEXT_COUNT <= “110”;
WHEN “110” => NEXT_COUNT <= “100”;
WHEN “100” => NEXT_COUNT <= “000”;
WHEN OTHERS => NULL;
END CASE;END if;COUNTOUT <= NEXT_COUNT;
END PROCESS;
第二篇:VHDL实验四函数信号发生器设计.
VHDL实验四:函数信号发生器设计
设计要求:设计一个函数信号发生器,能产生方波,三角波,正弦波,阶梯波。设计概述:信号的输出实质上是指电压幅度随时间的变化。根据这个原理我们就可以设计函数信号发生器了。FPGA里面产生的数据只能是数字信号,最终我们通过连接8bit的DA转换器就能将数字信号转换成电压信号,从而实现了信号发生器的功能。
本设计有5个模块组成,其中有:方波发生器,三角波发生器,正弦波发生器,阶梯波发生器,4选1选择器。下面是我设计的整个过程: 方波发生器:实质上是一段时间输出0,一段时间输出255的数字信号,当然这有8位的通道输出。
程序设计如下:--工程名:方波发生器
--功能:产生方波,是通过交替送出全0和全1实现的,每32个时钟翻转一次--时间:2010-12-17 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity sqaure is port(clk,clr:in std_logic;
q:out integer range 0 to 255;end entity;architecture behav of sqaure is signal a:bit;begin process(clk,clr--计数分频 variable cnt:integer range 0 to 32;begin if(clr='0' then a<='0';elsif clk'event and clk='1' then if cnt<31 then--进行32分频 cnt:=cnt+1;else cnt:=0;a<=not a;end if;end if;
end process;process(clk,a--信号输出 begin if clk'event and clk='1' then if a='1' then q<=255;else q<=0;end if;end if;end process;end behav;三角波发生器:实质上是先输出直线递增的数字信号,随后按照同样的斜率输出递减的数字信号。这样就能实现三角波的发生了。
程序设计如下:--工程名:三角波信号发生器
--功能:产生的三角波以64个时钟为一个周期,输出q每次加减8。--时间:2010-12-17 library ieee;
use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity delta1 is port(clk:in std_logic;--时钟信号 rst:in std_logic;--复位信号
q:out std_logic_vector(7 downto 0;--输出信号 end entity;architecture behav of delta1 is begin variable tmp:std_logic_vector(7 downto 0;variable a:std_logic;begin if(rst='0' then tmp:=“00000000”;elsif clk'event and clk='1' then if(a='0' then if(tmp=“11111000” then--tmp=248 tmp:=“11111111”;
a:='1';--信号计数完成,下一次改成递减 else tmp:=tmp+8;--递增 end if;else if tmp=“00000111” then--tmp=7 tmp:=“00000000”;a:='0';--信号计数完成,下一次改成递增 else tmp:=tmp-8;--递减 end if;end if;end if;q<=tmp;--信号输出 end process;end behav;正弦波发生器:这里我设计了64个状态,就是将一个周期的正弦波分成64分,在然后一份份的数字信号输出就可以了。具体怎么取值,用excel计算就可以了。自己手动计算也可以的哦。
具体程序设计如下: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity sin1 is port(clk,clr:in std_logic;d:out integer range 0 to 255;end entity;architecture behav of sin1 is begin variable tmp:integer range 0 to 63;begin if clr='0' then d<=0;elsif clk'event and clk='1' then if tmp=63 then tmp:=0;else
tmp:=tmp+1;end if;case tmp is when 00=>d<=255;when 01=>d<=254;when 02=>d<=252;when 03=>d<=249;when 04=>d<=245;when 05=>d<=239;when 06=>d<=233;when 07=>d<=225;when 08=>d<=217;when 09=>d<=207;when 10=>d<=197;when 11=>d<=186;when 12=>d<=174;when 13=>d<=162;when 14=>d<=150;when 15=>d<=137;when 16=>d<=124;when 17=>d<=112;when 18=>d<=99;when 19=>d<=87;when 20=>d<=75;when 21=>d<=64;when 22=>d<=53;when 23=>d<=43;when 24=>d<=34;when 25=>d<=26;when 26=>d<=19;when 27=>d<=13;when 28=>d<=8;when 29=>d<=4;when 30=>d<=1;when 31=>d<=0;when 32=>d<=0;when 33=>d<=1;when 34=>d<=4;when 35=>d<=8;when 36=>d<=13;when 37=>d<=19;when 38=>d<=26;when 39=>d<=34;when 40=>d<=43;when 41=>d<=53;when 42=>d<=64;when 43=>d<=75;when 44=>d<=87;when 45=>d<=99;when 46=>d<=112;when 47=>d<=124;
when 48=>d<=137;when 49=>d<=150;when 50=>d<=162;when 51=>d<=174;when 52=>d<=186;when 53=>d<=197;when 54=>d<=207;when 55=>d<=217;when 56=>d<=225;when 57=>d<=233;when 58=>d<=239;when 59=>d<=245;when 60=>d<=249;when 61=>d<=252;when 62=>d<=252;when 63=>d<=255;when others=>null;end case;end if;end process;end behav;阶梯波发生器:实质上是一个直线递增的数字信号输出而已,和三角波发生没有什么差别。
--工程名:阶梯波信号发生器
--功能:改变该模块递增的常数,可以改变阶梯的个数--时间:2010-12-17 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;entity ladder1 is port(clk:in std_logic;--时钟信号 rst:in std_logic;--复位信号
q:out std_logic_vector(7 downto 0;--输出信号 end entity;architecture behav of ladder1 is begin process(clk,rst variable tmp:std_logic_vector(7 downto 0;variable a:std_logic;begin if(rst='0' then--复位 tmp:=“00000000”;elsif clk'event and clk='1' then if a='0' then if tmp=“11111111” then tmp:=“00000000”;a:='1';
else tmp:=tmp+16;--以常数递增 a:='1';end if;else a:='0';end if;end if;q<=tmp;--信号输出 end process;end behav;4选1模块
最后我们要将模块进行整合,就需要设计一个选通模块,进行选择。
具体程序设计如下:--工程名:4 选 1 模块选择器--功能:选通模块作用--时间:2010-12-17 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity select4_1 is port(sel:in std_logic_vector(1 downto 0;--选择信号 d0,d1,d2,d3:in std_logic_vector(7 downto 0;--4 个信号发生器通道 q:out std_logic_vector(7 downto 0;--输出通道 end entity;architecture behav of select4_1 is begin process(sel begin case sel is--选择 when“00”=> q<=d0;when“01”=> q<=d1;when“10”=> q<=d2;when“11”=> q<=d3;end case;end process;end behav;最后将所有模块就连接起来进行图形化设计; 进行仿真。最后进行硬件调试,通过 DA 将 8
位的数字信号转化成电压信号就能完成了整个 系统的设计了。总结:通过设计这个简单的数字信号发生器,我彻底的了解了如何设计一个函数 发生器。一直以来都想设计这个一个东西,所以今天终于完成了我一直以来的心 愿了。但是这仅仅是开始,要设计一个很好信号发生器,需要使用 DDS 的技术,因此希望我以后更加再接再厉,慢慢稳健的成长起来。
第三篇:实验组装电路教学设计
《组装电路》教学设计
张劲松
老师:同学们,经过前面几天的焊接训练,想问同学们,你们做好了组装彩色电视机的准备了吗?
学生:我们有信心。
老师:好,今天我们开始来组装康佳彩色电视机。下面请学习委员给每个同学发一块线路板。请大家拿到电路板后,注意看屏幕上的有关要求。
老师:给每个同学展示课件
课件内容:组装前的准备工作,给每个学生发一块空的线路板,并且写上学生自己的名字,由于组装过程需要很长的时间,为防止学生在组装过程中将线路板的敷铜焊点弄氧化,影响后面的焊接质量,为止,将非开关电源部分用报子包装起来;并且,每个学生发一张报子垫在工作台上,以保障清洁。
(一)、组装原则
电视机的组装原则,一般分以下几个方面
1、先小后大。在电路板中一般跳线、功率小于1W的电阻,这些元件的体积小要先装,然后再装体积大的三极管、电解电容、高频头、高压包
2、间隔距离要适合。对于组装元件与电路板的间隔距离,一般跳线、和功率小于1W的电阻、二极管以及立式的电解电容器、插座、集成块都要紧贴线路板,对于大功率电阻一定要与线路板有一定的距离。
3、分部分、分功能。为了装机过程中调试的方便,在元件的组装过程中一般都是按照分部分、分功能。在电视机的主板组装过程中,一般先组装开关电源、行场扫描、中放、伴音、遥控系统。
(二)、组装过程
组装前每个课时布置10个元件的组装任务,每拆1个元件均要求学生进行测量,然后再焊接再新的电路板上;并给学生讲解焊接工艺的基本操作技能,注意焊接时间、焊锡多少的掌握,同时要强调焊接美观(电阻、跳线、电容、二极管、三极管元件脚的高度、统一朝向、平整度)。
学生:老师,什么是分部分、分功能啊?
老师:所谓分部分分功能就是指按照电路所完成的功能进行分块组装。
学生:老师,什么是开关管啊?
老师:所谓开关管就是指电路板中的V901,由于它是工作在开关状态因此而得名,
第四篇:《组合电路的分析与设计》教学设计.
数字逻辑电路
组合逻辑电路的分析与设计
教学设计
1.问题引入
回顾已经学过的门电路、编码器、译码器等逻辑电路,引导学生总结这一类电路的特点,由此引入组合逻辑电路的概念。
2.提出重点难点
重点:组合电路的分析方法与设计方法。难点:组合电路的实际应用。
3.教学内容
组合电路的一般分析方法与步骤 组合电路分析实例
组合电路的一般设计方法与步骤 组合电路设计实例
常用组合集成电路IC简介
4.教学组织
先提问:如果我们在实际中遇到一些逻辑问题,应该如何来用所学的数电知识实现呢? 通过例1,从一个简单的实际逻辑问题入手,和学生一起逐步完成组合逻辑电路的各个设计步骤
例1:某设备有开关A、B、C,要求仅在开关A接通的条件下,开关B才能接通,开关C仅在开关B接通的条件下才能接通。违反这一规程,则发出报警信号,设计一个由与非门组成的能实现这一功能的报警控制电路。
从以上的设计过程中归纳出组合逻辑电路设计的一般方法——四步法
1. 分析要求 2. 列真值表 3. 化简 4. 画逻辑图
通过引导学生对加法器的设计,进一步加深对组合电路设计方法的理解,提高学生利用该方法设计实际电路的能力
介绍一些常用的组合集成电路,可作为资料以便学生了解和查阅 总结四步法是组合逻辑电路设计中的最普遍的方法,应用十分广泛 作业应帮助学生进一步提高对组合逻辑电路分析和设计的能力
5.小结
组合逻辑电路的特点是:任何时刻输出信号仅仅取决于当时的输入信号的取值组合,而与电路原来所处的状态无关。符合这个特点的电路是非常多的,在本章不可能一一列举。重要的是必须掌握组合逻辑电路的分析方法和设计方法。
组合逻辑电路的两种分析方法已在本章
数字逻辑电路
器、多路选择器等组合电路的分析,具体地应用了组合电路的分析方法。
本章
第五篇:数字电路课程设计——用VHDL语言设计交通灯
数字电路课程设计报告
院系: 电气信息工程学院 班级: 08测控2班 学号: 08314237 姓名: 董 亮 合作: 虞 波 指导教师: 翟 丽 芳
2010年12月10日
目
录
引言······················································2 一 设计任务和设计要求·········································2 二 电路工作原理及方案设计································3 三 软件设计与调试········································4 1.分频模块的设计及仿真图·································4 2.控制器设计及仿真图····································6 3.计数器的设计及仿真图···································7 4.分位模块的设计·······································9 5.数码管驱动设计·······································10 6. 顶层文件设置·········································14
四 硬件焊接与组装调试···································15 五 心得体会·············································16 六 参考文献·············································16
交通灯控制电路设计
引言:
随着社会的发展以及人类生活水平的提高,基于CPLD的EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制用计算机等领域的重要性日益突出。
如今,交通的问题日益突出,单单依靠人力来指挥交通已经不可行了,所以,设计交通灯来完成这个需求就显的越加迫切了。为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。以下就是运用数字电子设计出的交通灯。
本程序设计的是交通灯的设计。采用EDA作为开发工具,VHDL语言为硬件描述语言,quartusII作为程序运行平台,所开发的程序通过调试运行、波形仿真验证,实现设计目标。
一.设计任务与设计要求
1. 设计任务
设计一个基于FPGA的十字路口交通控制器,假设南北方向和东西方向,两个方向分别设置红灯、绿灯、黄灯三盏灯,设置一组倒计时显示器,用以指挥车辆和行人有序的通行。红灯亮表示直行车辆禁行;绿灯亮表示直行车辆可以通行;黄灯亮表示直行车辆即将禁行;倒计时显示器用来显示允许通行或禁止通行的时间。尽量采用层次化设计。2. 设计要求
在十字路口南北和东西两个方向各设一组红灯、黄灯、绿灯。设一组倒计时显示器。
自动控制:
设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,南北方向为主干道,红灯、黄灯和绿灯显示时间分别是55、5s、50s。东西方向为次干道,红灯、黄灯绿灯显示时间分别为35s、5s、30s。
特殊功能:
(1)紧急状态时,手动拨动紧急开关,主干道以及次干道都显示红灯,禁止通行,并由蜂鸣其报警。
(2)黄灯显示信号为脉冲信号,使得黄灯为“一闪一闪”的显示状态。
二.电路工作原理及方案设计
图1总体设计框图
在VHDL设计描述中,采用自顶向下的设计思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的输入输出信号:输入信号:外部时钟信号clk。LED在自顶向下的VHDL设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。通过上面的分析,不难得知可以把交通灯控制系统划分为4个模块:时钟分频模块,计数模块,控制模块,分位译码模块。
分频电路:输入较高频率脉冲用分频电路的到较
(HOLD=‘1’)发生是,计数器暂停计数。
分位译码电路:因为控制器输出的倒计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数)。七段数码管的译码电路根据控制电路的控制信号,驱动交通灯的显示,通过输入二进制数值,输出信号点亮二极管,我们用的是共阴极数码管,因此译码电路输出逻辑数值‘1’点亮二极管,译码电路输出逻辑数值‘0’熄灭二极管。
三.软件设计与调试
图2模块化设计原理图
1.分频模块的设计及仿真图
分频器1实现的是将高频时钟信号转换成底频的时钟信号,用于触发控制器、计数器和扫描显示电路。该分频器实现的是1000分频,将50M赫兹的时钟信号分频成50000赫兹的时钟信号。LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider IS PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);
END;ARCHITECTURE Devider OF FreDevider IS CONSTANT N:Integer:=499;Signal counter:Integer range 0 to N;signal Clk:Std_Logic;BEGIN PROCESS(Clkin)begin IF rising_edge(Clkin)THEN IF Counter=N then counter<=0;Clk<=not clk;else counter<=counter+1;end if;end if;end process;clkout<=clk;end;分频器2实现的是50000分频,将50000赫兹的时钟信号分频成1赫兹的时钟信号。
LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider1 IS PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END;ARCHITECTURE Devider1 OF FreDevider1 IS CONSTANT N:Integer:=24999;signal counter:Integer range 0 to N;signal Clk:Std_Logic;BEGIN PROCESS(Clkin)begin IF rising_edge(Clkin)THEN IF Counter=N then counter<=0;Clk<=not clk;else counter<=counter+1;end if;end if;end process;
clkout<=clk;end;
2.控制器设计及仿真图
控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译管的分译码电路。此外,当检测到特殊情况(Hold=‘1’)发生时,无条件点亮红色的发光二极管。功能:控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY countroller IS PORT(Clock:IN STD_LOGIC;Hold:in std_logic;CountNum:in INTEGER RANGE 0 TO 89;NumA:out INTEGER RANGE 0 TO 90;RedA,GreenA,YellowA:out std_logic;RedB,GreenB,YellowB:out std_logic);END;ARCHITECTURE behavior OF Countroller IS BEGIN process(Clock)BEGIN IF falling_edge(Clock)THEN IF Hold='1' THEN RedA<='1';RedB<='1';GreenA<='0';GreenA<='0';YellowA<='0';YellowB<='0';
ELSIF CountNum<=54 THEN NumA<=55-CountNum;RedA<='0';GreenA<='1';YellowA<='0';ELSIF CountNum<=59 THEN NumA<=60;RedA<='0';GreenA<='0';YellowA<='1';ELSE NumA<=90-CountNum;RedA<='1';GreenA<='0';YellowA<='0';END IF;IF CountNum<=54 THEN RedB<='1';GreenB<='0';YellowB<='0';ELSIF CountNum<=84 THEN RedB<='0';GreenB<='1';YellowB<='0';ELSe RedB<='0';GreenB<='0';YellowB<='1';END IF;end if;END PROCESS;END;3.计数器的设计及仿真图
这里计数器的计数范围为0—90S,下一个时钟沿回复到0,开始下一轮计数.此外,当检测到特殊情况(Hold=‘1‘)发生时,计数器暂停计数。
程序如下: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY counter IS PORT(clock:IN STD_LOGIC;Hold:in std_logic;countNum:BuFFeR INTEGER RANGE 0 TO 90);
END;ARCHITECTURE behavior OF counter IS BEGIN Process(Clock)BEGIN IF rising_edge(Clock)THEN IF Hold='1' then countNum<=countNum;ELSE IF countNum=90 THEN countNum<=0;ELSE countNum<=countNum+1;END IF;END IF;END PROCESS;END;
4.分位模块的设计
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Fenwei IS PORT(Numin:IN integer RANGE 0 TO 90;NumA,NumB:OUT Integer RANGE 0 to 9);END;ARCHITECTURE behavior OF Fenwei IS BEGIN process(Numin)BEGIN IF Numin>=60 THEN NumA<=10;NumB<=10;elsIF Numin>=50 THEN NumA<=5;NumB<=Numin-50;elsIF Numin>=40 THEN NumA<=4;NumB<=Numin-40;ELSIF Numin>=30 THEN NumA<=3;NumB<=Numin-30;ELSIF Numin>=20 THEN NumA<=2;NumB<=Numin-20;ELSIF Numin>=10 THEN
NumA<=1;NumB<=Numin-10;ELSE NumA<=0;NumB<=Numin;END IF;END PROCESS;END;
5.数码管驱动设计 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY bcd_data IS PORT(bcd_data:in STD_LOGIC_VECTOR(3 downto 0);segout: out STD_LOGIC_VECTOR(6 downto 0));END;ARCHITECTURE behavior OF bcd_data IS BEGIN process(bcd_data)BEGIN case bcd_data is when “0000”=>segout<=“1111110”;when “0001”=>segout<=“0110000”;when “0010”=>segout<=“1101101”;when “0011” =>segout<=“1111001”;when “0100” =>segout<=“0110011”;when “0101”=>segout<=“1011011”;when “0110”=>segout<=“0011111”;when “0111”=>segout<=“1110000”;when “1000” =>segout<=“1111111”;when “1001” =>segout<=“1110011”;when “1010”=>segout<=“0000000”;when others =>null;END CASE;END PROCESS;END;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;
ENTITY dtsm IS PORT(clk:in STD_LOGIC;NumA,NumB,NumC,NumD: in STD_LOGIC_VECTOR(3 downto 0);segout1:out STD_LOGIC_VECTOR(6 downto 0);led_sel: out STD_LOGIC_VECTOR(3 downto 0));END dtsm;architecture bhv of dtsm is component bcd_data is port(bcd_data:in STD_LOGIC_VECTOR(3 downto 0);segout:out STD_LOGIC_VECTOR(6 downto 0));end component;signal x:STD_LOGIC_VECTOR(3 downto 0);signal q:STD_LOGIC_VECTOR(1 downto 0);begin p1:process(clk)begin if clk'event and clk ='1' then Q<= Q + '1';end if;end process;
p2:process(Q)begin case Q is when“00”=>led_sel<=“1110”;x<=NumD;when“01”=>led_sel<=“1101”;x<=NumC;when“10”=>led_sel<=“1011”;x<=NumB;when“11”=>led_sel<=“0111”;x<=NumA;when others=>null;end case;end process;u1:bcd_data PORT map(bcd_data=>x,segout=>segout1);end;
6.顶层文件设置
library ieee;use ieee.std_logic_1164.all;entity jiaotongdeng is port(clk1:in std_logic;reset1:in std_logic;
hold1:in std_logic;segout2:out std_logic_vector(6 downto 0);led_sel1:out std_logic_vector(3 downto 0);reda1,yellowa1,greena1:out std_logic;redb1,yellowb1,greenb1:out std_logic);end jiaotongdeng;
architecture aa11 of jiaotongdeng is component FreDevider PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END component;
component FreDevider1 PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END component;component countroller PORT(Clock:IN STD_LOGIC;Hold:in std_logic;CountNum:in INTEGER RANGE 0 TO 89;NumA:out INTEGER RANGE 0 TO 90;RedA,GreenA,YellowA:out std_logic;RedB,GreenB,YellowB:out std_logic);END component;component counter PORT(clock:IN STD_LOGIC;reset:in std_logic;Hold:in std_logic;countNum:BuFFeR INTEGER RANGE 0 TO 90);END component;component Fenwei PORT(Numin:IN integer RANGE 0 TO 90;NumA,NumB:OUT Integer RANGE 0 to 9);END component;component dtsm PORT(clk:in STD_LOGIC;NumA,NumB: in Integer RANGE 0 to 9;segout1:out STD_LOGIC_VECTOR(6 downto 0);led_sel: out STD_LOGIC_VECTOR(3 downto 0));
END component;signal a,b:std_logic;signal c:INTEGER RANGE 0 TO 89;signal d:INTEGER RANGE 0 TO 90;signal e,f:Integer RANGE 0 to 9;begin u1: FreDevider port map(clkin=>clk1,clkout=>a);u2: FreDevider1 port map(clkin=>a,clkout=>b);u3:counter
port map(clock=>b,reset=>reset1,hold=>hold1,countnum=>c);u4:countroller port map(clock=>b,hold=>hold1,countnum=>c,numa=>d,reda=>reda1,greena=>greena1,yellowa=>yellowa1,redb=>redb1,greenb=>greenb1,yellowb=>yellowb1);u5:fenwei port map(numin=>d,numa=>e,numb=>f);u6:dtsm
port map(clk=>clk1,numa=>e,numb=>f,segout1=>segout2,led_sel=>led_sel1);end aa11;
四.硬件焊接与组装调试
按照如下图所示的电路图,在通用电路焊接板上合理布置各个元器件,进行焊接布线。
图3硬件焊接电路图
安装焊接完成后,仔细检查电路,是否有误。若与电路图不符,应及时排除错误。一切就绪后,将与FPGA对应的引脚使用杜邦线连接,连接完毕后,检查电源极性,避免反接。确认无误后,接通电源,观察实验结果。
首先我们完成的基本的功能,只是简单的倒计时显示,然后我们可以进一步修改我们的VHDL语言程序,重新烧入FPGA,以完善我们的设计。
五.心得体会
通过几天的课程设计,我对EDA技术、VHDL等系列知识都有了一定的了解。使用EDA技术开发页面的能力也有了很大提高。
EDA设计我们感觉程序调试最重要,试验软件、硬件熟悉其次。直到没有错误。若与理想的不同,再查看程序,有无原理上的编辑错误或没有查出的输入错误。都通过可以进行管脚配对,把程序烧入芯片,在实物上看结果,从显示中得出还需改正的地方,再去改程序。必须注意每改一次都要编译,重新烧入。我们采用模块化编程,模块化接线,再编译总原理图,思路比较清楚。有的模块可以供其它任务通用。
课程设计对学生而言是其对所学课程内容掌握情况的一次自我验证,从而有着极其重要的意义。通过课程设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学内容,在这学期的课程设计中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
另外,我还学到了一个人的力量毕竟有限,但是团队的力量势不可挡,我们不能局限,要学会合作。这次课程设计虽然结束了,相信以后我们会以更加积极的态度对待我们的学习、对待我们的生活。我们的激情永远不会结束,相反,我们会更加努力,努力的去弥补自己的缺点,发展自己的优点,去充实自己,只有在了解了自己的长短之后,我们会更加珍惜拥有的,更加努力的去完善它。
六.参考文献
(1)潘松,黄继业.《EDA
技术使用教程》.科学出版社.2006.(2)潘松,黄继业.《EDA技术与VHDL(