go |code

จำลอง Binary Adder Logic จากหนังสือ Code ด้วย Go

iporsut

Weerasak Chongnguluam

Posted on June 14, 2020

จำลอง Binary Adder Logic จากหนังสือ Code ด้วย Go

ตอนนี้กำลังอ่านหนังสือที่ชื่อว่า Code เล่มนี้อยู่

Alt Text

ถึงบทที่ชื่อว่า A Binary Adding Machine ซึ่งทำให้ดูว่าเราจะสร้าง วงจรบวกเลขผ่าน Logic Gate เช่น XOR, AND และ OR gate ได้ยังไงบ้าง

ซึ่งการบวก ก็จะต้องคำนึงถึงตัวทด (carry) ด้วย สุดท้ายของบทนี้เราก็ได้วงจร FullAdder ที่ input จะมีตัวทดด้วยสำหรับบวกตัวทดของหลักก่อนหน้า

ส่วนการคำนวนผลบวกของเลข 1 BIT นั้นเราจะใช้ XOR gate และ การคำนวณตัวทดเราจะใช้ AND gate แต่ว่านี่จะทำให้ได้แค่ HalfAdder พอเป็น FullAdder จะใช้ OR gate คำนวณ carry สุดท้ายที่ด้วยด้วยโดยเอา carry ของ A บวก B ไป OR กับ carry ของผลบวกของ A กับ B และ carry input นั่นเอง

สุดท้ายเราก็จะเอา FullAdder มาสร้างวงจรของการบวก 8 BITS ได้

นี่คือโค้ด Go ที่ลองเขียนจำลองตามในหนังสือ

package main

import "fmt"

type BIT byte

const (
    O BIT = iota
    I
)

func (b BIT) String() string {
    if b == O {
        return "🌑"
    } else {
        return "🌕"
    }
}

func FullAdder(cin, a, b BIT) (cout, out BIT) {
    o1 := a ^ b            // a XOR b
    c1 := a & b            // a AND b
    out = cin ^ o1         // cin XOR o1
    cout = c1 | (cin & o1) // c1 OR (cin AND o1)
    return
}

func Add8BIT(
    a7, a6, a5, a4, a3, a2, a1, a0,
    b7, b6, b5, b4, b3, b2, b1, b0 BIT) (c, o7, o6, o5, o4, o3, o2, o1, o0 BIT) {
    c, o0 = FullAdder(c, a0, b0)
    c, o1 = FullAdder(c, a1, b1)
    c, o2 = FullAdder(c, a2, b2)
    c, o3 = FullAdder(c, a3, b3)
    c, o4 = FullAdder(c, a4, b4)
    c, o5 = FullAdder(c, a5, b5)
    c, o6 = FullAdder(c, a6, b6)
    c, o7 = FullAdder(c, a7, b7)
    return
}

func PResult(c, o7, o6, o5, o4, o3, o2, o1, o0 BIT) {
    fmt.Println(c, o7, o6, o5, o4, o3, o2, o1, o0)
}
func main() {
    fmt.Println("A", O, I, I, I, I, I, I, I, O)
    fmt.Println("B", O, O, O, O, O, O, O, O, I)
    fmt.Print("= ")
    PResult(Add8BIT(
        I, I, I, I, I, I, I, O,
        O, O, O, O, O, O, O, I,
    ))
}
Enter fullscreen mode Exit fullscreen mode

เมื่อลองรันจะได้

go run main.go
A 🌑 🌕 🌕 🌕 🌕 🌕 🌕 🌕 🌑
B 🌑 🌑 🌑 🌑 🌑 🌑 🌑 🌑 🌕
= 🌑 🌕 🌕 🌕 🌕 🌕 🌕 🌕 🌕
Enter fullscreen mode Exit fullscreen mode
💖 💪 🙅 🚩
iporsut
Weerasak Chongnguluam

Posted on June 14, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related