1、数字钟计数电路的设计可用反馈归零法。当计数器正常读数时,反馈门不 起作用,只有当进位脉冲到来时, 反馈信号随即将计数电路清零, 实现相应模的 循环计数。以六十进制为例,当计数器从 00,01,02 ,,59 计数时,反馈门不起 作用,只有当第 60 个脉冲到来时,反馈信号随即将计数电路清零,实现模为 60 的循环计数。通过对设计题目的分析,我将整体电路划分为 5 个子电路来设计,及分频、 按键处理、时间计数、数据选择和显示模块,而且还设置了复位信号,随时可以 对电路进行复位。1)分频模块通过对主频信号 50MHZ的分频来得到所需的 1000HZ的时钟信 号,并将此作为之后子电路的标准时钟, 实
2、现同步电路的要求, 主要采用的是计 数的方法,当寄存器记满 50000 时产生输出脉冲;2)按键处理模块通过对 SW1按键的判别,并采用双 D 寄存器的应用,在标 准时钟的触发下产生 starop 脉冲,通过判别 starop 脉冲是否有高电平使 mode 信号发生高低电平的翻转, mode为高电平时允许计数,为低电平时停止计数;3)时间计数模块以 10 进制计数器为基础, 10 计数器设置了 en_in 的接收 进位和 en_out 产生进位,实现了全加器的功能; 然后用 10 进制的计数器产生了 100 进制的,再而产生 8 位 10 进制的计数器子电路,取其中的低 7 位完成计数 模块子
3、电路的设计;4)数据选择模块式通过安检处理模块中产生的 mode信号和 SW2按键对计 数器产生的数据进行处理,当 mode为高电平的时候将计数器的产生的结果存入 lcd_data_in 寄存器中;为低电平时, lcd_data_in 内容保持不变; SW2为高电 平时进行清零操作,使得 lcd_data_in 寄存器中的内容全部清零。5)显示模块是运用 LCD显示器的显示原理,将 lcd_data_in 寄存器中的数 据按 4 位一组的模式赋值给 lcd_data_out 8 位寄存器的低 4 位,高四位为 4b0011,选择的是数字字库,实现 LCD的数据输入,并且产生 RS,RW,en,
4、cont 这 4 位控制信号,控制 LCD的显示。三、实验程序1)顶层文件module ms_clock(clk_50M,SW1,SW2,SW3, /SW1 暂停 / 继续 SW2清零 SW3复位 lcd_data_out,RS,RW,en,cont);input clk_50M; / 系统时钟input SW1,SW2,SW3; / 按键output7:0 lcd_data_out;output RS,RW;output en,cont;wire clk_50M;wire SW1,SW2,SW3;wire clk_1000;wire 3:0 ms_1,ms_2,ms_3,s_1,s_2,s_
5、3,s_4;wire 27:0 lcd_data_in;wire 7:wire mode;wire starop;/ 分频模块 , 把 50MHZ的时钟分频为 1000HZ用于计数器计数f_div m1(clk_50M,SW3,clk_1000);/ 按键处理模块anjian m2(clk_1000,SW3,SW1,mode,starop);/ 时间计数主模块time_counter m3(mode,clk_1000,SW3, ms_1,ms_2,ms_3,s_1,s_2,s_3,s_4);/ 数据选择模块kongzhim4(clk_1000,SW3,SW2,mode,ms_1,ms_2,ms
6、_3,s_1,s_2,s_3,s_4,lcd_data_in);/ 显示模块display m5(clk_1000,SW3,lcd_data_in,lcd_data_out,RS,RW,en,cont);endmodule2)按键处理模块module anjian(clk,rst,SW1,mode,starop);input clk,rst,SW1;output mode,starop;reg 1:0 DQ1;reg mode;always (posedge clk or negedge rst) if (rst)DQ1=2b00;elseDQ1=DQ10,SW1;assign starop=
7、DQ10&DQ11; always (posedge clk or negedge rst) if (rst)mode = 1b0;else if(starop) mode = mode; endmodule 编译结果:仿真:3)分频模块module f_div(clk_50M,clr,clk_1000);input clr;output clk_1000;reg clk_1000;reg 15:0 cnt_div;always (posedge clk_50M or negedge clr)beginif(clr)begin / 复位信号 cnt_div = 16endelse if(cnt
8、_div = 49999) begin clk_1000 = clk_1000; cnt_div else begin cnt_div = cnt_div+1b1;endmodule 编译结果:4)数据选择模块module kongzhi(clk,rst,clear,mode,ms_1,ms_2,ms_3,s_1,s_2,s_3,s_4, lcd_data_in);input 3: input clear,mode,clk,rst;output 27:reg 27:always (posedge clk or negedge rst)if(rst)lcd_data_in 27:0 =28els
9、e if (clear) /clearbegin lcd_data_in 27: endelse /no actioncase(mode)1b1: /start begin lcd_data_in3:0= ms_1; lcd_data_in7:4= ms_2; lcd_data_in11:8= ms_3; lcd_data_in15:12= s_1; lcd_data_in19:16= s_2; lcd_data_in23:20= s_3; lcd_data_in27:24= s_4;b0: /stop begin lcd_data_in27:=lcd_data_in27:0;endcase5
10、)时间计数模块module time_counter(EN,clk,clr,ms_1,ms_2,ms_3,s_1,s_2,s_3,s_4);input EN,clk,clr;output 3:0ms_1,ms_2,ms_3;0s_1,s_2,s_3,s_4;wire en1,en2,en3,en4;0s_5;counter_1 U0(EN,clk,clr,ms_1,ms_2,en1); counter_1 U1(en1,clk,clr,ms_3,s_1,en2);counter_1 U2(en2,clk,clr,s_2,s_3,en3);counter_1 U3(en3,clk,clr,s_4
11、,s_5,en4); endmodulea. counter_1 子电路module counter_1(EN,clk,clr,ms_1,ms_2,EO);input clk,clr,EN;0 ms_2;0 ms_1;output EO;wire ld,en1,en2;assign ld=1assign EO=en2;cont_10 u0(clk,clr,ld,EN,ms_1,en1);cont_10 u1(clk,clr,ld,en1,ms_2,en2);b. cont_10 子电路module cont_10(clk,rst,ld,en_in,data_out,en_out);input
12、clk,rst,ld,en_in;0data_out;output en_out;reg 3:assign en_out=en_in & data_out3 & data_out0; always(posedge clk or negedge rst) if(rst)data_out=4b0000;else if(ld)else if(en_in)if(data_out3 & data_out0) data_out=data_out+1编译结果:6)显示模块module display(clk,rst,lcd_data_in,lcd_data_out,RS,RW,en,cont); input clk,rst;input 27:wire en_out;reg RS,RW;reg3:0 count;reg7:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1