fragile594 2023-06-08 14:41 采纳率: 25%
浏览 10

怎样修改以下代码使数码管能够显示移位寄存器所具有的进位功能


module SHIFT3(clk, rst, mode, din, dout, C0);
  input clk, rst,C0;
  input [1:0] mode;
  input [7:0] din;
  output [7:0] dout;
  //input [7:0] seg_in;
  
  reg [7:0] dout;
  reg [7:0] seg_out;
  reg CY = 1'b0; // 设置默认的 CY 值为 0
  reg [7:0] REG;
  
 
  // 状态转移行为
  always @(posedge clk or posedge rst) begin
    if (rst) // 复位
      REG <= 8'b0;
    else begin
      case(mode) // 根据不同模式进行操作
        2'b00: begin // 循环左移
        REG[0]<=REG[7];REG[7:1]<=REG[6:0];
        end
        2'b01: begin // 带进位左移
          REG[0]<=C0;REG[7:1]<=REG[6:0];CY <= REG[7];
        end
        default: begin // 其他模式,直接赋值
          CY <= 1'b0;
          REG <= din;
        end
      endcase
    end
  end
   // 根据不同的 seg 值选择输出
  always @(din) begin
    case (din)
      8'b00000000: seg_out <= 7'b1111110; // 显示 0
      8'b00000001: seg_out <= 7'b0110000; // 显示 1
      8'b00000010: seg_out <= 7'b1101101; // 显示 2
      8'b00000011: seg_out <= 7'b1111001; // 显示 3
      8'b00000100: seg_out <= 7'b0110011; // 显示 4
      8'b00000101: seg_out <= 7'b1011011; // 显示 5
      8'b00000110: seg_out <= 7'b1011111; // 显示 6
      8'b00000111: seg_out <= 7'b1110000; // 显示 7
      8'b00001000: seg_out <= 7'b1111111; // 显示 8
      8'b00001001: seg_out <= 7'b1111011; // 显示 9
      default: seg_out <= 7'b0000001; // 默认显示 1
    endcase
  end
  // 将 seg_out 赋值给 dout
  always @ (seg_out) begin
    dout= seg_out;
  end
endmodule

  • 写回答

1条回答 默认 最新

  • 小杰911 2023-06-14 09:23
    关注

    要使数码管能够显示移位寄存器所具有的进位功能,需要修改以下几个地方:

    将输入端口C0改为输出端口,以便将进位信号输出到数码管;
    在always @(din)块中,增加一个case语句来判断CY的值,根据CY的值选择相应的数码管显示;
    在always @(posedge clk or posedge rst)块中,对于模式为2'b01的情况,需要将进位信号C0连接到REG[7]上,以实现带进位左移的功能。
    修改后的代码如下所示:

    
    module SHIFT3(clk, rst, mode, din, dout, C0);
    input clk, rst;
    input [1:0] mode;
    input [7:0] din;
    output [7:0] dout;
    output C0;
    
    reg [7:0] dout;
    reg [7:0] seg_out;
    reg CY = 1'b0;
    reg [7:0] REG;
    
    assign C0 = CY;
    
    always @(posedge clk or posedge rst) begin
    if (rst)
    REG <= 8'b0;
    else begin
    case(mode)
    2'b00: begin
    REG[0]<=REG[7];REG[7:1]<=REG[6:0];
    end
    2'b01: begin
    REG[0]<=C0;REG[7:1]<=REG[6:0];REG[7]<=C0;
    end
    default: begin
    CY <= 1'b0;
    REG <= din;
    end
    endcase
    end
    end
    
    always @(din, CY) begin
    case ({CY, din})
    8'b00000000: seg_out <= 7'b1111110;
    8'b00000001: seg_out <= 7'b0110000;
    8'b00000010: seg_out <= 7'b1101101;
    8'b00000011: seg_out <= 7'b1111001;
    8'b00000100: seg_out <= 7'b0110011;
    8'b00000101: seg_out <= 7'b1011011;
    8'b00000110: seg_out <= 7'b1011111;
    8'b00000111: seg_out <= 7'b1110000;
    8'b00001000: seg_out <= 7'b1111111;
    8'b00001001: seg_out <= 7'b1111011;
    8'b00010000: seg_out <= 7'b0001000; // 显示进位符号
    default: seg_out <= 7'b0000001;
    endcase
    end
    
    always @ (seg_out) begin
    dout= seg_out;
    end
    endmodule
    
    评论

报告相同问题?

问题事件

  • 创建了问题 6月8日

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试