用VerilogHDL设计计数器.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用Verilog HDL设计计数器 试验目标 1. 学习使用Verilog HDL语言,并学会使用进行QuartusⅡ软件编程和仿真; 2. 掌握数字电路设计方法,熟悉设计过程及其步骤; 3. 培养学生动手能力,能学以致用,为以后从事电子线路设计打下良好基础; 4. 巩固加深对数电知识了解,在仿真调试过程中,能结合原理来分析试验现象; 试验内容 设计内容及要求 利用Verilog HDL设计一个以自己学号后三位为模计数器; 编写源程序; 给出仿真电路图和仿真波形图; 需求分析: 因为本人学号后3位为212,所以应编一个以212为模加法计数器。若采取同时清零方法,则计数为0~211,化为二进制数即为0 0000 0000计到0 1101 0011。 编写源代码: module count_212(out,data,load,reset,clk); output [8:0] out; input [8:0] data; input load,reset,clk; reg [8:0] out; always @(posedge clk) //clk上升沿触发 begin if(!reset)out=9'h000; //同时清零,低电平有效 else if (load)out=data; //同时预置 else if (out>=211)out=9'h000; //计数最大值为211,超出清零 else out=out+1; //计数 end endmodule 程序说明: 该计数器为一个9位计数器,计数范围0~211,含有同时同时置数和同时清零功效。时钟上升沿有效,当clk信号上升沿到来时,假如清零信号为0,则清零;若不为0,计数器进行计数,计至211处同时清零。 画出仿真电路图: 图1为同时置数、同时清零加法计数器仿真电路图 图1 仿真电路图 画出仿真波形 先对逻辑波形进行初始化设置,将清零信号‘restest’置1,置数信号‘load’置0,得到仿真波形图2所表示,波形终止处图3所表示,图4为计数到211后自动清零。 当reset=0,计数器清零;当reset=1,load=0时,计数器计数;当reset=1、load=1时,计数器计数。 因为延时较长,上升沿触发显示不是很显著。 图2 开始计数状态波形 图3 逻辑波形---波形终止处 图4 计数到211然后清零 试验结果 由仿真波形能够看出,计数器从0 0000 0000计到0 1101 0011后便清零。而0 1101 0011B=211D, 所以该计数器即为一个模为211计数器,符合试验要求。 试验总结 1. 计数器功效表 Clk Reset Load Out 上升沿 0 X 清零 上升沿 1 0 置数(data) 上升沿 1 1 计数 2. 应熟知计数器使用方法,并能设计出任意进制计数器,在设计时才能得心应手。计数进制改变,包含清零法(同时清零和异步清零)和置数法。假定计数器计数进制为N,要将其改为M进制计数器,M < N 。当计数器从全零状态开始计数,若采取同时清零法,设计时应经过M-1个状态后清零;若采取异步清零法,设计时应经过M个状态后清零。这么就跳过了M个状态,实现了M进制计数器。因为采取异步清零法会产生清零不可靠问题,本试验采取为同时清零法。 3. 本试验采取是数据流描述方法来描述电路,经过assign连续赋值实现组合逻辑功效,使用简单,语句易于读懂。 4. 调试过程中,应沉着冷静,出现错误时,应该依据数电知识原理来分析,找犯错误原因,对症下药;也可上网搜查该错误含义,可能是软件使用方法不对。

文档评论(0)

130****8663 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档