Quartus Prime硬件實(shí)驗(yàn)開發(fā)(DE2-115板)實(shí)驗(yàn)二功能可調(diào)綜合計(jì)時器設(shè)計(jì)
實(shí)驗(yàn)二功能可調(diào)綜合計(jì)時器設(shè)計(jì)
實(shí)驗(yàn)?zāi)康?/p>
掌握QuartusII等實(shí)驗(yàn)工具的輸入、綜合、仿真、下載的使用方法
掌握DE2開發(fā)版的器件功能特性和使用方法
掌握Verilog HDL時序邏輯系統(tǒng)設(shè)計(jì)的主要方法和技術(shù)
掌握并應(yīng)用EDA設(shè)計(jì)的方法和流程
預(yù)習(xí)要求
了解QuartusII等管教分配、下載的方法和流程
了解開發(fā)板輸入、輸出顯示資源的工作特性
了解開發(fā)板設(shè)計(jì)、開發(fā)和測試的方法和流程
實(shí)驗(yàn)要求
設(shè)計(jì)一個可調(diào)的綜合計(jì)時器。具體功能:
顯示小時、分、秒,提供置零功能。顯示在七段管或LCD屏幕上,可以考慮24/12小時模式切換功能。
能夠?qū)γ搿⒎帧⑿r進(jìn)行分別修改,可以兩位數(shù)整體修改或每位獨(dú)立修改
整點(diǎn)報(bào)時功能,整點(diǎn)可以顯示一定形式的LED來表示。
鬧鐘功能,設(shè)定特定時間,到時間以特定LED顯示來顯示鬧鐘。注意鬧鐘持續(xù)時間,也可以參考懶人鬧鐘模式。
初始操作與實(shí)驗(yàn)一幾乎類似,詳情可參考實(shí)驗(yàn)一鏈接:Quartus Prime硬件實(shí)驗(yàn)開發(fā)(DE2-115板)實(shí)驗(yàn)一CPU指令運(yùn)算器設(shè)計(jì)_渣渣ye的博客-CSDN博客
需要注意的是,實(shí)驗(yàn)二內(nèi),需要替換管腳對應(yīng)的數(shù)值,具體數(shù)值表鏈接如下:
FPGA硬件實(shí)驗(yàn)二功能可調(diào)綜合計(jì)時器設(shè)計(jì)實(shí)驗(yàn)設(shè)計(jì)管腳設(shè)置-數(shù)據(jù)集文檔類資源-CSDN下載
主體代碼:
module shizhong(clkin,key0,hex0,hex1,hex2,hex3,hex4,hex5,hex6,hex7,KEY0,KEY1,key17,key16,key15,LEDR,LEDG,in,key14,key13,key12);
input clkin;
input key0,key17,key16,key15,key14,key13,key12;
input[6:1] in;
input KEY0,KEY1;
reg clk=0;
output reg[6:0] hex0,hex1,hex2,hex3,hex4,hex5,hex6,hex7;
output reg[7:0] LEDR,LEDG;
reg[7:0] out2,out3,out4,out5,out6,out7;
reg[7:0] second;
reg[7:0] minute;
reg[7:0] hour;
reg[7:0] second1;
reg[7:0] minute1;
reg[7:0] hour1;
integer N=25000000;
integer i=0;
reg[16:0] naozhong=0;
reg[16:0] s=0;
integer a=86400;
always@(posedge clkin) //分頻
begin
if(i==N)
begin
i=0;
clk=~clk;
end
else i=i+1;
end
always@(posedge clk)
begin
if(key0) s=0; //置零
else
//計(jì)數(shù)
begin
//整點(diǎn)報(bào)時
if(s%3600==0)
begin
LEDR=8'b11111111;
end
else
begin
LEDR=8'b00000000;
s=(s+1)%a;
end
if(key17&&key16==0&&key15==0) //調(diào)整小時
begin
if(KEY0==0)s=(s+3600)%a;
else if(KEY1==0)s=(s-3600)%a;
else s=s%a;
end
else if(key17==0&&key16&&key15==0) //調(diào)整分鐘
begin
if(KEY0==0)s=(s+60)%a;
else if(KEY1==0)s=(s-60)%a;
else s=s%a;
end
else if(key17==0&&key16==0&&key15) //調(diào)整秒
begin
if(KEY0==0)s=(s+1)%a;
else if(KEY1==0)s=(s-1)%a;
else s=s%a;
end
end
end
always@(key17,key16,key15,s)
begin
//鬧鐘
if(key17==1&&key16==1&&key15==1)
begin
naozhong = 0;
if(key12)naozhong=naozhong+in;
else if(key13)naozhong=naozhong+in*60;
else if(key14)naozhong=naozhong+in*3600;
else naozhong=naozhong;
second1=naozhong%60;
minute1=naozhong/60%60;
hour1=naozhong/3600;
out7=hour1/10;
out6=hour1%10;
out5=minute1/10;
out4=minute1%10;
out3=second1/10;
out2=second1%10;
hex7=seven(out7);
hex6=seven(out6);
hex5=seven(out5);
hex4=seven(out4);
hex3=seven(out3);
hex2=seven(out2);
hex1=7'b1111111;
hex0=7'b1111111;
end
else
begin
second=s%60;minute=s/60%60;hour=s/3600;
out7=hour/10;out6=hour%10;
out5=minute/10;out4=minute%10;
out3=second/10;out2=second%10;
hex7=seven(out7);
hex6=seven(out6);
hex5=seven(out5);
hex4=seven(out4);
hex3=seven(out3);
hex2=seven(out2);
hex1=7'b1111111;
hex0=7'b1111111;
if(s==naozhong)LEDG=8'b11111111;
else LEDG=8'b00000000;
end
end
function[6:0] seven;
input [7:0] din;
case(din)
4'h0:seven=7'b1000000;
4'h1:seven=7'b1111001;
4'h2:seven=7'b0100100;
4'h3:seven=7'b0110000;
4'h4:seven=7'b0011001;
4'h5:seven=7'b0010010;
4'h6:seven=7'b0000010;
4'h7:seven=7'b1111000;
4'h8:seven=7'b0000000;
4'h9:seven=7'b0010000;
default:seven=7'b1111111;
endcase
endfunction
endmodule
硬件測試:
歸零
控制時間
設(shè)置鬧鐘,時間到,綠燈亮
單片機(jī)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。