اطلاعیه

Collapse
No announcement yet.

برطرف کردن مشکل برنامه در Proteus

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    برطرف کردن مشکل برنامه در Proteus

    سلام دوستان.
    من یه برنامه در مادلسیم نوشتم که برای سنتزش باید آنرا در Proteus اجرا کنم.ولی error میدهد که در مادلسیم با توجه به امکاناتش نمیدهد.
    حالا از دوستان اگه کسی میتونه کمکم کنه و error اش رو برطرف کنه.
    البته با verilog نوشته شده.
    این برنامه برنامه ایست که جمع دو فرکانس ورودی را در خروجی می گذارد و کلاکی با همان دوره تناوب تولید میکند.

    با تشکر

    کد:

    module f_c1(clk1,clk2,clk_sys,reset,cl2);
    input clk1,clk2,clk_sys,reset;
    output cl2 ;
    reg [100:0]count,count_1,next_state,state,next_state_1,state_ 1,clk_prd_1,clk_prd_2;
    reg [100:0]clk_prd_total,cl2_count;
    reg cl2;
    parameter [3:0] s0=1,s1=2,counter=3,exit=4;
    parameter [3:0] s00=5,ss=6,counter1=7,exit1=8;
    reg rst;
    reg rst_1;
    reg cl2_en;
    //-----------------------------------------

    reg [2:0] shReg,shReg_1;
    wire clkPos,clkPos_1;
    always @(posedge clk_sys)
    shReg = {shReg[1:0],clk1};
    assign clkPos = ~shReg[1] & shReg[0];

    always @(posedge clk_sys)
    shReg_1 = {shReg_1[1:0],clk2};
    assign clkPos_1 = ~shReg_1[1] & shReg_1[0];
    //-----------------------------------------
    initial
    begin
    state<=s0;next_state <= s0 ;
    rst=reset;
    end

    initial
    begin
    rst_1=reset;
    state_1=s00;next_state_1 = s00 ;
    end

    always @(posedge clk_sys)
    begin

    if (rst==1'b1)
    begin
    next_state <= s0;
    end
    else
    begin
    state <= next_state;
    end


    case(state)

    s0 :
    begin

    count = 0;
    next_state = s1 ;

    end

    s1 :
    begin

    if (clkPos==1'b1)
    begin
    next_state = counter;
    end
    else next_state = s1 ;
    end

    counter :
    begin
    count = count + 1;
    if (clkPos==1'b1)
    next_state = exit;
    else
    next_state = counter;
    end

    exit :
    begin
    clk_prd_1 = count*4;
    rst = 1'b1;
    end

    endcase

    end

    always @(posedge clk_sys)
    begin

    if (rst_1==1'b1)
    begin
    next_state_1 <= s00;
    end
    else
    begin
    state_1 <= next_state_1;
    end

    case(state_1)

    s00 :
    begin

    count_1 = 0;
    next_state_1 = ss ;

    end

    ss :
    begin
    if (clkPos_1==1'b1)
    begin
    next_state_1 = counter1;
    end
    else next_state_1 = ss ;

    end

    counter1 :
    begin
    count_1 = count_1 + 1;
    if (clkPos_1==1'b1)
    next_state_1 = exit1;
    else
    next_state_1 = counter1;
    end

    exit1 :
    begin
    clk_prd_2 = count_1 * 4;
    rst_1=1'b1;
    end

    endcase

    assign clk_prd_total=(clk_prd_1*clk_prd_2)/(clk_prd_1+clk_prd_2);


    if (reset==1)
    begin
    cl2_count = 0 ;
    cl2_en = 1'b0 ;
    end
    else if (clk_prd_total != 0)
    begin
    if (cl2_count != clk_prd_total)
    cl2_count <= cl2_count + 1 ;
    else
    begin
    cl2_en <= 1'b1 ;
    cl2_count <= 0'b0 ;
    end

    cl2_en = 0 ;
    end

    assign cl2 = cl2_en;
    end


    endmodule
لطفا صبر کنید...
X