(最新整理)VerilogHDL课程设计_第1页
(最新整理)VerilogHDL课程设计_第2页
(最新整理)VerilogHDL课程设计_第3页
(最新整理)VerilogHDL课程设计_第4页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(完整)verilog hdl课程设计(完整)verilog hdl课程设计 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)verilog hdl课程设计)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为(完整)verilog hdl课程设计的全部内容。- 25 - 人民武装学院verilog hdl课 程 设 计

2、 洗衣机控制器的设计 学生姓名: 周云 学 号: pb102027115 专 业: 电子信息科学与技术 年 级: 2010 级 指导老师: 周 骅 老 师 时 间: 2011年12月22日 目录引言 3 -一、设计内容- 4 -1.设计内容- 4 -2。功能 4 -二、洗衣机控制器的工作原理- 6 1。 洗衣机的工作状态 6 2。 全自动洗衣过程- 7 3。单独执行某个洗衣程序 8 三、洗衣机的状态转换图- 9 1.洗衣机的状态转换图- 9 2. 设计思路- 9 -四、设计程序 11 1.全自动洗衣机主程序- 11 2。全自动洗衣机测试程序- 15 五、步骤及仿真图 17 1。在代码提示 框架

3、中完成核心子模块wash_ctrl.v的设计 17 -2.对核心子模块 wash_ctrl.v 进行时序仿真 17 六、功能图 20 -1.设计顶层图形文件 ,编译 20 -2.功能引脚锁定- 20 -心得体会 22 -引言随着高密度现场可编程逻辑器件的广泛应用,当前数字系统正朝着速度快、容量大、体积小、重量轻的方向发展的时候,越来越多的工程人员采用硬件描述语言hdl (hardware description language)来进行项目的开发。目前最通用的hdl 有vhdl 与verilog 两种,它们具有ieee国际标准,语法严谨,是今后数字电路与系统设计的必然趋势,它的优点在于具有行为

4、级描述方式,可对设计进行准确描述,易于设计修改,缩短开发周期。基于vhdl开发系统有多种上,是其中之一,他的功能强大,在开发有限状态机fsm(finite state machine)时序电路时,我们不需要要再用传统的电路输入的方法,通过设计寄存器组来实现各个状态之间的转换,我们可充分利用硬件描述语言的抽象建模能力,用cad工具直接绘制状态转移图,具体的逻辑简化可和电路设计可同计算机自动完成,从而提高了设计的效率,并且条理更清晰,修改方便等.一、设计内容1.设计内容设计一个智能洗衣机控制器,能够实现进水、洗涤、漂洗、甩干等一系列过程全自动控制.2.功能洗衣机是一种在家庭中不可缺少的家用电器,发

5、展非常快,全自动式洗衣机因使用方便得到大家的青睐,全自动即进水、洗涤、漂洗、摔干等一系列过程自动完成,控制器通常设有几种洗涤程序,对不同的衣物可供用户选择.洗衣机的工作流程由进水、洗衣、排水、脱水4个过程组成。在半自动洗衣机中,这4个过程分别用相应的按钮开关来控制。全自动洗衣机中,这4个过程可做到全自动依次运行,直至洗衣结束。全自洗衣机的洗衣桶(外桶)和脱水桶(内桶)是以同一心安放的,内桶可以旋转,作为脱水用。内桶的周围有许多小孔,使内桶和外桶的水流相通,洗衣机的进水和排水分别由进水电磁阀和排水电磁阀来执行。进水时通过控制系统将进水电磁阀打开,经进水管将水注入到外桶。排水时,通过控制系统将排水

6、电磁阀打开,将水由外桶排到机外。洗涤正转、反转由洗涤电动机驱动波盘的正、反转来实现,此时脱水桶并不旋转。脱水时,控制系统将离合器合上,由洗涤电动机带动内桶正转进行甩干。高、中、低水位控制开关分别用来检测高、中、低水位。启动按钮用来启动洗衣机工作,停止按钮用来实现手动停止进水、排水、脱水及报警.排水按钮用来实现手动排水。普通洗衣机的工作流程示意图当按下复位按钮时,洗衣机上电,控制电路复位到初始状态(默认水位为“中”;使用 ) 者可根据衣服的多少,按下水位控制按钮,改变水位设置,以控制上水时加水的多少;当按 下启动/暂停按钮时,洗衣机开始洗衣的第一个操作:进水阀门打开,开始上水,并根据水 位设置(

7、高、中、低、少)历时不同的时间timeadd(8s、7s、6s、5s) ;然后进水阀门关闭, 电机开始运转,开始洗衣过程,并历时 9s;然后电机停止运转,排水阀门打开,开始排水, 并根据水位设置(高、中、低、少)历时不同的时间timedrain(7s、6s、5s、4s) ;然后排水 阀门关闭,进水阀门打开,开始第二次上水,并历时timeadd当甩干结束后,整个洗衣 过程完成,扬声器发出持续 15 秒的急促的“嘀嘀”音,提示用户洗衣结束。正常运行状态 下全自动洗衣机工作过程:空闲(idle)第一次加水(water1)7s洗衣(wash)9s第一次排水(drain1)6s第二 次加水(water2

8、)7s漂洗(rinse)9s第二次排水(drain2)6s甩干(dry)5s蜂鸣 15s . 洗衣机整个工作过程可分为 9 个状态,运用有限状态机的设计思想来实现。 二、洗衣机控制器的工作原理有限状态机(fsm,finite state machine)是一种重要的时序逻辑电路单元,尤其适 合于设计数字系统的控制模块。 状态机可以认为是组合逻辑和寄存器逻辑的特殊组合, 它一 般包括两个部分:组合逻辑部分和寄存器部分。组合逻辑部分又包括次态逻辑和输出逻辑, 分别用于状态译码和产生输出信号; 寄存器部分用于存储状态. 状态机的次态是现态及输入 信号的函数,输出信号根据状态机的现态或输入信号而定。

