artais 2023-03-31 16:49 采纳率: 63.2%
浏览 262
已结题

设计一个能让8个发光二极管轮流点亮的流水灯

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

img

  • 写回答

5条回答 默认 最新

  • 小逸2023 2023-03-31 21:21
    关注
    该回答引用ChatGPT
    这道题目需要设计一个能让8个发光二极管轮流点亮的流水灯,其中需要用到三-八译码器和JK触发器。下面是详细的分析和代码实现:
    1. 三-八译码器的设计
    三-八译码器的输入信号由3个拨码开关SW2、SW1和SW0开关设置,译码器的输出驱动8个发光二极管。根据真值表,可以得到以下的逻辑表达式:
    Y0 = (not A) and (not B) and (not C)
    Y1 = (not A) and (not B) and C
    Y2 = (not A) and B and (not C)
    Y3 = (not A) and B and C
    Y4 = A and (not B) and (not C)
    Y5 = A and (not B) and C
    Y6 = A and B and (not C)
    Y7 = A and B and C
    其中,A、B、C分别对应SW2、SW1和SW0的输入信号。根据逻辑表达式,可以使用AND、NOT门来实现。
    以下是三-八译码器的代码实现:
    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

    2. JK触发器的设计
    JK触发器是一种带有时钟的触发器,可以用来实现计数器。在这里,我们需要设计一个8进制加计数器,即每次计数加1,当计数器达到8时,重新从0开始计数。根据真值表,可以得到以下的逻辑表达式:
    J = K = Q2
    CLK = SW0
    其中,Q2是JK触发器的输出信号,J和K都等于Q2,CLK是时钟信号,由SW0输入。
    以下是JK触发器的代码实现:
    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

    3. 流水灯电路的设计
    将计数器和译码器连接成为流水灯电路,驱动8个发光二极管依次轮流亮灭。具体实现方法是,将计数器的输出信号连接到译码器的输入信号,译码器的输出信号连接到8个发光二极管的控制信号。每次计数器加1,译码器的输出信号就会对应地改变,从而驱动发光二极管依次轮流亮灭。
    以下是流水灯电路的代码实现:
    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

    至此,设计一个能让8个发光二极管轮流点亮的流水灯的任务完成。
    评论

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 创建了问题 3月31日