已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PLD与数字系统设计实验报告-设计性实验报告(运动计时器1、实验说明:作为Verilog语言的初学者,此次报告全面的展示了计时器实验设计的过程,总结了自己学习的一些内容。计时器设计的实现方法比较多,本设计的创新点主要有以下方面:使用了硬件描述语言和原理图混合输入的方式,进行模块化设计,生成电路元件符号,设计方法比较直观,方便其他实验进行模块调用。计时器的暂停开始功能的控制,使用StateCAD图像化的设计方式,利用状态机实现该模块的设计。1.1 实验要求使用Xilinx公司的Spartan3S 400AN开发板上的相关模块,利用ISE开发软件完成运动计时器的设计,要求实现如下功能:(1)在LED数码管上显示分钟和秒,最长的计时时间为59:59。(2)自定义清零按键,按下该按键,在数码管上显示的时间为00:00。(3)自定义启动/暂停按键,按下该按键,则启动或暂停计时器计时。其功能与实际的计时器的开始/停止按钮功能相同。1.2 实验工具XUP(FPGA:Spartan3S400AN)实验开发板Xilinx软件ISE13.4开发软件二、实验分析设计过程实验设计理念主要为自顶向下的设计方法,这也是数字系统设计中最常用的设计方法,也是基于芯片的系统设计的主要方法。它的基本原理框图如下:图 1 设计方法框图自顶向下的设计方法利用功能分割手段将设计由上到下进行层次化和模块化,即分层次、分模块进行设计和仿真。功能分割时,将系统功能分解为功能块,功能块再分解为逻辑块,逻辑块再分解为更少的逻辑块和电路。如此分割,逐步的将系统细化,将功能逐步具体化,模块化。高层次设计进行功能和接口描述,说明模块的功能和接口,模块功能的更详细描述在下一设计层次说明,最底层的设计才涉及具体寄存器和逻辑门电路等实现方式的描述。2.1 各模块描述语言的实现本实验采用硬件描述语言和电路原理图混合输入的方式实现,用Verilog描述语言分别产生计数、显示和控制模块,然后将这些模块生成电路符号并构成一个顶层电路原理图,这种方法使用方便,设计也比较直观,并且生成的功能模块方便其他设计的调用。下面是每个模块设计的思路:2.1.1 计时模块的设计本模块的设计类似于数字时钟的方法,秒、分都是60 进制计数,采用了 6 进制计数器与10 进制计数器的组合实现;控制逻辑主要是用来实现计数和清零。首先,要由系统时钟(50Mhz)分频得到秒信号,秒时钟累加即可得到分钟信号,分频方案主要有以下两种:a) 占空比1:1方波信号分频效果如下图所示,(这里为了仿真的方便改变计数器的数值)图 2 秒信号(方波形式)b) 非方波形式从50Mhz的时钟信号分频,得到秒信号高电平的脉冲宽度为分频时钟的一个周期,控制秒钟加1。图 3 秒信号(非方波形式)本实验采用第二种分频方式,主要是为了防止在进行综合的时候出现分频信号向系统时钟偏移(clock skew)的警告,一般遵循使用一个时钟域几个使能域优于多个全局时钟域的规则。 图4 时钟偏移的考虑其次,用分频出的秒信号,作为计数模块秒低位计数器的触发信号,依此完成秒高位、分低位、分高位的计数功能。其实现方法是使用四个always进程模块,分别对计时器的四位计数,由于always进程是并行的,因此可以提高程序运行的效率。对其仿真结果如下所示:图 5 计数器仿真上图是计数器仿真部分截图,从图中数据看到,计数器功能正常。此模块所对应的程序如下所示:module timer(clken,rst,clk_50M,sec1,sec2,min1,min2);input clk_50M;/系统时钟input clken,rst;/其中clken是控制计数信号,rst是清零信号,都由控制模块产生output 3:0sec1;output 3:0sec2;output 3:0min1;output 3:0min2;reg 3:0 sec1; /秒低位信号reg 3:0 sec2; /秒高位信号reg 3:0 min1; /分钟低位信号reg 3:0 min2; /分钟高位信号reg 27:0 count;reg clk_1H;/分频得到1s的信号always (posedge clk_50M or posedge rst ) begin if(rst) begin count = 28d0; end else begin /if(count=28d2499_9999) if(count=28d4) begin count = 28d0; clk_1H = 1d1; end else begin count = count+1; clk_1H = 1d0; end endend/秒个位计数器always (posedge clk_50M or negedge rst) begin if(rst) begin sec1 = 4b0; end else if(clken)/计数使能信号 begin if(clk_1H) begin if(sec1 = 4b1001) sec1 = 4b0000; else sec1 = sec1+4b0001; end endend/秒十位计数器always (posedge clk_50M or negedge rst) begin if(!rst) begin sec2 = 4b0; end else if(clken)/计数使能信号 begin if(clk_1H&(sec1 = 4b1001)/秒信号和秒低位信号控制秒高位计数 begin if(sec2 = 4b0101) sec2 = 4b0; else sec2 = sec2+4b0001; end end end /分个位计数器always (posedge clk_50M or negedge rst) begin if(rst) begin min1 = 4b0; end else if(clken) begin if(clk_1H&(sec1 = 4b1001)&(sec2 =4b0101) begin if(min1 = 4b1001) min1 = 4b0; else min1 = min1 +4b0001; end end end /分十位计数器always (posedge clk_50M or negedge rst) begin if(rst) begin min2 = 4b0; end else if(clken) begin if(clk_1H&(sec1 = 4b1001)&(sec2 = 4b0101)&(min1 = 4b1001) begin if(min2 = 4b0101) min2 = 4b0; else min2 = min2 +4b0001; end end end endmodule2.1.2 数码管显示模块设计本模块主要是对数码管显示进行动态扫描及译码输出。动态扫描显示的原理很简单,由于在实验中片选信号和笔画码都是不经过数据锁存而直接由IO口送数码管的,并且四位数码管共用并行的笔画码数据线,因此必须轮流选中某一位数码管,才能使各位数码管能显示不同的数字或符号。再利用人眼睛对50Hz以上的光的闪烁不敏感的特性。因此,只要轮流选中某一位的时间间隔不超过20ms(对四位数码管来说,相邻位选中间隔不超过5ms),就感觉数码管是在持续发光显示一样。其次是要根据实验板上数码管共阳的特性进行译码输出。图 6 数码管编码段选设计源程序如下:使用了计数器cnt实现了对数码管的逐位点亮,并在把相应的显示数据送到该位显示。module player(clk_50M,reset,sec1,sec2,min1,min2,dula,weil);input clk_50M;input reset;input 3:0sec1;input 3:0sec2;input 3:0min1;input 3:0min2;output 7:0 dula; /数码管段选控制output 3:0 weil;/数码管位选控制reg 7:0 dula;reg 3:0 weil;reg 3:0 num;reg 27:0 count;reg 1:0 cnt;reg clks;/数码管扫描的频率/分频得到500hz的扫描频率always (posedge clk_50M or negedge reset) begin if(!reset) begin count = 28d0; clks = 0; end else begin if(count=28d49_999) begin count = 28d0; clks = 1b1; end else begin count = count+1;/默认为十进制 clks = 1b0; end endendalways (posedge clk_50M)begin if(clks)/ begin cnt = cnt+2b01; end case(cnt) 2b00 :begin weil = 4b1110;/最右边的数码管亮 num = sec1; end 2b01 :begin weil = 4b1101; num = sec2; end 2b10 :begin weil = 4b1011;/左二位 num = min1; end 2b11 :begin weil = 4b0111;/最左边的数目管亮 num = min2; end endcase end/译码模块always (num) begin case(num) 4b0000 :dula7:1 = (7b1111_110);/显示0 4b0001 :dula7:1 = (7b0110_000);/1 4b0010 :dula7:1 = (7b1101_101);/2 4b0011 :dula7:1 = (7b1111_001);/3 4b0100 :dula7:1 = (7b0110_011);/4 4b0101 :dula7:1 = (7b1011_011); 4b0110 :dula7:1 = (7b1011_111); 4b0111 :dula7:1 = (7b1110_000); 4b1000 :dula7:1 = (7b1111_111); 4b1001 :dula7:1 = (7b1111_011); default :; endcase endendmodule 2.1.3 控制模块的设计根据实验的要求,用一个按键实现计时器的暂停和开始的功能。这个功能的实现有以下两个方案:通过检测按键的电平变化,改变控制计数的变量的值,可以通过取反来实现0、1状态的反转,从而完成暂停和开始的控制。利用有限状态机。ISE中的StateCAD支持以状态转移图作为逻辑设计输入,可以实现将状态转移图生成HDL语言,在此基础上进行一些必要性的修改,可以获得控制模块的代码。根据清零按键和暂停开始按键输出控制信号clken和rst,控制计数模块timer的计数和清零。在ISE中的timer工程新建状态机文件,有限状态机的变化过程如下:图7 控制模块状态机转换本设计使用了第二种控制方法,相比第一种方法逻辑控制较严密,并取得了较好的效果。其描述语言如下所示:module control(clk_50M,reset,pause,clken,rst);input clk_50M;input reset,pause;/低电平有效output clken;output rst;reg clken;reg rst;/定义状态机的六个状态parameter clear = 6b000_001,parameter zero = 6b000_010,parameter start = 6b000_100,parameter counting = 6b001_000,parameter stop1 = 6b010_000,parameter stopped = 6b100_000;reg 5:0 current_state;/当前状态reg 5:0 next_state; /下一状态always (current_state or pause) begin case(current_state) clear:begin next_state = zero; clken = 1b0; rst = 1b1; end zero:begin next_state = (pause)?zero:start; clken = 1b0; rst = 1b0; end start:begin next_state = (pause)?counting:start; clken = 1b0; rst = 1b0; end counting:begin next_state = (pause)?counting:stop1; clken = 1b1; rst = 1b0; end stop1:begin next_state = (pause)?stopped:stop1; clken = 1b0; rst = 1b0; end stopped:begin next_state = (pause)?stopped:start; clken = 1b0; rst = 1b0; end endcaseendalways (posedge clk_50M or negedge reset) begin if(!reset) current_state = clear; else current_state = next_state; endendmodule2.2 综合及设计实现在完成各模块的HDL描述后,进行语法的检查,生成电路模块设计顶层原理图。加入用户约束文件,确定对应的管脚编号,最后对原理图进行综合和设计实现及生成下载文件。2.2.1 各模块原理图的生成在当前工程窗口中的Design Utilites项目中,双击Creat Schmatic Symbol命令,得到三个模块control、timer、display原理图,如下所示:图8 控制模块原理图图9 计数模块原理图图10 显示模块原理图2.2.2 顶层原理图的设计和综合在工程中新建Schematic文件,命名为time_sch,并设置为顶层文件(选择Set as top module),然后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年群路密码机系列投资申请报告
- 2024年密封垫及类似接合衬垫项目资金筹措计划书代可行性研究报告
- 临高县新盈中学2024-2025学年高一上学期期中考试历史试题
- 国际合作租赁合同范本
- 仓配战略合作协议内容
- 18 《刘胡兰》说课稿
- 2024年种鸽买卖合同正规范本
- 标准建筑设备租赁合同文本
- 房屋出租代理合同样本
- 定向培养就业协议书范本
- 设备对中技术PPT课件
- 分析工具(世纪大桥标准答案)
- 办公室工作务虚会汇报材料
- 温县电子商务公共服务中心PPT课件
- 第2章推销自己PPT课件
- 招商银行在职证明
- 学前教育-小班幼儿规则意识养成的现状、问题及对策研究
- 工程机械设计中轻量化技术的应用
- 机械工程与自动化的关系探讨
- 毕业设计液压剪切机液压系统设计
- 新重症医学科优质护理服务实施方案
评论
0/150
提交评论