Untitled
unknown
plain_text
2 years ago
2.0 kB
5
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