Thông báo

Collapse
No announcement yet.

[verilog FPGA DE2] vòng lặp for

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • [verilog FPGA DE2] vòng lặp for

    hi all ! mình gặp phải rắc rối về vòng lặp for .
    mình viết một đoạn code bằng else if , đã combine và đổ lên FPGA chạy tốt . tuy nhiên khá dài nên mình chuyển đoạn code trên sang dùng vòng lặp For . sau đó combine code trên thì không có lỗi gì . tuy nhiên khi đổ lên FPGA thì không chạy ? ?? 1 người bạn có nói với mình là FPGA không dùng được lệnh for ... ..các bạn có biết về vấn đề này không ?

  • #2
    Nguyên văn bởi gunner Xem bài viết
    hi all ! mình gặp phải rắc rối về vòng lặp for .
    mình viết một đoạn code bằng else if , đã combine và đổ lên FPGA chạy tốt . tuy nhiên khá dài nên mình chuyển đoạn code trên sang dùng vòng lặp For . sau đó combine code trên thì không có lỗi gì . tuy nhiên khi đổ lên FPGA thì không chạy ? ?? 1 người bạn có nói với mình là FPGA không dùng được lệnh for ... ..các bạn có biết về vấn đề này không ?
    Bạn vẽ mạch điện ra rồi up lên đây + với code của bạn ... FPGA xài được for!!!

    Comment


    • #3
      lúc trước cũng làm thử 1 bài đồng hồ số bình thường hiện hh-mm-ss nhưng xài "for" không chạy được , mình chuyển sang dùng "if" thì ok .
      50 năm đã wa nhưng nỗi đau DA CAM vẫn còn

      TỘI ÁC vs CÔNG LÝ

      Comment


      • #4
        Nguyên văn bởi nhi_ot Xem bài viết
        lúc trước cũng làm thử 1 bài đồng hồ số bình thường hiện hh-mm-ss nhưng xài "for" không chạy được , mình chuyển sang dùng "if" thì ok .
        Vòng lặp FOR trong HDL khác với trong lập trình.
        Trong HDL, vòng lặp for sẽ được gỡ/tháo/mở ra trong lúc dịch (static unroll).
        Ví dụ:
        Trong verilog:

        reg [9:0] regA;

        always@...
        begin ..
        for(I=0;I<10;I=I+1)
        if(regA[I]==1'b1 && someInput==1'b1) regA[I]<=1'b0;
        end

        thì sẽ tương đương với:
        always@
        begin
        if(regA[0]==1'b1 && someInput==1'b1) regA[0]<=1'b0;
        if(regA[1]==1'b1 && someInput==1'b1) regA[1]<=1'b0;
        ...
        if(regA[9]==1'b1 && someInput==1'b1) regA[9]<=1'b0;
        end

        Comment


        • #5
          vậy nếu dùng "=" thay cho "<=" có được không
          sẵn tiện cho em hỏi cái khác nhau giữa 2 cách gán blocking và non-blocking luôn .
          thanks
          50 năm đã wa nhưng nỗi đau DA CAM vẫn còn

          TỘI ÁC vs CÔNG LÝ

          Comment


          • #6
            Nguyên văn bởi nhi_ot Xem bài viết
            vậy nếu dùng "=" thay cho "<=" có được không
            sẵn tiện cho em hỏi cái khác nhau giữa 2 cách gán blocking và non-blocking luôn .
            thanks
            Bạn cần phân biệt thời gian thực và thời gian của phần mềm mô phỏng.

            ví dụ:
            always@(posedge clk)
            begin
            A <= IN0; //1
            B <= IN1; //2
            end

            always@(posedge clk)
            begin
            A = IN0; //3
            B = IN1; //4
            end
            Với 2 trường hợp này:
            - Khi tồng hợp đều cho ra 2 D-Flip-flop, và 2 D flip flop này đều clock data tại sườn lên của clock.
            - Khi mô phỏng, câu lệnh 1 và 2 sẽ được thực hiện "cùng một lúc", còn câu lệnh 4 sẽ được thực hiện sau câu lênh 3. "Cùng một lúc" là khái niệm đối với trình mô phỏng thôi.

            Bạn sẽ thấy khác biệt rõ hơn nếu thay đổi code một chút:

            always@(posedge clk)
            begin
            A <= IN0; //1
            B <= A; //2
            end

            always@(posedge clk)
            begin
            A = IN0; //3
            B = A; //4
            end

            Bạn thử phân tích bằng tay, vẽ ra giấy dạng sóng của IN0, A, B, thời điểm ban đầu tất cả = 0, lúc 9ns, IN0 = 1, lúc 10ns, clock chuyển từ 0 sang 1.

            Comment


            • #7
              cảm ơn các bạn

              Comment


              • #8
                à em hiểu cái gọi là "blocking" rồi nó chỉ khác là giá trị được gán " cùng 1 lúc "
                50 năm đã wa nhưng nỗi đau DA CAM vẫn còn

                TỘI ÁC vs CÔNG LÝ

                Comment


                • #9
                  Bạn kia nói cũng có lý đấy, vì có lần mình dùng for code thì không chạy, tự xổ ra 1 đống if thì chạy ngon lành ... !?

                  Comment

                  Về tác giả

                  Collapse

                  gunner Tìm hiểu thêm về gunner

                  Bài viết mới nhất

                  Collapse

                  Đang tải...
                  X