اطلاعیه

Collapse
No announcement yet.

مشکل با component

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

    مشکل با component

    به نظر شما مشکل برنامه زیر چیه که اجرا نمیشه ؟
    این برنامه ساخت یک جمع کننده 4 بیتی با کمک تمام جمع کننده است :
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;



    entity fa is
    Port ( x : in STD_LOGIC;
    y : in STD_LOGIC;
    c_in : in STD_LOGIC;
    s : out STD_LOGIC;
    c_out : out STD_LOGIC);
    end fa;

    architecture Behavioral of fa is

    signal s1,o2: std_logic;

    begin
    s1<=x xor y xor c_in;
    s<=not s1;
    o2<=(x and y)or(c_in and (x xor y));
    c_out<=not o2;

    end Behavioral;

    entity adder4bit is
    Port ( a : in std_LOGIC_VECTOR (3 downto 0);
    b : in std_LOGIC_VECTOR (3 downto 0);
    cin : in std_LOGIC;
    s : out std_LOGIC_VECTOR (3 downto 0);
    cout : out std_LOGIC);
    end adder4bit;

    architecture Behavioral of adder4bit is

    component fa
    port (x : in STD_LOGIC;
    y : in STD_LOGIC;
    c_in : in STD_LOGIC;
    s : out STD_LOGIC;
    c_out : out STD_LOGIC);
    end component;

    signal t1,t2,t3:STD_LOGIC;

    begin
    fa0: fa port map(x=>a(0),y=>b(0),c_in=>cin,s=>s(0), c_out=>t1);
    fa1: fa port map(x=>a(1),y=>b(1),c_in=>t1,s=>s(1),c _out=>t2);
    fa2: fa port map(x=>a(2),y=>b(2),c_in=>t2,s=>s(2),c _out=>t3);
    fa3: fa port map(x=>a(3),y=>b(3),c_in=>t3,s=>s(3),c _out=>cout);

    end Behavioral;

    مردود شدن بهتر از با تقلب قبول شدن است

    #2
    پاسخ : مشکل با component

    سلام.
    ای کاش یه خورده واضح تر سوالتون رو مطرح می کردید. مشکل شما دقیقا در کجاست؟ در کامپایل مشکل دارید ؟ یا خروجی برنامه مطابق انتظار شما نیست؟
    به هر حال چند تا موضوع بود که به ذهنم رسید که می گم امیدوارم مفید باشه:
    اول اینکه امیدوارم که همونطور که کدتون رو تو پست به صورت یکپارچه گذاشتین تو یه فایل vhdl قرار نداده باشین. باید برای کامپوننت یه فایل vhdl جداگانه تخصیص بدین.
    دوم ابنکه در کد مربوط به Full Adder به نظر می رسه یه اشتباه منطقی برای محاسبه وجود داره. من این قسمتو به صورت زیر اصلاح کردم :
    نوشته اصلی توسط masoud58

    ;s<=x xor y xor c_in
    ;s<=not s1--
    ;(c_out<=(x and y)or(c_in and x) or (c_in and y
    ;c_out<=not o2--

    همونطور که دیدید به دو سیگنال در قسمت Full Adder دیگه احتیاجی نیست . من با این اصلاحات برنامه شما رو بدون خطا کامپایل کردم و همچنین در شبیه سازی نتیجه درست هم گرفتم.
    موفق باشید.

    دیدگاه


      #3
      پاسخ : مشکل با component

      نوشته اصلی توسط saeed_n_m
      سلام.
      ای کاش یه خورده واضح تر سوالتون رو مطرح می کردید. مشکل شما دقیقا در کجاست؟ در کامپایل مشکل دارید ؟ یا خروجی برنامه مطابق انتظار شما نیست؟
      به هر حال چند تا موضوع بود که به ذهنم رسید که می گم امیدوارم مفید باشه:
      اول اینکه امیدوارم که همونطور که کدتون رو تو پست به صورت یکپارچه گذاشتین تو یه فایل vhdl قرار نداده باشین. باید برای کامپوننت یه فایل vhdl جداگانه تخصیص بدین.
      دوم ابنکه در کد مربوط به Full Adder به نظر می رسه یه اشتباه منطقی برای محاسبه وجود داره. من این قسمتو به صورت زیر اصلاح کردم : همونطور که دیدید به دو سیگنال در قسمت Full Adder دیگه احتیاجی نیست . من با این اصلاحات برنامه شما رو بدون خطا کامپایل کردم و همچنین در شبیه سازی نتیجه درست هم گرفتم.
      موفق باشید.
      با تشکر از پاسخ شما دوست عزیز من در نوشتن کدهای VHDL مبتدی هستم اشتباهات فاحش منو ببخشید
      اون دستورات NOT رو بخاطر بردی که من روش کار می کنم گذاشتم زیرا LED های روی برد بصورت آند مشترک هست بنابراین
      جواب معکوس بدست می یومد
      درضمن جایی خوندم که نوشته بود فایل کامپوننت با فایل اصلی باید بصورت یکپارچه نوشته بشه بخاطر همین کدها رو منم یکپارچه نوشتم
      بخاطر همین برنامه اصلا کامپایل نمیشه
      اینطور که من از پاسخ شما فهمیدم فایل کامپوننت باید جدا نوشته بشه فایل اصلی هم جدا . ولی هر دو در یک پوشه باید قرار داشته باشه
      اگه درست هست تایید بفرمایید ممنون میشم
      باز هم متشکرم
      مردود شدن بهتر از با تقلب قبول شدن است

      دیدگاه


        #4
        پاسخ : مشکل با component

        به طور کلی شما در یک فایل vhdl نمی تونید دو تا entity داشته باشین . پس به طور طبیعی همونطور که خودتون هم گفتین باید یک پروژه درست کنین و دو تا فایل را در فولدر پروژه قرار دهید و فایل adder 4 بیتی را به عنوان top level معرفی کنید.
        البته غیر از not ها من یه تغییر کوچک هم در تعریف full adder دادم. به اون هم دقت کنید.

        دیدگاه


          #5
          پاسخ : مشکل با component

          نوشته اصلی توسط saeed_n_m
          به طور کلی شما در یک فایل vhdl نمی تونید دو تا entity داشته باشین . پس به طور طبیعی همونطور که خودتون هم گفتین باید یک پروژه درست کنین و دو تا فایل را در فولدر پروژه قرار دهید و فایل adder 4 بیتی را به عنوان top level معرفی کنید.
          البته غیر از not ها من یه تغییر کوچک هم در تعریف full adder دادم. به اون هم دقت کنید.
          بله همونطور که فرموده بودید متوجه c_outشدم که با کد خودم فرق چندانی نداشت
          ولی متوجه top level که فرمودید نشدم تنظیم خاصی برای اون باید انجام بدم؟
          مردود شدن بهتر از با تقلب قبول شدن است

          دیدگاه


            #6
            پاسخ : مشکل با component

            ببینید وقتی که یه پروژه کامپایل می شه باید یک نقطه شروع داشته باشه که از لحاظ سلسله مراتب اجرایی بالاترین سطح برنامه شما رو مشخص کنه، ممکنه پروژه شما شامل چندین فایل شماتیک ، وریلاگ و vhdl باشه که به صورت خاصی به هم دیگه ارتباط دارن. در حقیقت فایل top level فایلی که بالاترین سطح اجرایی را داره رو مشخص می کنه . برای مقایسه مثلا شما در زبان Cهم همیشه یه تابع main دارین که کامپایل و اجرا از اون شروع میشه . هر چند که می تونین چندین فایل مختلف شامل توابع مختلف داشته باشین.
            برای تنظیمات top level هم هر نرم افزاری تنظیمات خودشو داره. مثلا در quartus به صورت پیش فرض فایلی که همنام اسم پروژه باشه به عنوان top level در نظر گرفته می شه ، هر چند می شه هر فایلی رو به صورت دستی به عنوان top level تعریف کرد.

            دیدگاه

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