Thông báo

Collapse
No announcement yet.

Cần góp ý về đoạn code Verilog sau đây-mô phỏng trên kit DE2

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

  • #16
    Trở lại clock enable cho "dem", "dem" chỉ tăng khi clock enable = '1'. Chẳng hạn khi key[0] hoặc key[1] được nhấn xuống, set clock enable = '1' để bắt đầu đếm, và khi đếm = X, reset clock enable = '0' để ngưng đếm. Theo như template bên trên:

    Code:
    always @ (posedge clk)
      if (dem == X)
        dem_clock_enable = 1'b0;
      else
        if (key[0] = 1'b1 or key[1] = 1'b1)
          dem_clock_enable = 1'b1;

    Nếu chúng ta muốn đếm chỉ khi clock enable = '1', và reset đếm thành 0 khi đếm bằng X, chúng ta cũng code theo template:

    Code:
    always @ (posedge clk)
      if (dem == X)
        dem = 0;
      else
        if (dem_clock_enable = 1'b1)
          dem  = dem  + 1;

    Nếu bạn chỉ muốn bắt đầu đếm sau khi key đã được nhấn và buông ra, bạn cần phải tìm falling edge của key (synchronously), và sau đó dùng falling edge của key để tác động lên clock enable:

    Code:
    always @ (posedge clk)
      if (dem == X)
        dem_clock_enable = 1'b0;
      else
        if (key_falling_edge[0] = 1'b1 or key_falling_edge[1] = 1'b1)
          dem_clock_enable = 1'b1;
    Một cách thường được dùng để tìm falling edge (hoặc rising edge) là delay signal 1 clock cycle. Dựa vào sự khác biệt giữa signal với no delay và signal delayed 1 clock cycle, chúng ta có thể biết khi nào key_falling_edge nên được set thành '1'.

    key_no_delay:000011110000
    key_delay_01:000001111000
    falling_edge:000000000100


    Dùng "always @(negedge KEY[0] or negedge KEY[1])" is not recommended.


    Một vấn đề khác nữa là bạn nhấn và sau đó buông key. Khi key[X] = '1', bạn cần save giá trị của X để sau đó bạn có thể biết key nào đã được nhấn, và display những giá trị tương ứng ra LED.

    Comment


    • #17
      Nguyên văn bởi nemesis21 Xem bài viết
      Trở lại clock enable cho "dem", "dem" chỉ tăng khi clock enable = '1'. Chẳng hạn khi key[0] hoặc key[1] được nhấn xuống, set clock enable = '1' để bắt đầu đếm, và khi đếm = X, reset clock enable = '0' để ngưng đếm. Theo như template bên trên:

      Code:
      always @ (posedge clk)
        if (dem == X)
          dem_clock_enable = 1'b0;
        else
          if (key[0] = 1'b1 or key[1] = 1'b1)
            dem_clock_enable = 1'b1;

      Nếu chúng ta muốn đếm chỉ khi clock enable = '1', và reset đếm thành 0 khi đếm bằng X, chúng ta cũng code theo template:

      Code:
      always @ (posedge clk)
        if (dem == X)
          dem = 0;
        else
          if (dem_clock_enable = 1'b1)
            dem  = dem  + 1;

      Nếu bạn chỉ muốn bắt đầu đếm sau khi key đã được nhấn và buông ra, bạn cần phải tìm falling edge của key (synchronously), và sau đó dùng falling edge của key để tác động lên clock enable:

      Code:
      always @ (posedge clk)
        if (dem == X)
          dem_clock_enable = 1'b0;
        else
          if (key_falling_edge[0] = 1'b1 or key_falling_edge[1] = 1'b1)
            dem_clock_enable = 1'b1;
      Một cách thường được dùng để tìm falling edge (hoặc rising edge) là delay signal 1 clock cycle. Dựa vào sự khác biệt giữa signal với no delay và signal delayed 1 clock cycle, chúng ta có thể biết khi nào key_falling_edge nên được set thành '1'.

      key_no_delay:000011110000
      key_delay_01:000001111000
      falling_edge:000000000100


      Dùng "always @(negedge KEY[0] or negedge KEY[1])" is not recommended.


      Một vấn đề khác nữa là bạn nhấn và sau đó buông key. Khi key[X] = '1', bạn cần save giá trị của X để sau đó bạn có thể biết key nào đã được nhấn, và display những giá trị tương ứng ra LED.
      Cảm ơn memsis đã tận tình giúp đỡ!!Mình sẽ test thử rùi sẽ post kết quả lên sau!

      Comment


      • #18
        Nhờ anh NEO chỉ giáo thêm và ap dụng mấy doạn code memsis chỉ giáo mình đã viết dc đoạn này rùi!!Thank 2 người nhiều lắm!!
        Last edited by achilles86; 06-05-2009, 23:18.

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        • nguyendinhvan
          Trả lời cho Vấn đề về tốc độ quay
          bởi nguyendinhvan
          Sử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
          Hôm qua, 19:50
        • Andrea14
          Vấn đề về tốc độ quay
          bởi Andrea14
          Chào mọi người,

          Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
          12-12-2025, 12:42
        • bqviet
          Trả lời cho Đấu tắt điện cho máy tính bảng
          bởi bqviet
          Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
          06-12-2025, 17:17
        Đang tải...
        X