白沐沐vccc 2023-04-11 23:30 采纳率: 96.2%
浏览 13
已结题

verilog 流水灯部分问题

这是我写的流水灯一部分,共有8个灯,从左往右依次亮,一次只有一个亮。我是用8位2进制表示的,1就表示那个灯亮,
可是我这样写,仿真时rst=0,就不动了,请问这是什么原因,这个问题困扰好久了,希望好xin人能回答一下,真的十分感谢您!


module FlowingWaterLamp(
    input clk,rst,
    input [2:0] C,
    output reg[7:0] led
    );
    //dir确定方向
    reg dir=1;
    reg[7:0] start=8'b0000_0000;
    reg[7:0] state;
    reg[7:0] nextstate;
    
    always @(*) begin
        if(rst)
            state<=start;
        else
            state<=nextstate;
    end
    

    
    always @(*) begin
        case(C)
        //单灯:从左向右
            3'b000:
                begin
                //由start过度
                if(state==8'b0000_0000) nextstate=8'b1000_0000;
                //每次右移一位
                else nextstate=nextstate>>1;
                end
         endcase
    end
    
    always @(*) begin
        led<=state;
    end
    
endmodule
  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-04-12 01:02
    关注

    以下内容部分参考ChatGPT模型:


    你的代码中缺少时钟信号的控制,可能导致仿真时rst=0后停止运行。你需要添加时钟信号,并在时钟上升沿或下降沿控制灯的状态改变。以下是一个简单的例子:

    module led_shift(input clk, // 时钟信号
                     input rst, // 复位信号
                     output reg [7:0] led); // 8个灯
    
    always @(posedge clk or negedge rst) begin
        if (!rst) begin
            led <= 8'b00000001; // 复位时第一个灯亮
        end else begin
            led <= led << 1; // 左移一位,移出的灯熄灭,最后一个灯亮
        end
    end
    

    在这个例子中,我们根据时钟信号控制灯的状态改变。在时钟上升沿或下降沿,根据复位信号判断是否需要复位,如果复位则第一个灯亮,否则将灯的状态左移一位,移出的灯熄灭,最后一个灯亮。这样就实现了一个流水灯的功能。


    如果我的建议对您有帮助、请点击采纳、祝您生活愉快

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 已采纳回答 4月16日
  • 创建了问题 4月11日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测