EDA技术及应用项目教程 课件 项目6 小型数字系统的应用实例_第1页
EDA技术及应用项目教程 课件 项目6 小型数字系统的应用实例_第2页
EDA技术及应用项目教程 课件 项目6 小型数字系统的应用实例_第3页
EDA技术及应用项目教程 课件 项目6 小型数字系统的应用实例_第4页
EDA技术及应用项目教程 课件 项目6 小型数字系统的应用实例_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

项目6

小型数字系统的应用实例摘要ABSTRACT

在现代电子系统中,数字系统所占的比例越来越大。现代电子系统发展的趋势是数字化和集成化。CPLD/FPGA作为可编程ASIC器件,在数字系统设计中发挥着重要的作用。在第5个项目中介绍了典型组合逻辑、时序逻辑功能电路,并给出了VerilogHDL描述方法。本项目采用层次式设计法,通过几个综合设计实例使读者进一步掌握VerilogHDL在CPLD/FPGA小型数字系统设计中的应用方法。本项目知识图谱本项目学习目标知识目标①熟悉小型数字系统的设计方法②进一步掌握VerilogHDL在FPGA小型数字系统设计中的应用方法本项目学习目标技能目标①能综合应用CPLD/FPGA的输入、输出设计小型数字系统②能进行CPLD/FPGA的VerilogHDL的顶层和底层设计,从而实现小型数字系统的模块化编程本项目学习目标素养目标①树立技能成才,科技报国的人生理想②加强实践练习,注重学思结合、知行统一,增强勇于探索的创新精神1目录CONTENTS流水灯的显示控制28位数码管移位显示控制时间可调数字钟的设计43模拟交通信号灯控制器的设计任务6.1流水灯的显示控制

流水灯是一串按一定规律像流水一样连续闪亮,形成一定的视觉效果的一组灯。流水灯在生活中的应用非常广泛,其灯光效果是在控制按照设定的顺序和时间来发亮和熄灭。流水灯的控制可用多种方法实现,如单片机、PLC等,本任务要求使用FPGA来实现。6.1.1流水灯的显示控制要求

使用VerilogHDL程序实现8只LED发光二极管的流水灯显示控制,要求FPGA外接的系统时钟为50MHz。在正常情况下,LED发光二极管每隔1s循环左移1位显示;当按下复位按钮时,流水灯恢复初始状态(即8只LED全部熄灭);按下暂停按钮时,暂停左移,保持原来显示状态。6.1.2流水灯的显示控制硬件电路设计6.1.3流水灯的显示控制软件程序设计6.1.3流水灯的显示控制软件程序设计1.分频模块的设计modulefreq(clkin,clkout);parametern=50_000_000;//parametern=10;//波形仿真时n可改用10inputclkin;outputregclkout;reg[24:0]cnt;always@(posedgeclkin)

if(cnt==(n/2-1))begin

cnt<=1'b0;clkout<=~clkout;endelse

