اطلاعیه

Collapse
No announcement yet.

عدم سنتز کد VHDL زیر

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

    #16
    پاسخ : عدم سنتز کد VHDL زیر

    یه شیفتر ترکیبی نوشتم که پایه های خروجیش بصورت زیره :
    کد:
          dout : buffer STD_LOGIC_VECTOR (3 downto 0));
    حالا موقع سنتز این خطا رو میده :
    کد:
    Signal dout cannot be synthesized, bad synchronous description. The description style you are using to describe a synchronous element (register, memory, etc.) is not supported in the current software release.
    به نظرتون چیکار کنم ؟
    مردود شدن بهتر از با تقلب قبول شدن است

    دیدگاه


      #17
      پاسخ : عدم سنتز کد VHDL زیر

      یعنی کسی بلد نیس ؟
      مردود شدن بهتر از با تقلب قبول شدن است

      دیدگاه


        #18
        پاسخ : عدم سنتز کد VHDL زیر

        یه جایی اشتباه کردی، کد کاملت رو بذار این طوری نمیشه چیزی گفت.
        لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
        لطفاً سوالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
        با تمام وجود گناه کردیم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنیم چه می کند؟"دکتر شریعتی"
        اگر جایی که ایستاده اید را نمی پسندید، عوضش کنید شما درخت نیستید!! "پاسکال"
        یا به اندازه ی آرزوهایت تلاش کن یا به اندازه تلاشت آرزو کن. "شکسپیر"

        دیدگاه


          #19
          پاسخ : عدم سنتز کد VHDL زیر

          نوشته اصلی توسط هـادی
          یه جایی اشتباه کردی، کد کاملت رو بذار این طوری نمیشه چیزی گفت.
          اینم کد شیفت ترکیبی
          کد:
          library IEEE;
          use IEEE.STD_LOGIC_1164.ALL;
          use ieee.std_logic_arith.all;
          use ieee.std_logic_unsigned.all;
          library UNISIM;
          use UNISIM.VComponents.all;
          
          entity sh_comp is
            Port ( s : in STD_LOGIC_VECTOR (1 downto 0);
                ser_r : in STD_LOGIC;
                ser_l : in STD_LOGIC;
                din : in STD_LOGIC_VECTOR (3 downto 0);
                clk : in STD_LOGIC;
                dout : buffer STD_LOGIC_VECTOR (3 downto 0));
          end sh_comp;
          
          architecture scr of sh_comp is
          signal t:STD_LOGIC_VECTOR(3 downto 0);
          begin
          t<=dout;
          process(clk,s,ser_r,ser_l)
          
          begin
          
          if (clk' event and clk='1' and s="00") then dout(3 downto 0)<=t;
          elsif (clk' event and clk='1' and s="01") then dout(3 downto 0)<=ser_r & t(3 downto 1);
          elsif (clk' event and clk='1' and s="10") then dout(3 downto 0)<=t(2 downto 0)& ser_l;
          elsif (clk' event and clk='1' and s="11") then dout(3 downto 0)<=t(3 downto 0);
          end if;
          
          end process;
          end scr;
          خطای نگارشی نداره ولی سنتز نمیشه
          مردود شدن بهتر از با تقلب قبول شدن است

          دیدگاه


            #20
            پاسخ : عدم سنتز کد VHDL زیر

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

            دیدگاه


              #21
              پاسخ : عدم سنتز کد VHDL زیر

              ورودی din رو تعریف کردی ولی توی پروسس از dout (همونt) استفاده کردی!

              برنامه به شکل زیر اصلاح شد، امیدوارم منظورت همین بوده باشه:
              [code=vhdl]
              process(clk)

              begin
              if rising_edge(clk) then
              case s is
              when "00" =>
              dout <= din;
              when "01" =>
              dout <= ser_r & din(3 downto 1);
              when "10" =>
              dout <= din(2 downto 0) & ser_l;
              when "11" =>
              dout <= din;
              end case;
              end if;
              end process;
              [/code]
              لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
              لطفاً سوالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
              با تمام وجود گناه کردیم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنیم چه می کند؟"دکتر شریعتی"
              اگر جایی که ایستاده اید را نمی پسندید، عوضش کنید شما درخت نیستید!! "پاسکال"
              یا به اندازه ی آرزوهایت تلاش کن یا به اندازه تلاشت آرزو کن. "شکسپیر"

              دیدگاه


                #22
                پاسخ : عدم سنتز کد VHDL زیر

                نوشته اصلی توسط هـادی
                ورودی din رو تعریف کردی ولی توی پروسس از dout (همونt) استفاده کردی!

                برنامه به شکل زیر اصلاح شد، امیدوارم منظورت همین بوده باشه:
                [code=vhdl]
                process(clk)

                begin
                if rising_edge(clk) then
                case s is
                when "00" =>
                dout <= din;
                when "01" =>
                dout <= ser_r & din(3 downto 1);
                when "10" =>
                dout <= din(2 downto 0) & ser_l;
                when "11" =>
                dout <= din;
                end case;
                end if;
                end process;
                [/code]
                این حالت اول و آخرش که یکیه :eek:
                می خوام تو حالت 00 خروجی آخرین مقدار خودش رو حفظ کنه
                می تونید دستور اول رو اصلاح کنید ؟
                مردود شدن بهتر از با تقلب قبول شدن است

                دیدگاه


                  #23
                  پاسخ : عدم سنتز کد VHDL زیر

                  یه کم برنامه رو تغییر دادم ولی باز هم خطای سنتز میده :
                  کد:
                  entity sh_comp is
                    Port ( s : in STD_LOGIC_VECTOR (1 downto 0);
                        ser_r : in STD_LOGIC;
                        ser_l : in STD_LOGIC;
                        din : in STD_LOGIC_VECTOR (3 downto 0);
                        clk : in STD_LOGIC;
                        dout : buffer STD_LOGIC_VECTOR (3 downto 0));
                  end sh_comp;
                  
                  architecture scr of sh_comp is
                  
                  begin
                  
                  process(clk)
                  begin
                  
                  if (clk' event and clk='1' and s="00") then dout<=dout;
                  elsif (clk' event and clk='1' and s="01") then dout(3 downto 0)<=ser_r & dout(3 downto 1);
                  elsif (clk' event and clk='1' and s="10") then dout(3 downto 0)<=dout(2 downto 0)& ser_l;
                  elsif (clk' event and clk='1' and s="11") then dout<=din;
                  end if;
                  
                  end process;
                  end scr;
                  اینم خطای سنتز
                  Signal dout cannot be synthesized, bad synchronous description. The description style you are using to describe a synchronous element (register, memory, etc.) is not supported in the current software release.
                  دیگه دارم کلافه میشم :angry: :angry:
                  نمیدونم dout چه مشکلی داره که ابزار سنتز بهش گیر داده
                  مردود شدن بهتر از با تقلب قبول شدن است

                  دیدگاه


                    #24
                    پاسخ : عدم سنتز کد VHDL زیر

                    چه اصراری داری از این شکل if elsif برای کلاک استفاده کنی؟
                    لازم نیست dout رو توی خودش بریزی، حالتی که میخوای تغییر نکنه توی if نذار، ابزار سنتز خودش یک Latch برای dout درست می کنه که اگه هیچ کدوم از شرایط قبلی اتفاق نیفتاد مقدار قبلیش رو نگه میداره.
                    خط 12 و 13 کد قبلیم رو به این شکل اصلاح کن:
                    [code=vhdl]when others =>
                    null;[/code]
                    لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                    لطفاً سوالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                    با تمام وجود گناه کردیم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنیم چه می کند؟"دکتر شریعتی"
                    اگر جایی که ایستاده اید را نمی پسندید، عوضش کنید شما درخت نیستید!! "پاسکال"
                    یا به اندازه ی آرزوهایت تلاش کن یا به اندازه تلاشت آرزو کن. "شکسپیر"

                    دیدگاه


                      #25
                      پاسخ : عدم سنتز کد VHDL زیر

                      نوشته اصلی توسط هـادی
                      چه اصراری داری از این شکل if elsif برای کلاک استفاده کنی؟
                      لازم نیست dout رو توی خودش بریزی، حالتی که میخوای تغییر نکنه توی if نذار، ابزار سنتز خودش یک Latch برای dout درست می کنه که اگه هیچ کدوم از شرایط قبلی اتفاق نیفتاد مقدار قبلیش رو نگه میداره.
                      خط 12 و 13 کد قبلیم رو به این شکل اصلاح کن:
                      [code=vhdl]when others =>
                      null;[/code]
                      ممنون از اینکه وقت گذاشتید
                      فقط چرا با هر لبه کلاک شیفت انجام نمیشه یعنی اگر s=10 باشه اگر کلاک رخ بده فقط یکبار شیفت انجام میشه و با کلاک بعدی دیتا تغییر نمیکنه ؟
                      در واقع با هر بار لبه بالارونده کلاک بایستی شیفت رو انجام بده ولی برنامه فقط یکبار شیفت رو انجام میده
                      مردود شدن بهتر از با تقلب قبول شدن است

                      دیدگاه


                        #26
                        پاسخ : عدم سنتز کد VHDL زیر

                        تازه متوجه منظورت از برنامه شدم:

                        با کد زیر وقتی مقدار s=00 هست، مقدار شیفت رجیستر از ورودی لود میشه، با 01 و 10 شیفت به چپ یا راست انجام میشه و با 11 شیفت انجام نمیشه.
                        [code=vhdl]
                        architecture scr of sh_comp is
                        signal t:STD_LOGIC_VECTOR(3 downto 0);
                        begin


                        process(clk)

                        begin
                        if rising_edge(clk) then
                        case s is
                        when "00" =>
                        t <= din;
                        when "01" =>
                        t <= ser_r & t(3 downto 1);
                        when "10" =>
                        t <= t(2 downto 0) & ser_l;
                        when others =>
                        null;
                        end case;
                        end if;
                        end process;

                        dout <= t;[/code]
                        لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                        لطفاً سوالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                        با تمام وجود گناه کردیم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنیم چه می کند؟"دکتر شریعتی"
                        اگر جایی که ایستاده اید را نمی پسندید، عوضش کنید شما درخت نیستید!! "پاسکال"
                        یا به اندازه ی آرزوهایت تلاش کن یا به اندازه تلاشت آرزو کن. "شکسپیر"

                        دیدگاه


                          #27
                          پاسخ : عدم سنتز کد VHDL زیر

                          نوشته اصلی توسط هـادی
                          تازه متوجه منظورت از برنامه شدم:

                          با کد زیر وقتی مقدار s=00 هست، مقدار شیفت رجیستر از ورودی لود میشه، با 01 و 10 شیفت به چپ یا راست انجام میشه و با 11 شیفت انجام نمیشه.
                          [code=vhdl]
                          architecture scr of sh_comp is
                          signal t:STD_LOGIC_VECTOR(3 downto 0);
                          begin


                          process(clk)

                          begin
                          if rising_edge(clk) then
                          case s is
                          when "00" =>
                          t <= din;
                          when "01" =>
                          t <= ser_r & t(3 downto 1);
                          when "10" =>
                          t <= t(2 downto 0) & ser_l;
                          when others =>
                          null;
                          end case;
                          end if;
                          end process;

                          dout <= t;[/code]
                          میدونم که خیلی شمارو اذیت کردم ولی نمیدونم چرا این برنامه هم سنتز نمیشه
                          من که پاک کلافه شدم
                          کد:
                          ERROR:Xst:528 - Multi-source in Unit <sh_comp> on signal <dout<3>>; this signal is connected to multiple drivers.
                          ERROR:Xst:528 - Multi-source in Unit <sh_comp> on signal <dout<2>>; this signal is connected to multiple drivers.
                          ERROR:Xst:528 - Multi-source in Unit <sh_comp> on signal <dout<1>>; this signal is connected to multiple drivers.
                          ERROR:Xst:528 - Multi-source in Unit <sh_comp> on signal <dout<0>>; this signal is connected to multiple drivers.
                          مردود شدن بهتر از با تقلب قبول شدن است

                          دیدگاه


                            #28
                            پاسخ : عدم سنتز کد VHDL زیر

                            حتماً جایی اشتباه کردی. یه بار دیگه کل کد رو پاک کن و دوباره بنویس (احتمالاً dout یا t جای دیگه ای هم مقدار گرفته).



                            لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                            لطفاً سوالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                            با تمام وجود گناه کردیم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنیم چه می کند؟"دکتر شریعتی"
                            اگر جایی که ایستاده اید را نمی پسندید، عوضش کنید شما درخت نیستید!! "پاسکال"
                            یا به اندازه ی آرزوهایت تلاش کن یا به اندازه تلاشت آرزو کن. "شکسپیر"

                            دیدگاه


                              #29
                              پاسخ : عدم سنتز کد VHDL زیر

                              نوشته اصلی توسط هـادی
                              حتماً جایی اشتباه کردی. یه بار دیگه کل کد رو پاک کن و دوباره بنویس (احتمالاً dout یا t جای دیگه ای هم مقدار گرفته).



                              خدارو شکر
                              بالاخره جواب داد
                              ممنون از لطف شما که صبوری کردید
                              مردود شدن بهتر از با تقلب قبول شدن است

                              دیدگاه

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