9、根据输出信号产生方法的不同,状态机可分为两类:摩尔(moore)型状态机和米里 (mealy)型状态机.对于 moore 型状态机,其输出只为状态机当前状态的函数,而与输入 无关.而对于 mealy 型状态机,其输出不仅与状态机当前状态有关,而且与输入有关。 实用的状态机一般都设计为同步时序电路,它在时钟信号的触发下,完成各状态之间 的转移,并产生相应的输出。 采用 verilog hdl 语言实现基于状态机的控制电路设计, 就是在时钟信号的触发下, 完 成两项任务: (1)用 case 或 ifelse 语句描述出状态的转移, (2)描述状态机的输出信号(通 常是控制信号)。1. 洗衣机的工

10、作状态 洗衣机有 9 个工作状态分别为:空闲(idle) 、第一次加水(water1) 、洗衣(wash) 、第 一次排水(drain1) 、第二次加水(water2) 、漂洗(rinse) 、第二次排水(drain2) 、甩干(dry) 、 蜂鸣(beep) 。 2. 全自动洗衣过程在洗衣机上电后(默认水位为“中”,通过水位控制按钮设置好合适的 ) 水位,然后按下start_pause启动/暂停按钮,使洗衣机全自动完成整个洗衣过程,此洗衣机控制器状态转移图如下图所示: 洗衣机控制器状态转移图分析上图:一旦按下 rst 按钮, 则电路复位到初始状态, 控制信号 m=0, w=0, d=0。 当

11、按下 start_pause 启动/暂停按钮时,则进入 water1 状态,w = 1,使进水阀门打开,开始上水,并历时 7s。然 后转移到下一状态wash,w = 0,使进水阀门关闭;同时 m = 1,使电机开始运转,开始 洗衣过程,并历时 9s。再转移到下一状态-drain1,直到当甩干结束后,整个洗衣过 程完成,扬声器发出持续 15 秒的急促的“嘀嘀”音,提示用户洗衣结束,控制器又返回到 初始状态.3。单独执行某个洗衣程序 有时候,人们可能需要单独执行某个洗衣程序,如洗涤或脱水,这时可以在洗衣前通 过按动洗衣模式选择按钮来选择不同的洗衣程序。 在这种情况下, 洗衣机控制器的状态转移 图就

12、会比全自动洗衣机控制器状态转移图更复杂一些。 首先在 idle 状态下,当按下启动/暂停按钮时,控制器要根据不同的洗衣模式跳转到不 同的状态:若默认是全自动洗衣程序或选择浸泡程序,则跳转到 water1;若选择洗涤程序, 则跳转到 wash;若选择漂洗程序,则跳转到 water2;若选择甩干,则跳转到 dry。而当洗衣机执行完相应的洗衣程序后,则所有控制信号、计时器应清零,同时控制器应 返回初始状态。因此,在 water1 状态下,当加好水时控制器不是直接跳转到 wash,而是要 先判断洗衣模式是否为浸泡程序,若是,则跳转到 idle;若不是,才直接跳转到 wash.同 理,在 drain1

13、状态下,当排完水时控制器不是直接跳转到 water2,而是要先判断洗衣模式是 否为洗涤程序,若是,则跳转到 idle;若不是,才直接跳转到 water2。在 drain2 状态下,当 排完水时控制器不是直接跳转到 dry,而是要先判断洗衣模式是否为漂洗程序,若是,则跳 转到 idle;若不是,才直接跳转到 dry.三、洗衣机的状态转换图 1.洗衣机的状态转换图 由上面全自动洗衣机的工作原理,可知洗衣机控制器的状态转换图如下图所示: 洗衣机控制器的状态转换图2. 设计思路洗衣机控制器系统结构图如下图所示,将整个设计划分为两个子模块:时钟分频子模 块和洗衣机状态控制器子模块。 洗衣机控制器系统结构

