Thông báo

Collapse
No announcement yet.

Cần giúp đỡ về Verilog

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

  • Cần giúp đỡ về Verilog

    mình mới học verilog, nên có nhiều chỗ còn chưa hiểu rõ mong mọi người chỉ giáo cho mình về kiểu dữ liệu net. Theo nhiều tài liệu mình đọc cả tiếng việt lẫn tiếng anh thì Wand và Wor sẽ synthesize ra cổng AND/OR nhưng mình vẫn thấy nó mâu thuẫn với những gì mình biết về Wand/Wor. Cho một ví dụ như thế này:
    Wand z;
    buff(pull1,pull0)(z,a);
    buff(pull1,pull0)(z,b);
    khi a=1,b=0 thì kết quả =0 như kết quả thu được từ cổng AND nhưng
    buff(pull1,weak0)(z,a);
    buff(pull1,weak0)(z,b);
    khi a=1,b=0 thì kết quả bằng 1
    Rõ ràng khi 2 driver cùng độ mạnh thì kết quả sẽ giống cổng logic AND nhưng khi 2 driver có độ mạnh khác nhau thì kết quả là độ mạnh và giá trị của driver có độ mạnh lớn hơn. Nhưng vấn đề là các tài liệu mà mình đọc đều nói mạch sẽ synthesize ra cổng AND như vậy trường hợp thứ 2 sẽ xử lý như thế nào. Mong mọi người cho ý kiến và giúp đỡ nhé!

  • #2
    oi, khong ai giup minh duoc a, minh dang can

    Comment


    • #3
      Chào bạn stupid_geniu,

      Theo mình biết thì kiểu dữ liệu net wand hay wor cho phép bạn nối hai hoặc nhiểu hơn đầu ra vào cùng một điểm. Tùy vào công cụ tổng hợp mạch mà nó sẽ tự động chèn loại cổng and hay or cho bạn. Và bạn thông thường sẽ không biết nó sẽ cung cấp cho bạn cổng and nào hoặc cổng or nào. Một kinh nghiệm mình học được khi làm thiết kế số là nếu mình biết, viết code thế này thì mạch thực tế nó sẽ thế nào, sẽ cực kỳ tốt (think hardware design, no software programming).

      Trong trường hợp của bạn nếu bạn khai báo z là một net loại wand, nghĩa là bạn muốn tất cả các tín hiệu ra từ khối khác nối tới z sẽ phải and lại với nhau để cho ra z, thì tại sao bạn không khai báo z chỉ là net rồi bạn chèn cổng and vào, như vậy bạn sẽ chắc chắn nhất về mạch cuối cùng của bạn sẽ thế nào. Như thế bạn sẽ không phải bận tâm nữa. Tuy nhiên bảng sự thật mà các công cụ tổng hợp mạch cung cấp cho bạn sẽ thế này:

      +wand:
      00 -> 0
      01 -> 0
      0Z -> 0
      0X -> 0
      11 -> 1
      1Z -> X
      1X -> X
      ZZ -> Z
      ZX -> X
      XX -> X

      P/S: nếu bạn thấy sai so với bảng này thì bạn cần kiểm tra lại chắc chắn kiểu dữ liệu đầu ra mạch buff của bạn

      Chúc bạn thành công!
      Thân mến,
      Last edited by hithere123; 14-03-2012, 11:43. Lý do: thêm ps

      Comment


      • #4
        Nguyên văn bởi hithere123 Xem bài viết
        Chào bạn stupid_geniu,

        Theo mình biết thì kiểu dữ liệu net wand hay wor cho phép bạn nối hai hoặc nhiểu hơn đầu ra vào cùng một điểm. Tùy vào công cụ tổng hợp mạch mà nó sẽ tự động chèn loại cổng and hay or cho bạn. Và bạn thông thường sẽ không biết nó sẽ cung cấp cho bạn cổng and nào hoặc cổng or nào. Một kinh nghiệm mình học được khi làm thiết kế số là nếu mình biết, viết code thế này thì mạch thực tế nó sẽ thế nào, sẽ cực kỳ tốt (think hardware design, no software programming).

        Trong trường hợp của bạn nếu bạn khai báo z là một net loại wand, nghĩa là bạn muốn tất cả các tín hiệu ra từ khối khác nối tới z sẽ phải and lại với nhau để cho ra z, thì tại sao bạn không khai báo z chỉ là net rồi bạn chèn cổng and vào, như vậy bạn sẽ chắc chắn nhất về mạch cuối cùng của bạn sẽ thế nào. Như thế bạn sẽ không phải bận tâm nữa. Tuy nhiên bảng sự thật mà các công cụ tổng hợp mạch cung cấp cho bạn sẽ thế này:

        +wand:
        00 -> 0
        01 -> 0
        0Z -> 0
        0X -> 0
        11 -> 1
        1Z -> X
        1X -> X
        ZZ -> Z
        ZX -> X
        XX -> X

        P/S: nếu bạn thấy sai so với bảng này thì bạn cần kiểm tra lại chắc chắn kiểu dữ liệu đầu ra mạch buff của bạn

        Chúc bạn thành công!
        Thân mến,
        Cám ơn bạn đã trả lời bài của mình nhưng mình không phải có ý đó mà mình không hiểu tại sao Wand/Wor khi synthesize ra cổng AND/OR mà các tài liệu tham khảo mà mình đọc được nói như vậy nhưng nếu dựa trên ý nghĩa mà Wand/Wor, thì chỉ khi độ mạnh của các driver bằng nhau thì kết quả mới giống cổng AND/OR nhưng khi 2 driver có độ mạnh khác nhau thì rõ ràng kết quả sẽ khác đi, như vậy thì khi synthesize ở trường hợp 2 đâu thể insert cổng AND/OR vào dây nối Wand/Wor được.

        Comment


        • #5
          Chào bạn,

          Mình nghĩ nó không nằm ở kiểu khai báo wand. Bạn có thể đưa ra giá trị đầu ra z khi a = 0/1/Z/X trong mạch buffer của bạn
          wire z;
          buff(pull1,weak0)(z,a);

          Thân mến,

          P/S: gợi ý thêm cho bạn thế này: wand thông thường sẽ không chèn cổng "and" thực sự cho bạn mà sẽ chèn dạng mạch open-drain mà có chức năng giống and. Vậy trong trường hợp đầu ra vào của and không khỏe như nhau thì nó sẽ tuân theo nguyên tắc anh nào mạnh hơn sẽ thắng. a = 1 thì đầu ra của buff là 1 với độ khỏe là "pull". b= 0 thì đầu ra của buff là 0 với độ khỏe là "weak". So sánh về độ khỏe thì "pull" khỏe hơn "weak". Do vậy kết quả mô phỏng của bạn là 1 là kết quả đúng khi mô phỏng. Tuy nhiên xuống tới mạch thì sẽ không có khái niệm pull hay weak. Nó chỉ có 3 trạng thái cơ bản sau: 0 --> VSS; 1 --> VDD; Z--> open-drain (thằng nào khỏe hơn thì sẽ ăn); và X --> nằm ở đâu đó chỉ có chúa mới biết.
          Last edited by hithere123; 14-03-2012, 15:12. Lý do: thêm p/s

          Comment


          • #6
            a, mà bạn cho mình hỏi thêm về cái open-drain. bạn có tài liệu nào nói về vấn đề này không share mình với. Cảm ơn bạn trước nha!!!

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X