国产成人高清亚洲,日韩无码一区二区,国产精品亚洲综合专区片高清久久久,欧美日韩国产区在线观看,sese在线,亞洲綜合久久精品無碼色欲,日韩亚洲av三级片

  • 方案介紹
    • 1.1?描述
    • 1.2?輸出說明
    • 1.3?系統(tǒng)行為
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

Quartus 4層電梯控制器verilog代碼

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

2-231225162KI45.doc

共1個(gè)文件

名稱:Quartus 4層電梯控制器verilog代碼

軟件:Quartus

語言:Verilog

代碼功能:

1.?要求

電梯可在4層之間移動(dòng),每層都有按鈕,所有按鈕都在電梯外部。?按下按鈕意味著需要采取某些措施,以下各節(jié)將對(duì)此進(jìn)行詳細(xì)說明。?電梯系統(tǒng)可以建模為有限狀態(tài)機(jī),該有限狀態(tài)機(jī)經(jīng)歷狀態(tài)轉(zhuǎn)換并根據(jù)提供的輸入產(chǎn)生輸出。?設(shè)計(jì)有限狀態(tài)機(jī)并通過使用狀態(tài)圖或表來描述其行為。?根據(jù)以下規(guī)范在Verilog中實(shí)施該系統(tǒng),并提交代碼,波形以及描述該波形的詳細(xì)記錄。

1.1?描述

時(shí)鐘信號(hào)外,系統(tǒng)還有6個(gè)輸入。?時(shí)鐘信號(hào)用于同步目的。?按鈕1U位于一樓,2U和2D位于二樓,3U和3D位于三樓,4D位于四樓。?按下按鈕及其含義如下表所示。

請(qǐng)注意,不同樓層的相同名稱的開關(guān)連接在一起。?因此,例如,如果在任意樓層按下1U,則只有一個(gè)信號(hào)將被激活并被饋送到電梯控制器

輸入(按鈕) 意義
1U 一樓的人想去二樓
2U 二樓的人想去三樓
3U 三樓的人想去四樓
4D 四樓的人想去三樓
3D 三樓的人想去二樓
2D 二樓的人想去一樓

1.2?輸出說明

有3個(gè)輸出指示要采取的措施,并在下表中列出。

輸出?(電梯的動(dòng)作) 意義
Up 電梯向上走
Down 電梯向下走
Stay 電梯停在相同的層

1.3?系統(tǒng)行為

電梯可以位于4層中的任何一層;?1樓,2樓,3樓或4樓。在每個(gè)時(shí)鐘周期,根據(jù)是否按下按鈕,必須采取某些措施,其列表如下:

電梯當(dāng)前位置 輸入 采取的行動(dòng)順序
一樓 1U 將電梯移至二樓
2U 將電梯移至二樓,然后移至三樓
2D 將電梯移至第二層,然后移至第一層
3U 將電梯移至3樓,然后移至4樓
3D 將電梯移至三樓,然后移至二樓
4D 將電梯移至4樓,然后移至3樓
二樓 1U 將電梯移至第一層,然后移至第二層
2U 將電梯移至三樓
2D 將電梯移至二樓
3U 將電梯移至3樓,然后移至4樓
3D 將電梯移至三樓,然后移至二樓
4D 將電梯移至4樓,然后移至3樓
三樓 1U 將電梯移至第一層,然后移至第二層
2U 將電梯移至二樓,然后移至三樓
2D 將電梯移至第二層,然后移至第一層
3U 將電梯移至4樓
3D 將電梯移到二樓
4D 將電梯移至4樓,然后移至3樓
四樓 1U 將電梯移至第一層,然后移至第二層
2U 將電梯移至二樓,然后移至三樓
2D 將電梯移至第二層,然后移至第一層
3U 將電梯移至3樓,然后移至4樓
3D 將電梯移至3樓,然后移至2樓
4D 將電梯移至三樓

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

設(shè)計(jì)文檔:

1. 工程文件

2. 程序文件

3. 程序編譯

4. Testbench

5. 仿真圖

1、按下D3,電梯原本在1樓,先上升到3樓,再下降到2樓。

2、按下U1,電梯原本在2樓,先下降到1樓,再上升到2樓。

3、同時(shí)按下U3和D2,電梯原本在2樓,先執(zhí)行U3,上升到3樓,再上升到4樓,然后執(zhí)行D2,下降到2樓,再下降到1樓。

4、按下D4,電梯原本在1樓,先上升到4樓,再下降到3樓。

5、按下U2,電梯原本在3樓,先下降到2樓,再上升到3樓。

部分代碼展示:

module?InputBuffer(clk,U1,U2,U3,D2,D3,D4,done,qEmpty,up_down_key);
input?clk;//時(shí)鐘
input?U1,U2,U3,D2,D3,D4;//輸入按鍵
input?done;//done信號(hào)
output?qEmpty;//高電平表示緩沖區(qū)沒有待響應(yīng)按鍵
output?[5:0]?up_down_key;//按鍵編號(hào)
//定義信號(hào)
reg?[5:0]?up_down_key=6'b0;
reg?[5:0]?btn_up_down=6'b000000;//6it按鍵緩存,最高位->最低位依次代表U1,U2,U3,D2,D3,D4
reg?qEmpty;
//定義按鍵D觸發(fā)器緩存
reg?U1_buf0,U1_buf1;
reg?U2_buf0,U2_buf1;
reg?U3_buf0,U3_buf1;
reg?D2_buf0,D2_buf1;
reg?D3_buf0,D3_buf1;
reg?D4_buf0,D4_buf1;
//定義按鍵上升沿信號(hào)
wire?U1_p;
wire?U2_p;
wire?U3_p;
wire?D2_p;
wire?D3_p;
wire?D4_p;
//D觸發(fā)器緩存2級(jí)
always@(posedge?clk)
begin
U1_buf0<=U1;
U1_buf1<=U1_buf0;
end
//D觸發(fā)器緩存2級(jí)
always@(posedge?clk)
begin
U2_buf0<=U2;
U2_buf1<=U2_buf0;
end
//D觸發(fā)器緩存2級(jí)
always@(posedge?clk)
begin
U3_buf0<=U3;
U3_buf1<=U3_buf0;
end
//D觸發(fā)器緩存2級(jí)
always@(posedge?clk)
begin
D2_buf0<=D2;
D2_buf1<=D2_buf0;
end
//D觸發(fā)器緩存2級(jí)
always@(posedge?clk)
begin
D3_buf0<=D3;
D3_buf1<=D3_buf0;
end
//D觸發(fā)器緩存2級(jí)
always@(posedge?clk)
begin
D4_buf0<=D4;
D4_buf1<=D4_buf0;
end
//獲取按鍵上升沿,信號(hào)為一個(gè)時(shí)鐘的高電平
assign?U1_p=U1_buf0?&?~U1_buf1;//1U按鍵上升沿,1個(gè)時(shí)鐘高電平
assign?U2_p=U2_buf0?&?~U2_buf1;//2U按鍵上升沿,1個(gè)時(shí)鐘高電平
assign?U3_p=U3_buf0?&?~U3_buf1;//3U按鍵上升沿,1個(gè)時(shí)鐘高電平
assign?D2_p=D2_buf0?&?~D2_buf1;//D2按鍵上升沿,1個(gè)時(shí)鐘高電平
assign?D3_p=D3_buf0?&?~D3_buf1;//D3按鍵上升沿,1個(gè)時(shí)鐘高電平
assign?D4_p=D4_buf0?&?~D4_buf1;//D4按鍵上升沿,1個(gè)時(shí)鐘高電平
//按鍵緩存到btn_up_down
always@(posedge?clk)
begin
if(U1_p==1)?
btn_up_down[5]<=1;?//1U按鍵緩存在btn_up_down的bit5
else?if(up_down_key==6'b100_000)//按鍵執(zhí)行
btn_up_down[5]<=0;//清除緩存
else
btn_up_down[5]<=btn_up_down[5];//keep
if(U2_p==1)?
btn_up_down[4]<=1;?//2U按鍵緩存在btn_up_down的bit4
else?if(up_down_key==6'b010_000)//按鍵執(zhí)行
btn_up_down[4]<=0;//清除緩存
else
btn_up_down[4]<=btn_up_down[4];//keep
if(U3_p==1)?
btn_up_down[3]<=1;?//3U按鍵緩存在btn_up_down的bit3
else?if(up_down_key==6'b001_000)//按鍵執(zhí)行
btn_up_down[3]<=0;//清除緩存
else
btn_up_down[3]<=btn_up_down[3];//keep
if(D2_p==1)?
btn_up_down[2]<=1;?//2D按鍵緩存在btn_up_down的bit2
else?if(up_down_key==6'b000_100)//按鍵執(zhí)行
btn_up_down[2]<=0;//清除緩存
else
btn_up_down[2]<=btn_up_down[2];//keep
if(D3_p==1)?
btn_up_down[1]<=1;?//3D按鍵緩存在btn_up_down的bit1
else?if(up_down_key==6'b000_010)//按鍵執(zhí)行
btn_up_down[1]<=0;//清除緩存
else
btn_up_down[1]<=btn_up_down[1];//keep
if(D4_p==1)?
btn_up_down[0]<=1;?//4D按鍵緩存在btn_up_down的bit0
else?if(up_down_key==6'b000_001)//按鍵執(zhí)行
btn_up_down[0]<=0;//清除緩存
else
btn_up_down[0]<=btn_up_down[0];//keep
end
always@(*)?
begin
if(done==1)//done==1表示可以讀取按鍵緩存btn_up_down[5:0]內(nèi)的數(shù)據(jù),按?1U,?2U,?3U,?2D,?3D,?4D順序執(zhí)行
if(btn_up_down[5])??????
up_down_key=6'b100_000;//執(zhí)行1U按鍵
else?if(btn_up_down[4])?
up_down_key=6'b010_000;//執(zhí)行2U按鍵
else?if(btn_up_down[3])?
up_down_key=6'b001_000;//執(zhí)行3U按鍵
else?if(btn_up_down[2])?
up_down_key=6'b000_100;//執(zhí)行2D按鍵
else?if(btn_up_down[1])?
up_down_key=6'b000_010;//執(zhí)行3D按鍵
else?if(btn_up_down[0])?
up_down_key=6'b000_001;//執(zhí)行4D按鍵
else
up_down_key=6'b000_000;//清除
else
up_down_key=up_down_key;
if(btn_up_down==6'b000_000)//若btn_up_down==6'b000_000表示沒有待響應(yīng)按鍵,輸出高電平,否則輸出低電平
qEmpty=1;
else
qEmpty=0;
end
endmodule

點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=407

  • 2-231225162KI45.doc
    下載

相關(guān)推薦