cnt<=cnt+1'b1;endmodule6.1.3流水灯的显示控制软件程序设计2.显示控制模块的设计时序\状态D7D6D5D4D3D2D1D0LED输出功能说明0\st00000000100000001D0点亮1\st10000001000000010D1点亮2\st20000010000000100D2点亮3\st30000100000001000D3点亮4\st40001000000010000D4点亮5\st50010000000100000D5点亮6\st60100000001000000D6点亮7\st71000000010000000D7点亮8\st80100000001000000D6点亮9\st90010000000100000D5点亮10\st100001000000010000D4点亮11\st110000100000001000D3点亮12\st120000010000000100D2点亮13\st130000001000000010D1点亮6.1.3流水灯的显示控制软件程序设计moduleLED_Display(clk,pause,rst,LED);inputclk,pause,rst;outputreg[7:0]LED;reg[3:0]cnt;//复位、暂停和cnt计数控制always@(posedgeclk,negedgepause,negedgerst)beginif(!rst)cnt<=4'd0;elseif(!pause)cnt<=cnt;elsebeginif(cnt==4'd14)cnt<=4'd0;

elsecnt<=cnt+1'd1;

endend//根据cnt当前计数值选择输出,控制相应的LED显示always@(cnt)case(cnt)4'd0:LED<=8'b0000_0001;4'd1:LED<=8'b0000_0010;4'd2:LED<=8'b0000_0100;4'd3:LED<=8'b0000_1000;4'd4:LED<=8'b0001_0000;4'd5:LED<=8'b0010_0000;4'd6:LED<=8'b0100_0000;4'd7:LED<=8'b1000_0000;4'd8:LED<=8'b0100_0000;4'd9:LED<=8'b0010_0000;4'd10:LED<=8'b0001_0000;4'd11:LED<=8'b0000_1000;4'd12:LED<=8'b0000_0100;4'd13:LED<=8'b0000_0010;defaultLED<=8'b0000_0001;endcaseendmodule6.1.3流水灯的显示控制软件程序设计3.顶层模块的设计moduleex1_LED2(clk_sys,pause,rst,LED);inputclk_sys,pause,rst;output[7:0]LED;wireclk_new;freqU1(.clkin(clk_sys),.clkout(clk_new));LED_DisplayU2(.clk(clk_new),.pause(pause),.rst(rst),.LED(LED));endmodule6.1.4流水灯的显示控制仿真与验证图6-3分频模块的仿真波形图6-4显示模块的仿真波形任务6.28位数码管移位显示的设计

在项目5中讲述了1位数码管的显示,在此以8位数码管为例讲述其在FPGA中的显示控制方法。6.2.18位数码管移位显示控制要求

使用8位共阴极数码管进行动态显示,要求每按一次左移按钮(key),数码管显示的内容循环左移1位。按下复位按钮(rst)时,数码管显示初始值为87213649。6.2.28位数码管移位显示控制硬件电路设计6.2.38位数码管移位显示控制软件程序设计6.2.38位数码管移位显示控制软件程序设计1.分频模块的设计modulefreq(clkin,clk_1kHz,clk_2Hz);parametercnt_1kHz=50_000;//1kHz分频系数parametercnt_2Hz=25_000_000;

//2Hz分频系数inputclkin;outputregclk_1kHz;outputregclk_2Hz;reg[15:0]cnt1;reg[24:0]cnt2;always@(posedgeclkin)//1kHz频率

if(cnt1==(cnt_1kHz/2-1))begin

cnt1<=1'b0;clk_1kHz<=~clk_1kHz;end

else

cnt1<=cnt1+1'b1;always@(posedgeclkin)//2Hz频率

if(cnt2==(cnt_2Hz/2-1))begin

cnt2<=1'b0;clk_2Hz<=~clk_2Hz;end

else

cnt2<=cnt2+1'b1; endmodule6.2.38位数码管移位显示控制软件程序设计2.移位显示控制模块的设计moduleLED_Disp(rst,key,clk_1kHz,clk_2Hz,cs,LED);inputrst,key,clk_1kHz,clk_2Hz;outputreg[2:0]cs;outputreg[7:0]LED;parameterst0=3'b000,st1=3'b001,st2=3'b010,st3=3'b011;parameterst4=3'b100,st5=3'b101,st6=3'b110,st7=3'b111;reg[2:0]current_state,next_state;//定义现态和次态reg[7:0]led0,led1,led2,led3;reg[7:0]led4,led5,led6,led7;reg[2:0]cnt;//初始状态initialbegincurrent_state=st0;next_state=st0;cnt=0;endalways@(posedgeclk_1kHz,negedgerst)begin

if(!rst)current_state<=st0;

elsecurrent_state<=next_state;endalways@(posedgeclk_2Hz,negedgerst,negedgekey)beginif(!rst)

cnt<=3'b000;else

begin

if(!key)

beginif(cnt==3'b111)cnt<=3'b000;

elsecnt<=cnt+3'b001;

end

endend6.2.38位数码管移位显示控制软件程序设计always@(current_state)case(current_state)

st0:next_state=st1;st1:next_state=st2;st2:next_state=st3;st3:next_state=st4;st4:next_state=st5;st5:next_state=st6;st6:next_state=st7;st7:next_state=st0;default:next_state=st0;endcase

always@(cnt)case(cnt)

3'b000:beginled7=8'b01111111;//显示8led6=8'b00000111;//显示7led5=8'b01011011;//显示2led4=8'b00000110;//显示1led3=8'b01001111;//显示3

led2=8'b01111101;//显示6led1=8'b01100110;//显示4led0=8'b01101111;//显示9end3'b001:beginled7=8'b00000111;//显示7led6=8'b01011011;//显示2led5=8'b00000110;//显示1led4=8'b01001111;//显示3led3=8'b01111101;//显示6led2=8'b01100110;//显示4led1=8'b01101111;//显示9led0=8'b01111111;//显示8end3'b010:beginled7=8'b01011011;//显示2led6=8'b00000110;//显示1led5=8'b01001111;//显示3led4=8'b01111101;//显示6led3=8'b01100110;//显示4led2=8'b01101111;//显示9led1=8'b01111111;//显示8led0=8'b00000111;//显示7end3'b011:beginled7=8'b00000110;//显示1led6=8'b01001111;//显示3led5=8'b01111101;//显示6led4=8'b01100110;//显示4led3=8'b01101111;//显示9led2=8'b01111111;//显示8led1=8'b00000111;//显示7led0=8'b01011011;//显示2

end3'b100:beginled7=8'b01001111;//显示3led6=8'b01111101;//显示6led5=8'b01100110;//显示4led4=8'b01101111;//显示9led3=8'b01111111;//显示86.2.38位数码管移位显示控制软件程序设计

led2=8'b00000111;//显示7led1=8'b01011011;//显示2led0=8'b00000110;//显示1end3'b101:beginled7=8'b01111101;//显示6led6=8'b01100110;//显示4led5=8'b01101111;//显示9led4=8'b01111111;//显示8led3=8'b00000111;//显示7led2=8'b01011011;//显示2led1=8'b00000110;//显示1led0=8'b01001111;//显示3end3'b110:beginled7=8'b01100110;//显示4led6=8'b01101111;//显示9led5=8'b01111111;//显示8led4=8'b00000111;//显示7led3=8'b01011011;//显示2

led2=8'b00000110;//显示1led1=8'b01001111;//显示3led0=8'b01111101;//显示6end3'b111:beginled7=8'b01101111;//显示9led6=8'b01111111;//显示8led5=8'b00000111;//显示7led4=8'b01011011;//显示2led3=8'b00000110;//显示1led2=8'b01001111;//显示3led1=8'b01111101;//显示6led0=8'b01100110;//显示4end

endcasealways@(current_state)case(current_state)3'b000:beginLED=led0;cs=3'b000;end3'b001:beginLED=led1;cs=3'b001;end3'b010:beginLED=led2;cs=3'b010;end3'b011:beginLED=led3;cs=3'b011;end3'b100:beginLED=led4;cs=3'b100;end3'b101:beginLED=led5;cs=3'b101;end3'b110:beginLED=led6;cs=3'b110;end3'b111:beginLED=led7;cs=3'b111;end

endcaseendmodule6.2.38位数码管移位显示控制软件程序设计3.顶层模块的设计moduleex2_LED_Display(clk_sys,rst,key,cs,LED);inputclk_sys,rst,key;output[2:0]cs;output[7:0]LED;wireclk_1kHz,clk_2Hz;freqU1(.clkin(clk_sys),.clk_1kHz(clk_1kHz),.clk_2Hz(clk_2Hz));LED_DispU2(.rst(rst),.key(key),.clk_1kHz(clk_1kHz),.clk_2Hz(clk_2Hz),.cs(cs),.LED(LED));endmodule6.2.48位数码管移位显示仿真与验证图6-7移位显示模块的仿真波形图6-8第1次按下key的移位显示效果任务6.3模拟交通信号灯控制器的设计

交通信号灯控制器是一个典型的数字控制系统,可使用单片机、PLC等技术进行设计。在此,利用EDA技术采用大规模可编程逻辑器件CPLD/FPGA来实现。6.3.1模拟交通信号灯的设计要求

假设一个十字路口为东西南北走向,东西、南北两个方向分别用红、绿、黄三种颜色的LED来指示交通状态。LED的显示规律如下:东西方向的直行绿灯亮,而南北方向的直行红灯亮→东西直行绿灯灭后,黄灯亮,南北仍然直行红灯→南北方向的直行绿灯亮,而东西方向的直行红灯亮→南北直行绿灯灭后亮黄灯,东西方向仍然直行红灯亮→东西方向的直行绿灯亮,而南北方向的直行红灯亮……,如此循环。东西方向是主干道,南北方向是支干道,要求两条交叉道路上的车辆交替运行。要求主干道每次通行时间为55s,支干道每次通行时间为45s。在绿灯转为红灯时,要求黄灯先亮3s,方可变换运行车道。在主干道有支干道上还具有左转指示,主干道直行40s以内,其左转红灯亮,左转绿灯灭;40s后至55s内,其左转红灯灭,左转绿灯亮。支道直行30s以内,其左转红灯亮,左转绿灯灭;30s后至45s内,其左转红灯灭,左转绿灯亮。当有紧急车到达时,东西、南北两向的交通信号全闪,以便让紧急车通过。急救车通过后,交通灯恢复中断前的状态。交通灯具有复位功能,在复位信号有效的情况下,将交通灯的运行状态复位。6.3.2模拟交通信号灯控制器的硬件电路设计根据设计要求可知,模拟交通信号灯的硬件电路主要由FPGA最小系统电路、8位LED数码管显示电路和发光二极管指示电路构成。东西方向或南北方向的发光二极管指示电路均可以用5只发光二极管构成:东西方向的直行指示绿灯ew_led0、直行指示红灯ew_led1、黄灯ew_led2、左转红灯ew_led3、左转绿灯ew_led4;南北方向的直行指示绿灯sn_led0、直行指示红灯sn_led1、黄灯sn_led2、左转红灯sn_led3、左转绿灯sn_led4。发光二极管指示电路可参考图8-5进行连接、8位LED数码管显示电路可参考图6-5所示进行连接。

6.3.3模拟交通信号灯控制器的软件程序设计6.3.3模拟交通信号灯控制器的软件程序设计1.分频模块的设计modulefreq(clkin,clk_1kHz,clk_2Hz,clk_1Hz);parametercnt_1kHz=50_000;parametercnt_2Hz=25_000_000;parametercnt_1Hz=50_000_000;//parametercnt_1kHz=100;//parametercnt_2Hz=20;//parametercnt_1Hz=10;inputclkin;outputregclk_1kHz;outputregclk_2Hz;outputregclk_1Hz;reg[15:0]cnt1;reg[24:0]cnt2;reg[25:0]cnt3;always@(posedgeclkin)

if(cnt1==(cnt_1kHz/2-1))begin//1kHz

cnt1<=1'b0;clk_1kHz<=~clk_1kHz;end

else

cnt1<=cnt1+1'b1;always@(posedgeclkin)//2Hz频率

if(cnt2==(cnt_2Hz/2-1))begincnt2<=1'b0;clk_2Hz<=~clk_2Hz;end

else

cnt2<=cnt2+1'b1; always@(posedgeclkin)//1Hz频率

if(cnt3==(cnt_1Hz/2-1))beginclk_1Hz<=~clk_1Hz;cnt3<=26'b0;end

elsecnt3<=cnt3+1'b1; endmodule6.3.3模拟交通信号灯控制器的软件程序设计2.交通信号灯控制模块的设计状态东西方向南北方向功能直行绿红停行黄灯左转红绿数码管直行绿红停行黄灯左转红绿数码管St01001035秒倒计时0101055秒倒计时东西直行南北禁行St1001103秒倒计时01010东西停行南北禁行St20100115秒倒计时01010东西左转南北禁行St30101045秒倒计时1001025秒倒计时南北直行东西禁行St401010001103秒倒计时南北停行东西禁行St5010100100115秒倒计时南北左转东西禁行6.3.3模拟交通信号灯控制器的软件程序设计moduletraffic(clk_2Hz,clk_1Hz,rst,pause,ew_led,sn_led,ew_time1,ew_time2,sn_time1,sn_time2);inputclk_2Hz,clk_1Hz,rst,pause;//pause为优先通过按钮output[4:0]ew_led,sn_led;output[7:0]ew_time1,ew_time2,sn_time1,sn_time2;parametern=10;//定义优先通过时间parameterst0=3'b000,st1=3'b001,st2=3'b010,st3=3'b011;parameterst4=3'b100,st5=3'b101,st6=3'b110,st7=3'b111;reg[2:0]current_state,next_state;//定义现态和次态reg[4:0]ew_q,sn_q;reg[7:0]ew_times,sn_times;integeri;always@(posedgeclk_1Hz,negedgerst,negedgepause)if(!rst)

begin

current_state<=st0;

ew_times<=8'b0011_0101;

sn_times<=8'b0101_0101;

endelseif(!pause)for(i=n;i>=0;i=i-1)beginew_q[0]<=clk_2Hz;ew_q[1]<=clk_2Hz;ew_q[2]<=clk_2Hz;ew_q[3]<=clk_2Hz;sn_q[0]<=clk_2Hz;sn_q[1]<=clk_2Hz;sn_q[2]<=clk_2Hz;sn_q[3]<=clk_2Hz;

ew_q[4]<=clk_2Hz;sn_q[4]<=clk_2Hz;end

elsecase(current_state)st0:beginew_q[3:0]<=4'b0010;sn_q<=5'b10010;ew_times<=8'b0011_0101;sn_times<=8'b0101_0101;if(ew_times<8'd4)ew_q[4]<=clk_2Hz;elseew_q[4]<=1'b0;if(ew_times==0)begin

current_state<=st1;ew_times<=8'b0000_0011;endelsebegincurrent_state<=st0;

if(ew_times[3:0]==4'b0)ew_times<=ew_times-4'd7;6.3.3模拟交通信号灯控制器的软件程序设计elsesn_times<=sn_times-4'd1;endst1:beginew_q<=5'b00110;sn_q<=5'b10010;if(ew_times==0)begin

current_state<=st2;ew_times<=8'b0001_0101;

endelsebegin

current_state<=st1;

if(ew_times[3:0]==4'b0)ew_times<=ew_times-4'd7;elseew_times<=ew_times-4'd1;end if(sn_times[3:0]==4'b0)sn_times<=sn_times-4'd7;elsesn_times<=sn_times-4'd1;endst2:beginew_q<=5'b01001;sn_q<=5'b10010;if(ew_times==0)begin

current_state<=st3;

sn_times<=8'b0010_0101;

ew_times<=8'b0100_0101;endelsebegin current_state<=st2;if(ew_times[3:0]==4'b0)ew_times<=ew_times-4'd7;

elseew_times<=ew_times-4'd1

if(sn_times[3:0]==4'b0)sn_times<=sn_times-4'd7;

elsesn_times<=sn_times-4'd1; endendst3:begin

ew_q<=5'b11001;sn_q[3:0]<=4'b0010;if(sn_times<8'd4)sn_q[4]<=clk_2Hz;elsesn_q[4]<=1'b0;

if(sn_times==0)begin

current_state<=st4;sn_times<=8'b0000_0011;endelsebegin

current_state<=st3;

if(sn_times[3:0]==4'b0)sn_times<=sn_times-4'd7;

elsesn_times<=sn_times-4'd1;end if(ew_times[3:0]==4'b0)

ew_times<=ew_times-4'd7;

elseew_times<=ew_times-4'd1;

end6.3.3模拟交通信号灯控制器的软件程序设计st4:begin

sn_q<=5'b00110;ew_q<=5'b10010;if(sn_times==0)begin

current_state<=st5;

sn_times<=8'b0001_0101;endelsebegin

current_state<=st4;

if(sn_times[3:0]==4'b0)

sn_times<=sn_times-4'd7;

elsesn_times<=sn_times-4'd1;

end if(ew_times[3:0]==4'b0)

ew_times<=ew_times-4'd7;

elseew_times<=ew_times-4'd1;end st5:beginsn_q<=5'b01001;ew_q<=5'b10010;

if(sn_times==0)begin

current_state<=st0;

ew_times<=8'b0011_0101;

sn_times<=8'b0101_0101;end

elsebegincurrent_state<=st5;

if(sn_times[3:0]==4'b0)

sn_times<=sn_times-4'd7;

elsesn_times<=sn_times-4'd1;

if(ew_times[3:0]==4'b0)

ew_times<=ew_times-4'd7;

elseew_times<=ew_times-4'd1;

end

endendcaseassignew_time1=ew_times[3:0];assignew_time2=ew_times[7:4];assignsn_time1=sn_times[3:0];assignsn_time2=sn_times[7:4];assignew_led=ew_q;assignsn_led=sn_q;endmodule6.3.3模拟交通信号灯控制器的软件程序设计2.交通信号灯控制模块的设计moduleLED_Disp(clk_1kHz,data0,data1,data2,data3,

data4,data5,data6,data7,cs,LED);inputclk_1kHz;input[3:0]data0,data1,data2,data3;input[3:0]data4,data5,data6,data7;outputreg[2:0]cs;outputreg[7:0]LED;parameterst0=3'b000,st1=3'b001,st2=3'b010,st3=3'b011;parameterst4=3'b100,st5=3'b101,st6=3'b110,st7=3'b111;reg[2:0]current_state,next_state;//定义现态和次态reg[3:0]data;always@(posedgeclk_1kHz)//状态转移current_state<=next_state;always@(current_state)case(current_state)

st0:next_state=st1;st1:next_state=st2;

st2:next_state=st3;st3:next_state=st4;st4:next_state=st5;st5:next_state=st6;st6:next_state=st7;st7:next_state=st0;default:next_state=st0;endcase

always@(data)

//共阴极显示段码case(data)4'b0000:LED=8'b00111111;//04'b0001:LED=8'b00000110;//14'b0010:LED=8'b01011011;//24'b0011:LED=8'b01001111;//34'b0100:LED=8'b01100110;//44'b0101:LED=8'b01101101;//54'b0110:LED=8'b01111101;//64'b0111:LED=8'b00000111;//74'b1000:LED=8'b01111111;//84'b1001:LED=8'b01101111;//94'b1010:LED=8'b01110111;//A4'b1011:LED=8'b01111100;//B6.3.3模拟交通信号灯控制器的软件程序设计4'b1100:LED=8'b00111001;//C4'b1101:LED=8'b01011110;//D4'b1110:LED=8'b01111001;//E4'b1111:LED=8'b01110001;//Fdefault:LED=8'b00000000;//默认值

endcasealways@(current_state)//LED动态显示case(current_state)st0:begincs=3'b000;data=data0;endst1:begincs=3'b001;data=data1;endst2:begincs=3'b010;data=data2;endst3:begincs=3'b011;data=data3;endst4:begincs=3'b100;data=data4;endst5:begincs=3'b101;data=data5;endst6:begincs=3'b110;data=data6;endst7:begincs=3'b111;data=data7;enddefault:begincs=3'b000;data=data0;endendcaseendmodule6.3.3模拟交通信号灯控制器的软件程序设计3.顶层模块的设计moduleex3_traffic_light(clk_sys,rst,pause,cs,ew_LED,sn_LED,LED);inputclk_sys,rst,pause;output[4:0]ew_LED,sn_LED;output[2:0]cs;output[7:0]LED;wireclk_1kHz,clk_1Hz,clk_2Hz;wire[3:0]ew_data0,ew_data1,sn_data0,sn_data1;freqU1(.clkin(clk_sys),.clk_1kHz(clk_1kHz),.clk_2Hz(clk_2Hz),.clk_1Hz(clk_1Hz));trafficU2(.rst(rst),.pause(pause),.clk_2Hz(clk_2Hz),.clk_1Hz(clk_1Hz),.ew_led(ew_LED),

.sn_led(sn_LED),.ew_time1(ew_data0),

.ew_time2(ew_data1),.sn_time1(sn_data0),

.sn_time2(sn_data1));LED_DispU3(.clk_1kHz(clk_1kHz),.data0(ew_data0),.data1(ew_data1),.data6(sn_data0),

.data7(sn_data1),.cs(cs),.LED(LED));endmodule6.3.3模拟交通信号灯控制器的仿真与硬件验证图6-10交通信号灯控制模块的仿真波形图图6-11模拟交通信号灯控制器的仿真波形图任务6.4时间可调数字钟的设计

数字钟是经典的数字系统,其功能简单,时序清晰,作为初学者的最佳启蒙设计实例,培养了一批又一批数字系统设计者。本任务讲述的数字钟具有时间可调的功能。6.4.1时间可调数字钟的设计要求

时间可调数字钟的控制要求:具有24小时正常计时和调时、调分的功能;小时、分钟和秒钟各用两个数码管显示;小时、分钟、秒钟之间用一横杠来显示。6.4.2时间可调数字钟的硬件电路设计

可调数字钟的硬件电路主要由FPGA最小系统、LED数码管显示电路、4个按键电路构成,其硬件电路可在图6-2的基础上增加3个按键(k0、k1、k2)即可。6.4.2时间可调数字钟的软件程序设计6.4.2时间可调数字钟的软件程序设计1.分频模块的设计

由于系统外接时钟频率为50MHz,8个LED数码管动态扫描显示频率为1kHz,时间可调数字钟的基准时钟信号为1Hz,因此需对系统时钟进行分频,以产生所需的时钟信号,其程序可参考模拟交通信号灯控制器的分频模块程序。。6.4.2时间可调数字钟的软件程序设计2.计时/调时模块的设计moduletimer(clk_1Hz,set,rst,s1,s2,sec_l,sec_h,

min_l,min_h,hour_l,hour_h);inputclk_1Hz,rst;inputset;//启动校验inputs1;//调分inputs2;//调时outputreg[3:0]sec_h,sec_l;

//秒输出outputreg[3:0]min_h,min_l;

//分输出outputreg[3:0]hour_h,hour_l;

//时输出

//初始化时间为08:34:58initialbeginhour_h<=4'd0;

hour_l<=4'd8;min_h<=4'd3;min_l<=4'd4;sec_h<=4'd5;sec_l<=4'd8;

end

always@(posedgeclk_1Hz,negedgerst)beginif(!rst)

begin

hour_h<=4'd0;hour_l<=4'd8;

min_h<=4'd3;min_l<=4'd4;

sec_h<=4'd5;sec_l<=4'd8;end

elseif(!set)

begin

if(!s1)begin

min_l<=min_l+1;

if(min_l==4'd9)begin

min_l<=4'd0;min_h<=min_h+1;if(min_h==4'd5)min_h<=4'd0;

end

end

if(!s2)begin

hour_l<=hour_l+1;

if(hour_l==4'd9)6.4.2时间可调数字钟的软件程序设计begin

hour_l<=4'd0;

if(hour_h<4'd2)hour_h<=hour_h+1;end

elseif(hour_h==4'd2&&hour_l=

温馨提示

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

评论

0/150

提交评论