Untitled
unknown
plain_text
2 years ago
2.0 kB
8
Indexable
module test (clk,rst,in,out);
input clk,rst,in;
output [6:0]out;
wire clkdiv;
wire [3:0]count;
frequencydivider u_a(clk,rst,clkdiv);
counter u_b(rst,clkdiv,in,count);
sevendisplay u_c(count,out);
endmodule
module frequencydivider(clk,rst,clkdiv);//讓clockæ¯ä¸€ç§’從0變1 1變0
input clk,rst;
output clkdiv;
reg [32:0] counter;
reg clkdiv;
always @(posedge clk) begin
if (!rst) begin
counter <= 32'b0;
clkdiv <= 1'b0;
end else begin
if (counter == 32'd25000000) begin //一秒
counter <= 25'b0;
clkdiv <= ~clkdiv;
end else begin
counter <= counter + 32'd1;
end
end
end
endmodule
module counter(rst,clkdiv,in,count);
input rst,clkdiv,in;
output [3:0] count;
reg [3:0]cur,next;
reg [3:0]count;
parameter st0=4'b0000,
st1=4'b0001,
st2=4'b0010,
st3=4'b0011,
st4=4'b0100,
st5=4'b0101;
always @(posedge clkdiv or negedge rst)
begin
if(!rst)begin
cur<=st0;
end else begin
cur<=next;
end
end
always @(in or cur)
begin
next<=st0;
case(cur)
st0: if(in==1)
next<=st3;
else
next<=st1;
st1: if(in==1)
next<=st5;
else
next<=st2;
st2: if(in==1)
next<=st0;
else
next<=st3;
st3: if(in==1)
next<=st1;
else
next<=st4;
st4: if(in==1)
next<=st2;
else
next<=st5;
st5: if(in==1)
next<=st4;
else
next<=st0;
endcase
end
always@(cur)begin
case(cur)
st0: count<=4'b0000;
st1: count<=4'b0001;
st2: count<=4'b0010;
st3: count<=4'b0011;
st4: count<=4'b0100;
st5: count<=4'b0101;
endcase
end
endmodule
module sevendisplay(count,out);
input [3:0] count;
output [6:0] out;
reg [6:0] out;
always @(count) begin
case(count)
4'b0000:out = 7'b1000000;
4'b0001:out = 7'b1111001;
4'b0010:out = 7'b0100100;
4'b0011:out = 7'b0110000;
4'b0100:out = 7'b0011001;
4'b0101:out = 7'b0010010;
default:out = 7'b0000000;
endcase
end
endmodule Editor is loading...
Leave a Comment