اطلاعیه

Collapse
No announcement yet.

یک سوال در مورد vhdl

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

    یک سوال در مورد vhdl

    سلام دوستان

    من آرایه ای در VHDL تعریف کردم در قسمت package به صورت زیر:

    type u is array (0 to 1500) of real;

    بعد در داخل برنامه U را به صورت زیر مقدار دهی کردم:

    for i in 1 to N loop

    u(i) := 1.0;

    end loop;



    ولی هر چی اجرا می کنم خطای زیر رو می گیرم، کسی میدونه اشکال کار من کجاست؟ چون syntax error نداره!


    ERROR:HDLParsers:854: The expression can not be converted to type u

    حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

    #2
    پاسخ : یک سوال در مورد vhdl

    نوشته اصلی توسط electronics
    سلام دوستان

    من آرایه ای در VHDL تعریف کردم در قسمت package به صورت زیر:

    type u is array (0 to 1500) of real;

    بعد در داخل برنامه U را به صورت زیر مقدار دهی کردم:

    for i in 1 to N loop

    u(i) := 1.0;

    end loop;



    ولی هر چی اجرا می کنم خطای زیر رو می گیرم، کسی میدونه اشکال کار من کجاست؟ چون syntax error نداره!


    ERROR:HDLParsers:854: The expression can not be converted to type u
    سلام،
    عدد N باید Constant باشه و نباید تغییر پذیر باشه. در ضمن عضو اول آرایه رو هم از دست دادین. مشکل اصلی هم سر اینه که خود تایپ رو نوشتین، در صورتی که باید متغییری رو از نوع U تعریف کنید و اون رو در حلقه مقدار دهی کنید.
    اسمایل، تومورو ویل بی وُرس

    دیدگاه


      #3
      پاسخ : یک سوال در مورد vhdl

      سلام،
      عدد N باید Constant باشه و نباید تغییر پذیر باشه. در ضمن عضو اول آرایه رو هم از دست دادین. مشکل اصلی هم سر اینه که خود تایپ رو نوشتین، در صورتی که باید متغییری رو از نوع U تعریف کنید و اون رو در حلقه مقدار دهی کنید.
      یعنی باید یک متغییر از نوع آرایه تعریف کنم؟
      حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

      دیدگاه


        #4
        پاسخ : یک سوال در مورد vhdl

        نوشته اصلی توسط electronics
        یعنی باید یک متغییر از نوع آرایه تعریف کنم؟

        type u is array (0 to 1500) of real;
        variable myArray : u;
        اسمایل، تومورو ویل بی وُرس

        دیدگاه


          #5
          پاسخ : یک سوال در مورد vhdl

          حالا سوالی دیگر؟

          دنباله ای از اعداد داخل یک حلقه for ایجاد شده

          می خواهیم این عددها(این عددها یک شکل موج رو تخمین می زنند) را روی اسکوپ نشون بدیم. یک دونه dac0800 هم روی برد FPGA

          موجود هست.

          حالا چطور این اعداد می تونند به خارج منتقل بشوند چون FPGA فقط صفر و یک توی خروجی میده؟

          با تشکر

          حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

          دیدگاه


            #6
            پاسخ : یک سوال در مورد vhdl

            نوشته اصلی توسط electronics
            حالا سوالی دیگر؟

            دنباله ای از اعداد داخل یک حلقه for ایجاد شده

            می خواهیم این عددها(این عددها یک شکل موج رو تخمین می زنند) را روی اسکوپ نشون بدیم. یک دونه dac0800 هم روی برد FPGA

            موجود هست.

            حالا چطور این اعداد می تونند به خارج منتقل بشوند چون FPGA فقط صفر و یک توی خروجی میده؟

            با تشکر
            اگه درست متوجه شده باشم شما قصد دارید سیگنالی با استفاده از DAC به صورت آنالوگ ایجاد کنید که داده های دیجیتالی DAC رو میخواید از FPGA بگیرید.
            برای نمونه اگه DAC شما 8 بیتی هست(D0 تا D7) باید 8 پایه FPGA رو به صورت output تعریف کنید که به پایههای داده DAC وصل باشن.
            اون اطلاعات شکل موج رو که گفتین هم که در یک آرایه هست، میمونه سمپل ریتتون که اون رو کلاک ورودی به ماژولتون تعیین میکنه( کلاک ورودی به پروسسی که قراره مثلا اطلاعات آرایه رو روی لبه بالا رونده کلاک، روی خروجی قرار بده، خروجی هم که به DAC وصله).

            این کدی که براتون میذارم مبدل عدد ده دهی به کد BCD هست که برای نمایشگرهای 7Segment به کار میره، همین رو میتونید تبدیل کنید به چیزی که میخواید، البته کمی تغییرات لازم داره، مثلا این مدار ترکیبیه و چیزی که شما لازم دارین مدار ترتیبیه، یعنی کلاک لازم داره تا اعداد رو دونه دونه بده بیرون، میشه همین رو هم استفاده کرد و در بخش ورودی این مدار، ورودی رو (همون ایندکس آرایه) به ترتیب داد، با کلاک مجزا.

            --On Cyclone-II Starter Kit
            --Author: Amir Shahram Hematian
            --Date&Time: 2010/Nov/19 11:32

            library ieee;
            use ieee.std_logic_1164.all;
            use ieee.numeric_std.all;

            entity L7SEG_Controller is
            port (
            DIGIT_1_IN,
            DIGIT_2_IN,
            DIGIT_3_IN,
            DIGIT_4_IN : in integer range 0 to 15;
            SEVEN_SEGMENT_1_OUT,
            SEVEN_SEGMENT_2_OUT,
            SEVEN_SEGMENT_3_OUT,
            SEVEN_SEGMENT_4_OUT : out STD_LOGIC_VECTOR (6 downto 0)
            );
            end L7SEG_Controller;


            architecture L7SEG_Controller_Function of L7SEG_Controller is
            type Stream is array(0 to 15) of STD_LOGIC_VECTOR(7 downto 0);
            constant Seven_Segment_Data_Stream : Stream := ( x"40",
            x"F9",
            x"A4",
            x"B0",
            x"99",
            x"92",
            x"02",
            x"F8",
            x"00",
            x"10",
            x"08",
            x"03",
            x"46",
            x"21",
            x"06",
            x"0E"
            begin
            SEVEN_SEGMENT_1_OUT(0) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(0);
            SEVEN_SEGMENT_1_OUT(1) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(1);
            SEVEN_SEGMENT_1_OUT(2) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(2);
            SEVEN_SEGMENT_1_OUT(3) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(3);
            SEVEN_SEGMENT_1_OUT(4) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(4);
            SEVEN_SEGMENT_1_OUT(5) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(5);
            SEVEN_SEGMENT_1_OUT(6) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(6);

            SEVEN_SEGMENT_2_OUT(0) <= Seven_Segment_Data_Stream(DIGIT_2_IN)(0);
            SEVEN_SEGMENT_2_OUT(1) <= Seven_Segment_Data_Stream(DIGIT_2_IN)(1);
            SEVEN_SEGMENT_2_OUT(2) <= Seven_Segment_Data_Stream(DIGIT_2_IN)(2);
            SEVEN_SEGMENT_2_OUT(3) <= Seven_Segment_Data_Stream(DIGIT_2_IN)(3);
            SEVEN_SEGMENT_2_OUT(4) <= Seven_Segment_Data_Stream(DIGIT_2_IN)(4);
            SEVEN_SEGMENT_2_OUT(5) <= Seven_Segment_Data_Stream(DIGIT_2_IN)(5);
            SEVEN_SEGMENT_2_OUT(6) <= Seven_Segment_Data_Stream(DIGIT_2_IN)(6);

            SEVEN_SEGMENT_3_OUT(0) <= Seven_Segment_Data_Stream(DIGIT_3_IN)(0);
            SEVEN_SEGMENT_3_OUT(1) <= Seven_Segment_Data_Stream(DIGIT_3_IN)(1);
            SEVEN_SEGMENT_3_OUT(2) <= Seven_Segment_Data_Stream(DIGIT_3_IN)(2);
            SEVEN_SEGMENT_3_OUT(3) <= Seven_Segment_Data_Stream(DIGIT_3_IN)(3);
            SEVEN_SEGMENT_3_OUT(4) <= Seven_Segment_Data_Stream(DIGIT_3_IN)(4);
            SEVEN_SEGMENT_3_OUT(5) <= Seven_Segment_Data_Stream(DIGIT_3_IN)(5);
            SEVEN_SEGMENT_3_OUT(6) <= Seven_Segment_Data_Stream(DIGIT_3_IN)(6);

            SEVEN_SEGMENT_4_OUT(0) <= Seven_Segment_Data_Stream(DIGIT_4_IN)(0);
            SEVEN_SEGMENT_4_OUT(1) <= Seven_Segment_Data_Stream(DIGIT_4_IN)(1);
            SEVEN_SEGMENT_4_OUT(2) <= Seven_Segment_Data_Stream(DIGIT_4_IN)(2);
            SEVEN_SEGMENT_4_OUT(3) <= Seven_Segment_Data_Stream(DIGIT_4_IN)(3);
            SEVEN_SEGMENT_4_OUT(4) <= Seven_Segment_Data_Stream(DIGIT_4_IN)(4);
            SEVEN_SEGMENT_4_OUT(5) <= Seven_Segment_Data_Stream(DIGIT_4_IN)(5);
            SEVEN_SEGMENT_4_OUT(6) <= Seven_Segment_Data_Stream(DIGIT_4_IN)(6);

            end L7SEG_Controller_Function;

            موفق باشید.
            اسمایل، تومورو ویل بی وُرس

            دیدگاه


              #7
              پاسخ : یک سوال در مورد vhdl

              ببخشید دوست عزیز

              کلیات برنامه شما را متوجه شدم

              فقط؟

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

              constant Seven_Segment_Data_Stream : Stream := ( x"40",
              x"F9",
              x"A4",
              x"B0",
              x"99",
              x"92",
              x"02",
              x"F8",
              x"00",
              x"10",
              x"08",
              x"03",
              x"46",
              x"21",
              x"06",
              x"0E"
              begin
              SEVEN_SEGMENT_1_OUT(0) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(0);
              واینکه جمله زیر را برای بنده توضیح بدید(البته اگر امکان داره)

              Seven_Segment_Data_Stream(DIGIT_1_IN)(0)

              از لطف شما دوست خوبم متشکرم
              حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

              دیدگاه


                #8
                پاسخ : یک سوال در مورد vhdl

                نوشته اصلی توسط electronics
                ببخشید دوست عزیز

                کلیات برنامه شما را متوجه شدم

                فقط؟

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

                واینکه جمله زیر را برای بنده توضیح بدید(البته اگر امکان داره)

                Seven_Segment_Data_Stream(DIGIT_1_IN)(0)

                از لطف شما دوست خوبم متشکرم
                - Seven_Segment_Data_Stream که آرایه داده هاست که اعداد BCD رو نگه میداره.

                - DIGIT_1_IN ایندکس آرایه هست که تعیین میکنه کدوم عدد BCD باید در خروجی ظاهر بشه، مثلا برای عدد 0 عضو اول یعنی 0x40 باید به خروجی بره، البته این کد Low Active هست، یعنی هر بیتی که در عدد 0x40 صفر است در 7segment روشنه و هر بیت 1 در 7segment خاموشه. مثلا اگر بخوام عدد 1390 رو روی 4 7segment نمایش بدم،
                DIGIT_1_IN = 1
                DIGIT_2_IN = 3
                DIGIT_3_IN = 9
                DIGIT_4_IN = 0
                که DIGIT_1_IN به عضو دوم در آرایه اشاره میکنه.

                - در بخش آخر هم باید عضو انتخابی به صورت بیت به بیت به پایه های FPGA بره، پس باید اونها رو با هر ترتیبی که مورد نظرم هست به خروجی بدم، اینجا من ترتیب ارزش بیتها رو اینطور در نظر گرفتم، بیت 0 کمترین ارزش رو داره و بیت 6 بیشترین ارزش.
                پس برای SEVEN_SEGMENT_1_OUT که خروجی هست و هر بیتش متصل به یک پایه میشه در تعریف بیرونیش، باید Bit order رعایت بشه،

                SEVEN_SEGMENT_1_OUT(0) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(0);
                SEVEN_SEGMENT_1_OUT(1) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(1);
                SEVEN_SEGMENT_1_OUT(2) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(2);
                SEVEN_SEGMENT_1_OUT(3) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(3);
                SEVEN_SEGMENT_1_OUT(4) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(4);
                SEVEN_SEGMENT_1_OUT(5) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(5);
                SEVEN_SEGMENT_1_OUT(6) <= Seven_Segment_Data_Stream(DIGIT_1_IN)(6);

                که Seven_Segment_Data_Stream(DIGIT_1_IN)(0 به بیت اول از عضوی اشاره میکنه که ایندکس DIGIT_1_IN اون رو انتخاب کرده. مثلا در مثال بالا که DIGIT_1_IN = 1 ، یعنی عضو دوم آرایه، اون بیت برابر 1 است. در ضمن من تعداد بیتهای عضو هر آرایه رو از 0 تا 7 در نظر گرفنم تا بتونم به صورت x"40 اعداد رو بنویسم، یعنی به صورت هگز.
                اسمایل، تومورو ویل بی وُرس

                دیدگاه


                  #9
                  پاسخ : یک سوال در مورد vhdl

                  سلام

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

                  به پایه های مورد نظر خروجی بدم.

                  درسته؟

                  ولی از کجا بدونم هر عدد چند بیته؟ چون مهم اینه که هر عدد با مقدار 255(128- تا 128) نرمالیزه بشه چون DAC 0800 فقط 8 تا ورودی داره

                  در واقع من به دنبال دستوری هستم که یک عدد حقیقی رو به آرایه ای از بیت ها (8 بیت) تبدیل کنه. تابتونم بیت ها رو تک تک و به ترتیب

                  ارزش به مبدل dac بدم.

                  خیلی ممنون از راهنمایی شما
                  حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

                  دیدگاه


                    #10
                    پاسخ : یک سوال در مورد vhdl

                    نوشته اصلی توسط electronics
                    سلام

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

                    به پایه های مورد نظر خروجی بدم.

                    درسته؟

                    ولی از کجا بدونم هر عدد چند بیته؟ چون مهم اینه که هر عدد با مقدار 255(128- تا 128) نرمالیزه بشه چون DAC 0800 فقط 8 تا ورودی داره

                    در واقع من به دنبال دستوری هستم که یک عدد حقیقی رو به آرایه ای از بیت ها (8 بیت) تبدیل کنه. تابتونم بیت ها رو تک تک و به ترتیب

                    ارزش به مبدل dac بدم.

                    خیلی ممنون از راهنمایی شما
                    سلام،
                    در مورد تبدیل عدد ده دهی به باینری که قابل اتصال به پایه ها باشن باید چند کار انجام بشه، اولین و مهمترینش Latch هست که عددتون رو روی پایه ها نگه داره، این کار رو با STD_LOGIC_VECTOR انجام میدین، وقتی متغییری رو از این جنس در کدتون نعریف میکنید و در PinPlanner مشخص میکنید که هر بیت این متغییر به کدوم پایه متصل هست، خود Synthesizer به صورت خودکار براش D-FF میذاره که نقش همون Latch رو بازی میکنه، البته اگه با کلاک مقدار میگیره.
                    حالا برای مقدار دهی این رجیستر یا همون Latch، باید یک متغییر دیگه این متغییر رو پدیت کنه، برای این کار اون رجیستر ممکنه عدد و یا هر داده ای رو ذخیره کرده باشه و ما به صورت بیتی یا همون باینری میخوایم روی پایه ها عددمون رو داشته باشیم، برای اینکار هم چندین روش وجود داره، یکیش اینه که عددتون رو به صورت Integer تعریف کنید، هر عمل ریاضی که لازمه انجام بدید، بعد با استفاده از فانکشن to_unsigned عددتون رو به یک UNSIGNED تبدیل کنید، در آخر هم هر بیت UNSIGNED رو در هر بیت STD_LOGIC ها بریزید.
                    اسمایل، تومورو ویل بی وُرس

                    دیدگاه


                      #11
                      پاسخ : یک سوال در مورد vhdl

                      برای مقدار دهی این رجیستر یا همون Latch، باید یک متغییر دیگه این متغییر رو پدیت کنه، برای این کار اون رجیستر ممکنه عدد و یا هر داده ای رو ذخیره کرده باشه و ما به صورت بیتی یا همون باینری میخوایم روی پایه ها عددمون رو داشته باشیم، برای اینکار هم چندین روش وجود داره، یکیش اینه که عددتون رو به صورت Integer تعریف کنید، هر عمل ریاضی که لازمه انجام بدید، بعد با استفاده از فانکشن to_unsigned عددتون رو به یک UNSIGNED تبدیل کنید، در آخر هم هر بیت UNSIGNED رو در هر بیت STD_LOGIC ها بریزید.
                      میشه راههای دیگه رو هم بگید

                      آخه داده های من هم حقیقی هستند و هم میتونند منفی باشند :smile:
                      حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

                      دیدگاه


                        #12
                        پاسخ : یک سوال در مورد vhdl

                        نوشته اصلی توسط electronics
                        میشه راههای دیگه رو هم بگید

                        آخه داده های من هم حقیقی هستند و هم میتونند منفی باشند :smile:
                        برای مقادیر منفی هم این روش درسته، کافیه Integer range -128 to 127 در نظر بگیرید، برای تبدیلش به 0 تا 255 کافیه عدد اول رو به اضافه 128 بکنید و حاصلش رو در یک Integer range 0 to 255 بریزید، آخر سر عدد دوم رو به UNSIGNED تبدیل کنید و به خروجی بدید. برای مقادیر اعشاری هم باید اول دقت لازم رو تعیین کنید، مثلا دقت تا دو رقم اعشار، اونوقت همه نمونه های اولیه رو در 100 ضرب کنید تا از حالت اعشاری خارج شن و بشه در Integer قرار بگیرن، بعد اگر فقط قسمت Integer عدد حقیقیتون رو خواستید، عدد آخر رو تقسیم بر 100 میکنید، و اگر دو رقم اعشاریش رو خواستید، بخش Integer عدد حقیقیتون رو در 100 ضرب کرده و از عدد آخر کم میکنید.
                        همونطور که میدونید، Cos زاویه، عددیست بین 1+ و 1-، برای استفاده از Cos در FPGA یکی از روشها روش زیره که با 3 رقم اعشار Cos زاویه Teta رو حساب میکنه، در حقیقت عددی بین 1000+ و 1000- میده که اگه کاربر اون دقت رو لازم نداشته باشه میتونه اون دقت رو حذف کنه.

                        --On Cyclone-II Starter Kit
                        --Author: Amir Shahram Hematian
                        --Date&Time: 2010/Nov/19 11:32

                        library ieee;
                        use ieee.std_logic_1164.all;
                        use ieee.numeric_std.all;

                        entity Cos is
                        port (
                        COS_TETA : IN INTEGER RANGE 0 TO 359;
                        COS_OUTPUT : OUT INTEGER RANGE -1000 TO 1000
                        );
                        end Cos;


                        architecture Cos_Function of Cos is
                        type Cos_Table_Type is array(0 to 359) of integer range -1000 to 1000;
                        constant Cos_Table : Cos_Table_Type := (
                        1000,
                        1000,
                        999,
                        999,
                        998,
                        996,
                        995,
                        993,
                        990,
                        988,
                        985,
                        982,
                        978,
                        974,
                        970,
                        966,
                        961,
                        956,
                        951,
                        946,
                        940,
                        934,
                        927,
                        921,
                        914,
                        906,
                        899,
                        891,
                        883,
                        875,
                        866,
                        857,
                        848,
                        839,
                        829,
                        819,
                        809,
                        799,
                        788,
                        777,
                        766,
                        755,
                        743,
                        731,
                        719,
                        707,
                        695,
                        682,
                        669,
                        656,
                        643,
                        629,
                        616,
                        602,
                        588,
                        574,
                        559,
                        545,
                        530,
                        515,
                        500,
                        485,
                        469,
                        454,
                        438,
                        423,
                        407,
                        391,
                        375,
                        358,
                        342,
                        326,
                        309,
                        292,
                        276,
                        259,
                        242,
                        225,
                        208,
                        191,
                        174,
                        156,
                        139,
                        122,
                        105,
                        87,
                        70,
                        52,
                        35,
                        17,
                        0,
                        -17,
                        -35,
                        -52,
                        -70,
                        -87,
                        -105,
                        -122,
                        -139,
                        -156,
                        -174,
                        -191,
                        -208,
                        -225,
                        -242,
                        -259,
                        -276,
                        -292,
                        -309,
                        -326,
                        -342,
                        -358,
                        -375,
                        -391,
                        -407,
                        -423,
                        -438,
                        -454,
                        -469,
                        -485,
                        -500,
                        -515,
                        -530,
                        -545,
                        -559,
                        -574,
                        -588,
                        -602,
                        -616,
                        -629,
                        -643,
                        -656,
                        -669,
                        -682,
                        -695,
                        -707,
                        -719,
                        -731,
                        -743,
                        -755,
                        -766,
                        -777,
                        -788,
                        -799,
                        -809,
                        -819,
                        -829,
                        -839,
                        -848,
                        -857,
                        -866,
                        -875,
                        -883,
                        -891,
                        -899,
                        -906,
                        -914,
                        -921,
                        -927,
                        -934,
                        -940,
                        -946,
                        -951,
                        -956,
                        -961,
                        -966,
                        -970,
                        -974,
                        -978,
                        -982,
                        -985,
                        -988,
                        -990,
                        -993,
                        -995,
                        -996,
                        -998,
                        -999,
                        -999,
                        -1000,
                        -1000,
                        -1000,
                        -999,
                        -999,
                        -998,
                        -996,
                        -995,
                        -993,
                        -990,
                        -988,
                        -985,
                        -982,
                        -978,
                        -974,
                        -970,
                        -966,
                        -961,
                        -956,
                        -951,
                        -946,
                        -940,
                        -934,
                        -927,
                        -921,
                        -914,
                        -906,
                        -899,
                        -891,
                        -883,
                        -875,
                        -866,
                        -857,
                        -848,
                        -839,
                        -829,
                        -819,
                        -809,
                        -799,
                        -788,
                        -777,
                        -766,
                        -755,
                        -743,
                        -731,
                        -719,
                        -707,
                        -695,
                        -682,
                        -669,
                        -656,
                        -643,
                        -629,
                        -616,
                        -602,
                        -588,
                        -574,
                        -559,
                        -545,
                        -530,
                        -515,
                        -500,
                        -485,
                        -469,
                        -454,
                        -438,
                        -423,
                        -407,
                        -391,
                        -375,
                        -358,
                        -342,
                        -326,
                        -309,
                        -292,
                        -276,
                        -259,
                        -242,
                        -225,
                        -208,
                        -191,
                        -174,
                        -156,
                        -139,
                        -122,
                        -105,
                        -87,
                        -70,
                        -52,
                        -35,
                        -17,
                        0,
                        17,
                        35,
                        52,
                        70,
                        87,
                        105,
                        122,
                        139,
                        156,
                        174,
                        191,
                        208,
                        225,
                        242,
                        259,
                        276,
                        292,
                        309,
                        326,
                        342,
                        358,
                        375,
                        391,
                        407,
                        423,
                        438,
                        454,
                        469,
                        485,
                        500,
                        515,
                        530,
                        545,
                        559,
                        574,
                        588,
                        602,
                        616,
                        629,
                        643,
                        656,
                        669,
                        682,
                        695,
                        707,
                        719,
                        731,
                        743,
                        755,
                        766,
                        777,
                        788,
                        799,
                        809,
                        819,
                        829,
                        839,
                        848,
                        857,
                        866,
                        875,
                        883,
                        891,
                        899,
                        906,
                        914,
                        921,
                        927,
                        934,
                        940,
                        946,
                        951,
                        956,
                        961,
                        966,
                        970,
                        974,
                        978,
                        982,
                        985,
                        988,
                        990,
                        993,
                        995,
                        996,
                        998,
                        999,
                        999,
                        1000

                        );
                        begin

                        COS_OUTPUT <= Cos_Table(COS_TETA);

                        end Cos_Function;

                        اسمایل، تومورو ویل بی وُرس

                        دیدگاه


                          #13
                          پاسخ : یک سوال در مورد vhdl

                          سلام

                          من قسمت زیر رو نفهمیدم

                          برای مقادیر منفی هم این روش درسته، کافیه Integer range -128 to 127 در نظر بگیرید، برای تبدیلش به 0 تا 255 کافیه عدد اول رو به اضافه 128 بکنید و حاصلش رو در یک Integer range 0 to 255 بریزید، آخر سر عدد دوم رو به UNSIGNED تبدیل کنید و به خروجی بدید
                          و دیگه اینکه اون تابع to_unsigned رو اگر میشه قرار بدید

                          با عرض معذرت و تشکر
                          حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

                          دیدگاه


                            #14
                            پاسخ : یک سوال در مورد vhdl

                            نوشته اصلی توسط electronics
                            سلام

                            من قسمت زیر رو نفهمیدم

                            و دیگه اینکه اون تابع to_unsigned رو اگر میشه قرار بدید

                            با عرض معذرت و تشکر
                            سلام،
                            خواهش میکنم،
                            در جواب بخش اول، دو متغییر، اولی علامت دار و دومی بدون علامت از جنس Integer تعریف میکنید، برای تبدیل رنج عدد 128- تا 127 و دادن اون به DAC باید عددتون بین 0 تا 255 باشه، یعنی بدون علامت، پس متغییر علامت دار رو به اضافه 128 میکنید و در متغییر بدون علامت ذخیره میکنید، در جواب بخش دوم، حالا برای اینکه عدد Integer رو بخ پایه ها بدین کافیه:

                            SEVEN_SEGMENT_1_OUT(0) = to_unsigned(uInt, 8)(0);
                            که uInt به این صورت تعریف میشه:
                            uInt : IN INTEGER RANGE 0 TO 255;
                            و در توضیح فانکشن to_unsigned ، متغییر رو که به فانکشن میدین باید تعیین کنید که این عدد رو میخواین به چند بیت تبدیل کنید، اینجا ما 8 بیت میخوایم، در بخش بعدی هم باید بیت به بیت تعیین کنیم کدوم بیت از متغییر UNSIGNED به کدوم بیت از متغییر STDLOGIC میره.
                            اسمایل، تومورو ویل بی وُرس

                            دیدگاه


                              #15
                              پاسخ : یک سوال در مورد vhdl

                              سلام دوباره

                              شما میدونید چه طور فرکانس یک اسیلاتور رو میشه پایین آورد؟

                              منظورم کد VHDL هستش؟

                              با تشکر
                              حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

                              دیدگاه

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