EDA Verilog 语言设计

1、设计一个具有8位显示的电话按键显示器;
2、能准确地反映按键数字(按键S1-S8代表数字1-8);
3、显示器显示从低位向高位前移,逐位显示按键数字,最低位为当前输入位(最低为是数码管8);
4、设置一个“重拨”键(拨码开关1),按下此键,能显示最后一次输入的电话号码;
5、挂机2秒后或按熄灭按键(拨码开关2),熄灭显示器显示。

一样的需求,文库就有

img

img

module phone_display(
input clk,
input [7:0] button,
input re_dial,
input hang_up,
output reg [7:0] display
);

reg [7:0] last_num;
reg [2:0] shift_cnt;
reg [1:0] display_cnt;

always @(posedge clk) begin
if (hang_up || (display_cnt == 2 && shift_cnt == 7)) begin
display <= 8'b00000000;
shift_cnt <= 3'b000;
display_cnt <= 2'b00;
end else if (display_cnt == 2) begin
display_cnt <= 2'b00;
shift_cnt <= shift_cnt + 1;
end else begin
display_cnt <= display_cnt + 1;
end

if (re_dial) begin
    display <= last_num;
end else begin
    case (button)
        8'b00000001: display <= {display[6:0], 1'b1};
        8'b00000010: display <= {display[6:0], 1'b0};
        8'b00000100: display <= {display[6:0], 1'b0};
        8'b00001000: display <= {display[6:0], 1'b0};
        8'b00010000: display <= {display[6:0], 1'b0};
        8'b00100000: display <= {display[6:0], 1'b0};
        8'b01000000: display <= {display[6:0], 1'b0};
        8'b10000000: display <= {display[6:0], 1'b0};
        default: display <= display;
    end
    
    if (button != 8'b00000000) begin
        last_num <= display;
    end
end
end

endmodule