# Homework3 > 資工二1 黃柏芸 > 指導老師:林宏益 ### 實驗目的: 使用case改寫四人投票機,撰寫testbench,並顯示出其波型。 ### 程式碼: >testbench部分 ```verilog= module testbench(); reg [3:0]In_tb; wire[3:1]Out_tb; voter u1(.I(In_tb), .O(Out_tb)); always begin #3 In_tb = In_tb+1; end initial begin In_tb = 0; #300 $finish; end initial begin $dumpfile("voter.vcd"); $dumpvars(0, u1); end endmodule ``` >design部分 ```verilog= module voter(I, O); input [3:0] I; // I 4 men output [3:1] O; // O Result reg [3:1] O; always@ (I) case (I) 4'b0000: O=3'b100; 4'b0001: O=3'b100; 4'b0010: O=3'b100; 4'b0011: O=3'b010; 4'b0100: O=3'b100; 4'b0101: O=3'b010; 4'b0110: O=3'b010; 4'b0111: O=3'b001; 4'b1000: O=3'b100; 4'b1001: O=3'b010; 4'b1010: O=3'b010; 4'b1011: O=3'b001; 4'b1100: O=3'b010; 4'b1101: O=3'b001; 4'b1110: O=3'b001; 4'b1111: O=3'b001; endcase endmodule ``` ### 實驗結果: ![](https://i.imgur.com/7g9kGll.png) ### 分析: 我們可以用真值表對照此波形結果,驗證我們程式碼是否正確 例如: ![](https://i.imgur.com/zlxvTES.png) 從真值表我們可以看到,當I=0,1,2時,O=4 當I=3時,O=2 當I=4時,O=4 對照下面的波形結果 ![](https://i.imgur.com/LhNHLHW.png) ### 結論: 上面兩張圖數值是一樣的,表示把程式碼改成case後,程式碼是正確的。 ### 心得: 原本使用if...else...看起來會有點雜亂,但用case改寫後,變得較清楚明瞭。 ### github連結: https://gist.github.com/BoyunHuang/ee80e32a8f7695da0531a24867af6646