Modelsim仿真 输出波形一直红线不定态 求解

以下是rtl代码

 

module shift(
    input clk,          //    鏃堕挓淇″彿
    input [2:0] MD,     //    妯″紡閫夋嫨 
    input model, 
        input rstn,     //   澶嶄綅 
    output [7:0] QB     //  值杈撳嚭鍊?
);
    reg cnt = 0;        //    璁℃暟鍣?  
    reg clk_out;        // 鍐呴儴鏃堕挓淇″彿
    reg [7:0] REG;      //  8浣嶅瘎瀛樺櫒
    reg [24:0] count;   //  璁℃暟鍊?
     reg cnt_flag;            //        璁℃暟鏍囧織
   
always @(posedge clk) begin
    if (!rstn) begin
        count <= 1'b0;   // 澶嶄綅鏃跺皢璁℃暟鍣?count 缃浂
    end
    else if (cnt == 50) begin
        count <= 1'b0;   // 褰?cnt 杈惧埌 50000000 鏃跺皢璁℃暟鍣?count 缃浂
    end
    else begin
        count <= count + 1'b1;   // 姣忎釜鏃堕挓鍛ㄦ湡璁℃暟鍣?count 鍔?1
    end
end

always @(posedge clk or negedge rstn) begin
    if (!rstn) begin
        cnt_flag <= 1'b0;   // 澶嶄綅鏃跺皢璁℃暟鏍囧織 cnt_flag 缃浂
    end
    else if (count == (50 - 1)) begin
        cnt_flag <= 1'b1;   // 褰?count 杈惧埌 4999999 鏃跺皢璁℃暟鏍囧織 cnt_flag 缃负 1
    end
    else begin
        cnt_flag <= 1'b0;   // 鍏朵粬鎯呭喌涓嬭鏁版爣蹇?cnt_flag 缃浂
    end
end
    
    
    
    
    
   // always @(posedge clk) begin
      //  if (count == 5000000-1) begin
      //      count <= 0;
      //      clk_out <= ~clk_out; //     时   藕 取  
      //  end
     //   else
      //      count <= count + 1;
    //end

    always @(posedge clk) begin
        if (model == 0 && cnt == 0 && cnt_flag==1) begin
            REG = 8'b11111110;  //  鍒濆鍖栧瘎瀛樺櫒鐨勫€贾?
            cnt = 1;            //   灏嗚鏁板櫒缃负1
        end
        else if (model == 1 && cnt == 1 && cnt_flag==1) begin
            REG = 8'b11101110;  //   鏇存柊瀵勫瓨鍣ㄧ殑鍊?
            cnt = 2;            //  灏嗚鏁板櫒缃负2
        end
        else if(cnt_flag==1) begin
            case (model)
                1'b0: begin
                    case (MD)
                        3'b000: begin
                            REG[0] <= REG[7];      // 妯″紡0 寰幆宸︾Щ  
                            REG[7:1] <= REG[6:0];
                        end
                        3'b001: begin
                            REG[7] <= REG[0];      // 妯″紡1 寰幆鍙崇Щ
                            REG[6:0] <= REG[7:1];
                        end
                        3'b010: begin
                            REG[1:0] <= REG[7:6];  // 妯″紡2 寰幆宸︿袱绉? 
                            REG[7:2] <= REG[5:0];
                        end
                        3'b011: begin
                            REG[7:6] <= REG[1:0];  // 妯″紡3 寰幆鍙充袱绉?   
                            REG[5:0] <= REG[7:2];
                        end
                    endcase
                end
                1'b1: begin
                    case (MD)
                                3'b100: begin
                                     REG <= {REG[6:4], REG[7], REG[2:0], REG[3]};  // 妯″紡4 闈炲惊鐜乏绉? 
                                end
                        3'b101: begin
                            REG <= {REG[4], REG[7:5], REG[0],REG[3:1]};      //妯″紡5 闈炲惊鐜彸绉? 
                        end
                        3'b110: begin
                            REG[4] <= REG[6];      //妯″紡6 闈炲惊鐜乏涓ょЩ  
                            REG[5] <= REG[7];
                            REG[7:6] <= REG[5:4];
                            REG[0] <= REG[2];
                            REG[1] <= REG[3];
                            REG[3:2] <= REG[1:0];
                        end
                        3'b111: begin
                            REG[6] <= REG[4];      // 妯″紡7 闈炲惊鐜彸涓ょЩ    
                            REG[7] <= REG[5];
                            REG[5:4] <= REG[7:6];
                            REG[2] <= REG[0];
                            REG[3] <= REG[1];
                            REG[1:0] <= REG[3:2];
                        end
                    endcase
                end
            endcase
        end
    end

    assign QB[7:0] = REG[7:0];  //   杈撳嚭瀵勫瓨鍣ㄧ殑鍊?

endmodule
下面是testbeach


`timescale 1 ns / 1 ns

module tb;
    reg clk;
    reg [2:0] MD;
    reg model;
    reg rstn;
    wire [7:0] QB;
    
    initial begin
        clk = 1'b0;        //初始时钟为0
        rstn = 1'b0;
        model = 0;
        MD = 3'b000;
        #30;
        
        model = 0;
        MD = 3'b001;
        #30;
        
        model = 0;
        MD = 3'b010;
        #30;
        
        model = 0;
        MD = 3'b011;
        #30;
        
        model = 1;
        MD = 3'b110;
        #30;
        
        model = 1;
        MD = 3'b111;
        #30;
        
        
  end
  
    always #15 clk = ~clk;    
    always #15 rstn = ~rstn;
shift dut
    (
        .clk     (clk),
        .MD   (MD),
        .model   (model),
        .QB     (QB),
        .rstn    (rstn)
    );
    

endmodule
 

 大佬求解

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值