EDA课程设计学生专用.docx
《EDA课程设计学生专用.docx》由会员分享,可在线阅读,更多相关《EDA课程设计学生专用.docx(26页珍藏版)》请在冰豆网上搜索。
EDA课程设计学生专用
重庆电力高等专科学校
课程设计报告
EDA应用课程设计
课程名称:
EDA应用技术
系别:
计算机科学系
班级:
信息0911
学生姓名:
###
学 号:
**********
指导教师:
##老师
编制日期:
20**年**月**日
课程训练一基本门电路
一、实验要求
本实验主要是熟悉QUARTUS2软件的使用及调试,程序的输入、编译于连接。
二、实验内容
本是实验主要是掌握基本们电路的基本知识,熟悉与门、或门、异或门的知识。
三、本人工作
我主要完成电路的绘制及编译,检查错误,波形图的输入,编译及烧入程序电路的及线路的连接。
四、系统的主要功能
1、实验流程(有截图);
图形编译:
波形编译
波形图编译:
波形图:
引脚分配:
烧入程序:
其他;
五、实训课程设计体会。
我们根据上学期的经验和书本结合,完成电路的绘制、文本输入、编译调试程序的烧入和硬件线路的连接。
此次实验的难度不大。
我们根据上学期学的EDA的知识顺利的完成此次实验。
六、附注
课题实训二加法器实验
一、实验要求:
本实验首先使用图形输入夫人方法由图形输入的方法由了逻辑电路设计一个全加器,然后使用VHDL语言设计一个具有加法、减法、相等、不相等比较运算的算术逻辑单元。
分别进行仿真、引脚分配并下载到电路板进行功能验证。
二、概述所作题目的意义
加法器由半加器和全加器组成,将输入的数进行加法运算。
三、本人所做的工作
本人主要是负责,半加器图形的编辑、编译。
和软件的输入及编译。
四、系统的主要功能
1、实验流程(有截图);
半加器:
全加器:
程序编译:
引脚分配:
编译引脚:
烧入程序:
2、源程序代码(要有注释);
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityaluis
port(a,b:
instd_logic_vector(3downto0);
opcode:
instd_logic_vector(1downto0);
result:
outstd_logic_vector(4downto0));
endentityalu;
architecturebehaveofaluis
constantplus:
std_logic_vector(1downto0):
=B"00";
constantminus:
std_logic_vector(1downto0):
=B"01";
constantequal:
std_logic_vector(1downto0):
=B"10";
constantnot_equal:
std_logic_vector(1downto0):
=B"11";
signalina,inb:
std_logic_vector(4downto0);
begin
ina<='0'&a;
inb<='0'&b;
process(opcode,a,b)
begin
caseopcodeis—这两句要加载LPM_ADD_SUB
whenplus=>result<=ina+inb;—opcoder=“00”进行加法运算
whenminus=>result<=ina+not(inb)+1;—opcoder=“00”进行减法运算
whenequal=>—opcoder=“00”进行相等运算
if(a=b)thenresult<=B"00001";
elseresult<=B"11111";
endif;
whennot_equal=>—opcoder=“11”进行不相等比较
if(a/=b)thenresult<=B"00001";
elseresult<=B"11111";
endif;
endcase;
endprocess;
endarchitecturebehave;
其他;
五、实训课程设计体会
加法器就是由半加器和全加器组成的加法器,由输入的两个数之间进行二进制的加法,显示由他的地位相加,如果由进位则经过半加器进位1,继而再进行高位的运算。
此次的实验使我对以前学的数字电路有了更加深刻的理解。
六、附注
课程实训三计数器
一、实验任务和要求
本实验使用VHDL语言设计十进制假发计数器,用发光二极管显示计数值。
计数允许EN及复位RST信号由逻辑电平给出,计数时钟由试验箱上连续脉冲单元的1HZ给出。
分别进行仿真、引脚分配并下载到电路板进行功能验证。
二、概述所作题目的意义
计数器就是完成计数器的技术功能;
三、本人所做的工作
本人就是负责输入程序、编译检查错误,引脚的分配、编译、烧入程序到硬件上去,与线路的连接。
四、系统的主要功能
1、实验流程(有截图)
引脚分配:
2、源程序代码(要有注释);
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycount10is
port(clk,rst,en:
instd_logic;
cq:
outstd_logic_vector(3downto0));
endentitycount10;
architecturebehofcount10is
begin
process(clk,rst,en)
variablecq1:
std_logic_vector(3downto0);
begin
ifrst='0'thencq1:
=(others=>'0');—计数器复位,这种操作独立于时钟,因而成为一部
elsifclk'eventandclk='1'then—检测时钟上升沿
ifen='1'then—检测是否允许计数,此语句构成了而输入的与门
ifcq1<="1001"thencq1:
=cq1+1;—允许计数构成了比较器;
elsecq1:
=(others=>'0');—大于9计数值清零此语句构成二选一的多路选择器
endif;
endif;
endif;
ifcq1="1010"thencq1:
="0000";—计数等于9,输出进位信号
endif;
cq<=cq1;—计数值向端口输出
endprocess;
endarchitecturebeh;
其他;
五、实训课程设计体会
计数器就是通过发光二极管显示计数值。
计数允许EN及抚慰RST信号由逻辑点评给出,计数时钟由试验箱上连续脉冲单元的1HZ给出。
分别进行仿真、引脚分配并下载到电路板进行功能验证。
通过此次的实验使我对计数器的功能有了更深入放入了解,同时程序的输入也是我对其各部分的引脚了由了跟多的了解。
六、附注
课程实训四多路彩灯控制器实验
一、实验任务和要求。
本实验的彩灯控制CDKZQ分为两大部分,时序控制电路SHZKZJ和显示控制XSKZH。
时序控制电路SHXKZH根据输入信号CLK_IN,CLR,CHOICE_KEY传声符合要求的、供显示控制电路XSHKZJ使用的时钟控制信号,输出各种花型变换的十六路彩灯工作的彩灯工作信号。
二、概述所作题目的意义
多路彩灯就是根据你对你输入的时钟信号的输入,输出各种花形变化的十六路彩灯工作的彩灯工作控制信号。
三、本人所做的工作
本人就是负责组长输入程序、编译。
四、系统的主要功能
1、实验流程(有截图);
引脚分配:
引脚编译
烧入程序:
2、源程序代码(要有注释);
entityshxkzhis
port(choice_key:
instd_logic;—时钟快慢控制信号;
clk_in:
instd_logic;——标准时钟输入
clr:
instd_logic;——系统清零
clk:
outstd_logic);——时钟输出
endentityshxkzh;
architecturebehavofshxkzhis
signalcllk:
std_logic;
begin
process(clk_in,clr,choice_key)is
variabletemp:
std_logic_vector(2downto0);
begin
ifclr='1'then——当CLK=‘1’时清,否则正常工作
cllk<='0';
temp:
="000";
elsifrising_edge(clk_in)then
ifchoice_key='1'then
iftemp="001"then
temp:
="000";
cllk<=notcllk;
else
temp:
=temp+'1';
endif;
—当choice——key=‘1’时产生基准时钟频率的二分之一的时钟信号
—否则产生基准时钟频率八分之一的时钟信号
else
iftemp="111"then
temp:
="000";
cllk<=notcllk;
else
temp:
=temp+'1';
endif;
endif;
endif;
endprocess;
clk<=cllk;
endarchitecturebehav;
libraryieee;
useieee.std_logic_1164.all;
entityxshkzhis
port(clk:
instd_logic;
clr:
instd_logic;
led:
outstd_logic_vector(15downto0));
endentityxshkzh;
architecturebehavofxshkzhis
typestateis(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,
s12,s13,s14,s15,s16,s17,s18,s19,s20,s21,
s22,s23,s24,s25,s26,s27,s28,s29,s30,s31);
signalcurrent_state,next_state:
state;
signaldata:
std_logic_vector(15downto0);
begin
switch_order:
process(clk,clr)
begin
ifclr='1'thencurrent_state<=s0;
elsifrising_edge(clk)thencurrent_state<=next_state;
endif;
endprocess;
control_s:
process(current_state,data)——主控组合进程;根据外部输入的控制信号
——或(和)当前状态的状态值确定下一状态的取向。
即NEXT_STATE的取值内容以及
——确定对外输出火堆内部其他组合时序进程输出信号的内容。
begin
casecurrent_stateis
whens0=>data<="1000000000000001";next_state<=s1;
whens1=>data<="1100000000000011";next_state<=s2;
whens2=>data<="1110000000000111";next_state<=s3;
whens3=>data<="1111000000001111";next_state<=s4;
whens4=>data<="1111100000011111";next_state<=s5;
whens5=>data<="1111110000111111";next_state<=s6;
whens6=>data<="1111111001111111";next_state<=s7;
whens7=>data<="1111111111111111";next_state<=s8;
whens8=>data<="0111111111111110";next_state<=s9;
whens9=>data<="0011111111111100";next_state<=s10;
whens10=>data<="0001111111111000";next_state<=s11;
whens11=>data<="0000111111110000";next_state<=s12;
whens12=>data<="0000011111100000";next_state<=s13;
whens13=>data<="0000001111000000";next_state<=s14;
whens14=>data<="0000000110000000";next_state<=s15;
whens15=>data<="0000000000000000";next_state<=s16;
whens16=>data<="0000000110000000";next_state<=s17;
whens17=>data<="0000001111000000";next_state<=s18;
whens18=>data<="0000011111100000";next_state<=s19;
whens19=>data<="0000111111110000";next_state<=s20;
whens20=>data<="0001111111111000";next_state<=s21;
whens21=>data<="0011111111111100";next_state<=s22;
whens22=>data<="0111111111111110";next_state<=s23;
whens23=>data<="1111111111111111";next_state<=s24;
whens24=>data<="1111111001111111";next_state<=s25;
whens25=>data<="1111110000111111";next_state<=s26;
whens26=>data<="1111100000011111";next_state<=s27;
whens27=>data<="1111000000001111";next_state<=s28;
whens28=>data<="1110000000000111";next_state<=s29;
whens29=>data<="1100000000000011";next_state<=s30;
whens30=>data<="1000000000000001";next_state<=s31;
whens31=>data<="0000000000000000";next_state<=s0;
whenothers=>data<="0000000011111111";next_state<=s0;
endcase;
endprocess;
led<=data;
endarchitecturebehav;
ENTITYCDKZHQISPORT(CLK_IN:
INSTD_LOGIC;CLR:
INSTD_LOGIC;CHOICE_KEY:
INSTD_LOGIC;LED:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDENTITYCDKZHQ;ARCHITECTUREBEHAVOFCDKZHQISCOMPONENTSHXKZHISPORT(CHOICE_KEY:
INSTD_LOGIC;CLK_IN:
INSTD_LOGIC;CLR:
INSTD_LOGIC;CLK:
OUTSTD_LOGIC);ENDCOMPONENTSHXKZH;COMPONENTXSHKZHISPORT(CLK:
INSTD_LOGIC;CLR:
INSTD_LOGIC;LED:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDCOMPONENTXSHKZH;SIGNALC1:
STD_LOGIC;BEGINU1:
SHXKZHPORTMAP(CHOICE_KEY,CLK_IN,CLR,C1);U2:
XSHKZHPORTMAP(C1,CLR,LED);ENDARCHITECTUREBEHAV;
libraryieee;
useieee.std_logic_1164.all;
entitycdkzhqis
port(clk_in:
std_logic;
clr:
instd_logic;
choice_key:
instd_logic;
led:
outstd_logic_vector(15downto0));
endentitycdkzhq;
architecturebehavofcdkzhqis
componentshxkzhis
port(choice_key:
instd_logic;
clk_in:
instd_logic;
clr:
instd_logic;
clk:
outstd_logic);
endcomponentshxkzh;
componentxshkzhis
port(clk:
instd_logic;
clr:
instd_logic;
led:
outstd_logic_vector(15downto0));
endcomponentxshkzh;
signalc1:
std_logic;
begin
u1:
shxkzhportmap(choice_key,clk_in,clr,c1);
u2:
xshkzhportmap(c1,clr,led);
endarchitecturebehav;
其他;
五、实训课程设计体会
此次实验的内容使我对生活中彩灯的花样的变化有了跟多的了解,基本了解了他们转换的原理,只要我们多加练习,我相信我们的可以制作出更多的物品,同时也使我们对我们以后的工作及生活充满了更多的自信。
六、附注
课程实训五键盘扫描输入实验
一、实验任务和要求
本实验使用TD-EDA实验系统的键盘单元设计一个4*4矩阵键盘的扫描译码电路。
此设计包括键盘扫描模块和扫描所存模块,每按下键盘阵列的一个按键立即在七段数码管上显示相应的数值。
二、概述所作题目的意义、
键盘扫描就是先扫描外部输入情况反映到数码管的显示上去。
三、本人所做的工作
本人就是负责程序的输入、编译、及检查错误。
四、系统的主要功能
1、实验流程(有截图);
图形输入:
引脚分配:
烧入程序:
2、源程序代码(要有注释);
libraryieee;
useieee.std_logic_1164.all;
entityregis
port(rclk:
instd_logic;——扫描时钟
yxd:
instd_logic_vector(3downto0);——Y列消抖输入
data:
instd_logic_vector(7downto0);——输入数据
led:
outstd_logic_vector(7downto0));——锁存数据输出
endentityreg;
architecturebehvofregis
signalrst:
std_logic;—锁存器复位清零
signalolddata:
std_logic_vector(7downto0);—锁存器旧数据
signalnewdata:
std_logic_vector(7downto0);—锁存器新数据
begin
process(rclk)
begin
ifrclk'eventandrclk='1'then
rst<=yxd(3)andyxd
(2)andyxd
(1)andyxd(0);—判断是否有按键按下
endif;
endprocess;
process(rst)is
begin
if(rst='1')then—RST=1没有按键按下
newdata<=olddata;
else
olddata<=data;—rst=0有按键按下打入新数据
endif;
endprocess;
endarchitecturebehv;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityjpscanis
port(sclk:
instd_logic;—系统时钟:
1KHz
yline:
instd_logic_vector(4downto0);—Y列按键输入
rclk:
outstd_logic;—X行键盘扫描
yxd:
outstd_logic_vector(3downto0);—Y列消抖输出
data:
outstd_logic_vector(7downto0);—数字输出
xrow:
outstd_logic_vector(4downto1));—X行键盘扫描
endentityjpscan;
architecturebehvofjpscanis
componentjpxdis—键盘消抖模块,实现键盘输入消抖
port(d_in:
instd_logic;
clk:
instd_logic;
d_out:
outstd_logic);
endcomponentjpxd;
signalclk:
std_logic;—控制电路时钟频率:
512Hz
signalkey_scan:
std_logic_vector(1downto0);—键盘扫描时钟信号
—“00—01—10—11”
signalclk_jpxd:
std_logic;--去抖电路工作时钟
signaly_xd:
std_logic_vector(3downto0);--键盘列输入去抖后的寄存器
signalx_scan:
std_logic_vector(3downto0);—吉安帕行扫描输出寄存器
--1110—11