標題: RobeiEDA關于搶答器的設計案例 [打印本頁]
作者: hanxiansheng 時間: 2022-2-17 23:15
標題: RobeiEDA關于搶答器的設計案例
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
-
圖片1.png
(64.12 KB, 下載次數: 141)
下載附件
2022-2-17 23:01 上傳
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |