ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

صفحه 4 از 6 نخست 123456 آخرین
نمایش نتایج: از 31 به 40 از 56
  1. #31
    2008/01/01
    111
    0

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

    سلام به دوست خوبم

    من برنامه زیر رو نوشتم از لحاظ گرامری هیچ مشکلی نداره فقط از لحاظ منطقی نمیدونم

    چه مشکلی داره. حالا اگه میشه شما یک بررسی بکنید چرا ممنون میشم.

    فقط من برای لبه بالا به پایین که دستورات lcd رو اجرا میکنه کلاک رو به en دادم.

    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_ARITH.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;

    ---- Uncomment the following library declaration if instantiating
    ---- any Xilinx primitives in this code.
    --library UNISIM;
    --use UNISIM.VComponents.all;

    entity lcd is

    port ( clk_in : in std_logic;
    en : out bit;
    db : out std_logic_vector (8 downto 0)); --db = rs,lcadb0-db7
    end lcd;

    architecture Behavioral of lcd is

    signal clk:bit;

    begin

    process (clk_in)

    variable count : integer := 0;

    begin

    if rising_edge(clk_in) then
    if (count<40000) then
    clk <= '1';
    count := count + 1;

    elsif (count>=40000 and count<80000) then
    clk<='0';
    count := count + 1;
    elsif (count=80000) then
    clk<='1';
    count := 1;
    end if;
    end if;

    end process;


    -----------------------------------------------------------------



    process (clk)

    variable Counter: Integer range 0 to 10 := 0;

    begin
    en <= clk; -- faal saze lcd

    case counter is

    when 0 =>

    db <= "000000001";
    -- clear lcd

    counter := counter + 1;

    when 1 =>

    db <= "000111000";
    -- select two line disply

    counter := counter + 1;

    when 2 =>

    db <= "000001110";
    -- turn on disply and cursos

    counter := counter + 1;

    when 3 =>

    db <= "000000110";
    -- set mode to increment address

    counter := counter + 1;

    when 4 =>

    db <="101001001"; --I

    counter := counter + 1;

    when 5 =>

    db <= "101010010"; -- R

    counter := counter + 1;

    when 6 =>

    db <= "101000001"; --A

    counter := counter + 1;

    when 7 =>

    db <= "101001101"; --N

    counter := counter + 1;

    when others =>

    null;

    end case;

    end process;

    end Behavioral;

    باز هم صمیمانه ممنونم
    حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.
  2. #32
    2011/05/12
    366
    9

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

    سلام،

    در کدی که نوشتین، clk رو به صورت std_logic تعریف کنید، برای صفر و یک کردنش هم از not استفاده کنید، مثل clk <= not clk; فقط مقدار دهی اولیه فراموش نشه، در ضمن از همون میشه به عنوان کلاک پایینتر برای ماژول lcd استفاده کرد.
    برای شمارش کلاک اصلی هم فقط یک if else کافیه مثل

    if (count<40000) then
    count := count + 1;
    else
    clk <= not clk;
    count := 0;
    end if
    در این حالت هرزمان که count به میزان تعیین شده برسه، سیگتال clk معکوس میشه و این خودش میشه کلاکی که از کلاک اصلی پایین تره، به میزانی که در if تعیین شده.

    در process دوم شما مستقیما clk رو به en وصل کردین که کار درستی نیست، چون مراحل کار با lcd به صورت ترتیبی هست، باید ابتدا در state machine داده ها روی باس 8 بیتی قرار بگیرن، بعد سیگنال en تغییر بکنه. یعنی در استیت اول بیتهای 0 تا 7 داده مقدار دهی بشن، در استیت دوم en ست یا ریست بشه(بر اساس چیزی که تو دیتاشیت گفته) و در استیت سوم en به حالت قبلیش برگرده.
    اسمایل، تومورو ویل بی وُرس
  3. #33
    2008/01/01
    111
    0

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

    سلام به دوست خوبم

    مشکل lcd حل شد و بالاخره تونستم روی lcd بنویسم.

    حالا می رسم به قسمت پایانی کار...

    یعنی 6 رشته عبارت دارم و می خوام حاصل اونا رو دو به دو با هم مقایسه کنم یعنی مثلا x1 توی یک حلقه یک مقداری میده که

    توی حلقه تولید شده و xx1 هم توی یک حلقه دیگه . برنامه اینا رو قبلا نوشتم. حالا می خوام این دوتا رو با هم نشون بده. تا اینجاش

    که ساده است!!

    مشکل وقتی هست که ما اصلا نمیدونیم این اعداد چند رقمی هستند یک رقمی ، دو رقمی یا سه رقمی (بیشتر از سه رقم نیست)

    دوم اینکه lcd کد اسکی میشناسه نه عدد.

    سوم اینکه اول باید x1 با xx1 بعد از اون x2 با xx2 و در آخر x3 با xx3 مقایسه بشند که lcd جا برای همشون نداره برنامه کدهای نوشته شده رو هم در زیر

    قرار میدم تا بهتر متوجه بشین:

    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_ARITH.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;

    ---- Uncomment the following library declaration if instantiating
    ---- any Xilinx primitives in this code.
    --library UNISIM;
    --use UNISIM.VComponents.all;

    package observer is -- define package

    constant N : integer := 15000;

    -- number of sample

    type matrix13 is array (1 to 3) of real;

    -- define type for 1x3 matrix

    type matrix33 is array (1 to 3 , 1 to 3) of real;

    -- define type for 3x3 matrix

    type w is array (1 to N) of real;

    -- define type for U(input) , X(state) , XX(stimate) , W(observer) , y(output)

    end observer; -- end package

    use work.observer.all; -- use package that defined

    entity and_2 is -- inputs and output
    Port ( a : in bit;
    b : in bit;
    led1 : out bit;
    led2 : out bit;
    led3 : out bit);
    end and_2;

    architecture observer of and_2 is -- program architecture is begin

    begin

    process (a)

    variable u : w; -- input

    variable x_1 : w; -- first state

    variable x_2 : w; -- second state

    variable x_3 : w; -- third state

    variable y : w; -- output

    variable xx_1 : w; -- first stimator

    variable xx_2 : w; -- second stimator

    variable xx_3 : w; -- third stimator

    variable H1 : w ;

    variable H2 : w ;

    variable H3 : w ;

    variable w_1 : w; -- first observer

    variable w_2 : w; -- second observer

    variable w_3 : w; -- third observer

    variable i : integer; -- define i for index

    constant A : matrix33 := (1 =>(1.0 , -1.0 , -2.0),
    2 =>(-2.0 , 0.0 , 3.0),
    3 =>(4.0 , -6.0 , -8.0));

    -- define matrix A (is system's parametr)

    constant B : matrix13 := (2.0 , 0.0 , -1.0);

    -- define matrix B (is system's parametr)

    constant C : matrix13 := (1.0 , 0.0 , 0.0);

    -- define matrix C (is system's parametr)

    constant P : matrix33 := (1 =>(1.0 , -1.0 ,-2.0),
    2 =>(0.0 , 0.0 , 3.0),
    3 =>(1.0 , 6.0 , 8.0));

    -- matrix p , parametr of observer

    constant G : matrix33 := (1 =>(1.0 , 0.0 , 0.0),
    2 =>(0.0 , 1.0 , 0.0),
    3 =>(0.0 , 0.0 ,-1.0));

    -- matrix G , parametr of observer

    constant H : matrix33 := (1 =>(15.0 , -26.0 , -76.0),
    2 =>(-26.8 , 115.88 , 162.16),
    3 =>(-76.6 , 162.16 , 497.12));

    -- matrix H , parametr of observer

    constant Q : matrix13 := (1.0 , -2.0 , -4.0);

    -- matrix Q , parametr of observer

    constant F : matrix13 := (1.0 , 0.0 , 0.0);

    -- matrix F , parametr of observer

    constant delta : real := 0.001;

    -- a constan parametr that multiply by N and gave the time

    begin

    x_2(1) := 100.0; -- initial condition for x_2

    x_3(1) := -50.0; -- initial condition for x_3

    x_1(1) := x_2(1)+2.0*x_3(1)-2.0*u(1); -- initial condition for x_1

    w_1(1) := 10.0; -- initial condition for w_1

    w_2(1) := 0.0; -- initial condition for w_2

    w_3(1) := 0.0; -- initial condition for w_3

    y(1) := C(1)*x_1(1); -- the first out put

    xx_1(1) := w_1(1)+F(1)*y(1); -- the first stimate of xx_1

    xx_2(1) := w_2(1)+F(2)*y(1); -- the first stimate of xx_2

    xx_3(1) := w_3(1)+F(3)*y(1); -- the first stimate of xx_3

    for i in 1 to N+1 loop

    u(i) := 1.0; -- input for times between 0 and n*delta

    x_2(i+1) := x_2(i) + delta*(A(2,1)*x_1(i)+A(2,2)*x_2(i)+A(2,3)*x_3(i));

    -- state x_2 for times between 0 and n*delta

    x_3(i+1) := x_3(i) + delta*(A(3,1)*x_1(i)+A(3,2)*x_2(i)+A(3,3)*x_3(i)+u (i));

    --state x_3 for times between 0 and n*delta

    x_1(i+1) := x_2(i+1) + 2.0*x_3(i+1)-2.0*u(i+1);

    -- state x_1 for times between 0 and n*delta

    y(i) := C(1)*x_1(i)+C(2)*x_2(i)+C(3)*x_3(i);

    -- output for times between 0 and N*delta

    w_1(i+1) := P(1,1)*w_1(i)+P(1,2)*w_2(i)+P(1,3)*w_3(i)+Q(1)*y(i )+(G(1,1)*B(1)+G(1,2)*B(2)+G(1,3)*B(3))*u(i)-(H(1,1)*C(1)+H(1,2)*C(2)+H(1,3)*C(3))*(C(1)*xx_1(i )+C(2)*xx_2(i)+C(3)*xx_3(i)-y(i));

    -- w_1 for times between 0 and N*delta

    w_2(i+1) := P(2,1)*w_1(i)+P(2,2)*w_2(i)+P(2,3)*w_3(i)+Q(2)*y(i )+(G(2,1)*B(1)+G(2,2)*B(2)+G(2,3)*B(3))*u(i)-(H(2,1)*C(1)+H(2,2)*C(2)+H(2,3)*C(3))*(C(1)*xx_1(i )+C(2)*xx_2(i)+C(3)*xx_3(i)-y(i));

    -- w_2 for times between 0 and N*delta

    w_3(i+1) := P(3,1)*w_1(i)+P(3,2)*w_2(i)+P(3,3)*w_3(i)+Q(3)*y(i )+(G(3,1)*B(1)+G(3,2)*B(2)+G(3,3)*B(3))*u(i)-(H(3,1)*C(1)+H(3,2)*C(2)+H(3,3)*C(3))*(C(1)*xx_1(i )+C(2)*xx_2(i)+C(3)*xx_3(i)-y(i));

    -- w_3 for times between 0 and N*delta

    xx_1(i+1) := w_1(i+1)+F(1)*y(i); -- first stimation values for times between 0 and N*delta

    xx_2(i+1) := w_2(i+1)+F(2)*y(i); -- second stimation values for times between 0 and N*delta

    xx_3(i+1) := w_3(i+1)+F(3)*y(i); -- third stimation values for times between 0 and N*delta

    end loop; -- end of loop

    H1(N) := (x_1(N)) - (xx_1(N));

    H2(N) := (x_2(N)) - (xx_2(N));

    H3(N) := (x_3(N)) - (xx_3(N));

    if ( H1(N) < 1) then
    led1 <= '1';
    end if;

    if ( H2(N) < 1) then
    led2 <= '1';
    end if;

    if ( H3(N) < 1) then
    led3 <= '1';
    end if;

    end process; -- end of process

    end observer; -- end architecture

    باز از شما متشکرم

    حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.
  4. #34
    2011/05/12
    366
    9

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

    سلام،
    مشکل lcd حل شد و بالاخره تونستم روی lcd بنویسم.
    خبر خیلی خوبیه

    مشکل وقتی هست که ما اصلا نمیدونیم این اعداد چند رقمی هستند یک رقمی ، دو رقمی یا سه رقمی (بیشتر از سه رقم نیست)
    برای اینکار راحتترین روش نوشتن هر سه رقمه یعنی عدد 1 به صورت 001 نوشته بشه، عدد 12 به صورت 012 نوشته بشه و عدد 100 هم که میشه 100.
    اگه صفرهای سمت چپ رو بخواین بردارین باید برای چاپ عدد از چپ به راست حرکت کنین و شرط غیر صفر بودن رو یک بار چک کنید و اگر یکبار دهگان یا صدگان غیر صفر بودن دیگه بقیه دیجیتهای سمت راست اون دیجیت چاپ بشن، البته برای یکان همیشه صفر باید چاپ بشه. خوبی این روش اینه که چون lcd ها بطور پیش فرض از چپ به راست چاپ میکنن دیگه نیازی به ارسال کامندهای مکان نما نیست.

    دوم اینکه lcd کد اسکی میشناسه نه عدد.
    مشکلی نیست، کد اسکی عدد 0 برابر 48 دسیمال هست، پس کافیه دیجیتهایی که به ماژول lcd پاس میدین رو به اضافه عدد 48 بکنید، 0 میشه 48، 1 میشه 49 ، 2 میشه 50 الی آخر تا 9 که میشه 57.

    سوم اینکه اول باید x1 با xx1 بعد از اون x2 با xx2 و در آخر x3 با xx3 مقایسه بشند که lcd جا برای همشون نداره
    مشکلی نیست، کافیه یک متغییر عددی تعریف کنید به عنوان مثلا Display_Index که براش یک case بنویسید و در هر بخش اون اگر Display_Index برابر صفر بود x1 و xx1 رو چاپ کنه، اگر 1 بود x2 و xx2، اگر هم 2 بود که x3 و xx3 رو چاپ کنه، برای تنظیم Display_Index هم میشه از کلید ها ی روی بردتون استفاده کنید یا از همون شرط کلاکها استفاده کنید، یعنی همونطور که یک شمارنده برای کلاک lcd گذاشتین، یک شمارنده هم برای شمارش Display_Index استفاده کنید تا مثلا هر 1 ثانیه با افزایش Display_Index به میزان 1، x1 و xx1 رو نشون بده و ثانیه بعدی دو عدد بعدی رو نشون بده. :mrgreen:
    اسمایل، تومورو ویل بی وُرس
  5. #35
    2008/01/01
    111
    0

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

    سلام

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

    دیگه نمیدونم ایراد از کجاست!! :angry:


    ERROR:Xst:1532 - "C:/observer.vhd" line 0: Real operand is not supported in this context.

    بنامه نوشته شده هم به صوزت زیر می باشد:

    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_ARITH.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;

    ---- Uncomment the following library declaration if instantiating
    ---- any Xilinx primitives in this code.
    --library UNISIM;
    --use UNISIM.VComponents.all;

    package observe is -- define package

    constant N : integer := 15000;

    -- number of sample

    type matrix13 is array (1 to 3) of real;

    -- define type for 1x3 matrix

    type matrix33 is array (1 to 3 , 1 to 3) of real;

    -- define type for 3x3 matrix

    type w is array (1 to N) of real;

    -- define type for U(input) , X(state) , XX(stimate) , W(observer) , y(output)

    end observe; -- end package

    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_ARITH.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;

    use work.observe.all; -- use package that defined
    entity observer is

    port (clk_in : in std_logic;
    clk : inout std_logic;
    en : out std_logic;
    a , b , c , d: in bit;
    db : out std_logic_vector (8 downto 0)); --db = rs,lcadb0-db7

    end observer;

    architecture Behavioral of observer is

    begin

    -----------------clock generator----------------

    process (clk_in)

    variable count : integer := 0;

    begin

    if rising_edge(clk_in) then

    if (count<400000) then

    clk <= '1';

    count := count + 1;

    elsif (count>=400000 and count<800000) then

    clk <='0';

    count := count + 1;

    elsif (count=800000) then

    clk <='1';

    count := 1;

    end if;

    end if;

    end process;

    ------------------observer definition-------------------

    process (clk_in)

    variable u : w; -- input

    variable x_1 : w; -- first state

    variable x_2 : w; -- second state

    variable x_3 : w; -- third state

    variable y : w; -- output

    variable xx_1 : w; -- first stimator

    variable xx_2 : w; -- second stimator

    variable xx_3 : w; -- third stimator

    variable H1 : w ;

    variable H2 : w ;

    variable H3 : w ;

    variable w_1 : w; -- first observer

    variable w_2 : w; -- second observer

    variable w_3 : w; -- third observer

    variable i : integer; -- define i for index

    constant A : matrix33 := (1 =>(1.0 , -1.0 , -2.0),
    2 =>(-2.0 , 0.0 , 3.0),
    3 =>(4.0 , -6.0 , -8.0));

    -- define matrix A (is system's parametr)

    constant B : matrix13 := (2.0 , 0.0 , -1.0);

    -- define matrix B (is system's parametr)

    constant C : matrix13 := (1.0 , 0.0 , 0.0);

    -- define matrix C (is system's parametr)

    constant P : matrix33 := (1 =>(1.0 , -1.0 ,-2.0),
    2 =>(0.0 , 0.0 , 3.0),
    3 =>(1.0 , 6.0 , 8.0));

    -- matrix p , parametr of observer

    constant G : matrix33 := (1 =>(1.0 , 0.0 , 0.0),
    2 =>(0.0 , 1.0 , 0.0),
    3 =>(0.0 , 0.0 ,-1.0));

    -- matrix G , parametr of observer

    constant H : matrix33 := (1 =>(15.0 , -26.0 , -76.0),
    2 =>(-26.8 , 115.88 , 162.16),
    3 =>(-76.6 , 162.16 , 497.12));

    -- matrix H , parametr of observer

    constant Q : matrix13 := (1.0 , -2.0 , -4.0);

    -- matrix Q , parametr of observer

    constant F : matrix13 := (1.0 , 0.0 , 0.0);

    -- matrix F , parametr of observer

    constant delta : real := 0.001;

    -- a constan parametr that multiply by N and gave the time

    begin

    x_2(1) := 100.0; -- initial condition for x_2

    x_3(1) := -50.0; -- initial condition for x_3

    x_1(1) := x_2(1)+2.0*x_3(1)-2.0*u(1); -- initial condition for x_1

    w_1(1) := 10.0; -- initial condition for w_1

    w_2(1) := 0.0; -- initial condition for w_2

    w_3(1) := 0.0; -- initial condition for w_3

    y(1) := C(1)*x_1(1); -- the first out put

    xx_1(1) := w_1(1)+F(1)*y(1); -- the first stimate of xx_1

    xx_2(1) := w_2(1)+F(2)*y(1); -- the first stimate of xx_2

    xx_3(1) := w_3(1)+F(3)*y(1); -- the first stimate of xx_3

    for i in 1 to N+1 loop

    u(i) := 1.0; -- input for times between 0 and n*delta

    x_2(i+1) := x_2(i) + delta*(A(2,1)*x_1(i)+A(2,2)*x_2(i)+A(2,3)*x_3(i));

    -- state x_2 for times between 0 and n*delta

    x_3(i+1) := x_3(i) + delta*(A(3,1)*x_1(i)+A(3,2)*x_2(i)+A(3,3)*x_3(i)+u (i));

    --state x_3 for times between 0 and n*delta

    x_1(i+1) := x_2(i+1) + 2.0*x_3(i+1)-2.0*u(i+1);

    -- state x_1 for times between 0 and n*delta

    y(i) := C(1)*x_1(i)+C(2)*x_2(i)+C(3)*x_3(i);

    -- output for times between 0 and N*delta

    w_1(i+1) := P(1,1)*w_1(i)+P(1,2)*w_2(i)+P(1,3)*w_3(i)+Q(1)*y(i )+(G(1,1)*B(1)+G(1,2)*B(2)+G(1,3)*B(3))*u(i)-(H(1,1)*C(1)+H(1,2)*C(2)+H(1,3)*C(3))*(C(1)*xx_1(i )+C(2)*xx_2(i)+C(3)*xx_3(i)-y(i));

    -- w_1 for times between 0 and N*delta

    w_2(i+1) := P(2,1)*w_1(i)+P(2,2)*w_2(i)+P(2,3)*w_3(i)+Q(2)*y(i )+(G(2,1)*B(1)+G(2,2)*B(2)+G(2,3)*B(3))*u(i)-(H(2,1)*C(1)+H(2,2)*C(2)+H(2,3)*C(3))*(C(1)*xx_1(i )+C(2)*xx_2(i)+C(3)*xx_3(i)-y(i));

    -- w_2 for times between 0 and N*delta

    w_3(i+1) := P(3,1)*w_1(i)+P(3,2)*w_2(i)+P(3,3)*w_3(i)+Q(3)*y(i )+(G(3,1)*B(1)+G(3,2)*B(2)+G(3,3)*B(3))*u(i)-(H(3,1)*C(1)+H(3,2)*C(2)+H(3,3)*C(3))*(C(1)*xx_1(i )+C(2)*xx_2(i)+C(3)*xx_3(i)-y(i));

    -- w_3 for times between 0 and N*delta

    xx_1(i+1) := w_1(i+1)+F(1)*y(i); -- first stimation values for times between 0 and N*delta

    xx_2(i+1) := w_2(i+1)+F(2)*y(i); -- second stimation values for times between 0 and N*delta

    xx_3(i+1) := w_3(i+1)+F(3)*y(i); -- third stimation values for times between 0 and N*delta

    end loop; -- end of loop

    end process; -- end of process

    ------------- DISPLY THE ESULT------------------
    process (clk)

    variable Counter: Integer range 0 to 10 := 0;

    begin


    en <= clk;
    if falling_edge(clk)then

    case counter is

    when 0 =>

    db <= "000000001";
    -- clear lcd

    counter := counter + 1;

    when 1 =>

    db <= "000111000";
    -- select two line disply

    counter := counter + 1;

    when 2 =>

    db <= "000001110";
    -- turn on disply and cursos

    counter := counter + 1;

    when 3 =>

    db <= "000000110";
    -- set mode to increment address

    counter := counter + 1;

    when 4 =>

    db <="101001001"; --I

    counter := counter + 1;

    when 5 =>

    db <= "101010010"; -- R

    counter := counter + 1;

    when 6 =>

    db <= "101000001"; --A

    counter := counter + 1;

    when 7 =>

    db <= "101001110"; --N

    counter := counter + 1;

    when 8 =>

    db <= "010000000";

    when others =>

    null;

    end case;

    end if;

    end process;


    end Behavioral;


    حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.
  6. #36
    2008/01/01
    111
    0

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

    پس کجایی ای دوست من!!! :sad:
    حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.
  7. #37
    2011/05/12
    366
    9

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

    سلام،
    مقادیر Real (اعشاری) توسط HDL قابل سنتز نیستند، اون خطا هم میگه که امکان انجام عملیات ریاضی با متغییری از نوع اعشاری وجود نداره، چون اصلا قابل پیاده سازی نیست. باید از Fized-point یا Floating-point یا از روشی که من در اون کد Cos کسینوس که قرار دادم استفاده کنید.
    اسمایل، تومورو ویل بی وُرس
  8. #38
    2008/01/01
    111
    0

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

    سلام دوباره

    من این کاری که شما گفتی رو انجام دادم و تمام داده ها رو هم به صورت integer

    در آوردم.

    اما ...

    در مرحله سنتز برنامه گیر میکنه (گیر که نه در حال اجراست ولی تموم نمیشه!!!) و هر چی صبر میکنم جوابی نمیده.

    حالا باید چه کنم؟
    حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.
  9. #39
    2011/05/12
    366
    9

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

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

    من این کاری که شما گفتی رو انجام دادم و تمام داده ها رو هم به صورت integer

    در آوردم.

    اما ...

    در مرحله سنتز برنامه گیر میکنه (گیر که نه در حال اجراست ولی تموم نمیشه!!!) و هر چی صبر میکنم جوابی نمیده.

    حالا باید چه کنم؟
    در اینطور مواقع، اکثرا لاجیک برنامه ایراد داره و بسیار تودرتو هست، در نهایت سنتز انجام میشه ولی روتینگ نه، چون اصلا جایی براش نیست و در چیپ جا نمیشه.
    باید نحوه پیاده سازیتون رو تغییر بدین، مثلا برای استفاده از داده ها اونها رو در کد ننویسید، بلکه از رم بخونید، اطلاعات رو هم در رم ذخیره کنید. اونوقت ایندکس هر مقدار رو بگیرید و مقدار معادل در رم رو برگردونید.
    مطمئن باشید ایراد از Integer نیست، لاجیک برنامه تون رو چند بار مرور کنید حتما مشکلش رو پیدا میکنید.
    اسمایل، تومورو ویل بی وُرس
  10. #40
    2008/01/01
    111
    0

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

    اشکال از تعداد آرایه های بالا بود

    3 متغییر که هر کدوم 15000 عضو داره باعث کند شدن برنامه میشه و وقتی تعداد رو پایین آوردم( 150 تا ) مشکل حل شد از نظر شما باید چه کار کرد؟

    برای داده های حقیقی هم اعداد رو integer در نظر گرفتم تا بعدا از دو رقم کم ارزش تر چشم پوشی کنم
    حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.
صفحه 4 از 6 نخست 123456 آخرین
نمایش نتایج: از 31 به 40 از 56

موضوعات مشابه

  1. یه سوال خیلی مبتدیانه در مورد VHDL
    توسط masoud58 در انجمن PLD , SPLD , GAL , CPLD , FPGA
    پاسخ: 5
    آخرين نوشته: 2015/04/03, 15:04
  2. سوال در مورد برنامه نويسي fpga با زبان vhdl
    توسط ajapyy در انجمن PLD , SPLD , GAL , CPLD , FPGA
    پاسخ: 11
    آخرين نوشته: 2013/02/23, 00:15
  3. سوال در مورد VHDL
    توسط hamid256 در انجمن PLD , SPLD , GAL , CPLD , FPGA
    پاسخ: 1
    آخرين نوشته: 2010/12/07, 10:12
  4. یه سوال فنی VHDL
    توسط nimooly در انجمن PLD , SPLD , GAL , CPLD , FPGA
    پاسخ: 8
    آخرين نوشته: 2010/11/06, 20:46
  5. سوال در مورد vhdl
    توسط 8423067 در انجمن PLD , SPLD , GAL , CPLD , FPGA
    پاسخ: 3
    آخرين نوشته: 2009/02/16, 17:14

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •