







有没有家人可以帮我看看这个要怎么改啊 或者还要怎么写 需要增删东西吗
module lab_ledseg(
input wire clk,
input wire rst,
input wire stop,
output wire [3:0] dataout1, // 个位
output wire [3:0] dataout2 // 十位
);
reg [3:0] data1 = 0; // 初始化个位
reg [3:0] data2 = 0; // 初始化十位
reg internal_stop = 0; // 内部自动暂停变量
always @(posedge clk or negedge rst) begin
if (!rst) begin
data1 <= 0;
data2 <= 0;
internal_stop <= 0; // 在复位时清除内部暂停标志
end else if (!(stop || internal_stop)) begin
if (data1 == 4'b1001) begin
if (data2 == 4'b1001) begin
internal_stop <= 1; // 当计数达到99时,设置内部停止信号
// data1和data2保持不变,因此计数器显示99
end else begin
data1 <= 0;
data2 <= data2 + 1;
end
end else begin
data1 <= data1 + 1;
end
end
end
assign dataout1 = data1;
assign dataout2 = data2;
endmodule
module jishiqi
(
input rst,clk,stop,
output wire [6:0] seg1,seg2,
output wire [1:0] dot, sel
);
wire [3:0] dataout1,dataout2;
wire clkout;
wire stop1=~stop;
jishiqi devide(
.clkout(clkout),
.clk(clk),
.rst_n(rst));
lab_ledseg excounter(
.clk(clkout),
.rst(rst),
.stop(stop1),
.dataout1(dataout1),
.dataout2(dataout2));
lab_ledsegg dc1(
.in(dataout1),
.seg(seg1)) ;
lab_ledsegg dc2(
.in(dataout2),
.seg(seg2));
assign dot = 2'b01;
assign sel = 2'b00;
endmodule
module seg7dc(
input[3:0] in,
output[6:0] seg);
assign seg=(in==4'b0000)?7'b0111111:
(in==4'b0001)?7'b0000110:
(in==4'b0010)?7'b1011011:
(in==4'b0011)?7'b1001111:
(in==4'b0100)?7'b1100110:
(in==4'b0101)?7'b1101101:
(in==4'b0110)?7'b1111101:
(in==4'b0111)?7'b0000111:
(in==4'b1000)?7'b1111111:
(in==4'b1001)?7'b1101111:
(in==4'b1010)?7'b1110111:
(in==4'b1011)?7'b1111100:
(in==4'b1100)?7'b0111001:
(in==4'b1101)?7'b1011110:
(in==4'b1110)?7'b1111001:7'b1110001;
endmodule
module excounter(
input wire clk,rst,
output wire[3:0] dataout
);
reg[3:0] data;
always@(negedge rst or posedge clk)begin
if(!rst)begin
data<=4'b0000;
end
else begin
if(data==4'hf)
data<=4'h0;
else
data<=data+4'h1;
end
end
assign dataout=(~data);
endmodule
module devide #
(
parameter WIDTH=24,
parameter N=12000000
)
(
input clk,
input rst_n,
output clkout
);
reg [WIDTH-1:0] cnt_p,cnt_n;
reg clk_p,clk_n;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt_p<=1'b0;
else if(cnt_p==(N-1))
cnt_p<=1'b0;
else
cnt_p<=cnt_p+1'b1;
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
clk_p<=1'b0;
else if(cnt_p<(N>>1))
clk_p<=1'b0;
else
clk_p<=1'b1;
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt_n<=1'b0;
else if(cnt_n==(N-1))
cnt_n<=1'b0;
else
cnt_n<=cnt_n+1'b1;
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
clk_n<=1'b0;
else if(cnt_n<(N>>1))
clk_n<=1'b0;
else
clk_n<=1'b1;
end
wire clk1=clk;
wire clk2=clk_p;
wire clk3=clk_p & clk_n;
assign clkout = (N==1)? clk1:(N[0]? clk3:clk2);
endmodule