اطلاعیه

Collapse
No announcement yet.

شمارش تعداد بیت های یک در vhdl

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

    شمارش تعداد بیت های یک در vhdl



    سلام خدمت دوستان عزیز و خداقوت



    بنده یه پروژه دارم که عملکرد آن به این شکله

    در صورت یک بودن بیت start،ورودی را گرفته و تعداد بیت های یک آن را بشمارد. سپس در صورت زوج بودن نتیجه، عدد یک و در غیر اینصورت، عدد صفر را به خروجی انتساب دهد. و همین روند تکرار شود.

    میخوام با برنامه modelsim پروژه رو بنویسم

    اگر دوستان لطف کنند به بنده کمک کنند ممنون میشم

    #2
    پاسخ : شمارش تعداد بیت های یک در vhdl

    سلام دوست عزیز
    اگر هدفت فقط مشخص کردن تعداد 1 ها هست که بنظرم از xor استفاده کن
    به این صورت که همه بیت های داده ها رو با هم xor کن که اگر تعداد 1ها زوج باشه صفر میده و اگر فرد باشه 0 میده که میتونی با ی not همون خروجی ای رو که میخوای بسازی .
    MRM

    دیدگاه


      #3
      پاسخ : شمارش تعداد بیت های یک در vhdl

      سلام
      ورودی پرالل هست یا سریال؟
      اگه پارالل باشه همه را به هم xnor کن و بده به خروجی. به عنوان مثال اگه ورودیت چهاربیت موازی هست:

      کد:
      assign out = start ? (in1 ^~ in2 ^~in3 ^~in4) : 1b'0;
      کد به زبان وریلاگ هست!
      اگه سریال وارد میشه با توجه به تعداد بیت های ها یه کانتر بذار یه پکیج ذخیره کن اخرین داده را که گرفتی xnor کن و بده به خروجی.

      دیدگاه


        #4
        پاسخ : شمارش تعداد بیت های یک در vhdl

        ممنون از راهنمایی تون
        نه ورودی رو خودم وارد میکنم یعنی کاربر وارد میکنه

        دیدگاه


          #5
          پاسخ : شمارش تعداد بیت های یک در vhdl

          کدی که قبل از ایجاد تایپیک نوشتم این بود
          ولی خب ارور میده و بنده متوجه نمیشم مشکلش چیه
          کد:
          entity shomaresh is
           port (
            output : out std_logic;
            start: in std_logic ;
            clk: in std_logic ;
            input: in bit_vector (3 downto 0));
          end entity;
          architecture pr_arch of shomaresh is
           begin
            process (clk)
             variable temp : integer range 0 to 3 :=0;
             variable temp2 : integer range 0 to 3 :=0;
             begin
             if(clk'event and clk='1') then
              if (start='1') then
               
               if (input(0)='1') then 
                 temp:=temp+1;
                elsif (input(1)='1') then
                temp:=temp+1;
                elsif (input(2)='1') then
                temp:=temp+1;
                elsif (input(3)='1') then
                temp:=temp+1;
               end if;
               temp2 := temp mod 2;
              
                   output <= '1' when temp2="xxxx" else
                        '0';
              end if;
            end if;
           end process;
          end pr_arch;

          دیدگاه


            #6
            پاسخ : شمارش تعداد بیت های یک در vhdl

            این نمونه کد آسنکرون
            کد:
            entity shomaresh is
             port (
              output : out std_logic;
              start: in std_logic ;
              clk: in std_logic ;
              input: in std_logic_vector (3 downto 0));
            end entity;
            architecture pr_arch of shomaresh is
             begin
              output <= (input(0) xnor input(1) xnor input(2) xnor input(3)) when start = '1' else 'Z';
            end pr_arch;
            اینم نمونه کد سنکرون
            کد:
            entity shomaresh is
             port (
              output : out std_logic;
              start: in std_logic ;
              clk: in std_logic ;
              input: in std_logic_vector (3 downto 0));
            end entity;
            architecture pr_arch of shomaresh is
             begin
              process(clk)
            	 
            		begin
            			if rising_edge(clk) then
            				if start = '1' then
            					output <= input(0) xnor input(1) xnor input(2) xnor input(3);
            				else
            					output <= 'Z';
            				end if;
            			end if;
            	end process;
            end pr_arch;
            هر دوتا کد تست شدن و جواب میدن
            موفق باشید
            MRM

            دیدگاه

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