电子表代码.docx
- 文档编号:30300596
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:19
- 大小:16.63KB
电子表代码.docx
《电子表代码.docx》由会员分享,可在线阅读,更多相关《电子表代码.docx(19页珍藏版)》请在冰豆网上搜索。
电子表代码
一、modulemyclock(RSTn,CLK,FLAG4,UP,DN,WD,H,M,S,MS);
inputRSTn,CLK,UP,DN;
output[7:
0]WD,H,M,S;
output[7:
0]MS;
input[2:
0]FLAG4;
reg[2:
0]m_WD;
reg[5:
0]m_H,m_M,m_S;
reg[6:
0]m_MS;
assignWD=m_WD;
assignH=m_H;
assignM=m_M;
assignS=m_S;
assignMS=m_MS;
always@(posedgeCLK)
if(~RSTn)
begin//同步复位
m_WD<=8'd4;
m_H<=8'd15;
m_M<=8'd10;
m_S<=8'b000000;
m_MS<=8'b0000000;
end
elseif(FLAG4==3'b001)
begin//调星期状态
if(UP)
begin
m_WD<=m_WD+1'b1;
if(m_WD==8'd7)
m_WD<=8'd1;
end
elseif(DN)
begin
m_WD<=m_WD-1'b1;
if(m_WD==8'h01)
m_WD<=8'd7;
end
end
elseif(FLAG4==3'b010)
begin//调时状态
if(UP)
begin
m_H<=m_H+1'b1;
if(m_H==8'd23)
m_H<=8'd0;
end
elseif(DN)
begin
m_H<=m_H-1'b1;
if(m_H==8'h00)
m_H<=8'd23;
end
end
elseif(FLAG4==3'b011)
begin//调分状态
if(UP)
begin
m_M<=m_M+1'b1;
if(m_M==8'd59)
m_M<=8'd0;
end
elseif(DN)
begin
m_M<=m_M-1'b1;
if(m_M==8'h00)
m_M<=8'd59;
end
end
elseif(FLAG4==3'b100)
begin//调秒状态
if(UP)
begin
m_S<=m_S+1'b1;
if(m_S==8'd59)
m_S<=8'b0;
end
elseif(DN)
begin
m_S<=m_S-1'b1;
if(m_S==8'h00)
m_S<=8'd59;
end
end
else
begin//正常显示
m_MS<=m_MS+1'b1;
if(m_MS==8'd100)
begin
m_MS<=8'd0;
m_S<=m_S+1'd1;
end
if(m_S==8'd60)
begin
m_S<=8'd0;
m_M<=m_M+8'd1;
end
if(m_M==8'd60)
begin
m_M<=8'd0;
m_H<=m_H+8'd1;
end
if(m_H==8'd24)
begin
m_H<=8'd0;
end
end
endmodule
二、moduledate(RSTn,CLK,FLAG_DT,UP,DN,MON,DT,YH,YL);
inputRSTn,CLK,UP,DN;
output[7:
0]YH,YL;
output[7:
0]MON,DT;
input[1:
0]FLAG_DT;
reg[4:
0]m_MON,m_DT;//0~31,5weierjinzhi
reg[6:
0]m_YH,m_YL;//0~99,7weierjinzhi
assignYH=m_YH;
assignYL=m_YL;
assignMON=m_MON;
assignDT=m_DT;
always@(posedgeCLK)
if(~RSTn)
begin//同步复位
m_YH<=7'd20;//nianfendegaoliangwei
m_YL<=7'd13;//nianfendediliangwei
m_MON<=5'd07;
m_DT<=5'd11;
end
elseif(FLAG_DT==2'b01)//调节年
begin
if(UP)
begin
m_YL<=m_YL+1'b1;
if(m_YL==7'd100)
begin
m_YL<=7'd0;
m_YH<=m_YH+1'b1;
end
end
elseif(DN)
begin
m_YL<=m_YL-1'b1;
if(m_YL==7'd0)
begin
m_YL<=7'd99;
m_YH<=m_YH-1'b1;
end
end
end
elseif(FLAG_DT==2'b10)//调节月
begin
if(UP)
begin
m_MON<=m_MON+1'b1;
if(m_MON==8'd12)
m_MON<=8'd1;
end
elseif(DN)
begin
m_MON<=m_MON-1'b1;
if(m_MON==8'd1)
m_MON<=8'd12;
end
end
elseif(FLAG_DT==2'b11&&m_MON==8'd1||m_MON==8'd3||m_MON==8'd5||m_MON==8'd7||m_MON==8'd8||m_MON==8'd10||m_MON==8'd12)//调节日,分不同的月份
begin
if(UP)
begin
m_DT<=m_DT+1'b1;
if(m_DT==8'd31)
m_DT<=8'd1;
end
elseif(DN)
begin
m_DT<=m_DT-1'b1;
if(m_DT==8'd1)
m_DT<=8'd31;
end
end
elseif(FLAG_DT==2'b11&&m_MON==8'd4||m_MON==8'd6||m_MON==8'd9||m_MON==8'd11)//调节日,分不同的月份
begin
if(UP)
begin
m_DT<=m_DT+1'b1;
if(m_DT==8'd30)
m_DT<=8'd1;
end
elseif(DN)
begin
m_DT<=m_DT-1'b1;
if(m_DT==8'd1)
m_DT<=8'd30;
end
end
elseif(FLAG_DT==2'b11&&m_MON==8'd2)//调节日,分不同的月份
begin
if(UP)
begin
m_DT<=m_DT+1'b1;
if(m_DT==8'd28)
m_DT<=8'd1;
end
elseif(DN)
begin
m_DT<=m_DT-1'b1;
if(m_DT==8'd1)
m_DT<=8'd28;
end
end
else
begin//正常显示
m_YH<=m_YH;
m_YL<=m_YL;
m_MON<=m_MON;
m_DT<=m_DT;
end
endmodule
三、modulenaozhong(CLK,FLAG,UP,DN,nH,nM,nS);
inputCLK,UP,DN;
output[7:
0]nH,nM,nS;
input[1:
0]FLAG;
reg[5:
0]nm_H,nm_M,nm_S;
assignnH=nm_H;
assignnM=nm_M;
assignnS=nm_S;
always@(posedgeCLK)
if(FLAG==2'b00)
begin//tongbufuwei
nm_H<=nm_H;
nm_M<=nm_M;
nm_S<=nm_S;
end
elseif(FLAG==2'b01)
begin//tiaoshizhuangtai
if(UP)
begin
nm_H<=nm_H+1'b1;
if(nm_H==8'd23)
nm_H<=8'd0;
end
elseif(DN)
begin
nm_H<=nm_H-1'b1;
if(nm_H==8'h00)
nm_H<=8'd23;
end
end
elseif(FLAG==2'b10)
begin//tiaofenzhuangtai
if(UP)
begin
nm_M<=nm_M+1'b1;
if(nm_M==8'd59)
nm_M<=8'd0;
end
elseif(DN)
begin
nm_M<=nm_M-1'b1;
if(nm_M==8'h00)
nm_M<=8'd59;
end
end
elseif(FLAG==2'b11)
begin//tiaomiaozhuangtai
if(UP)
begin
nm_S<=nm_S+1'b1;
if(nm_S==8'd59)
nm_S<=8'b0;
end
elseif(DN)
begin
nm_S<=nm_S-1'b1;
if(nm_S==8'h00)
nm_S<=8'd59;
end
end
endmodule
四、modulemiaobiao(RSTn,CLK,STOP,h,m,s,ms);
inputRSTn,CLK,STOP;
output[7:
0]h,m,s,ms;
reg[5:
0]m_H,m_M,m_S;
reg[6:
0]m_MS;
assignh=m_H;
assignm=m_M;
assigns=m_S;
assignms=m_MS;
always@(posedgeCLK)
begin
if(~RSTn)
begin//tongbufuwei
m_H<=8'd0;
m_M<=8'd0;
m_S<=8'b000000;
m_MS<=8'b0000000;
end
elseif(STOP==0)
begin//zhengchangxianshi
m_MS<=m_MS+1'b1;
if(m_MS==8'd100)
begin
m_MS<=8'd0;
m_S<=m_S+1'd1;
end
if(m_S==8'd60)
begin
m_S<=8'd0;
m_M<=m_M+8'd1;
end
if(m_M==8'd60)
begin
m_M<=8'd0;
m_H<=m_H+8'd1;
end
if(m_H==8'd24)
begin
m_H<=8'd0;
end
end
else
begin
m_H<=m_H;
m_M<=m_M;
m_S<=m_S;
m_MS<=m_MS;
end
end
endmodule
五、modulexuanze(A1,A2,A3,A4,B1,B2,B3,B4,C1,C2,C3,D,D1,D2,D3,D4,Q1,Q2,Q3,Q4);
input[7:
0]A1,A2,A3,A4,B1,B2,B3,B4,C1,C2,C3,D1,D2,D3,D4;
input[1:
0]D;
outputreg[7:
0]Q1,Q2,Q3,Q4;
always@(D)
begin
case(D)
2'b00:
begin
Q1=A1;Q2=A2;Q3=A3;Q4=A4;
end
2'b01:
begin
Q1=B1;Q2=B2;Q3=B3;Q4=B4;
end
2'b10:
begin
Q1=C1;Q2=C2;Q3=C3;Q4=0;
end
2'b11:
begin
Q1=D1;Q2=D2;Q3=D3;Q4=D4;
end
endcase
end
endmodule
modulecompare(A1,A2,B1,B2,AGB);
input[7:
0]A1,A2,B1,B2;
outputregAGB;
always@(A1,A2,B1,B1)
begin
AGB=0;
if(A1==B1&&A2==B2)
AGB=1;
else
AGB=0;
end
endmodule
一、moduleclk_div6(clk,outclk);
inputclk;
outputoutclk;
reg[31:
0]countpara;
reg[31:
0]counter;
regoutclk;
initial
countpara=32'd25000000;
always@(posedgeclk)
begin
counter=counter+1;
if(counter>=countpara)
begin
outclk=~outclk;
counter=32'b0;
end
end
endmodule
五、moduleclk_div5(clk,outclk);
inputclk;
outputoutclk;
reg[31:
0]countpara;
reg[31:
0]counter;
regoutclk;
initial
countpara=32'd250000;
always@(posedgeclk)
begin
counter=counter+1;
if(counter>=countpara)
begin
outclk=~outclk;
counter=32'b0;
end
end
endmodule
四、moduleclk_div4(clk,outclk);
inputclk;
outputoutclk;
reg[31:
0]countpara;
reg[31:
0]counter;
regoutclk;
initial
countpara=32'd250000;
always@(posedgeclk)
begin
counter=counter+1;
if(counter>=countpara)
begin
outclk=~outclk;
counter=32'b0;
end
end
endmodule
二、moduledisp_dec(hex,dispout);//BCD码显示模块
input[7:
0]hex;//8weierjinzhishurushuju
output[15:
0]dispout;//2weierjinzhishudeqiduanduanmaxianshishuju
reg[7:
0]dec;
always@(hex)
begin//8weierjinzhishuzhuanhuanwei2weiBCDma
dec[7:
4]=hex/4'd10;
dec[3:
0]=hex%4'd10;
end
dual_hexu1(1'b0,dec,dispout);//diaoyong2weiqiduanxianshimokuai
endmodule
moduledual_hex(iflag,datain,dispout);//2位七段显示模块
inputiflag;//gongyinhuogongyangshuchuxuanze
input[7:
0]datain;//2weideshijinzhihuoshiliujinzhishuju
output[15:
0]dispout;//lianggeqiduanduanmashuju
seg_decoderu1(iflag,datain[7:
4],dispout[15:
8]);
seg_decoderu2(iflag,datain[3:
0],dispout[7:
0]);
endmodule
moduleseg_decoder(iflag,iA,oY);//1位七段显示模块
inputiflag;//gongyinhuogongyangshuchuxuanze
input[3:
0]iA;//4weierjinzhishuju
outputreg[7:
0]oY;//qiduanduanmaxianshishuju
always@(iflag,iA)//gongyinjiqiduanshuchu
begin
case(iA)
4'b0000:
oY=8'h3f;
4'b0001:
oY=8'h06;
4'b0010:
oY=8'h5b;
4'b0011:
oY=8'h4f;
4'b0100:
oY=8'h66;
4'b0101:
oY=8'h6d;
4'b0110:
oY=8'h7d;
4'b0111:
oY=8'h27;
4'b1000:
oY=8'h7f;
4'b1001:
oY=8'h6f;
4'b1010:
oY=8'h77;
4'b1011:
oY=8'h7c;
4'b1100:
oY=8'h58;
4'b1101:
oY=8'h5e;
4'b1110:
oY=8'h79;
4'b1111:
oY=8'h71;
endcase
if(!
iflag)
oY=~oY;//gongyangji7duanshuchu
end
endmodule
六、modulefenpinxuanze1(flag,clk_1000Hz,clk_2Hz,clkout);//时钟信号选择模块
input[1:
0]flag;
inputclk_1000Hz,clk_2Hz;
outputclkout;
assignclkout=(flag==2'b00)?
clk_1000Hz:
clk_2Hz;
endmodule
七、modulefenpinxuanze(flag,clk_1000Hz,clk_2Hz,clkout);//日期信号选择模块
input[2:
0]flag;
inputclk_1000Hz,clk_2Hz;
outputclkout;
assignclkout=(flag==3'b000)?
clk_1000Hz:
clk_2Hz;
endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子表 代码