FPGA闹钟设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
时间显示模块
时间显示模块程序
• • • • • • • • • • • • • • • module xianshi(clk,qiehuan,data_in,hour_in,seg,wei,FIV,speak); input clk,qiehuan; input[23:0] hour_in,data_in; input[2:0] FIV; output[7:0] wei,seg; output speak; reg[7:0] wei_r,seg_r; reg[3:0] deg_r; reg speak_r; reg[15:0] count; assign speak=speak_r; assign wei=wei_r; assign seg=seg_r; wire speak_s; assign speak_s=(hour_in[23:8]==data_in[23:8]);
• • • • • • • • • • • • • • • • • • • • • •
4'b1011: begin hour_r[19:16]=hour_r[19:16]+1'b1; if(hour_r[23:20]==2 && hour_r[19:16]==4)hour_r=24'd0; if(hour_r[19:16]==10) begin hour_r[19:16]=4'd0; hour_r[23:20]=hour_r[23:20]+4'd1; end end 4'b0111:key_off_r=~key_off_r; default: ; endcase end else begin fenp=fenp+2'd1; if(fenp==2) begin fenp=2'd0; hour_r[3:0]=hour_r[3:0]+4'd1;//秒的个位数 if(hour_r[3:0]==4'ha)
半秒的时钟产生模块
EDA模块设计
模块原理图讲解
module halfmiao(clock,clk,FIV); input clock; output clk; output[2:0] FIV; reg clk_r; reg[24:0] FIV_R; assign clk=clk_r; assign FIV=FIV_R[17:15]; always@(posedge clock) begin FIV_R=FIV_R+1'b1; if(FIV_R==12000000) begin FIV_R=25'd0; clk_r=~clk_r; end end
• • • • • • • • • • • • • • • • • • • • • • • •
always@(posedge clk) begin key=key_in; case(key) 4'b0111: begin data_r=data_r+1'b1; if(data_r[3:0]==10) begin data_r[3:0]=4'd0; data_r[7:4]=data_r[7:4]+4'd1; if(data_r[7:4]==6)data_r[7:0]=8'd0; end end 4'b1011: begin data_r[11:8]=data_r[11:8]+4'd1; if(data_r[11:8]==10) begin data_r[11:8]=4'd0; data_r[15:12]=data_r[15:12]+4'd1; if(data_r[15:12]==6)data_r[15:8]=8'd0; end end
• • • • • • • • • • • • • • • • • • • • • • • • • • • • •
begin
hour_r[3:0]=4'd0; hour_r[7:4]=hour_r[7:4]+4'd1;//秒的十位数 if(hour_r[7:4]==4'h6) begin hour_r[7:4]=4'd0; hour_r[11:8]=hour_r[11:8]+4'd1;//分的个位数 if(hour_r[11:8]==4'ha) begin hour_r[11:8]=4'd0; hour_r[15:12]=hour_r[15:12]+4'd1;//分的十位数 if(hour_r[15:12]==4'h6) begin hour_r[15:12]=4'd0; hour_r[19:16]=hour_r[19:16]+4'd1;//小时的个位数 if(hour_r[23:20]==2 && hour_r[19:16]==4)hour_r=24'd0; if(hour_r[19:16]==4'd10) begin hour_r[19:16]=4'd0; hour_r[23:20]=hour_r[23:20]+4'd1;//小时的十位数 end end end end end
always@(posedge sec_5) begin key=key_in; if(key!=4'b1111) begin case(key) 4'b1110: begin hour_r=hour_r+1'b1; if(hour_r[3:0]==10) begin hour_r[3:0]=4'd0; hour_r[7:4]=hour_r[7:4]+4'd1; if(hour_r[7:4]==6)hour_r[7:0]=8'd0; end end 4'b1101: begin hour_r[11:8]=hour_r[11:8]+4'd1; if(hour_r[11:8]==10) begin hour_r[11:8]=4'd0; hour_r[15:12]=hour_r[15:12]+4'd1; if(hour_r[15:12]==6)hour_r[15:8]=8'd0; end end
半秒的时钟产生模 块实现程序
按键去抖模块
EDA模块设计
模块原理图讲解
• • • • • • • • • • • • • • • • • •
module anjianqudou(clock,key_out0,key_out1,key_in0,key_in1); input clock; input[3:0] key_in0,key_in1; output[3:0] key_out0,key_out1; reg[3:0] Q0,Q1,Q2; reg[3:0] K0,K1,K2; always@(posedge clock) begin Q0<=key_in0; Q1<=Q0; Q2<=Q1; K0<=key_in1; K1<=K0; K2<=K1; end assign key_out0=(Q0|Q1|Q2); assign key_out1=(K0|K1|K2); endmodule
EDA实训讲解
FPGA关于闹钟设计
电子22班
王超
. 设计一个闹钟首先要考虑什么问题?
考虑自顶上下的设计思想!
先考虑闹钟的功能。
分功能写模块!
分模块实现闹钟设计
1半秒的时钟产生模块 2.按键去抖模块
3.计时进位模块
4.闹钟定时模块 5.时间显示模块 6.歌曲提醒模块
模块实现闹钟设计
优点:
调理清晰,容易理解。简化的复杂 工程项目。模块书写容易实现。提高开发 的效率。
• always@(posedge clk) • begin • if(qiehuan==1) • begin • case(FIV) • 3'b000:deg_r=hour_in[3:0]; • 3'b001:deg_r=hour_in[7:4]; • 3'b010:deg_r=4'hF; • 3'b011:deg_r=hour_in[11:8]; • 3'b100:deg_r=hour_in[15:12]; • 3'b101:deg_r=4'hF; • 3'b110:deg_r=hour_in[19:16]; • 3'b111:deg_r=hour_in[23:20]; • default:deg_r=4'hF; • endcase • end • else
• 4'b1101: • begin • data_r[19:16]=data_r[19:16]+1'b1; • if(data_r[23:20]==2 && data_r[19:16]==4)data_r=24'd0; • if(data_r[19:16]==10) • begin • data_r[19:16]=4'd0; • data_r[23:20]=data_r[23:20]+4'd1; • end • end • 4'b1110:qiehuan_r=~qiehuan_r; • default:; • endcase • end • endmodule
Байду номын сангаас
• begin • case(FIV) • 3'b000:deg_r=data_in[3:0]; • 3'b001:deg_r=data_in[7:4]; • 3'b010:deg_r=4'hF; • 3'b011:deg_r=data_in[11:8]; • 3'b100:deg_r=data_in[15:12]; • 3'b101:deg_r=4'hF; • 3'b110:deg_r=data_in[19:16]; • 3'b111:deg_r=data_in[23:20]; • default:deg_r=4'hF; • endcase • end • end
• always@(posedge clk) • begin • if(speak_s) • speak_r=1'b1; • else • speak_r=1'b0; • case(FIV) • 3'b000:wei_r=8'b11111110; • 3'b001:wei_r=8'b11111101; • 3'b010:wei_r=8'b11111011; • 3'b011:wei_r=8'b11110111; • 3'b100:wei_r=8'b11101111; • 3'b101:wei_r=8'b11011111; • 3'b110:wei_r=8'b10111111; • 3'b111:wei_r=8'b01111111; • default:wei_r=4'h4; • endcase • end
按键去抖模块程序
计时进位模块
EDA模块设计
模块原理图讲解
计时进位模块程序
• • • • • • • • • • • module jishu(sec_5,hour_r_out,key_in,key_off); input sec_5; input[3:0] key_in; output key_off; output[23:0] hour_r_out; reg[23:0] hour_r; reg[3:0] key; reg key_off_r; reg [1:0] fenp; assign hour_r_out=hour_r; assign key_off=key_off_r;
end
end
end endmodule
闹钟定时模块
闹钟定时模块程序
• • • • • • • • • • module laozhong(clk,key_in,data,qiehuan); input clk; input[7:4] key_in; output[23:0] data; output qiehuan; reg[23:0] data_r=24'd0; reg[7:4] key; reg qiehuan_r; assign data=data_r; assign qiehuan=qiehuan_r;
• • • • • • • • • • • • • • • • •
always@(deg_r) begin case(deg_r) 4'h0:seg_r=8'hc0; 4'h1:seg_r=8'hf9; 4'h2:seg_r=8'ha4; 4'h3:seg_r=8'hb0; 4'h4:seg_r=8'h99; 4'h5:seg_r=8'h92; 4'h6:seg_r=8'h82; 4'h7:seg_r=8'hf8; 4'h8:seg_r=8'h80; 4'h9:seg_r=8'h90; default:seg_r=8'hbf; endcase end endmodule