# 實作:設計具有載入與同步清除功能的上數 BCD to 7段顯示器 ###### 資工二一 1410932049 鍾宏昌 ### 目的: 利用BCD計數器、D flip flop 及case 指令來做出1位元七段顯示器。 ### 撰寫程式碼: #### 主程式([BCD7.v](https://github.com/s1410932049/HW4/blob/master/BCD7.v)) ```verilog= module BCD(clk, rst_syn, Q_out); input clk; input rst_syn; output [3:0] Q_out; reg [3:0] Q_out; always@ (posedge clk) begin if (!rst_syn) Q_out = 0; else if (Q_out == 9) Q_out = 0; else Q_out = Q_out + 1; end endmodule //segment module segment (bcd, seg); input bcd; output [7:0] seg; reg [7:0]seg; always @(bcd) begin case (bcd) 1:seg=8'b11000000; 2:seg=8'b11111001; 3:seg=8'b10100100; 4:seg=8'b10100000; 5:seg=8'b10011001; 6:seg=8'b10010010; 7:seg=8'b10000010; 8:seg=8'b11111000; 9:seg=8'b10000000; 10:seg=8'b10010000; 11:seg=8'b10100000; 12:seg=8'b10000011; 13:seg=8'b10100001; 14:seg=8'b10000100; 15:seg=8'b11110001; default:seg=8'b00000000; endcase end endmodule // 1-bit Synchronous Load module dff_1 (clk, D, Din, Load, Q4); input clk, D, Din, Load; output Q4; reg Q4; always@ (posedge clk) begin if (Load) Q4 = Din; else Q4 = D; end endmodule ``` #### testbench程式碼([BCD7_tb](https://github.com/s1410932049/HW4/blob/master/BCD7_tb.v)) ```verilog= module BCD7_tb; reg clk; reg rst_syn; reg D; reg Din; reg bcd; reg Load; wire [7:0]seg; parameter PERIOD = 20; parameter real DUTY_CYCLE = 0.5; parameter OFFSET = 0; // clock process initial begin #OFFSET; forever begin clk = 1'b0; #(PERIOD-(PERIOD*DUTY_CYCLE)) clk = 1'b1; #(PERIOD*DUTY_CYCLE); end end initial begin Din=1'b1; D=1'b0; bcd=0; end initial begin Load=1'b1; #20 Load=1'b0; #20 Load=1'b1; #500 $finish; end initial begin $dumpfile("BCD7.vcd"); $dumpvars(0, BCD7_tb); $dumpvars(0, dff_1); $dumpvars(0, BCD); end BCD dff_1( .rst_syn(Q4), .clk(clk) ); segment BCD( .bcd(Q_out) ); dff_1 BCD7_tb( .clk(clk), .Load(Load), .Din(Din), .D(D) ); endmodule ``` ### 結果: #### gatkwave之模擬波形圖 ![sagement](https://i.imgur.com/LOAjBAR.png) ### 討論: 我這次撰寫過程中所遇到的問題: 1.不太清楚題意,使得我懷疑D flip flop 是否真的有必要放進程式中。 2.testbench的撰寫還是不熟練,為了找出讓所有的輸出入都能顯示在波形圖花了太多時間。 ### 心得 我覺得有點累,我可能會有一段時間不會去碰程式碼。還有我還真的找不到可以一起討論的人,主要是時間安排不同。