// seven_seg_disp.v -- 7-segment display emulation module. // 2007-10-19 written by UNNO Hideyuki . module seven_seg_disp(enb, nchar, d); input enb; input [1:0] nchar; input [31:0] d; integer i, j; always @(posedge enb) begin // edge No. 0 for (i = 0; i < 4; i = i + 1) begin if (3 - i <= nchar) if (((d >> (3 - i) * 8) & 1) == 1) $write(" -- "); else $write(" "); end $display(""); // edge No. 5 and 1 for (j = 0; j < 2; j = j + 1) begin for (i = 0; i < 4; i = i + 1) begin if (3 - i <= nchar) begin if (((d >> (3 - i) * 8 + 5) & 1) == 1) $write(" | "); else $write(" "); if (((d >> (3 - i) * 8 + 1) & 1) == 1) $write("|"); else $write(" "); end end $display(""); end // edge No. 6 for (i = 0; i < 4; i = i + 1) begin if (3 - i <= nchar) if (((d >> (3 - i) * 8 + 6) & 1) == 1) $write(" -- "); else $write(" "); end $display(""); // edge No. 4 and 2 for (j = 0; j < 2; j = j + 1) begin for (i = 0; i < 4; i = i + 1) begin if (3 - i <= nchar) begin if (((d >> (3 - i) * 8 + 4) & 1) == 1) $write(" | "); else $write(" "); if (((d >> (3 - i) * 8 + 2) & 1) == 1) $write("|"); else $write(" "); end end $display(""); end // edge No. 3 for (i = 0; i < 4; i = i + 1) begin if (3 - i <= nchar) if (((d >> (3 - i) * 8 + 3) & 1) == 1) $write(" -- "); else $write(" "); end $display(""); end endmodule // 7segdisp `ifdef STAND_ALONE module main; reg enb; reg [1:0] nchar; reg [31:0] d; integer i; seven_seg_disp disp(.enb(enb), .nchar(nchar), .d(d)); initial begin enb = 0; d = 'b001001111_01011011_00000110_00111111; for (i = 0; i <= 3; i = i + 1) begin nchar = i; enb = 1; #10; enb = 0; #10; end $finish; end endmodule // main `endif