ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

نمایش نتایج: از 1 به 9 از 9
  1. #1
    2011/03/13
    84
    0

    IF statement is not synthesizable

    سلام به همگی

    آقا من میخوام یه ماژول داشته باشم که وقتی clk1 میاد، خروجی 0 بشه و 0 بمونه تا clk2 بیاد و خروجی رو 1 کنه و 1 بمونه تا باز دوباره clk1 بیاد.
    کد VHDL ش رو اینطور نوشتم:

    [left]
    entity clocking is
    Port ( clk1 : in STD_LOGIC;
    clk2 : in STD_LOGIC;
    result : out STD_LOGIC);
    end clocking;

    architecture Behavioral of clocking is

    begin

    process
    begin

    if( rising_edge(clk1) ) then
    result <= '0';
    end if;
    if( rising_edge(clk2) ) then
    result <= '1';
    end if;

    end process;


    end Behavioral;

    تو شبیه سازی جواب میده اما موقع سنتز کردن error زیر رو میده:

    "statement is not synthesizable since it does not hold its value under NOT(clock-edge) condition"

    واقعاٌ نمی فهمم مشکل چیه؟ کسی راه دیگه ای بنظرش نمیرسه که این بلوک رو پیاده کنم. به نظر خیلی سادست ولی نمیشه نوشتش.
    ممنون
  2. #2
    2008/02/26
    مراغه- کرمان- اصفهان
    1,960
    63

    پاسخ : IF statement is not synthesizable

    اگه درست یادم مونده باشه باید جلوی process مقادیر متغیرتون رو قرار بدید تا هر بار با تغییر اونها وارد process بشه. یعنی clk1 ,clk2
    It's nice to be important but it's important to be nice!

    از اینکه نمی رسم جواب دوستان را بدم معذرت می خوام.
  3. #3
    2009/08/11
    682
    70

    پاسخ : IF statement is not synthesizable

    من زیاد vhdl بلد نیستم اما فکر میکنم این کارو کنی درست بشه
    if دوم رو بعد از else بذار و بعد از اون هم یه else بذار که مقدار result رو تغییر نده (result <= result)
    https://www.linkedin.com/in/mohammadhosseini69

    http://zakhar.blog.ir
  4. #4
    2011/05/12
    366
    9

    پاسخ : IF statement is not synthesizable

    نقل قول نوشته اصلی توسط ehbas
    سلام به همگی

    آقا من میخوام یه ماژول داشته باشم که وقتی clk1 میاد، خروجی 0 بشه و 0 بمونه تا clk2 بیاد و خروجی رو 1 کنه و 1 بمونه تا باز دوباره clk1 بیاد.
    کد VHDL ش رو اینطور نوشتم:

    [left]
    entity clocking is
    Port ( clk1 : in STD_LOGIC;
    clk2 : in STD_LOGIC;
    result : out STD_LOGIC);
    end clocking;

    architecture Behavioral of clocking is

    begin

    process
    begin

    if( rising_edge(clk1) ) then
    result <= '0';
    end if;
    if( rising_edge(clk2) ) then
    result <= '1';
    end if;

    end process;


    end Behavioral;

    تو شبیه سازی جواب میده اما موقع سنتز کردن error زیر رو میده:

    "statement is not synthesizable since it does not hold its value under NOT(clock-edge) condition"

    واقعاٌ نمی فهمم مشکل چیه؟ کسی راه دیگه ای بنظرش نمیرسه که این بلوک رو پیاده کنم. به نظر خیلی سادست ولی نمیشه نوشتش.
    ممنون
    فکر کنم درستش این باشه:

    entity clocking is
    Port ( clk1 : in STD_LOGIC;
    clk2 : in STD_LOGIC;
    result : out STD_LOGIC);
    end clocking;

    architecture Behavioral of clocking is
    signal c1: STD_LOGIC := '0';
    signal c2: STD_LOGIC := '0';
    begin

    result <= c1 xor c2;

    process(clk1, clk2)
    begin

    if( rising_edge(clk1) ) then
    c1 <= c2;
    end if;

    if( rising_edge(clk2) ) then
    c2 <= not c1;
    end if;

    end process;


    end Behavioral;

    موفق باشید.

    اسمایل، تومورو ویل بی وُرس
  5. #5
    2008/02/26
    مراغه- کرمان- اصفهان
    1,960
    63

    پاسخ : IF statement is not synthesizable

    نقل قول نوشته اصلی توسط محمد حسینی
    if دوم رو بعد از else بذار و بعد از اون هم یه else بذار که مقدار result رو تغییر نده (result <= result)
    ELSE گذاشتن برای IF میتونه جلوی خیلی از اشتباه ها و ورود برنامه به حالت های غیرمجاز رو بگیره.
    It's nice to be important but it's important to be nice!

    از اینکه نمی رسم جواب دوستان را بدم معذرت می خوام.
  6. #6
    2011/03/13
    84
    0

    پاسخ : IF statement is not synthesizable

    نقل قول نوشته اصلی توسط ژوپیتر
    فکر کنم درستش این باشه:

    entity clocking is
    Port ( clk1 : in STD_LOGIC;
    clk2 : in STD_LOGIC;
    result : out STD_LOGIC);
    end clocking;

    architecture Behavioral of clocking is
    signal c1: STD_LOGIC := '0';
    signal c2: STD_LOGIC := '0';
    begin

    result <= c1 xor c2;

    process(clk1, clk2)
    begin

    if( rising_edge(clk1) ) then
    c1 <= c2;
    end if;

    if( rising_edge(clk2) ) then
    c2 <= not c1;
    end if;

    end process;


    end Behavioral;

    موفق باشید.
    سلام
    آقا دستت درد نکنه. خدا خیرت بده. :job:
    معلومه این کاریه
    حالا که ماهی رو بهمون دادی، بیزحمت ماهی گیری رو هم یادمون بده. مشکل کد من چی بود؟ فرقشون تو این بود که من می خواستم خروجی رو مستقیما تغییر بدم اما شما با واسطه این کار رو انجام دادی؟ اروری که داد، دقیقا میخواد چی بگه؟
  7. #7
    2011/05/12
    366
    9

    پاسخ : IF statement is not synthesizable

    سلام،

    statement is not synthesizable since it does not hold its value under NOT(clock-edge) condition"
    این ارور میگه استیتهای متغییر(در لاگ ارور اسم متغییر رو مینویسه که همون result هستش) result قابل سنتز نیست برای اینکه در حالت معکوس شرط لبه مقدارش رو نگه نمیداره، یعنی در لبه بالا رونده کلاک اول result مقدار دهی شده(برابر صفر) ولی خارج از این شرط result مقدارش تغییر میکنه و قابل سنتز نیست( همون مقدار دهی در شرط کلاک بالا رونده کلاک دوم برابر یک شده). در مدارهای لاجیک این کار غیر ممکنه که یک متغییر هم زمان با 2 یا چند کلاک نوشته بشه، ولی خوندنش ممکنه، مثلا در شرط چند کلاک مختلف میشه یک متغییر مشترک رو خوند ولی نمیشه در چند کلاک اون رو مقدار دهی کرد.
    حالا برای این کار از ادغام مدارهای ترکیبی و ترتیبی با هم استفاده میکنند که منهم همین کار رو کردم، نتیجه مدار ترکیبی حاصل c1 و c2 هست که در result ریخته شده و محاسبات جداگانه ترتیبی هم که با دو کلاک جدا انجام شده.

    موفق باشید.
    اسمایل، تومورو ویل بی وُرس
  8. #8
    2011/10/30
    25
    0

    پاسخ : IF statement is not synthesizable

    نقل قول نوشته اصلی توسط ژوپیتر
    سلام،

    این ارور میگه استیتهای متغییر(در لاگ ارور اسم متغییر رو مینویسه که همون result هستش) result قابل سنتز نیست برای اینکه در حالت معکوس شرط لبه مقدارش رو نگه نمیداره، یعنی در لبه بالا رونده کلاک اول result مقدار دهی شده(برابر صفر) ولی خارج از این شرط result مقدارش تغییر میکنه و قابل سنتز نیست( همون مقدار دهی در شرط کلاک بالا رونده کلاک دوم برابر یک شده). در مدارهای لاجیک این کار غیر ممکنه که یک متغییر هم زمان با 2 یا چند کلاک نوشته بشه، ولی خوندنش ممکنه، مثلا در شرط چند کلاک مختلف میشه یک متغییر مشترک رو خوند ولی نمیشه در چند کلاک اون رو مقدار دهی کرد.
    حالا برای این کار از ادغام مدارهای ترکیبی و ترتیبی با هم استفاده میکنند که منهم همین کار رو کردم، نتیجه مدار ترکیبی حاصل c1 و c2 هست که در result ریخته شده و محاسبات جداگانه ترتیبی هم که با دو کلاک جدا انجام شده.

    موفق باشید.
    سلام یه سوال:
    چرا جمله result رو بعد از end process نذاشتین؟ فرقی میکنه؟!!
  9. #9
    2011/05/12
    366
    9

    پاسخ : IF statement is not synthesizable

    نقل قول نوشته اصلی توسط samaneh174
    سلام یه سوال:
    چرا جمله result رو بعد از end process نذاشتین؟ فرقی میکنه؟!!
    سلام
    اگه منظورتون بیرون از پروسس هست، فرقی نداره که قبل از پروسس بنویسید یا بعدش، مهم اینه که دیگه ترتیبی نیست و ترکیبیه.
    اسمایل، تومورو ویل بی وُرس
نمایش نتایج: از 1 به 9 از 9

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •