《数字逻辑课程设计(共8页).doc》由会员分享,可在线阅读,更多相关《数字逻辑课程设计(共8页).doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上数字逻辑课程设计 -24s倒计时设计学院:数学科学学院姓名:墨漓选课号:9一、 设计目的利用组合逻辑电路和时序电路,通过Verilog语言编码设计篮球24s倒计时器。初始时间为24.0s,每隔0.1s减1计数,当计时达到00.0s时,计时器停止,点亮LED灯表示超时。并且在实现倒计时的功能的基础上,加上复位和暂停键。二、 课程设计说明1.时钟源为50MHz,计时器精确到0.1s2.数码管只使用后3位。三、 设计任务及要求1. 设计一个24s的倒计时计数器,使其每0.1s减一计数,并当计时达到00.0s时,计时器停止,点亮LED灯表示超时。2. 功能拓展a.增加复位(R
2、eset)功能 当Reset按键按下或Reset=1时,计时器初始化为24.0s, 可开始新的一轮倒计时b.增加暂停/继续(Pause)功能当Pause=0时,计时器停止计时;Pause=1时,计时器恢复计时3.对设计出来的程序用七段译码器显示到开发板上四、 设计思路1. 先设计一个对BCD数的倒计时计数器,使其每隔0.1s就减1计数。初始值为24s,若最终倒计时到0s,就使一盏灯闪烁,证明倒计时终止了;当按下暂停键,倒计时中止,松开暂停键,则继续倒计时;再设计一个复位键,当reset=1时,计数器复位到24s。2. 设计一个暂停键的模块,实现暂停的功能。3. 设计把bcd数转化为七段译码器的
3、模块,使得每次计时器变化的值能够反映到开发板的数码管上。因为只用到3个数位,因此利用七段译码器把数码管的一直置为0.即一直不显示。4. 设计一个能够产生周期为0.1s的时钟。3.将四个七段译码器得到的编码加到一个4选1 的多路复用器上,并用一个2位的选择端来选择输出哪一路编码。因为输入的数据都在一根总线上,所以想不断改变选择信号,使4个LED灯交错显示。考虑利用一个2-4译码器,令信号的变化速度达到一个值,则人眼看到的就是4个LED灯一直显示所做的运算。从而达到24s倒计时的功能。五、 功能实现的具体代码5.1倒计时计数器模块timescale 1ns / 1psmodule count_ba
4、ckwards(clk,pause,reset,light,Q);input clk;input pause,reset;output reg light=0;output reg11:0 Q=12b0;always (posedge clk)beginif(pause) Q=Q;else if(reset=1)beginQ=12b0;light=0;endelsebeginif(Q=0)light=1;else if(Q3:0=0)beginQ3:0=9;if(Q7:4=0)beginQ7:4=9;Q11:8=Q11:8-1;endelseQ7:4=Q7:4-1;endelseQ3:0=Q3
5、:0-1;endendendmodule5.2暂停模块程序timescale 1ns / 1psmodule pause_mode(rco,reset,pausein,pauseout);input rco,reset,pausein;output wire pauseout;reg pause;assign pauseout=pause|pausein;always (posedge rco or posedge reset)if(rco) pause=1;else if(reset) pause=0;else pause=pause;endmodule5.3有小数点的第二位的七段码译码器程
6、序timescale 1ns / 1psmodule bcd_7seg_dp(en,bcd_in,seg_7);input en;input 3:0 bcd_in;output 7:0 seg_7;reg 7:0 seg_7;always (en, bcd_in)beginif (en)case (bcd_in)4h0:seg_7=8b;4h1:seg_7=8b;4h2:seg_7=8b;4h3:seg_7=8b;4h4:seg_7=8b;4h5:seg_7=8b;4h6:seg_7=8b;4h7:seg_7=8b;4h8:seg_7=8b;4h9:seg_7=8b;default:seg_7
7、=8b;endcaseelse seg_7=8b;endendmodule5.4一般的七段译码器程序timescale 1ns / 1psmodule bcd_7seg(en,bcd_in,seg_7);input en;input 3:0 bcd_in;output 7:0 seg_7;reg 7:0 seg_7;always (en, bcd_in)beginif (en)case (bcd_in)4h0:seg_7=8b;4h1:seg_7=8b;4h2:seg_7=8b;4h3:seg_7=8b;4h4:seg_7=8b;4h5:seg_7=8b;4h6:seg_7=8b;4h7:se
8、g_7=8b;4h8:seg_7=8b;4h9:seg_7=8b;default:seg_7=8b;endcaseelse seg_7=8b;endendmodule5.5产生一个周期为0.1s的时钟信号timescale 1ns / 1psmodule f_divider(clk,f250,f125,f10);input clk;output f250,f125;output reg f10=0;wire f250;reg f125=1;reg 17:0 count=0;reg 21:0 count2=0;reg fout=0;assign f250=fout;always (posedge
9、 clk)begincount=count+1;count2=count2+1;if (count=)begincount=0;fout=fout;endif(count2=)begincount2=0;f10=f10;endendalways (negedge fout)f125=f125;endmodule六、 电路图七、 仿真结果7.1计数7.2结束7.3暂停7.4重置7.5暂停和重置八、 总结体会在上一次的课程设计中,对BCD加法器的设计编写Verilog语言异常辛苦,而经过这样的一次体验,在编写本次课程设计的代码时思路清楚了很多,并且基本都能转化成正确的语言。再者,在这次的课程设计中还体验了对schematic的绘制,对设计的内容有了更深入的把握。对24s倒计时器的设计,更加深入的认识了十进制数在具体问题中的处理与应用,对二进制数和BCD数的转换有了不一样的理解。专心-专注-专业