اطلاعیه

Collapse
No announcement yet.

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

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

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

    و یک سوال جزیی البته برای شما

    چه طور میتونم باقی مانده تقسیم یک عدد بر عدد دیگه رو پیدا کنم

    چون وقتی از rem استفاده می کنم سنتز کننده این پیغاو رو میده که عملوندها یا باید ثابت باشند و یا از قوه دو باشند؟

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

    دیدگاه


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

      نوشته اصلی توسط electronics
      و یک سوال جزیی البته برای شما

      چه طور میتونم باقی مانده تقسیم یک عدد بر عدد دیگه رو پیدا کنم

      چون وقتی از rem استفاده می کنم سنتز کننده این پیغاو رو میده که عملوندها یا باید ثابت باشند و یا از قوه دو باشند؟

      اگه اینو حل کنم مشکلم تا حدود زیادی حل میشه؟؟؟
      باید ابتدا عددتون رو به unsigned تبدیل کنید و براش تقسیم باینری بنویسید، توی تقسیم باینری میشه باقیمانده رو هم حساب کرد.
      http://courses.cs.vt.edu/~cs1104/Bui...ivide.030.html
      اسمایل، تومورو ویل بی وُرس

      دیدگاه


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

        سلام،
        فکر کنم با استفاده از این پکیج دیگه مشکلی نداشته باشید
        فقط بخش چاپ lcd رو چایگزین بخش فابل بکنید.

        library ieee;
        use ieee.std_logic_1164.all;
        use std.textio.all;


        package txt_util is

        -- prints a message to the screen
        procedure print(text: string);

        -- prints the message when active
        -- useful for debug switches
        procedure print(active: boolean; text: string);

        -- converts std_logic into a character
        function chr(sl: std_logic) return character;

        -- converts std_logic into a string (1 to 1)
        function str(sl: std_logic) return string;

        -- converts std_logic_vector into a string (binary base)
        function str(slv: std_logic_vector) return string;

        -- converts boolean into a string
        function str(b: boolean) return string;

        -- converts an integer into a single character
        -- (can also be used for hex conversion and other bases)
        function chr(int: integer) return character;

        -- converts integer into string using specified base
        function str(int: integer; base: integer) return string;

        -- converts integer to string, using base 10
        function str(int: integer) return string;

        -- convert std_logic_vector into a string in hex format
        function hstr(slv: std_logic_vector) return string;


        -- functions to manipulate strings
        -----------------------------------

        -- convert a character to upper case
        function to_upper(c: character) return character;

        -- convert a character to lower case
        function to_lower(c: character) return character;

        -- convert a string to upper case
        function to_upper(s: string) return string;

        -- convert a string to lower case
        function to_lower(s: string) return string;



        -- functions to convert strings into other formats
        --------------------------------------------------

        -- converts a character into std_logic
        function to_std_logic(c: character) return std_logic;

        -- converts a string into std_logic_vector
        function to_std_logic_vector(s: string) return std_logic_vector;



        -- file I/O
        -----------

        -- read variable length string from input file
        procedure str_read(file in_file: TEXT;
        res_string: out string);

        -- print string to a file and start new line
        procedure print(file out_file: TEXT;
        new_string: in string);

        -- print character to a file and start new line
        procedure print(file out_file: TEXT;
        char: in character);

        end txt_util;




        package body txt_util is




        -- prints text to the screen

        procedure print(text: string) is
        variable msg_line: line;
        begin
        write(msg_line, text);
        writeline(output, msg_line);
        end print;




        -- prints text to the screen when active

        procedure print(active: boolean; text: string) is
        begin
        if active then
        print(text);
        end if;
        end print;


        -- converts std_logic into a character

        function chr(sl: std_logic) return character is
        variable c: character;
        begin
        case sl is
        when 'U' => c:= 'U';
        when 'X' => c:= 'X';
        when '0' => c:= '0';
        when '1' => c:= '1';
        when 'Z' => c:= 'Z';
        when 'W' => c:= 'W';
        when 'L' => c:= 'L';
        when 'H' => c:= 'H';
        when '-' => c:= '-';
        end case;
        return c;
        end chr;



        -- converts std_logic into a string (1 to 1)

        function str(sl: std_logic) return string is
        variable s: string(1 to 1);
        begin
        s(1) := chr(sl);
        return s;
        end str;



        -- converts std_logic_vector into a string (binary base)
        -- (this also takes care of the fact that the range of
        -- a string is natural while a std_logic_vector may
        -- have an integer range)

        function str(slv: std_logic_vector) return string is
        variable result : string (1 to slv'length);
        variable r : integer;
        begin
        r := 1;
        for i in slv'range loop
        result(r) := chr(slv(i));
        r := r + 1;
        end loop;
        return result;
        end str;


        function str(b: boolean) return string is

        begin
        if b then
        return "true";
        else
        return "false";
        end if;
        end str;


        -- converts an integer into a character
        -- for 0 to 9 the obvious mapping is used, higher
        -- values are mapped to the characters A-Z
        -- (this is usefull for systems with base > 10)
        -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)

        function chr(int: integer) return character is
        variable c: character;
        begin
        case int is
        when 0 => c := '0';
        when 1 => c := '1';
        when 2 => c := '2';
        when 3 => c := '3';
        when 4 => c := '4';
        when 5 => c := '5';
        when 6 => c := '6';
        when 7 => c := '7';
        when 8 => c := '8';
        when 9 => c := '9';
        when 10 => c := 'A';
        when 11 => c := 'B';
        when 12 => c := 'C';
        when 13 => c := 'D';
        when 14 => c := 'E';
        when 15 => c := 'F';
        when 16 => c := 'G';
        when 17 => c := 'H';
        when 18 => c := 'I';
        when 19 => c := 'J';
        when 20 => c := 'K';
        when 21 => c := 'L';
        when 22 => c := 'M';
        when 23 => c := 'N';
        when 24 => c := 'O';
        when 25 => c := 'P';
        when 26 => c := 'Q';
        when 27 => c := 'R';
        when 28 => c := 'S';
        when 29 => c := 'T';
        when 30 => c := 'U';
        when 31 => c := 'V';
        when 32 => c := 'W';
        when 33 => c := 'X';
        when 34 => c := 'Y';
        when 35 => c := 'Z';
        when others => c := '?';
        end case;
        return c;
        end chr;



        -- convert integer to string using specified base
        -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)

        function str(int: integer; base: integer) return string is

        variable temp: string(1 to 10);
        variable num: integer;
        variable abs_int: integer;
        variable len: integer := 1;
        variable power: integer := 1;

        begin

        -- bug fix for negative numbers
        abs_int := abs(int);

        num := abs_int;

        while num >= base loop -- Determine how many
        len := len + 1; -- characters required
        num := num / base; -- to represent the
        end loop ; -- number.

        for i in len downto 1 loop -- Convert the number to
        temp(i) := chr(abs_int/power mod base); -- a string starting
        power := power * base; -- with the right hand
        end loop ; -- side.

        -- return result and add sign if required
        if int < 0 then
        return '-'& temp(1 to len);
        else
        return temp(1 to len);
        end if;

        end str;


        -- convert integer to string, using base 10
        function str(int: integer) return string is

        begin

        return str(int, 10) ;

        end str;



        -- converts a std_logic_vector into a hex string.
        function hstr(slv: std_logic_vector) return string is
        variable hexlen: integer;
        variable longslv : std_logic_vector(67 downto 0) := (others => '0'
        variable hex : string(1 to 16);
        variable fourbit : std_logic_vector(3 downto 0);
        begin
        hexlen := (slv'left+1)/4;
        if (slv'left+1) mod 4 /= 0 then
        hexlen := hexlen + 1;
        end if;
        longslv(slv'left downto 0) := slv;
        for i in (hexlen -1) downto 0 loop
        fourbit := longslv(((i*4)+3) downto (i*4));
        case fourbit is
        when "0000" => hex(hexlen -I) := '0';
        when "0001" => hex(hexlen -I) := '1';
        when "0010" => hex(hexlen -I) := '2';
        when "0011" => hex(hexlen -I) := '3';
        when "0100" => hex(hexlen -I) := '4';
        when "0101" => hex(hexlen -I) := '5';
        when "0110" => hex(hexlen -I) := '6';
        when "0111" => hex(hexlen -I) := '7';
        when "1000" => hex(hexlen -I) := '8';
        when "1001" => hex(hexlen -I) := '9';
        when "1010" => hex(hexlen -I) := 'A';
        when "1011" => hex(hexlen -I) := 'B';
        when "1100" => hex(hexlen -I) := 'C';
        when "1101" => hex(hexlen -I) := 'D';
        when "1110" => hex(hexlen -I) := 'E';
        when "1111" => hex(hexlen -I) := 'F';
        when "ZZZZ" => hex(hexlen -I) := 'z';
        when "UUUU" => hex(hexlen -I) := 'u';
        when "XXXX" => hex(hexlen -I) := 'x';
        when others => hex(hexlen -I) := '?';
        end case;
        end loop;
        return hex(1 to hexlen);
        end hstr;



        -- functions to manipulate strings
        -----------------------------------


        -- convert a character to upper case

        function to_upper(c: character) return character is

        variable u: character;

        begin

        case c is
        when 'a' => u := 'A';
        when 'b' => u := 'B';
        when 'c' => u := 'C';
        when 'd' => u := 'D';
        when 'e' => u := 'E';
        when 'f' => u := 'F';
        when 'g' => u := 'G';
        when 'h' => u := 'H';
        when 'i' => u := 'I';
        when 'j' => u := 'J';
        when 'k' => u := 'K';
        when 'l' => u := 'L';
        when 'm' => u := 'M';
        when 'n' => u := 'N';
        when 'o' => u := 'O';
        when 'p' => u := 'P';
        when 'q' => u := 'Q';
        when 'r' => u := 'R';
        when 's' => u := 'S';
        when 't' => u := 'T';
        when 'u' => u := 'U';
        when 'v' => u := 'V';
        when 'w' => u := 'W';
        when 'x' => u := 'X';
        when 'y' => u := 'Y';
        when 'z' => u := 'Z';
        when others => u := c;
        end case;

        return u;

        end to_upper;


        -- convert a character to lower case

        function to_lower(c: character) return character is

        variable l: character;

        begin

        case c is
        when 'A' => l := 'a';
        when 'B' => l := 'b';
        when 'C' => l := 'c';
        when 'D' => l := 'd';
        when 'E' => l := 'e';
        when 'F' => l := 'f';
        when 'G' => l := 'g';
        when 'H' => l := 'h';
        when 'I' => l := 'i';
        when 'J' => l := 'j';
        when 'K' => l := 'k';
        when 'L' => l := 'l';
        when 'M' => l := 'm';
        when 'N' => l := 'n';
        when 'O' => l := 'o';
        when 'P' => l := 'p';
        when 'Q' => l := 'q';
        when 'R' => l := 'r';
        when 'S' => l := 's';
        when 'T' => l := 't';
        when 'U' => l := 'u';
        when 'V' => l := 'v';
        when 'W' => l := 'w';
        when 'X' => l := 'x';
        when 'Y' => l := 'y';
        when 'Z' => l := 'z';
        when others => l := c;
        end case;

        return l;

        end to_lower;



        -- convert a string to upper case

        function to_upper(s: string) return string is

        variable uppercase: string (s'range);

        begin

        for i in s'range loop
        uppercase(i):= to_upper(s(i));
        end loop;
        return uppercase;

        end to_upper;



        -- convert a string to lower case

        function to_lower(s: string) return string is

        variable lowercase: string (s'range);

        begin

        for i in s'range loop
        lowercase(i):= to_lower(s(i));
        end loop;
        return lowercase;

        end to_lower;



        -- functions to convert strings into other types


        -- converts a character into a std_logic

        function to_std_logic(c: character) return std_logic is
        variable sl: std_logic;
        begin
        case c is
        when 'U' =>
        sl := 'U';
        when 'X' =>
        sl := 'X';
        when '0' =>
        sl := '0';
        when '1' =>
        sl := '1';
        when 'Z' =>
        sl := 'Z';
        when 'W' =>
        sl := 'W';
        when 'L' =>
        sl := 'L';
        when 'H' =>
        sl := 'H';
        when '-' =>
        sl := '-';
        when others =>
        sl := 'X';
        end case;
        return sl;
        end to_std_logic;


        -- converts a string into std_logic_vector

        function to_std_logic_vector(s: string) return std_logic_vector is
        variable slv: std_logic_vector(s'high-s'low downto 0);
        variable k: integer;
        begin
        k := s'high-s'low;
        for i in s'range loop
        slv(k) := to_std_logic(s(i));
        k := k - 1;
        end loop;
        return slv;
        end to_std_logic_vector;






        ----------------
        -- file I/O --
        ----------------



        -- read variable length string from input file

        procedure str_read(file in_file: TEXT;
        res_string: out string) is

        variable l: line;
        variable c: character;
        variable is_string: boolean;

        begin

        readline(in_file, l);
        -- clear the contents of the result string
        for i in res_string'range loop
        res_string(i) := ' ';
        end loop;
        -- read all characters of the line, up to the length
        -- of the results string
        for i in res_string'range loop
        read(l, c, is_string);
        res_string(i) := c;
        if not is_string then -- found end of line
        exit;
        end if;
        end loop;

        end str_read;


        -- print string to a file
        procedure print(file out_file: TEXT;
        new_string: in string) is

        variable l: line;

        begin

        write(l, new_string);
        writeline(out_file, l);

        end print;


        -- print character to a file and start new line
        procedure print(file out_file: TEXT;
        char: in character) is

        variable l: line;

        begin

        write(l, char);
        writeline(out_file, l);

        end print;



        -- appends contents of a string to a file until line feed occurs
        -- (LF is considered to be the end of the string)

        procedure str_write(file out_file: TEXT;
        new_string: in string) is
        begin

        for i in new_string'range loop
        print(out_file, new_string(i));
        if new_string(i) = LF then -- end of string
        exit;
        end if;
        end loop;

        end str_write;




        end txt_util;
        یه توضیح کوچولو!!! :angry: :redface:
        حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

        دیدگاه


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

          باز هم سلام

          در مورد استفاده از مقادیر حقیقی در بدنه برنامه های vhdl چند تا تابع کتابخانه ای توسط شخصی به نام david bishop نوشته شده

          که من اینارو قرار میدم

          www.eda.org/fphdl/Float_ug.pdf

          سوال من اینجاست که چه طور میتونم از یک تابع کتابخانه در برنامه استفاده کنم.

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

          دیدگاه


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

            http://www.cs.columbia.edu/~sedwards/classes/2010/4840/tut_lpms_vhdl.pdf
            اسمایل، تومورو ویل بی وُرس

            دیدگاه


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

              باسلام مجدد

              با عرض معذرت دوباره این فایلی که شما قرار دادید ولی به کار من نیومد چون اون درباره fpga های altera نرم افزار quartus توضیح داده

              در حالی که من از ise xilinx استفاده می کنم

              واقعا دیگه گیج شدم

              نمیدونم باید چه کار کنم

              ؟؟؟؟

              قسمت آخرشم هست

              داده های حقیقی و سنتز نشدن؟؟



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

              دیدگاه


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

                سلام دوست من

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

                دیدگاه


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

                  سلام.اخطار های داخل این عکس به چه معنی هستن؟



                  و ارور های داخل این عکس چی هستن؟

                  دیدگاه


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

                    نوشته اصلی توسط tahasadi1395 نمایش پست ها
                    و ارور های داخل این عکس چی هستن؟
                    داخل کتابخانه ظاهرا متغیر buf بوده؛ دوباره اسم کامپوننت هم شده، واسه این احتمالا ارور میگیره.
                    به نظرم متن کد رابگذارید بهتراست از عکس.

                    دیدگاه


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

                      کد:
                      ----------------------------------------------------------------------------------
                      -- Company: 
                      -- Engineer: 
                      -- 
                      -- Create Date:    10:20:52 06/30/2017 
                      -- Design Name: 
                      -- Module Name:    node_black - Behavioral 
                      -- Project Name: 
                      -- Target Devices: 
                      -- Tool versions: 
                      -- Description: 
                      --
                      -- Dependencies: 
                      --
                      -- Revision: 
                      -- Revision 0.01 - File Created
                      -- Additional Comments: 
                      --
                      ----------------------------------------------------------------------------------
                      library IEEE;
                      use IEEE.STD_LOGIC_1164.ALL;
                      
                      -- Uncomment the following library declaration if using
                      -- arithmetic functions with Signed or Unsigned values
                      --use IEEE.NUMERIC_STD.ALL;
                      
                      -- Uncomment the following library declaration if instantiating
                      -- any Xilinx primitives in this code.
                      --library UNISIM;
                      --use UNISIM.VComponents.all;
                      
                      entity node_black is
                          Port ( g_l : in  STD_LOGIC;
                                 a_l : in  STD_LOGIC;
                                 g_r : in  STD_LOGIC;
                                 
                                 g_out : out  STD_LOGIC);
                      end node_black;
                      
                      architecture Behavioral of node_black is
                      
                      component and2 is
                          Port ( x : in  STD_LOGIC;
                                 y : in  STD_LOGIC;
                                 z : out  STD_LOGIC);
                      end component;
                      component or2 is
                          Port ( x : in  STD_LOGIC;
                                 y : in  STD_LOGIC;
                                 z : out  STD_LOGIC);
                      end component;
                      
                       
                      signal t: std_logic;
                      begin
                      and_comp: and2 port map (a_l, g_r, t);
                      or_comp: or2 port map (g_l, t, g_out);
                      
                      end Behavioral;
                      داخل این کد هم مثل اروری که به buf میده به or2 هم میده

                      دیدگاه


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

                        دوستان حل شد.باید فایل های مربوط به کامپوننت هارو Add sourc میزدم. و همینطور کلاماتی که قهوه ای میشن رزرو شده هستن و نباید استفاده کرد

                        دیدگاه

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