Untitled
unknown
verilog
2 years ago
1.9 kB
7
Indexable
module clock_divider(clk,clk_div);
input clk;
output clk_div;
parameter n = 25;
reg[n-1:0]num;
wire[n-1:0]next_num;
always@(posedge clk)begin
num <= next_num;
end
assign next_num = num + 1;
assign clk_div = num[n-1];
endmodule
module lab3_1(
input clk,
input rst,
input en,
input speed,
output reg [15:0] led
);
// add your design here
wire clk_div25, clk_div27;
reg [1:0] state;
reg [1:0] next_state;
clock_divider #(25) div1(.clk(clk), .clk_div(clk_div25));
clock_divider #(27) div2(.clk(clk), .clk_div(clk_div27));
//change speed by switch
always @(posedge clk_div25 or posedge rst) begin
if(rst) begin
state <= 0;
led <= 0;
next_state <= 0;
end
else begin
if (en && speed == 0) begin
case (state)
2'b00: led <= 16'b1111111111111111;
2'b01: led <= 16'b1000100010001000;
2'b10: led <= 16'b1110111011101110;
2'b11: led <= 16'b1111111111111111;
default: led <= 16'b0000000000000000;
endcase
state <= next_state;
end
else
led <= led;
end
end
always @(posedge clk_div27 or posedge rst) begin
if(rst) begin
state <= 0;
led <= 0;
next_state <= 0;
end
else begin
if (en && speed == 1) begin
case (state)
2'b00: led <= 16'b1111111111111111;
2'b01: led <= 16'b1000100010001000;
2'b10: led <= 16'b1110111011101110;
2'b11: led <= 16'b1111111111111111;
default: led <= 16'b0000000000000000;
endcase
state <= next_state;
end
else
led <= led;
end
end
always @(*) begin
if(state == 2'b11)
next_state = 0;
else
next_state = state + 1;
end
endmoduleEditor is loading...