14、图 a.时钟分频子模块 clkdiv.v 将系统时钟 50mhz 分频为 1khz, 再将 1khz 分频为 1hz, 以产生洗衣结束时的提示蜂 鸣音 speaker=clk_1hzclk_1khzalarm(每间隔 1s 产生一个音频为 1khz 的提示音) 。 1hz 的时钟信号还作为洗衣机状态控制器子模块的输入时钟信号,驱动洗衣定时器计 数。b洗衣机状态控制器子模块 wash_ctrl。v 设计时,首先应画出状态转移图并仔细分析,明确在每个状态下控制器要输出哪些控 制信号,计数器该怎样计数;当希望洗衣机暂停时,所有控制信号应都变为 0,计数器暂停 计数。当计数器正常计数到预定值时,应跳转

15、到下一状态。然后用 case 语句、ifelse 语句对 状态转移和输出进行描述。 信号定义: input clk_1khz, clk_1hz, rst, start_pause, mode, level, open_door;start_pause:启动/暂停按钮信号,高有效; mode:洗衣模式选择信号,高有效.不按时,默认全程 执行浸泡、洗涤、漂洗、甩干这 4 个程序;每按一下,单独选 择浸泡,或洗涤,或漂洗,或甩干程序。 level:水位控制信号(负脉冲) ,每按一下,循环选择水 位(高、中、低、少) ; open_door: 洗衣机盖打开信号 (负脉冲) 第一次按是 , “开 盖”

16、,再按一次则是合盖。四、设计程序1。全自动洗衣机主程序timescale 1s/100usmodule wash_fsm(0:3times,clock,,rst,start,w,m,d,speaker); input clock,start,rst; output 0:3timees;output w,m,d,speaker;reg0:3times;parameteridle=0,water1=1,wash=2,drain1=3,water2=4,rinse=5,drain2=6,dry=7,beep=8;rg0:4wash_state;always(negedge clock)case(wa

17、sh_state)idle;if(rst)beginstate=1;wash_state= water1;else wash_state=idle;endwater1:beginw=1;if(tims=7s)wash_state=wash;elsewash_state=water1;endwash:beginm=1;if(times=9s)wash_state=drain1;elsewash_state=wash;enddrain1:begind=1;if(times=6s)wash_state=water2;elsewash_state=drain1;endwater2:beginw=1;i

18、f(times=7s)washstate=rinse;elsewash_state=water2;endrinse:beginm=1;if(times=9s)wash_state=dry;elsewash_state=rinse;enddry:begind=1;if(times=5s)wash_state=beep;elsewash-state=dry;endendcaseendmodule对程序进行分析如下:output w, m, d; /w 是进水阀门控制信号,m 是引擎工作信号,d 是放水阀门 控制信号 output3:0 times; /定时计数器,用于洗衣各过程的定时计数 outp

19、ut speaker; /洗衣结束提示音信号,驱动扬声器发声 output3:0 nextstate; /状态机,描述洗衣机的状态转移过程 为方便设计,这里还定义了一些中间变量: reg3:0 modestate; /洗衣模式计数器,0:默认全自动洗程序,1:只执行浸泡程序,2: 只执行洗涤程序,3:只执行漂洗程序,4:只执行甩干程序。根据其值决定控制器从 idle 状态应跳转到哪一状态。 reg3:0 waterlevel;/水位计数器,用来控制加水时间,当水位为高、中、低、少时其 值为 0、1、2、3. reg3:0 timeadd; /加水时间计数器, 根据水位选择控制加水时间, 当水位

20、为高、 中、 低、少时其值为 8s、7s、6s、5s. reg3:0 timedrain; /排水时间计数器,根据水位选择控制排水时间,当水位为高、中、 低、少时其值为 7s、6s、5s、4s; reg doorstate; /洗衣机盖的状态,为“1”表示盖是打开的,为“0”表示盖是合 上的。 reg start_pause_level;/将启动/暂停脉冲信号转换为相应的高低电平信号。 reg alarm; /蜂鸣状态信号,蜂鸣时 alarm 为“1” ,平时为“0” 整个模块包括 8 大部分: 5 用 parameter 常量定义状态机的状态,洗衣、漂洗、甩干和蜂鸣的时间长度 将启动/暂停脉

