यह '10101' गैर अतिव्यापी अनुक्रम संसूचक के लिए वेरिलोग कोड है। जब मैं इस कोड को संकलित करता हूं, तो यह कोई त्रुटि नहीं दिखाता है। लेकिन, जब मैं कोड का अनुकरण करता हूं, मॉडलसिम काम करना बंद कर देता है और अनिश्चित काल के लिए जमा देता है। मुझे त्रुटि नहीं मिल रही है या समस्या कहां है।

module seq_det(y,x,clk,rst);
output reg y;
input x,clk,rst;

reg[2:0] pr_st,nx_st;

parameter s0=3'b000;
parameter s1=3'b001;
parameter s2=3'b010;
parameter s3=3'b011;
parameter s4=3'b100;

always {y,nx_st}= fsm(x,pr_st);
always @(posedge clk)
    begin if(rst)begin
            y=0;
            nx_st=s0;
            end
          else nx_st=pr_st;
    end

//function defined here
function [3:0] fsm;
input sm_x;
input sm_ps;

reg sm_y;
reg[2:0] sm_ns;

begin
case(sm_ps)
s0:begin
    if(sm_x==0) begin
    sm_y=0;
    sm_ns=s0;
    end
    else begin
    sm_y=0;
    sm_ns=s1;
    end
   end
s1:begin
    if(sm_x==1) begin
    sm_y=0;
    sm_ns=s1;
    end
    else begin
    sm_y=0;
    sm_ns=s2;
    end
   end
s2:begin
    if(sm_x==0) begin
    sm_y=0;
    sm_ns=s0;
    end
    else begin
    sm_y=0;
    sm_ns=s3;
    end
   end
s3:begin
    if(sm_x==1) begin
    sm_y=0;
    sm_ns=s1;
    end
    else begin
    sm_y=0;
    sm_ns=s4;
    end
   end
s4:begin
    sm_y=sm_x;
    sm_ns=s0;
   end
endcase
fsm={sm_y,sm_ns};
end
endfunction
endmodule
1
shubham737 14 पद 2020, 23:10

1 उत्तर

सबसे बढ़िया उत्तर

जब मैं वीसीएस के साथ आपका कोड चलाता हूं, तो मुझे यह संदेश मिलता है:

चेतावनी- [PALF] संभावित हमेशा लूप मिला इस हमेशा ब्लॉक का कोई ईवेंट नियंत्रण या विलंब कथन नहीं होता है, यह सिमुलेशन में एक अनंत लूप का कारण बन सकता है।

यह आपके कोड में इस लाइन को इंगित करता है:

always {y,nx_st}= fsm(x,pr_st);

जब मैं इसे इसमें बदलता हूं तो संदेश गायब हो जाता है:

always @* {y,nx_st}= fsm(x,pr_st);

@* एक अंतर्निहित संवेदनशीलता सूची है। always ब्लॉक अब केवल तभी चालू होगा जब x या pr_st का मान बदलेगा।


नोट: आप edaplayground पर अन्य सिमुलेटर पर भी अपना कोड आज़मा सकते हैं।

1
toolic 14 पद 2020, 23:25