效果:
light(设置为顶层)
`timescale 1ns / 1ps
module light(
input syck,
input rest_n,
output reg [3:0] sel,
output [7:0] seg);
reg [3:0] num;
parameter number=5959;
parameter IDLE = 5'b0000_1,
S1 = 5'b0001_0,
S2 = 5'b0010_0,
S3 = 5'b0100_0,
S4 = 5'b1000_0;
reg [4:0] cur_state,next_state;
parameter delay = 125_000;
reg [22:0] cnt;
//计时器
always@(posedge syck or negedge rest_n)begin
if(!rest_n)
cnt<=0;
else if(cnt==delay-1)
cnt<=0;
else
cnt<=cnt+1;
end
//模块一
always@(posedge syck or negedge rest_n)begin
if(!rest_n)
cur_state<=IDLE;
else
cur_state<=next_state;
end
always@(*)begin
if(!rest_n)
next_state=IDLE;
else
case(cur_state)
IDLE:begin
if(cnt==delay-1)
next_state=S1;
else
next_state=IDLE;
end
S1:begin
if(cnt==delay-1)
next_state=S2;
else
next_state=S1;
end
S2:begin
if(cnt==delay-1)
next_state=S3;
else
next_state=S2;
end
S3:begin
if(cnt==delay-1)
next_state=S4;
else
next_state=S3;
end
S4:begin
if(cnt==delay-1)
next_state=IDLE;
else
next_state=S4;
end
default:next_state=IDLE;
endcase
end
always@(posedge syck or negedge rest_n)begin
if(!rest_n)begin
sel<=4'b0000;
num<=1;
end
else
case(cur_state)
IDLE:begin
sel<=4'b1110;
num<=1;
end
S1:begin
sel<=4'b1110;
num<=number%10;
end
S2:begin
sel<=4'b1101;
num<=number/10%10;
end
S3:begin
sel<=4'b1011;
num<=number/100%10;
end
S4:begin
sel<=4'b0111;
num<=number/1000;
end
default: begin
sel<=4'b0001;
num<=9;
end
endcase
end
yima yima_u(
. syck (syck) ,
. rest_n (rest_n) ,
. seg (seg) ,
. num (num)
);
endmodule
yima译码模块 (注意:在连接时要注意两个seg类型不能相同)
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2023/12/15 15:31:29
// Design Name:
// Module Name: yima
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module yima(
input syck,
input rest_n,
output reg [7:0] seg,
input [3:0] num
);
always@(*)begin
case(num)
0:seg<=8'b0011_1111;
1:seg<=8'b0000_0110;
2:seg<=8'b0101_1011;
3:seg<=8'b0100_1111;
4:seg<=8'b0110_0110;
5:seg<=8'b0110_1101;
6:seg<=8'b0111_1101;
7:seg<=8'b0000_0111;
8:seg<=8'b0111_1111;
9:seg<=8'b0110_1111;
default:seg<=8'b1111_1111;
endcase
end
endmodule
连接配置