1、数字逻辑课程设计报告课 程 实 验 报 告课程名称: 数字逻辑课程设计 专业班级:计算机科学与技术201003学 号: 姓 名: 鲁辰 指导教师: 报告日期: 计算机科学与技术学院目录1 实验目的 22 实验仪器和组件 23 实验设计方案、逻辑图和波形图 23.1 控制面板 23.2 输入 23.3 输出 23.4 流程图 23.5 设计的具体要求 23.6 端口列表及说明 23.7 数据对象列表说明 23.8 各个功能模块说明 24 实验步骤、实验记录 24.1 分模块编写源代码: 24.2 分模块测试、仿真 24.2.1 水位控制模块的仿真 24.2.2 模式控制模块仿真 24.2.3 标
2、准洗仿真 24.2.4 单洗模块仿真 24.2.5 洗漂模块仿真 24.2.6 单漂模块仿真 24.2.7 漂脱模块仿真 24.2.8 单脱模块仿真 24.2.9 暂停控制仿真 24.2.10 自动关机仿真 25 对观察结果的分析、处理及讨论 26 实验方案的改进意见 2参考文献 2附录:程序源代码 2顶层文件:try1.vhd 2开机控制模块:power_control1.vhd 2水位控制模块:water_level1.vhd 21 实验目的 通过硬件描述语言VHDL的编程,深入了解并掌握可编程芯片PLD的设计技术,加强对数字逻辑课程所学知识的综合运用能力。培养创新性思维能力和独立解决实际
3、问题的能力。2 实验仪器和组件DICE-SEM型实验箱(含Lattice 公司的CPLD芯片 ispLSI1032)开发系统ispLever5.0导线数根3 实验设计方案、逻辑图和波形图3.1 控制面板3.2 输入:电源开关:电平启动、暂停按钮:脉冲信号洗衣模式:脉冲信号水位:脉冲信号3.3 输出指示灯:电源开关指示灯、启动/暂停指示灯(启动工作时亮)、洗涤指示灯、漂洗指示灯、脱水指示灯数码管:两个数码管显示剩余时间,由三种工作状态的剩余时间共用,即:洗涤时间、漂洗时间和脱水时间,在进行洗衣模式选择时则显示为该模式的总时间。一位数码管显示水位。3.4 流程图是否3.5 设计的具体要求(1)标准
4、模式下,洗衣机先洗涤12分钟,然后漂洗6分钟2次,最后脱水3分钟。(2)单洗模式下,洗衣机只洗12分钟。(3)洗漂模式下,洗衣机先洗涤12分钟,然后漂洗6分钟2次。(4)单漂模式下,洗衣机只漂洗6分钟2次(5)漂脱模式下,洗衣机先漂洗6分钟2次,然后脱水3分钟(6)单脱模式下,洗衣机只脱水3分钟(7)上面6种模式运行时,都可以随时按启动/暂停键在暂停运行和启动运行两者间切换。(8)在一个洗衣模式的所有工作流程完成之后,洗衣机进入标准模式,同时,如果5分钟内没有按启动/暂停键来启动运行,系统将自行掉电。3.6 端口列表及说明端口名称输入or输出端口类型功能powerinoutstd_logic作
5、为洗衣机开关,接电平信号clkinstd_logic输入时钟,接实验台上1Hz插孔(接上页表)startinstd_logic启动/暂停按钮,接脉冲信号modeinstd_logic模式选择按钮,接脉冲信号waterinstd_logic水位选择按钮,接脉冲信号display_1outstd_logic_vector(3 downto 0)洗衣机运行时,显示剩余时间;模式选择时,显示当前模式总时间(显示剩余时间的十位)display_0outstd_logic_vector(3 downto 0)洗衣机运行时,显示剩余时间;模式选择时,显示当前模式总时间(显示剩余时间的个位)water_lev
6、eloutstd_logic_vector(3 downto 0)显示当前水位soundoutstd_logic当洗衣机洗衣结束时,发出警报power_lightoutstd_logic显示洗衣机的开关状态,接指示灯,灯亮表示“开”startloutstd_logic启动/暂停指示灯,值为1表示洗衣机处于“启动状态”washing_lightoutstd_logic模式选择时,亮红灯表示该模式中包括了洗涤过程;洗衣机运行时,灯闪表示正在进行洗涤过程clean_lightoutstd_logic模式选择时,亮红灯表示该模式中包括了漂洗过程;洗衣机运行时,灯闪表示正在进行漂洗过程drain_lig
7、htoutstd_logic模式选择时,亮红灯表示该模式中包括了脱水过程;洗衣机运行时,灯闪表示正在进行脱水过程表格3. 1 端口说明3.7 数据对象列表说明数据对象名称数据对象类型功能states枚举类型将洗衣机的六种洗衣模式描述值为(s0,s1,s2,s3,s4,s5)六种状态的数据类型(接上页表)c_sstates表示当前状态,其值为s0,s1,s2,s3,s4,s5之一c_tinteger range 0 to 27表示洗衣机运行过程中当前模式下的剩余时间last_timeinteger range 0 to 27表示当前clk脉冲到来前,洗衣机运行过程中当前模式下的剩余时间stops
8、td_logic控制系统的自动掉电,当stop值为1时系统自动掉电donestd_logic表示当前是否可以修改洗衣模式,值为1表示当前可修改洗衣模式overstd_logic表示洗衣机当前是否已完成工作处于待机状态,值为1表示洗衣机当前完成工作countinteger range 0 to 30作为自动掉电计时器,当系统完成工作处于待机状态时,每当时钟脉冲到来,计时器的值加1表格3. 2 数据对象说明3.8 各个功能模块说明3.8.1 开机/关机控制:power_control1该模块通过读取由顶层模块传入的信号power、stop,做出判断,对power_light的值进行修改。3.8.2
9、 水位控制:water_level1该模块通过由顶层模块传入的信号 power、water、start_light、water_level,作出判断;当power=1,start_light=0时,通过顶层的water端口传入的脉冲信号为有效,这时,每当检测到water的一个脉冲时,water_level的输出值加1。3.8.3 模式控制:mode_choose通过检测信号power_light、start_light、mode等的值,当处于暂停情况下时,检测到的mode的脉冲有效,对模式c_s进行修改。3.8.4 计时:start1当处于启动状态时,时钟脉冲clk有效,使c_t的值减1,即当
10、前模式下的剩余时间减1,此时不能修改模式;当暂停时,通过done的值,判断是否修改模式。3.8.5显示时间:operation_time根据计时模块得到的剩余时间c_t,运算得出当前模块当前步骤(可能含洗涤、漂洗、脱水三个洗衣步骤)的剩余时间。3.8.6模式指示等控制:lighting根据由c_s、power_light、start_light的值控制wash_light、clean_light、drain_light 的亮、灭、闪等状态。3.8.7启动/暂停指示灯控制:spl处于启动状态时,灯亮;否则灯不亮。3.8.8自动关机控制:selfoff当洗衣的流程结束时(即power=1、over
11、=1、start_light=0时),每当检测到一个时钟脉冲count的值加1,当count的值等于30时,开关机控制模块power_control1检测到stop的值变成1,于是将power_light置为0,即自动关机。4 实验步骤、实验记录4.1 分模块编写源代码:详见附录中的代码部分4.2 分模块测试、仿真4.2.1 水位控制模块的仿真图4. 1 水位控制模块仿真波形图4.2.2 模式控制模块仿真图4. 2 模式控制模块仿真波形图4.2.3 标准洗仿真图4. 3 标准洗仿真波形图4.2.4 单洗模块仿真图4. 4 单洗模块仿真波形图4.2.5 洗漂模块仿真图4. 5 漂洗模块仿真波形图
12、4.2.6 单漂模块仿真图4. 6 单漂模块仿真波形图4.2.7 漂脱模块仿真图4. 7 漂脱模块仿真波形图4.2.8 单脱模块仿真图4. 8 单脱模块仿真波形图4.2.9 暂停控制仿真图4. 9 暂停控制仿真波形图4.2.10 自动关机仿真图4. 10 自动关机仿真波形5 对观察结果的分析、处理及讨论首先通过引脚绑定,生成jed文件,然后将jed文件下载到目标器件(即CPLD芯片ispLSI1032)。通过实际手动测试,发现基本功能与仿真产生的波形图相符合,但是,测试暂停功能时,发现每当在洗衣机运行时按下暂停键,时间的显示会回到该模块最初的总时间,从新开始计时,这与4.2.9中的暂停控制波形
13、仿真情况不符。6 实验方案的改进意见暂停功能下载到芯片后无法正常使用,是亟待改进的一点。但是由于仿真波形名没有反映出上述错误,所以初步判断不大可能是代码的编写错误造成的。个人分析可能由于在引脚绑定时,对相应引脚的选择不当,导致了这一错误。可是即使数次在不同的实验台上,选择不同的引脚匹配组合,这一问题仍是得不到解决,只能考虑对程序的代码做适当修改。参考文献1 欧阳星明.数字逻辑. 4版M. 武汉:华中科技大学出版社,2009.2 数字逻辑实验指导书3 孟庆海.VHDL基础及经典实例开发. 西安:西安交通大学出版社,2008.4 齐洪喜.VHDL电路设计. 北京:清华大学出版社,2004.附录:程
14、序源代码顶层文件:try1.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity try1 isport( power:inout std_logic; clk,start,mode,water:in std_logic; display_1,display_0:out std_logic_vector(3 downto 0); water_level:buffer std_logic_vector(3 downto 0); sound,washing_light,clean_lig
15、ht,drain_light:out std_logic; start_light:buffer std_logic; power_light:buffer std_logic );end;architecture wash of try1 istype states is (s0,s1,s2,s3,s4,s5); -有限状态机 signal c_s:states; signal c_t,last_time:integer range 0 to 27; signal stop,done,over:std_logic; signal count:integer range 0 to 30;com
16、ponent power_control1 port( power: IN STD_LOGIC; stop: IN STD_LOGIC; power_light: OUT STD_LOGIC);end component; COMPONENT water_level1PORT ( power: IN STD_LOGIC; water: IN STD_LOGIC; start_light: IN STD_LOGIC; water_level: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT; beginpower_1: power_control1
17、port map(power,stop,power_light);water1:water_level1 port map(power,water,start_light,water_level);mode_choose:process(c_t,mode) -控制模式选择的进程begin if power_light=1 then if start_light=0 then -暂停时进行模式变换 if modeevent and mode=1 then donec_sc_sc_sc_sc_sc_snull; end case; end if; end if; if c_t=0 and last
18、_time=1 then -工作流程结束后返回初始状态 c_s=s0; done0 and start_light=1 then -定义工作的时候不能设置水位和模式 done=0; over=1; end if; else -给系统的模式赋初值 c_s=s0; done=1; over 0 then -计时 last_time=c_t; c_tc_tc_tc_tc_tc_tc_tnull; end case; elsif done=0 then end if; end if; else c_tdisplay_1=0010; display_0display_1=0001; display_0d
19、isplay_1=0010; display_0display_1=0001; display_0display_1=0001; display_0display_1=0000; display_0null; end case; end if; else case c_s is -工作开始后动态显示时间 when s0=if c_t15 then temp:=c_t-15; elsif c_t3 then temp:=c_t-3; else temp:=c_t; end if; when s1=temp:=c_t; when s2=if c_t12 then temp:=c_t-12; els
20、e temp:=c_t; end if; when s3=temp:=c_t; when s4=if c_t3 then temp:=c_t-3; else temp:=c_t; end if; when s5=temp:=c_t; when others=null; end case; if temp9 then display_1=0001; temp:=temp-10; else display_1display_0display_0display_0display_0display_0display_0display_0display_0display_0display_0null;
21、end case; end if; else display_1=1111; -未开电源时的初值 display_0washing_light=1;clean_light=1;drain_lightwashing_light=1;clean_light=0;drain_lightwashing_light=1;clean_light=1;drain_lightwashing_light=0;clean_light=1;drain_lightwashing_light=0;clean_light=1;drain_lightwashing_light=0;clean_light=0;drain_l
22、ightnull; end case; else case c_s is -执行已选的洗衣模式 when s0= if c_t 15 then washing_light=1; -标准洗 clean_light=1; drain_light3 then washing_light=0; clean_light=1; -2.漂洗 drain_light=1; else washing_light=0; clean_light=0; -3.脱水 drain_lightwashing_light=1; -单洗 clean_light=0; drain_light if last_time12 then washing_light=1; -洗漂 clean_light=1; -1.洗涤 drain_light=0; else washing_light=0; clean_light=1; -2.漂洗 drain_light washing_light=0; -单漂 clean_light=1; drain_light if last_time3 then washing_light=0; -漂脱 clean_light=1; -1.漂洗 drain_light=1;