Announcement

Collapse
No announcement yet.

[Thử tài thiết kế số] Thực hiện hàm logic bằng MUX

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Thử tài thiết kế số] Thực hiện hàm logic bằng MUX

    Chào các bạn,

    Sáng nay có một bạn hỏi mình về việc thực hiện hàm logic bằng MUX, nên mình cũng muốn up lên đây cho các bạn thảo luận và làm xem sao.

    Đề: Chỉ sử dụng MUX2-1, MUX4-1 thiết kế hàm logic 4 biến sau:
    func.PNG

    Chúc các bạn học tốt!

    P/S: Mấy thầy dạy Mạch số ưa thích cái này lắm, đặc biệt là thầy Sang.
    Tôi không hối tiếc những gì mình đã làm. Tôi chỉ hối tiếc những gì đã không làm khi có cơ hội!

  • #2
    biểu thức được rút gọn bằng bìa karnaugh thành: F=ABC+D(A+B)
    code verilog như sau:
    module f(A,B,C,D,F);
    input A,B,C,D;
    output F;
    MUX_4to1 a0(.out(F),
    .s({A,B}),
    .s11(C),
    .s01(D),
    .s10(D),
    .s00(0));
    endmodule
    P/S: e mới thi rớt môn HDL, môn sinh mới, mong a nương tay cho xin ít gạch (kinh nghiệm) để về tu luyện =D , thanks a!!!

    Comment


    • #3
      Originally posted by 12520797 View Post
      biểu thức được rút gọn bằng bìa karnaugh thành: F=ABC+D(A+B)
      code verilog như sau:
      module f(A,B,C,D,F);
      input A,B,C,D;
      output F;
      MUX_4to1 a0(.out(F),
      .s({A,B}),
      .s11(C),
      .s01(D),
      .s10(D),
      .s00(0));
      endmodule
      P/S: e mới thi rớt môn HDL, môn sinh mới, mong a nương tay cho xin ít gạch (kinh nghiệm) để về tu luyện =D , thanks a!!!
      Chào bạn Đạo,
      Ý tưởng của bạn chính là dùng A và B làm 2 biến điều khiển, việc còn lại là gán 4 đầu vào của MUX4-1 cho C, D và 0 hoặc 1.
      Mình hoàn toàn đồng ý với ý tưởng của bạn, nhưng bạn đã không thực hiện theo "design flow" và bạn đã sa vào bẫy. Theo nhận định của mình thì bạn đã quá nóng vội khi rút gọn hàm F và dẫn đến việc ngộ nhận ở trường hợp A và B đều bằng 1 (các trường hợp còn lại bạn đã nhận định đúng). Bạn nghiệm lại xem, nếu A và B đều bằng 1 thì F = C + D có phải không?
      Bạn xem lại và sửa lại lỗi mà mình vừa nêu nha.

      Một điều khuyến cáo bạn và các bạn khác là khi thiết kế mạch, các bạn nên đi theo từng bước, không bên đốt cháy giai đoạn, tránh bị ngộ nhận.

      Chúc bạn học tốt!
      Trần Đại Dương.
      Tôi không hối tiếc những gì mình đã làm. Tôi chỉ hối tiếc những gì đã không làm khi có cơ hội!

      Comment


      • #4
        Em chào anh.
        Em giải như vầy anh xem có được không ạ. Bài của e dùng 1 MUX_4to1 và 2 MUX_2to1, hơi tốn ^^
        Biểu thức rút gọn: F = ABC + (A + B)D
        code verilog cho bài:

        module f (A, B, C, D, F);
        input A, B, C, D;
        output F;

        wire ABC, AorB;

        Mux_4to1 (.s00(0), .s01(0), .s10(0), .s11(B), .s({A,C}), .f(ABC)); //Bieu thuc tinh ABC
        Mux_2to1 (.s0(B), .s1(1), .s(A), .f(AorB)); //Bieu thuc tinh A + B
        Mux_2to1 (.s0(ABC), .s1(AorB), .s(D), .f(F)); //Bieu thuc tinh F

        endmodule

        Anh xem giúp em với ạ. Em xin cảm ơn anh ạ

        Comment


        • #5
          Originally posted by 12520397 View Post
          Em chào anh.
          Em giải như vầy anh xem có được không ạ. Bài của e dùng 1 MUX_4to1 và 2 MUX_2to1, hơi tốn ^^
          Biểu thức rút gọn: F = ABC + (A + B)D
          code verilog cho bài:

          module f (A, B, C, D, F);
          input A, B, C, D;
          output F;

          wire ABC, AorB;

          Mux_4to1 (.s00(0), .s01(0), .s10(0), .s11(B), .s({A,C}), .f(ABC)); //Bieu thuc tinh ABC
          Mux_2to1 (.s0(B), .s1(1), .s(A), .f(AorB)); //Bieu thuc tinh A + B
          Mux_2to1 (.s0(ABC), .s1(AorB), .s(D), .f(F)); //Bieu thuc tinh F

          endmodule

          Anh xem giúp em với ạ. Em xin cảm ơn anh ạ
          Chào bạn Thành,

          Bài làm của bạn tiếp tục mắc phải lỗi như của bạn Đạo trước đó. Trong bài của bạn, Mux_2to1 dùng để tính F bị sai. Khi D = 0 thì đúng là F = ABC, nhưng khi D=1 thì sao? Liệu F = A + B theo cách của bạn hay không? Mình nghĩ là F = ABC + (A + B) thì đúng hơn.

          Bạn kiểm tra lại và sửa lại lỗi mà mình vừa nêu nha.

          Chúc bạn học tốt!

          Trần Đại Dương.

          P/S: Mình không chú tâm đến code bạn viết có đúng hay không vì mình quên hết cú pháp Verilog HDL rồi, mình chỉ quan tâm đến ý tưởng bạn thực hiện thôi.
          Tôi không hối tiếc những gì mình đã làm. Tôi chỉ hối tiếc những gì đã không làm khi có cơ hội!

          Comment


          • #6
            Chào các bạn,

            Sau 2 bài làm của 2 bạn ở trên thì mình có nhận xét là: các bạn thực sự không đi đúng các bước thực hiện mạch logic bằng các MUX (tiêu biểu chính là các bạn đã quá vội vàng rút gọn hàm F) dẫn đến việc chọn biến điều khiển và đầu vào cho các MUX không hợp lý một chút nào.
            Các bạn có thể sẽ cần xem lại định lý Shannon cho biểu diễn hàm logic (chứ không phải là định lý Shannon trong lấy mẫu tín hiệu đâu nha).

            Chúc các bạn học tốt!
            Trần Đại Dương.
            Tôi không hối tiếc những gì mình đã làm. Tôi chỉ hối tiếc những gì đã không làm khi có cơ hội!

            Comment


            • #7
              Định lý Shannon
              Bất kì hàm Boolean f(w1,w2, …, wn) có thể được viết dưới dạng:

              f(w1,w2, …, wn) = (𝑤1')*f(0,w2, ..., wn) + w1*f(1, w2, …wn)

              Áp dụng:
              F = ABC + A'BD + ACD + AC'D

              - T/h dùng Mux_2to1 (chọn A làm tín hiệu chọn kênh)
              F = A.(BC + CD + C'D) + A'.BD
              = A.(BC + D) + A'.BD

              - T/h dùng Mux_4to1 (chọn A, B làm 2 tín hiệu chọn kênh)
              F(AB=00) = 0
              F(AB=01) = D
              F(AB=10) = CD + C'D = D
              F(AB=11) = C + CD + C'D = C + D

              Như Dương nói, các bạn nên thiết kế ra mạch nguyên lý trước, rồi mới code Verilog như vậy sẽ nhanh và tránh được sai sót.
              Last edited by sangnt; 06-04-2015, 08:43.

              Comment


              • #8
                Capture.JPG Anh cho em ý kiến a, thank a!!

                Comment


                • #9
                  Originally posted by 12520578 View Post
                  [ATTACH=CONFIG]16350[/ATTACH] Anh cho em ý kiến a, thank a!!
                  Chào bạn [MENTION=19741]12520578[/MENTION]

                  bạn có thể giải thích tại sao "F = D + C = C" được không?
                  Tôi không hối tiếc những gì mình đã làm. Tôi chỉ hối tiếc những gì đã không làm khi có cơ hội!

                  Comment


                  • #10
                    Originally posted by 11520537 View Post
                    Chào bạn [MENTION=19741]12520578[/MENTION]

                    bạn có thể giải thích tại sao "F = D + C = C" được không?
                    Theo em hiểu thì với AB =11 -> F=D+C (D or C nên em nghĩ chọn 1 trong 2 giá trị đều được), không biết đúng không ?Capture.JPG

                    Comment


                    • #11
                      Chào mọi người,

                      Có thể mọi người đang hiểu sai vấn đề thì phải, đề yêu cầu sử dụng MUX2-1, MUX4-1 để thực hiện hàm logic chứ đâu bắt phải chọn 1 trong MUX đâu nhỉ? Nếu như thế thì làm sao thiết kế mạch này được.

                      Chào thân ái và vì tương lai con em chúng ta!

                      Trần Đại Dương.
                      Tôi không hối tiếc những gì mình đã làm. Tôi chỉ hối tiếc những gì đã không làm khi có cơ hội!

                      Comment


                      • #12
                        Originally posted by 12520578 View Post
                        Theo em hiểu thì với AB =11 -> F=D+C (D or C nên em nghĩ chọn 1 trong 2 giá trị đều được), không biết đúng không ?[ATTACH=CONFIG]16351[/ATTACH]
                        Chào bạn,

                        Không thể làm như thế được, D+C khác với D hoặc C.
                        Bạn sửa lại nha.

                        Chúc bạn học tốt!
                        Trần Đại Dương.
                        Tôi không hối tiếc những gì mình đã làm. Tôi chỉ hối tiếc những gì đã không làm khi có cơ hội!

                        Comment


                        • #13
                          Đúng là D+C, thì khác với D hoặc C.
                          Trong bài post của thầy (#7), lúc đầu bị sai chỗ F(AB=11), thầy đã fixed lại.

                          Thầy chưa hiểu yêu cầu của đề lắm, có phải là chỉ được dùng Mux_2to1 và Mux_4to1 để thiết kế mạch trên (ko dùng bất kì cổng logic nào khác)???

                          - Nếu đúng vậy, thì T/h:
                          F(AB=11) = C + D = C + D(C+C') = C + CD + C'D= C.1 + C'.D
                          Bạn sẽ dùng được Mux_2to1 để thế cho cổng OR

                          - Nếu đề yêu cầu chỉ dùng 1 loại Mux_4to1 thì kết hợp với Mux_4to1 trước, với thêm 1 Mux_4to1 này:
                          F(AB=11) = C + D
                          = CD' + CD + C'D
                          = C'D'.0 + C'D.1 + CD'.1 + CD.1


                          - Nếu đề yêu cầu chỉ dùng 1 loại Mux_2to1 thì:
                          F = A.(BC + CD + C'D) + A'.BD
                          = A.(BC + D) + A'.BD (Mux_2to1 với A là tín hiệu chọn kênh)

                          Tiếp tục phân tích:
                          BC + D = BC + D.(B + B')
                          = B(C+D) + B'D (Mux_2to1 với B là tín hiệu hiệu chọn kênh)
                          = B(C.1 + C'D) + B'D (thêm 1 Mux_2to1 với C là tín hiệu chọn kênh


                          BD = B.D + B'.0 (Mux_2to1 với B là tín hiệu chọn kênh)

                          Đáp án cho 3 trường hợp ở trên:
                          Boolean_to_Mux.png
                          Last edited by sangnt; 06-04-2015, 09:36.

                          Comment


                          • #14
                            Đã Hiểu!!! đã biết sai ở đâu, và đã biết cách sửa ^_^. Thanks anh Dương! Thanks thầy Sang. (p/s: các kiểu topic như này rất hữu ích, hy vọng thầy, các anh, các bạn sẽ có thêm các bài tập, để rèn thêm "sự mắc lỗi" :v ) . Thân ái và quyết thắng =D

                            Comment


                            • #15
                              Originally posted by 12520797 View Post
                              Đã Hiểu!!! đã biết sai ở đâu, và đã biết cách sửa ^_^. Thanks anh Dương! Thanks thầy Sang. (p/s: các kiểu topic như này rất hữu ích, hy vọng thầy, các anh, các bạn sẽ có thêm các bài tập, để rèn thêm "sự mắc lỗi" :v ) . Thân ái và quyết thắng =D
                              Những cái này các bạn học ở môn Nhập môn Mạch số rồi!
                              Chắc hồi đó học không kĩ! :unhappy:

                              Comment

                              LHQC

                              Collapse
                              Working...
                              X