اطلاعیه

Collapse
No announcement yet.

اشکال برنامه VHDL

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

    اشکال برنامه VHDL

    دوستان به نظر شما اشکال این برنامه 4bit ALU چیه؟؟؟
    کد:
    library IEEE;
    use IEEE.STD_LOGIC_1164.all;
    
    entity bit ALU is
     port(
    		 A : in std_logic_vector(3 downto 0);
    		 B : in std_logic_vector(3 downto 0);
      c_in: in std_logic_vector;
    		 s : in std_logic_vector(1 downto 0);
    		 Y : out std_logic_vector (3 downto 0);
    	   );
    end bit ALU;
    
    architecture arch of bit ALU is
    signal sg1,sg2,sg3,sg4:std_logic_vector(3 downto 0);
        
    begin
     
     for k in 0 to 3 loop
     sg1(k)<=((A(k) xor B(k))xor c_in);
     c_in<=(A(k) and B(k))or((A(k) xor B(k))and C_in)
     
    end loop
     sg2<=A xor B;
     sg3<= A and B;
     sg4<=A or B;
     
     
     Y<= sg1 WHEN S(1)='0' AND S(0)='0' ELSE
       sg2 WHEN S(1)='0' AND S(0)='1' ELSE
       sg3 WHEN S(1)='1' AND S(0)='0' ELSE
    	  sg4 WHEN S(1)='1' AND S(0)='1' ;
    	  
    end bit ALU;
    صبرت که تمام شد نرو!
    "معرفت"
    تازه از آن لحظه آغاز می شود...

    #2
    پاسخ : اشکال برنامه VHDL

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

    دیدگاه


      #3
      پاسخ : اشکال برنامه VHDL

      این ارور رو برنامه میده..
      که به نظر ارتباطی به برنامه نداره!!!!
      چیکار باید کرد...
      صبرت که تمام شد نرو!
      "معرفت"
      تازه از آن لحظه آغاز می شود...

      دیدگاه


        #4
        پاسخ : اشکال برنامه VHDL

        نوشته اصلی توسط RoboRazi
        این ارور رو برنامه میده..
        که به نظر ارتباطی به برنامه نداره!!!!
        چیکار باید کرد...
        مهندس برنامت اشکال داره.
        توی نوشتن port آخرین statement رو نباید از ';' استفاده کنی

        دیدگاه


          #5
          پاسخ : اشکال برنامه VHDL

          یک نکته دیگه هم که توی کدت وجود داره در مورد type متغییر c_in هست. شما اگر منظورت این هست که سایز c_in یک هست، باید از std_logic استفاده کنی نه std_logic_vector

          دیدگاه


            #6
            پاسخ : اشکال برنامه VHDL

            اگر به خطا توجه کنید میبینید که تو خط 4 ایراد وجود داره. (عدد نوشته شده توی پارانتز)

            اسمی که انتخاب کردید برای entity درست نیست. نباید فاصله داشته باشه. بنویسید bit_adder البته تو همه قسمتهای کد.
            به توضیحات بقیه دوستان هم توجه کنید.
            یا علی.

            دیدگاه


              #7
              پاسخ : اشکال برنامه VHDL

              از تمامی دوستان برای راهنمایی هاشون نهایت تشکر وقدردانی را دارم
              البته یه مشکل دیگه هم دارم
              می خوام برنامه decoder 4x16 با دوتاdecoder 3x8 رو با VHDl بنویسم ولی مثل قبل ارور میده...
              لطفا راهنمایی کنید
              کد:
              library ieee;
              use ieee.std_logic_1164.all;
              entity decoder is
               port(a :in std_logic_vector(3 downto 0);
                  b:out std_logic_vector(15 downto 0)
                  );
              end decoder;
              architecture arch of decoder is
              begin
              if (a(3)='0') then
              with a select
                b(0)<="1" when "0000";
                b(1)<="1" when "0001";
                b(2)<="1" when "0010";
                b(3)<="1" when "0011";
                b(4)<="1" when "0100";
                b(5)<="1" when "0101";
                b(6)<="1" when "0110";
                b(7)<="1" when "0111";
               else
                with a select
                b(8)<="1" when "1000";
                b(9)<="1" when "1001";
                b(10)<="1" when "1010";
                b(11)<="1" when "1011";
                b(12)<="1" when "1100";
                b(13)<="1" when "1101";
                b(14)<="1" when "1110";
                b(15)<="1" when "1111";
               end if;
               end arch;
              صبرت که تمام شد نرو!
              "معرفت"
              تازه از آن لحظه آغاز می شود...

              دیدگاه


                #8
                پاسخ : اشکال برنامه VHDL

                نوشته اصلی توسط RoboRazi
                از تمامی دوستان برای راهنمایی هاشون نهایت تشکر وقدردانی را دارم
                البته یه مشکل دیگه هم دارم
                می خوام برنامه decoder 4x16 با دوتاdecoder 3x8 رو با VHDl بنویسم ولی مثل قبل ارور میده...
                لطفا راهنمایی کنید
                کد:
                library ieee;
                use ieee.std_logic_1164.all;
                entity decoder is
                 port(a :in std_logic_vector(3 downto 0);
                    b:out std_logic_vector(15 downto 0)
                    );
                end decoder;
                architecture arch of decoder is
                begin
                if (a(3)='0') then
                with a select
                  b(0)<="1" when "0000";
                  b(1)<="1" when "0001";
                  b(2)<="1" when "0010";
                  b(3)<="1" when "0011";
                  b(4)<="1" when "0100";
                  b(5)<="1" when "0101";
                  b(6)<="1" when "0110";
                  b(7)<="1" when "0111";
                 else
                  with a select
                  b(8)<="1" when "1000";
                  b(9)<="1" when "1001";
                  b(10)<="1" when "1010";
                  b(11)<="1" when "1011";
                  b(12)<="1" when "1100";
                  b(13)<="1" when "1101";
                  b(14)<="1" when "1110";
                  b(15)<="1" when "1111";
                 end if;
                 end arch;
                مهندس برنامت ایراد اساسی داره! یک اینکه توی بدنه concurrent اصلا از if نمیتونی استفاده کنی باید یا به صورت conditional signal assignment بنویسیش و یا به صورت selected signal assignment. دوم اینکه وقتی میخوای بک مقدار یک بیتی رو به یک std_logic بدی باید از ' استفاده کنی نه از " ! این ها جیزهایی بود که توجهم رو جلب کرد این ها رو درست کن ببین درست میشه یا نه

                دیدگاه


                  #9
                  پاسخ : اشکال برنامه VHDL

                  ممنون از نظرتون آقا محمد....
                  ولی در مورد if نمیشه از conditional signal assignment/selected استفاده کرد چون اون موقه دیگه نمیشه دیکدر 4x16 رو با دوتا دیکدر 3x8 طراحی کرد!!!!
                  نظرتون چیه؟؟راه حلی دارید؟؟؟
                  صبرت که تمام شد نرو!
                  "معرفت"
                  تازه از آن لحظه آغاز می شود...

                  دیدگاه


                    #10
                    پاسخ : اشکال برنامه VHDL

                    چرا از پروسس استفاده نمی کنی؟
                    کد PHP:
                    process(a)

                    begin
                     
                    case a is
                     when 
                    "0000" =>
                      
                    b(0) <= '1';
                     
                    when "0001" =>
                      
                    b(1) <= '1';
                    ...
                     
                    when others =>
                      
                    null;
                     
                    end case
                    end process

                    این طوری که شما نوشتی یک مشکل دیگه هم که داره اینه که وقتی مثلاً "a = "0000 باشه مقدار (b(0 مشخصه ولی در غیر این صورت مقدارش نامعلومه که قابل قبول نیست(قابل سنتز نیست).
                    لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                    لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                    با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                    اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                    يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                    دیدگاه


                      #11
                      پاسخ : اشکال برنامه VHDL

                      ممنون از نظرتون آقا هادی ...
                      خودمم برنامه رو به این شکل تغییر دادم ولی بازم ارور میده...
                      ولی این برنامه و برنامه ای که شما گفتید برای دیکدر 4x16 درسته ولی همین دیکدر رو با دوتا دیکدر 3x8طراحی کنی متفاوته.....!
                      کد:
                      library ieee;
                      use ieee.std_logic_1164.all;
                      entity decoder is
                       port(a :in std_logic_vector(3 downto 0);
                          b:out std_logic_vector(15 downto 0)
                          );
                      end decoder;
                      architecture arch of decoder is
                      begin
                      with a select
                        b <= "0000000000000001" when "0000",
                           "0000000000000010" when "0001",
                           "0000000000000100" when "0010",
                           "0000000000001000" when "0011",
                           "0000000000010000" when "0100",
                           "0000000000100000" when "0101",
                           "0000000001000000" when "0110",
                           "0000000010000000" when "0111",
                           "0000000100000000" when "1000",
                           "0000001000000000" when "1001",
                           "0000010000000000" when "1010",
                           "0000100000000000" when "1011",
                           "0001000000000000" when "1100",
                           "0010000000000000" when "1101",
                           "0100000000000000" when "1110",
                           "1000000000000000" when "1111";
                       end arch;
                      صبرت که تمام شد نرو!
                      "معرفت"
                      تازه از آن لحظه آغاز می شود...

                      دیدگاه


                        #12
                        پاسخ : اشکال برنامه VHDL

                        آخرین خط select with باید when others رو هم اضافه کنی. نوع std_logic میتونه علاوه بر '0' و '1' مقادیر '-' 'L' 'H' 'X' 'U' 'Z' هم داشته باشه به همین خاطر لازمه others هم اضافه بشه.
                        در ضمن برنامه شما از دو تا دیکدر 3x8 استفاده نکرده. من یکم فکر کردم دیدم با یه دیکدر 3x8 به صورت زیر هم میشه نوشت:
                        کد PHP:
                        entity decoder3x8 is
                          Port 
                        input in STD_LOGIC_VECTOR (2 downto 0);
                              
                        output out STD_LOGIC_VECTOR (7 downto 0));
                        end decoder3x8;

                        architecture bh of decoder3x8 is

                        begin

                        with input select
                          output 
                        <= "00000001&quotwhen "000",
                                         &
                        quot;00000010&quotwhen "001",
                                         &
                        quot;00000100&quotwhen "010",
                                         &
                        quot;00001000&quotwhen "011",
                                         &
                        quot;00010000&quotwhen "100",
                                         &
                        quot;00100000&quotwhen "101",
                                         &
                        quot;01000000&quotwhen "110",
                                         &
                        quot;10000000&quotwhen "111",
                                         &
                        quot;00000000&quotwhen others;

                        end bh

                        و تاپ ماژولش هم این طوری:
                        کد PHP:
                        entity decoder4x16 is
                          Port 
                        inp in STD_LOGIC_VECTOR (3 downto 0);
                              
                        outp out STD_LOGIC_VECTOR (15 downto 0));
                        end decoder4x16;

                        architecture bh of decoder4x16 is
                            component decoder3x8 
                                 Port 
                        input in STD_LOGIC_VECTOR (2 downto 0);
                                         
                        output out STD_LOGIC_VECTOR (7 downto 0));
                            
                        end component;
                            
                        signal outp_d STD_LOGIC_VECTOR (7 downto 0);
                            
                        constant z8 STD_LOGIC_VECTOR (7 downto 0) := "00000000";
                        begin

                            decoder3x8_1
                        decoder3x8 Port map (
                                
                        input =&gtinp(2 downto 0),
                                
                        output =&gtoutp_d(7 downto 0)
                                );
                            
                        with inp(3select
                                outp 
                        <= z8 &ampoutp_d when '0',
                                         
                        outp_d &ampz8 when '1',
                                         
                        z8 &ampz8 when others;
                        end bh
                        لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                        لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                        با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                        اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                        يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                        دیدگاه


                          #13
                          پاسخ : اشکال برنامه VHDL

                          ممنون آقا هادی....
                          ولی من برنامه مالتی پلکسر 4*16 رو با دوتا مالتی پلکسر 3*8 میخوام
                          به نظرتون میشه با if فعال ساز مالتی پلکسر 3*8 قرار داد بعد داخل هر if از case استفاده کنیم؟
                          صبرت که تمام شد نرو!
                          "معرفت"
                          تازه از آن لحظه آغاز می شود...

                          دیدگاه

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