Verilog/CPLD代码之共阳数码管显示

以下程序为Verilog/CPLD学习过程中写的共阳数码管实验程序。

实验板晶振:50MHz。

实验对象:1位共阳数码管

实验现象:0-F循环显示,间隔1s。

module ledx8_verilog(
clk,rst_n,
sm_cs0_n,sm_db
);
input clk; //50Mhz时钟
input rst_n; //复位信号

output sm_cs0_n; //位选信号,1位数码管
output[6:0] sm_db; //段选信号,7段数码管

reg[25:0] cnt; //定义计数器
always @(posedge clk or negedge rst_n)
if(!rst_n) cnt <= 26'd0;
else if(cnt > 26'd50000000) cnt <= 26'd0;//计数器清零
else cnt <= cnt + 1'b1;

reg[3:0] num; //数据显示寄存器,0-F
always @(posedge clk or negedge rst_n)
if(!rst_n) num <= 4'd0;
else if(cnt == 26'd50000000) 
num <= num + 1'b1;//显示数字加1

reg[6:0] sm_dbr; //数码管段选寄存器
always @(num)
case(num)
4'h0 : sm_dbr = 8'hc0; //显示"0"
4'h1 : sm_dbr = 8'hf9; //显示"1"
4'h2 : sm_dbr = 8'ha4; //显示"2"
4'h3 : sm_dbr = 8'hb0; //显示"3"
4'h4 : sm_dbr = 8'h99; //显示"4"
4'h5 : sm_dbr = 8'h92; //显示"5"
4'h6 : sm_dbr = 8'h82; //显示"6"
4'h7 : sm_dbr = 8'hf8; //显示"7"
4'h8 : sm_dbr = 8'h80; //显示"8"
4'h9 : sm_dbr = 8'h90; //显示"9"
4'ha : sm_dbr = 8'h88; //显示"a"
4'hb : sm_dbr = 8'h83; //显示"b"
4'hc : sm_dbr = 8'hc6; //显示"c"
4'hd : sm_dbr = 8'ha1; //显示"d"
4'he : sm_dbr = 8'h86; //显示"e"
4'hf : sm_dbr = 8'h8e; //显示"f"
default:;
endcase

assign sm_cs0_n = 1'b0; //开位选
assign sm_db = sm_dbr; //段选信号赋值
endmodule

你可能感兴趣的:(Verilog/CPLD)