1、實驗目的 掌握了解格搶答器的工作原理,并用verilog硬件語音來實現搶答器的模模塊以及test_bench,最后在Robei可視化仿真軟件經行功能實現和仿真驗證。 2、實驗原理 搶答器實現的是: 1、四人通過按鍵搶答,最先按下按鍵的人搶答成功,此后其他人搶答無效。 2、每次只有一人可獲得搶答資格,一次搶答完后主持人通過復位按鍵復位,選手再從新搶答。 3、有從新開始游戲按鍵,游戲從新開始時每位選手有5分的初始分,答對加1分,答錯扣1分,最高分不能超過9分,當選手得分減為0時取消該選手搶答資格。 4、選手搶答成功時其對應的分數閃爍。 3、實驗內容 3.1snatch(搶答)模塊設計 1)、 新建一個模型命名為snatch,類型為 module,同時具備 3 輸入 2 輸出,每個引腳的屬性和名稱參照下圖1經行對應的修改。 
圖1snatch引腳屬性 
圖2snatch界面圖 2)、添加代碼。點擊模型下方的 Code添加代碼。 代碼: - <font style="font-size: 14px">/********************************/
- reg c;
- reg q;
- reg [1:0] s;
- wire out=(key[0]&(data[3:0]!=0)|key[1]&(data[7:4]!=0)|key[2]&(data[11:8]!=0)|key[3]&(data[15:12]!=0));
- wire clk=out&(!q);
- assign m={c,s};
- always@(posedge clk or clr)
- if(!clr)
- begin
- q<=0;c<=0;
- end
- else
- begin
- c<=1;q<=!q;
- end
- always@(posedge clk)
- case(key)
- 4'b0001:s<=2'b00;
- 4'b0010:s<=2'b01;
- 4'b0100:s<=2'b10;
- 4'b1000:s<=2'b11;
- default:s<=2'b??;
- endcase
- assign
- led=({c,s}==3'b100)?4'b0001:({c,s}==3'b101)?4'b0010:({c,s}==3'b110)?4'b0100:({c,s}==3'b111)?4'b1000:4'b0000;
- /********************************/</font>
復制代碼
3)、保存模型到一個文件夾(文件夾路徑不能有空格和中文)中,運行并檢查有無錯誤輸出。 3.2store(計分)模塊的設計 1)、 新建一個模型命名為store,類型為 module,同時具備 3 輸入 2 輸出,每個引腳的屬性和名稱參照下圖3經行對應的修改。 
圖3 store引腳的屬性 
圖4store界面圖 2)、添加代碼。點擊模型下方的 Code添加代碼。 代碼: - <font style="font-size: 14px">/********************************/
- always @(posedge clk or posedge start)
- if(start) q<=16'b0101010101010101;
- else if(up)
- case(s)
- 3'b100: if(q[3:0]>=4'h9) q[3:0]<=q[3:0];else q[3:0]<=q[3:0]+1;
- 3'b101: if(q[7:4]>=4'h9) q[7:4]<=q[7:4]; else q[7:4]<=q[7:4] +1;
- 3'b110: if(q[11:8]>=4'h9) q[11:8]<=q[11:8];else q[11:8]<=q[11:8]+1;
- 3'b111: if(q[15:12]>=4'h9) q[15:12]<=q[15:12];else q[15:12]<=q[15:12]+1;
- endcase
- else
- case(s)
- 3'b100:if(q[3:0]>4'h0) q[3:0]<=q[3:0]-1;
- 3'b101:if(q[7:4]>4'h0) q[7:4]<=q[7:4]-1;
- 3'b110:if(q[11:8]>4'h0) q[11:8]<=q[11:8]-1;
- 3'b111:if(q[15:12]>4'h0) q[15:12]<=q[15:12]-1;
- Endcase
- /********************************/</font>
復制代碼
3)、保存模型到一個文件夾(文件夾路徑不能有空格和中文)中,運行并檢查有無錯誤輸出。 3.3qiangdaqi(頂層)模塊設計 1)、 新建一個模型命名為qiangdaqi,類型為 module,同時具備 5 輸入 2 輸出,每個引腳的屬性和名稱參照下圖5經行對應的修改。 
圖5qiangdaqi引腳屬性 
圖6 qiangdaqi界面圖 3.4qiangdaqi_test測試文件的設計 1) 新建一個5輸入 2 輸出的qiangdaqi_test測試文件,記得將 Module Type 設置為 “testbench”,各個引腳配置如圖7所示。 
圖7qiangdaqi_test引腳屬性 - 、另存為測試文件。將測試文件保存到上面創建的模型所在的文件夾下。加入模型。 在 Toolbox 工具箱的 Current 欄里,會出現模型,單擊該模型并在qiangdaqi _test上添加,并連接引腳,如下圖8所示:

圖8 qiangdaqi_test界面圖 4) 輸入激勵。點擊測試模塊下方的“Code”,輸入激勵算法。激勵代碼在結束 的時候要用$finish 結束。 測試代碼: - <font style="font-size: 14px">/***********************************/
- initial begin
- start=1;
- clk=0;
- clr=0;
- up=0;
- key=4'b0000;
- #10 clr=1;
- start=0;
- up=1;
- #2 key=4'b0001;
- #10 clr=0;
- up=0;
- #10 clr=1;
- start=0;
- up=1;
- #2 key=4'b0001;
- #10 clr=0;
- up=0;
- #10 clr=1;
- start=0;
- up=1;
- #2 key=4'b0001;
- #10 clr=0;
- up=0;
- #10 clr=1;
- start=0;
- key=4'b0010;
- up=1;
- #10 clr=0;
- up=0;
- #10 clr=1;
- start=0;
- key=4'b0010;
- up=1;
- #10 clr=0;
- up=0;
- #5 $finish;
- end
- always #7 clk=~clk;
- /***********************************/</font>
復制代碼
5) 執行仿真并查看波形。查看輸出信息。檢查沒有錯誤之后查看波形。點擊右側 Workspace 中的信號,進行添加并查看分析仿真結果。如圖9所示: 
圖9 qiangdaqi_test仿真波形 4.思考1、思考能不能擴寫成n位搶答器。
以上圖文的Word格式文檔下載(內容和本網頁上的一模一樣,方便大家保存):
搶答器.docx
(452.28 KB, 下載次數: 2)
2022-2-17 23:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|