21、冲信号转换为高低电平信号 always(posedge start_pause or posedge rst) 洗衣模式选择(对 modestate 赋值) always(posedge rst or posedge mode) 水位控制(对 waterlevel 赋值) always(posedge rst or negedge level) /复位时默认水位为“中” open_door 信号控制 always(posedge rst or negedge open_door) 根据水位选择控制加水时间和排水时间 always(posedge clk_1khz) begin case(wat

22、erlevel) endcase end 状态机输出及状态转移 always(posedge clk_1hz or posedge rst) begin if(rst) /控制信号清零,计数器清零,状态机回到空闲状态 else begin case(nextstate) idle: speaker 信号输出 assign speaker=clk_1hz&clk_1khz&alarm;(1)空闲状态 /根据 modestate 的值判断应跳转到哪个状态 water1 :(2)第一次加水 begin if(!start_pause_level) begin end 暂停操作 else begin

23、if(timestimeadd-1) begin end 若未加好水,则一直加水 else begin end 否则根据 modestate 是否为 4d1 判断应跳转到空闲态或下一个状态 end end wash(3)洗衣 6 drain1: (4)第一次排水 /若未排完水,则一直排水 否则根据 modestate 是否为 4d2 判断应跳转到空闲态或下一个状态 water2:(5)第二次加水 rinse:(6)漂洗 drain2:(7)第二次排水 /若未排完水,则一直排水 否则根据 modestate 是否为 4d3 判断应跳转到空闲态或下一个状态 dry:(8)甩干 beep: (9)蜂

24、鸣 endcase end end 2。全自动洗衣机测试程序timescale 1s/100usmodule wash_fsm_test_v;reg clock;reg start;reg rst;wire w;wire m;wire d;wire speak;always began3 clk=1;3 clk=0;endinitial begin w=0; m=0; d=0; 3; w=1; m=0; d=0; #7; m=1; w=0; d=0; 9; d=1; w=0; m=0; #6; w=1; m=0; d=0; 7; m=1; w=0; d=0; 9; d=1; w=0; m=0;

25、 6; m=1; d=1; w=0; #5; w=0; m=0; d=0; speaker=1; 15; w=0; m=0; d=0; 3;endendmodule五、步骤及仿真图1。在代码提示 框架中完成核心子模块wash_ctrl。v的设计2。对核心子模块 wash_ctrl。v 进行时序仿真(1) 仿真全程自动顺序执行浸泡、洗涤、漂洗、甩干这 4 个程序 当rst信号来到时,所有的信号置零;当start_pause信号有效时,进入加水状态;只要不 再按下start_pause按钮,洗衣机将按照预定的时序自动完成洗衣的全过程。 洗衣过程全部自动完成的仿真图(2) 仿真人工干预洗衣过程 在洗

26、衣过程全部自动完成后,再分别给rst和start_pause一个正脉冲,模拟一次新的洗衣 过程。在洗衣状态(wash)下,第二次按下start_pause按钮,则m从“1”变为“0” ,洗衣机 暂停操作;稍后第三次按下start_pause按钮时,则m从“0”变为“1” ,洗衣机继续操作。(3) 仿真选择洗衣模式在人工干预洗衣过程结束后,再给rst一个正脉冲,模拟一次新的洗衣过程。当第一次 按下mode按钮时,洗衣机进入浸泡程序操作;第二次按下mode按钮时,洗衣机进入洗涤程 序。当然,若依次按下mode按钮时,洗衣机会依次进入漂洗、甩干程序(后两个程序限于 篇幅不作图解) .仔细观察mode

27、state和nextstate的变化。 选择洗衣模式的仿真图(4)仿真进行水位控制 在上述洗衣过程结束后,再给 rst 一个正脉冲,模拟一次新的洗衣过程。先给 level 一 个负脉冲,设置水位为低,再启动;到第二次加水期间,给 level 一个负脉冲,设置水位为 少。观察洗衣和漂洗过程中的加水时间和排水时间是否分别与设置的水位相一致。 设置水位分别为低和少时的仿真图(5) 仿真在甩干过程中,打开洗衣机盖的现象在甩干过程中,先后打开和合上洗衣机盖时的仿真图六、功能图1。设计顶层图形文件 ,编译 这里用未消抖按键 9、按键 10(低有效) ,作为水位控制信号 level_n 与洗衣机盖打 开信号

28、 open_door_n 的控制键,因此还需要增加按钮消抖模块。 顶层图形文件2.功能引脚锁定(1)输入信号: clk(f=50mhz)接 pin28; rst 接键 1(pin233) ;start_pause 接键 4(pin236) ;mode 接键 7(pin239) ; level_n:水位控制信号,负脉冲有效,接键 9(pin132) ; open_door_n:洗衣机盖打开信号,负脉冲有效,接键 10(pin128) .(2) 输出信号:w 接发光二极管 d8(pin168) ;m 接 d7(pin167) 接 d6(pin166) ;d ; times 3。.0: 当前状态工作时间, 接数码管 1, 从高位到低位分别接 pin16、 pin15、 pin14、 pin13; nextstate3.0:当前工作状态,接数码管 2,从

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论