اطلاعیه

Collapse
No announcement yet.

دادن فایل text به عنوان سیگنال ورودی در ModelSim

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

    دادن فایل text به عنوان سیگنال ورودی در ModelSim

    سلام. میخوام یک فایل text که مقادیر عددی fixed-point داخلش ذخیره شدن رو به عنوان ورودی به یکی از سیگنالهای ورودی شبیه سازی ModelSim بدم ولی نمیدونم چطوری این کار انجام میشه. ظاهراً یک راه کدنویسی VHDL و استفاده از TEXTIO و راه دیگه استفاده از مقادیر STD_INPUT و STD_OUTPUT در تب VHDL در پنجره ...Start Simulation هست ولی کار با هیچ کدوم رو بلد نیستم و متأسفانه عجله هم دارم. امیدوارم توی این روز سیزدهی یه نفر جواب بده.
    لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
    لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
    با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
    اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
    يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

    #2
    پاسخ : دادن فایل text به عنوان سیگنال ورودی در ModelSim

    سلام تو این لینک ظاهرا این کار رو کرده:
    برنامه رو ببینید

    http://www.alteraforum.com/forum/showthread.php?t=37547

    کد:
    -- read input stimulus 
    process(reset,clk)
    file file_in : text open read_mode is "filename.txt";
    variable line_in : line;
    variable input_tmp : integer := 0;
    
    begin
    if(reset = '1')then
    data_in <= (others => '0');
    elsif(rising_edge(clk))then
    if not endfile(file_in)then
    readline(file_in,line_in);
    read(line_in,input_tmp);
    data_in <= std_logic_vector(to_signed(input_tmp,16));
    end if;
    end if;
    end process;

    دیدگاه


      #3
      پاسخ : دادن فایل text به عنوان سیگنال ورودی در ModelSim

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

      دیدگاه


        #4
        پاسخ : دادن فایل text به عنوان سیگنال ورودی در ModelSim

        من از این کد که استفاده می کنم ModelSim یک Warning میده و میگه Warning: NUMERIC_STD.TO_INTEGER: metavalue detected, returning 0، فکر می کنم مشکل از فرمت فایل متنی ورودیه که نمیدونم چطوری باید باشه. به همون فرمت اعشاری علامت دار / به صورت fixed-point و دسیمال / fixed-point و هگز یا باینری؟
        لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
        لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
        با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
        اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
        يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

        دیدگاه


          #5
          پاسخ : دادن فایل text به عنوان سیگنال ورودی در ModelSim

          دوستان یعنی کسی ModelSim کار نکرده جواب بده؟
          اون مشکل حل شد و الان فایل متنی که اعداد صحیح نامنفی هستن میتونه بخونه ولی فقط آخرین مقدار رو نشون میده یعنی از ثانیه 0 تا 1000 نانوثانیه که میره فقط یک مقدار نشون میده در حالی که 200 تا مقدار رو میخونه پس بقیه چی شده؟
          یه سوال دیگه: کلاک داخلی توی VHDL چطوری میشه تعریف کرد؟
          لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
          لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
          با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
          اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
          يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

          دیدگاه


            #6
            پاسخ : دادن فایل text به عنوان سیگنال ورودی در ModelSim

            با سلام
            اون مشکل حل شد
            منظور شما این مشکله :
            میخوام یک فایل text که مقادیر عددی fixed-point داخلش ذخیره شدن رو به عنوان ورودی به یکی از سیگنالهای ورودی شبیه سازی ModelSim بدم ولی نمیدونم چطوری این کار انجام میشه.
            ممنون میشم بفرمایید چطور حل شد، احتمالا در آینده نچندان دور بدرد بنده هم بخوره.

            یه سوال دیگه: کلاک داخلی توی VHDL چطوری میشه تعریف کرد؟
            منظورتون توی تست بنچ هست؟
            اگه درست فهمیده باشم منظورتون رو به این شکل میشه :

            clock_generator:process

            variable clock:std_logic:='0';

            begin
            clock:= not clock;
            clk<=clock;
            wait for 100 ns;
            end process clock_generator;

            دیدگاه


              #7
              پاسخ : دادن فایل text به عنوان سیگنال ورودی در ModelSim

              نوشته اصلی توسط هـادی
              دوستان یعنی کسی ModelSim کار نکرده جواب بده؟
              سوالت ربطی به modelsim نداره! باید دستورات vhdl رو بلد باشی و از طرف دیگه باید سیمولاتور، اون دستورات رو پشتیبانی کنه که modelsim یکی از نرم افزارهایی که معمولا آخزین استانداردهای زبان ها رو پشتیبانی میکنه.
              هرچند modelsim هم دستوراتی اضافه بر دستورات خود زبان داره ، اما نمیشه از scriptهای modelsim تو توصیف مدار استفاده کرد و باید تو خط فرمان modelsim اجرا بشه.
              مثلا verilog دستور خوندن فایل برای پر کردن حافظه داره و از طرفی modelsim هم دستورات خاص خودش رو برای این کار داره که میشه تو خط فرمان اجرا کرد.
              در مورد سوال این تاپیک بنظرم دستورات زبان راحتر باشه. تو وریلاگ که راحت میشه این کارو کرد. دستورات modelsim هم تو هلپش کامل هست
              https://www.linkedin.com/in/mohammadhosseini69

              http://zakhar.blog.ir

              دیدگاه


                #8
                پاسخ : دادن فایل text به عنوان سیگنال ورودی در ModelSim

                نوشته اصلی توسط mojtaba_led
                با سلام منظور شما این مشکله : ممنون میشم بفرمایید چطور حل شد، احتمالا در آینده نچندان دور بدرد بنده هم بخوره.
                [/ltr]
                اشتباه من جای دیگه ای بود. کارم که روی این کد تموم شد میذارم.
                لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                دیدگاه


                  #9
                  پاسخ : دادن فایل text به عنوان سیگنال ورودی در ModelSim

                  سلام مجدد. بابت تأخیر نسبتاً زیاد شرمنده چند مدتیه خیلی درگیرم.
                  برای دادن سیگنال ورودی برای شبیه سازی و یا ذخیره سیگنال خروجی در VHDL لازمه که از بسته textio کتابخانه std استفاده کرد.
                  کد PHP:
                  USE std.textil.ALL 

                  فایل ورودی به صورت زیر پروسس و قبل از begin معرفی میشه:
                  کد PHP:
                  file input_file text is in "filter_input.txt"; 


                  که فایل filter_input.txt در محل Working Directory قرار داره، در غیر این صورت باید آدرس نسبی یا کامل فایل رو نوشت.
                  کلمه in در کد بالا مربوط به استاندارد VHDL-87 هست ولی میشه در VHDL-93 هم استفاده کرد در استاندارد VHDL-93 میشه این کلمه رو حذف کرد.
                  فایل خروجی هم به صورت زیر:
                  کد PHP:
                  file output_file text is out "filter_output.txt"; 


                  یک متغیر از نوع line هم برای خواندن خطوط فایل ورودی یا نوشتن یک خط در فایل خروجی لازمه:
                  کد PHP:
                  variable in_line,out_line line

                  به ازای هر فایلی که قصد خواندن یا نوشتن از/در اون رو دارید باید یک متغیر تعریف بشه.

                  متغیری که از فایل خوانده میشه یا در فایل نوشته میشه از نوع integer تعریف کنید:
                  کد PHP:
                  variable input_value,output_value integer


                  بقیه برنامه هم به این شکل میتونه باشه:
                  کد:
                  		if clk'event and clk = '1' then
                  			if not endfile(input_file) then
                  				readline(input_file,in_line);
                  				read(in_line,input_value);
                  --				D_IN <= conv_std_logic_vector(input_value,16);
                  				D_IN <= std_logic_vector(to_signed(input_value,16));
                  				
                  --				output_value := conv_integer(D_OUT);
                  				output_value := to_integer(signed(D_OUT));
                  				write(out_line,output_value);
                  				writeline(output_file,out_line);
                  				
                  			end if;
                  		end if;
                  در خطوطی که کامنت شدن از توابع و انواع بسته std_logic_signed (و در صورتی که داده ها بدون علامت باشند از std_logic_unsigned)استفاده شده و خطوط بعدش از توابع و انواع بسته numeric_std کتابخانه ieee استفاده شده که انتخابش به خودتون بستگی داره ولی فقط باید از یکی از این بسته ها استفاده بشه.

                  این هم یک مثال که در اون یک فیلتر FIR پایین گذر طراحی شده(با fdatool متلب) و برای تست یک سیگنال chirp داده شده و خروجی در فایل متنی filter_output.txt ذخیره میشه. یکی از مزایای استفاده از textio اینه که در صورت استفاده از شبیه ساز ISim که قادر به رسم شکل آنالوگ سیگنالها نیست، میشه فایل خروجی رو با متلب خوند و پلات کرد.
                  لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                  لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                  با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                  اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                  يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                  دیدگاه


                    #10
                    پاسخ : دادن فایل text به عنوان سیگنال ورودی در ModelSim

                    من این برنامه vhdl رو طبق توضیحات بالا نوشتم ولی synthesize نمیشه :angry:
                    تازه بعد از نوشتن میخوام test bench رو بویسم و بعد ببرمش توی شبیه ساز isim
                    اگه میشه کمک کنید خیلی مهمه واسم
                    ممنون
                    library IEEE;
                    use IEEE.STD_LOGIC_1164.ALL;
                    use std_logic_textio.ALL
                    use IEEE.NUMERIC_STD.ALL;
                    use IEEE.std_logic_signed.all;

                    entity fir is
                    Port ( Din : buffer STD_LOGIC_VECTOR (15 downto 0);
                    Dout : buffer STD_LOGIC_VECTOR (36 downto 0);
                    clk : in STD_LOGIC;
                    reset : in STD_LOGIC);
                    end fir;

                    architecture Behavioral of fir is

                    variable input_value,output_value : integer;

                    type signed_array_type is array (natural range <&gt of signed(15 downto 0);
                    signal delayed_input : signed_array_type(0 to 40);
                    constant coefs : signed_array_type(0 to 40) := (
                    to_signed(-32,16),to_signed(519,16),to_signed(131,16),to_sign ed(-412,16),to_signed(-330,16),to_signed(473,16),to_signed(644,16),to_sig ned(-427,16),
                    to_signed(-1055,16),to_signed(203,16),to_signed(1537,16),to_s igned(285,16),to_signed(-2045,16),to_signed(-1169,16),to_signed(2526,16),to_signed(2741,16),
                    to_signed(-2923,16),to_signed(-6035,16),to_signed(3185,16),to_signed(20544,16),to _signed(29492,16),to_signed(20544,16),to_signed(31 85,16),to_signed(-6035,16),to_signed(-2923,16),
                    to_signed(2741,16),to_signed(2526,16),to_signed(-1169,16),to_signed(-2045,16),to_signed(285,16),to_signed(1537,16),to_s igned(203,16),to_signed(-1055,16),
                    to_signed(-427,16),to_signed(644,16),to_signed(473,16),to_sig ned(-330,16),to_signed(-412,16),to_signed(131,16),to_signed(519,16),to_sig ned(-32,16));

                    -- FIR Filter Fixed-Point Coefficients:
                    -- -32,519,131,-412,-330,473,644,-427,
                    -- -1055,203,1537,285,-2045,-1169,2526,2741,
                    -- -2923,-6035,3185,20544,29492,20544,3185,-6035,-2923,
                    -- 2741,2526,-1169,-2045,285,1537,203,-1055,
                    -- -427,644,473,-330,-412,131,519,-32
                    begin

                    delay_proc: process(clk,reset)
                    file input_file : text is in "filter_input.txt";
                    variable in_line : line;
                    begin

                    --------------------------------------------------
                    if not endfile(input_file) then
                    --************************************
                    readline(input_file,in_line);
                    read(in_line,input_value);
                    --************************************
                    DIN <= std_logic_vector(to_signed(input_value,16));

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

                    if reset = '1' then
                    for i in 0 to 40 loop
                    delayed_input(i) <= to_signed(0,16);
                    end loop;
                    elsif clk'event and clk = '1' then
                    delayed_input(1 to 40) <= delayed_input(0 to 39);
                    delayed_input(0) <= signed(Din);
                    end if;

                    end if;
                    end process;
                    --**************************************

                    mul_proc: process(clk)

                    file output_file : text is out "filter_output.txt";
                    variable out_line : line;
                    variable tmp_mul : signed(30 downto 0);
                    variable result : signed(36 downto 0);
                    begin

                    if not endfile(input_file) then
                    result := to_signed(0,37);
                    if clk'event and clk = '1' then
                    for i in 0 to 40 loop
                    tmp_mul := coefs(i) * delayed_input(i);
                    result := result + resize(tmp_mul,37);
                    end loop;
                    Dout <= std_logic_vector(result);

                    output_value := to_integer(signed(Dout));
                    --*********************************
                    write(out_line,output_value);
                    writeline(output_file,out_line);
                    --************************************
                    end if;
                    end if;
                    end process;
                    end Behavioral;

                    دیدگاه


                      #11
                      پاسخ : دادن فایل text به عنوان سیگنال ورودی در ModelSim

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

                      دیدگاه

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