اطلاعیه

Collapse
No announcement yet.

یک برنامه ساده با verilog

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

    یک برنامه ساده با verilog

    با سلام
    یه برنامه ساده می خوام بنویسم با verilog نمی دونم چرا این قدر خطا میده و نمیشه!! :angry: :cry:
    خوب برنامه ای که یک led را خاموش روشن کنه که مشخصه :
    کد:
    module LEDblink(clk, pulse1);
      input clk;   // clock typically from 1Hz to 20Hz
    output pulse1; // create a binary counter
      reg [10:0] cnt;
     always @(posedge clk) cnt<=cnt+1;
     
     assign pulse1 = cnt[5];  
    endmodule
    حالا می خواهیم یه تغییر کوچیک در این برنامه بدیم به این صورت که فقط تعداد مشخصی چشمک بزنه. مثلا 100 بار چشمک بزنه و تمام. حالا باید چه تغییری در این برنامه بدیم؟
    با تشکر
    فيلم آموزشي ميکروکنترلر LPC1768
    فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
    فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
    فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

    #2
    پاسخ : یک برنامه ساده با verilog

    سلام دوست عزیز
    از لحاظ ظاهری من نگاهخ کردم مشکلی نداره
    برای اون کار هم باید شما داخل بلوک alwasy از یه ifاستفاده کنی تا قبل از این که به 100برسه شمارنده افزایش پیدا کنه وقتی به 100 رسید دیگه کاری انجام نده
    راه دیگه ای هم داره یه متغییر بگیره هر بار که میاد داخل بلوک alwasy مقدار متغییر را معکوس کنه و شمارنده داشته باشه این کار را 100 بار انجام بده
    موفق باشید
    هر گاه خداوند تو را به لبه پرتگاه هدايت کرد به خدا اطمينان کن،يا تو را از پشت خواهد گرفت يا به تو پرواز کردن خواهد آموخت.

    دیدگاه


      #3
      پاسخ : یک برنامه ساده با verilog

      فکر کنم ردیف شد :nice:
      فيلم آموزشي ميکروکنترلر LPC1768
      فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
      فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
      فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

      دیدگاه


        #4
        پاسخ : یک برنامه ساده با verilog

        نوشته اصلی توسط ehsanarn
        برای اون کار هم باید شما داخل بلوک alwasy از یه ifاستفاده کنی تا قبل از این که به 100برسه شمارنده افزایش پیدا کنه وقتی به 100 رسید دیگه کاری انجام نده
        سلام
        من به این روش انجام دادم خوب مشکلی نبود و خطایی وجود نداره. گفتم بیام با حلقه while این کار را انجام بدم که تا زمانی که شمارنده مان کمتر از حدی است ادامه بدهد:
        کد:
        module n_LEDblink(clk,led1);
          input clk;   // clock typically from 10MHz to 50MHz
          output led1;
        
          // create a binary counter
          reg [10:0] cnt = 0 ;
        	 reg [30:0] numb = 0;
        	 while (numb <= 10)
        	 begin
            @(posedge clk) 
        	  cnt <= cnt+1;
        	 end
        
        	 assign led1 = cnt[2];  // blink the LED at a few Hz (change the bit index to change the blinking rate)
          always @(posedge led1) numb <= numb+1;  
        endmodule
        ولی می دونم چرا این خطا را میده: :angry:
        ERROR:HDLCompilers:26 - "n_LEDblink.v" line 28 expecting 'endmodule', found 'while'
        چکار کنم این خطا برطرف بشه؟ دستور while نباید داخل module باشه؟
        فيلم آموزشي ميکروکنترلر LPC1768
        فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
        فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
        فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

        دیدگاه


          #5
          پاسخ : یک برنامه ساده با verilog

          سلام دوست عزیز
          دستور While باید داخل بلوک باشه
          به عنوان مثال تو همین سوال شما به این صورت تغییر بدید برنامه
          always @(posedge clk)
          begin
          while(numb<=10)
          begin
          cnt <= cnt+1;
          end
          end
          هر گاه خداوند تو را به لبه پرتگاه هدايت کرد به خدا اطمينان کن،يا تو را از پشت خواهد گرفت يا به تو پرواز کردن خواهد آموخت.

          دیدگاه


            #6
            پاسخ : یک برنامه ساده با verilog

            سلام
            این تغییرات انجام شد. ولی خطا میده. یعنی check sintax موردی نداره ولی در sinthesize مورد داره:
            فيلم آموزشي ميکروکنترلر LPC1768
            فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
            فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
            فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

            دیدگاه


              #7
              پاسخ : یک برنامه ساده با verilog

              سلام دوست عزیز
              شما از چه نرم افزاری استفاده می کنید؟؟؟
              هر گاه خداوند تو را به لبه پرتگاه هدايت کرد به خدا اطمينان کن،يا تو را از پشت خواهد گرفت يا به تو پرواز کردن خواهد آموخت.

              دیدگاه


                #8
                پاسخ : یک برنامه ساده با verilog

                سلام
                از ise 9.1
                به نرم افزار ربطی داره؟
                فيلم آموزشي ميکروکنترلر LPC1768
                فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
                فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
                فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

                دیدگاه


                  #9
                  پاسخ : یک برنامه ساده با verilog

                  فکر نکنم به نرم افزار ربطی داشته باشه
                  چون فایل برنامه به نظر درست هست
                  من اگه بتونم تا فردا نرم افزار را پیدا کنم روش تست کنم ببینم چی میشه
                  هر گاه خداوند تو را به لبه پرتگاه هدايت کرد به خدا اطمينان کن،يا تو را از پشت خواهد گرفت يا به تو پرواز کردن خواهد آموخت.

                  دیدگاه


                    #10
                    پاسخ : یک برنامه ساده با verilog

                    دوست عزیز
                    به نظر من برنامه تو while گیر میکنه
                    و به اون قسمت آخر که باید متغیر numرا اضافه کنه نمیرسه
                    هر گاه خداوند تو را به لبه پرتگاه هدايت کرد به خدا اطمينان کن،يا تو را از پشت خواهد گرفت يا به تو پرواز کردن خواهد آموخت.

                    دیدگاه


                      #11
                      پاسخ : یک برنامه ساده با verilog

                      سلام
                      ظاهرش درسته و قائدتا باید کار کنه ولی نمی دونم چرا اینطوره :cry2:
                      فيلم آموزشي ميکروکنترلر LPC1768
                      فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
                      فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
                      فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

                      دیدگاه


                        #12
                        پاسخ : یک برنامه ساده با verilog

                        من خودم وقت ندارم تست کنم
                        خودتون برای ماژول اولی که نوشتین یه Reset هم قرار بدین به احتمال زیاد باید کار کنه :biggrin:
                        دعایم کنید که شاید به واسطه ی دعای خیر شما مشکلاتم حل شود .

                        دیدگاه


                          #13
                          پاسخ : یک برنامه ساده با verilog

                          نوشته اصلی توسط goldperson2005
                          من خودم وقت ندارم تست کنم
                          خودتون برای ماژول اولی که نوشتین یه Reset هم قرار بدین به احتمال زیاد باید کار کنه :biggrin:
                          سلام
                          یعنی اینطوری :
                          کد:
                          module n_LEDblink(clk,reset,led1);
                            input clk,reset;   // clock typically from 1Hz to 20Hz
                            output led1;
                          
                            // create a binary counter
                            reg [32:0] cnt = 0 ;
                          	 reg [30:0] numb = 0;
                            always @(posedge clk)
                              if (reset)
                          		  cnt <= 0;
                          		 else
                          	    while (numb <= 10)
                          	      begin
                          	       cnt <= cnt+1;
                          	      end
                          	 assign led1 = cnt[3];  // blink the LED at a few Hz (change the bit index to change the blinking rate)
                            always @(posedge led1) numb <= numb+1;  
                          endmodule
                          ولی بازم خطای قبلی پابرجاست :NO: جالبه تیک سبز check syntax خورده میشه ولی ...
                          فيلم آموزشي ميکروکنترلر LPC1768
                          فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
                          فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
                          فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

                          دیدگاه


                            #14
                            پاسخ : یک برنامه ساده با verilog

                            من اینطوری تغییرش دادم سنتز هم شد :

                            module n_LEDblink(clk,reset,led1);
                            input clk,reset;
                            output led1;
                            reg [32:0] cnt = 0 ;
                            reg [30:0] numb = 0;
                            always @(posedge clk)
                            if (reset)
                            cnt <= 0;
                            else if (numb <= 10)
                            cnt <= cnt+1;
                            assign led1 = cnt[3];
                            always @(posedge led1) numb <= numb+1;
                            endmodule

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

                            دیدگاه


                              #15
                              پاسخ : یک برنامه ساده با verilog

                              نوشته اصلی توسط goldperson2005
                              من اینطوری تغییرش دادم سنتز هم شد :

                              module n_LEDblink(clk,reset,led1);
                              input clk,reset;
                              output led1;
                              reg [32:0] cnt = 0 ;
                              reg [30:0] numb = 0;
                              always @(posedge clk)
                              if (reset)
                              cnt <= 0;
                              else if (numb <= 10)
                              cnt <= cnt+1;
                              assign led1 = cnt[3];
                              always @(posedge led1) numb <= numb+1;
                              endmodule

                              از هفته دیگه جمعه وقتم یکم بیشتر می شه بیشتر می تونم وقت بذارم .
                              سلام
                              بله این دقیفا اون برنامه ای است که در پست 3 گفتم انجام شد ولی توجه کنید که من گفتم می خواهم با while انجام بدهم :redface:
                              فيلم آموزشي ميکروکنترلر LPC1768
                              فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
                              فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
                              فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

                              دیدگاه

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