数字电路设计实验报告1Word文档格式.docx

上传人:b****5 文档编号:19647709 上传时间:2023-01-08 格式:DOCX 页数:19 大小:20.17KB
下载 相关 举报
数字电路设计实验报告1Word文档格式.docx_第1页
第1页 / 共19页
数字电路设计实验报告1Word文档格式.docx_第2页
第2页 / 共19页
数字电路设计实验报告1Word文档格式.docx_第3页
第3页 / 共19页
数字电路设计实验报告1Word文档格式.docx_第4页
第4页 / 共19页
数字电路设计实验报告1Word文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数字电路设计实验报告1Word文档格式.docx

《数字电路设计实验报告1Word文档格式.docx》由会员分享,可在线阅读,更多相关《数字电路设计实验报告1Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

数字电路设计实验报告1Word文档格式.docx

设置两个信号用于向洗衣机传送着两个消息,识别从暂停状态返回后洗衣机应该进入的状态和模式。

程序分成倒计时模块、按键控制模块、数码管显示模块、发光二极管显示模块、分频模块、防抖动模块以及状态机模块组成。

最后由一个总程序调用。

三 

设计方案 

1、状态框图 

2、状态转移图 

3、源程序及说明 

电路主模块wash.vhd

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_signed.all;

entitywashis 

-----端口定义

port(clk:

instd_logic;

switch:

pause:

lights:

outstd_logic_vector(3downto0);

sell:

outstd_logic_vector(1downto0);

seg:

outstd_logic_vector(6downto0));

endwash;

architecturebehaveofwashis 

-----子程序调用

componentcount50is

port(clkin:

clkout:

outstd_logic);

endcomponent;

componentcount25is

componentstatementis

t_xidi:

t_piaoxi:

t_tuoshui:

command:

outstd_logic_vector(2downto0);

present_state:

outstd_logic_vector(2downto0));

componenttimeis

port(clk_1Hz:

instd_logic_vector(2downto0);

outstd_logic;

sec_l,sec_h:

outstd_logic_vector(3downto0));

componentkeyis

keyin:

keyout:

componentdisplayis

port(clk_100Hz:

instd_logic_vector(3downto0);

componentlightwinkis

lightsin:

selin:

instd_logic_vector(1downto0);

segin:

instd_logic_vector(6downto0);

signalclk_10000Hz,clk_100Hz,clk_2Hz,clk_1Hz:

std_logic;

signaltime_xidi,time_piaoxi,time_tuoshui:

signalswitch_n,pause_n:

signalpresent_state:

std_logic_vector(2downto0);

signalcommand:

signalsec_low,sec_high:

std_logic_vector(3downto0);

signallights4,lightsout:

signalsell2,selout:

std_logic_vector(1downto0);

signalseg7,segout:

std_logic_vector(6downto0);

begin 

-----端口相应信号替代

link1:

count50portmap(clkin=>

clk,clkout=>

clk_10000Hz);

link2:

clk_10000Hz,clkout=>

clk_100Hz);

link3:

clk_100Hz,clkout=>

clk_1Hz);

link4:

count25portmap(clkin=>

clk_2Hz);

link5:

keyportmap(clk=>

clk_100Hz,keyin=>

switch,keyout=>

switch_n);

link6:

pause,keyout=>

pause_n);

link7:

statementportmap(clk=>

clk_2Hz,switch=>

switch_n,pause=>

pause_n,t_xidi=>

time_xidi,t_piaoxi=>

time_piaoxi,t_tuoshui=>

time_tuoshui,command=>

command,present_state=>

present_state);

link8:

timeportmap(clk_1Hz=>

clk_1Hz,present_state=>

present_state,command=>

command,t_xidi=>

time_tuoshui,sec_l=>

sec_low,sec_h=>

sec_high);

link9:

displayportmap(clk_100Hz=>

clk_100Hz,sec_l=>

sec_high,command=>

present_state,lights=>

lights4,sell=>

sell2,seg=>

seg7);

link10:

lightwinkportmap(clk_1Hz=>

present_state,lightsin=>

lights4,selin=>

sell2,segin=>

seg7,lights=>

lightsout,sell=>

selout, 

seg=>

segout);

process

begin

lights<

=lightsout;

sell<

=selout;

seg<

=segout;

endprocess;

end;

分频模块count25.vhd和count50.vhd

count50

entitycount50is

endcount50;

architectureaofcount50is 

-----端口的定义

signalclk1:

process(clkin)

variablet:

integerrange0to49;

begin

if(clkin'

eventandclkin='

1'

)then

if(t=49)then

t:

=0;

clk1<

=notclk1;

-----当t等于49时输出信号翻转一次实现100分频

elset:

=t+1;

-----如果t不等于49则外部时钟变化一次t加1

endif;

clkout<

=clk1;

endprocess;

仿真波形(count50)

count25

entitycount25is

libraryieee;

endcount25;

architectureaofcount25is 

integerrange0to24;

if(t=24)then

 

-----按照时钟,循环计数

-----每记25个数,输出信号取反

仿真波形(count25)

防抖电路 

key.vhd

entitykeyis

-----输入的按键信号

-----输出的按键信号

endkey;

architectureaofkeyis

signalcp:

process(clk,keyin)

integerrange0to1;

if(clk'

eventandclk='

if(keyin='

if(t=1)then

cp<

='

;

-----连续两次时钟,输入信号都为1,则输出为1

else

-----计数

0'

keyout<

=cp;

仿真波形(防抖电路)

计时模块

useieee.std_logic_arith.all;

entitytimeis

-----计时频率

-----当前状态

-----当前命令

-----洗涤时钟

-----漂洗时钟

-----脱水时钟

-----数码管显示输出的数字

endtime;

architecturebehaveoftimeis

typestate_typeis(stop,switch_mode,xidi,piaoxi,tuoshui);

signalstate:

state_type;

signalxidi_timeup,piaoxi_timeup,tuoshui_timeup:

process(clk_1Hz)

variablec:

variabled:

variablenum1:

integerrange0to15;

variablenum2:

integerrange0to9;

variableinput1:

variableinput2:

variablesec1:

variablesec2:

casecommandis

when"

001"

=>

input1:

input2:

=2;

-----洗涤时间20s

010"

=5;

=1;

-----漂洗时间15s

011"

-----脱水时间10s

100"

-----漂洗和脱水时间25s

101"

=4;

-----洗涤、漂洗和脱水总时间45s

whenothers=>

endcase;

casepresent_stateis 

-----当前状态输入

000"

state<

=stop;

=switch_mode;

=xidi;

=piaoxi;

=tuoshui;

if(clk_1Hz'

eventandclk_1Hz='

if(state=xidiorstate=piaoxiorstate=tuoshui)then 

-----处于洗衣状态

if(input1<

num1)then 

-----num1、num2

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

当前位置:首页 > 医药卫生 > 基础医学

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

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