使用quartusII 9.1 设计描述采用图形法,设计一个能让8个发光二极管轮流点亮的流水灯
基本要求:
1、用逻辑门设计实现一个三-八译码器,译码器的输入信号由3个拨码开关SW2、SW1和SW0开关设置,译码器的输出驱动8个发光二极管(颜色自选),设计描述采用图形法,仿真和测试验证功能正确后打包成为译码器模块;
2、用JK触发器设计实现一个8进制加计数器,设计描述采用图形法,仿真验证其功能正确后打包成为计数器模块;
3、将计数器和译码器连接成为流水灯电路,驱动8个发光二极管依次轮流亮灭。

使用quartusII 9.1 设计描述采用图形法,设计一个能让8个发光二极管轮流点亮的流水灯
基本要求:
1、用逻辑门设计实现一个三-八译码器,译码器的输入信号由3个拨码开关SW2、SW1和SW0开关设置,译码器的输出驱动8个发光二极管(颜色自选),设计描述采用图形法,仿真和测试验证功能正确后打包成为译码器模块;
2、用JK触发器设计实现一个8进制加计数器,设计描述采用图形法,仿真验证其功能正确后打包成为计数器模块;
3、将计数器和译码器连接成为流水灯电路,驱动8个发光二极管依次轮流亮灭。

verilog
module decoder_3to8(
input A, B, C,
output [7:0] Y
);
assign Y[0] = (~A) & (~B) & (~C);
assign Y[1] = (~A) & (~B) & C;
assign Y[2] = (~A) & B & (~C);
assign Y[3] = (~A) & B & C;
assign Y[4] = A & (~B) & (~C);
assign Y[5] = A & (~B) & C;
assign Y[6] = A & B & (~C);
assign Y[7] = A & B & C;
endmodule
verilog
module jk_flipflop(
input J, K, CLK,
output reg Q
);
always @(posedge CLK) begin
if (J & K) begin
Q <= Q;
end else if (J) begin
Q <= 1;
end else if (K) begin
Q <= 0;
end else begin
Q <= Q;
end
end
endmodule
verilog
module flow_light(
input CLK,
input [2:0] SW,
output reg [7:0] LED
);
wire [2:0] counter_out;
wire [7:0] decoder_out;
jk_flipflop jk1(.J(counter_out[2]), .K(counter_out[2]), .CLK(CLK), .Q(counter_out[2]));
jk_flipflop jk2(.J(counter_out[1]), .K(counter_out[1]), .CLK(CLK), .Q(counter_out[1]));
jk_flipflop jk3(.J(counter_out[0]), .K(counter_out[0]), .CLK(CLK), .Q(counter_out[0]));
decoder_3to8 decoder(.A(SW[2]), .B(SW[1]), .C(SW[0]), .Y(decoder_out));
always @(posedge CLK) begin
if (counter_out == 3'b111) begin
counter_out <= 3'b000;
end else begin
counter_out <= counter_out + 1;
end
end
assign LED = decoder_out;
endmodule
verilog
module top(
input CLK,
input [2:0] SW,
output reg [7:0] LED
);
flow_light flow_light(.CLK(CLK), .SW(SW), .LED(LED));
endmodule