From ott@nectec.or.th Mon Jun 14 14:10:35 1999 Date: Sat, 12 Jun 1999 22:47:11 +0700 (GMT+0700) From: Pattara Kiatisevi To: tech@ntl.nectec.or.th Subject: [linux-sis] Opensource ? (more) (fwd) ---------- Forwarded message ---------- Date: Fri, 11 Jun 1999 12:22:15 PDT From: Rawat S. Reply-To: linux-sis@nectec.or.th To: linux-sis@nectec.or.th Subject: [linux-sis] Opensource ? (more) สวัสดีครับ ลองอ่านเกี่ยวกับเรื่อง หลักการเกี่ยวกับ Opensource และ การนำไปใช้ในการออกแบบและพัฒนาฮาร์ดแวร์ ข้างล่างนี้ ใครอ่านแล้วมีความคิดเห็นอะไรก็ลองเสนอมาได้ เผื่อจะเป็นประโยชน์ต่อผู้อื่นที่ได้อ่าน ถ้าเขียนผิด ก็ขออภัย กำลังง่วง :) เรวัต -- begin เราเคยได้ยินเกี่ยวกับเรื่องการออกแบบและพัฒนาซอฟต์แวร์ในกลุ่มของ open source software มาบ้างแล้ว แล้วถ้าจะหันไปมองทางด้านการ ออกแบบฮาร์ดแวร์ (hardware design) และใช้หลักการเดียวกับการ ออกแบบซอฟต์แวร์ แล้วมีการเปลี่ยนแปลงอย่างไรบ้าง ? จะเป็นไปได้ไหมว่า จะมีการออกแบบฮาร์ดแวร์โดยอาศัยแนวทางเดียวกันกับ การออกแบบและพัฒนาซอฟต์แวร์ขึ้นเพื่อใช้งานและให้เป็น GPL เหมือนใน กรณีของ GPL-licensed software การออกแบบฮาร์ดแวร์ในที่นี้ ถ้ามอง ตามลักษณะของระบบ ก็อาจจะแบ่งออกเป็นได้หลายระดับ เช่น การออกชิป หรือวงจรภายในตัวชิปที่สามารถทำการโปรแกรมได้ (chip-level design) หรือระดับบอร์ด (board-level design) ที่ประกอบด้วยชิ้นส่วนทางด้าน อิเล็คทรอนิกส์ต่างๆ เช่น ตัวไมโครโปรเซสเตอร์ โมดูลสำหรับหน่วยความจำ แบบต่างๆ ส่วนเชื่อมต่อ (interface) และอื่นๆอีกมากมาย อาจจะรวมเรียกว่า PCB design (PCB = printed circuit board) ถ้าจะพิจารณารวมไปถึงซอฟต์แวร์ระบบด้วยคือ มองทั้งฮาร์ดแวร์ และซอฟต์แวร์ที่ใช้ควบคู่กันไป ก็จะเป็นการออกแบบระบบรวมทั้ง ฮาร์ดแวร์/ซอฟต์แวร์ (HW/SW design) ซึ่งตัวอย่างที่สำคัญ ก็เช่น embedded systems ซึ่งก็คือระบบที่ทำหน้าที่คล้ายกับคอมพิวเตอร์ แต่ไม่ได้เป็นคอมพิวเตอร์ตามที่เราเห็น ตัวอย่างสินค้าก็เช่น การทำจาวาชิป และจาวาโอเอส (่java chip + java OS) เพื่อใช้งานในระบบดังกล่าว ถ้าพิจารณาต่อไปเรื่อยๆ โดยย้ายฟากจากส่วนของฮาร์ดแวร์ ก็จะไปทาง ด้านซอฟต์แวร์ ที่ควบคุมการทำงานของระบบหรือส่วนของฮาร์ดแวร์ เช่น ตัวระบบปฎิบัติการ ตัวไดร์เวอร์ไปจนถึงส่วนเชื่อมต่อกับผู้ใช้ และโปรแกรมประยุกต์ใช้งาน เป็นต้น การออกแบบและพัฒนาฮาร์ดแวร์และซอฟต์แวร์ ถ้าลองเปรียบเทียบกันจะ เห็นว่า มีหลายๆส่วนที่เหมือนกัน เช่น เริ่มต้นด้วยการกำหนด specification ว่าระบบ (หมายถึง ซอฟต์แวร์หรือฮาร์ดแวร์อย่างใดอย่างหนึ่งก็ได้) จะต้องมีคุณสมบัติใดบ้าง พิจารณาว่า จะทำหรือสร้างขึ้นได้ไหม มีงบเท่าไหร่ จะใช้เทคโนโลยีใดได้บ้าง มีตัวเลือกอะไรอีก เงื่อนไขในเรื่องของระยะเวลา เป็นต้น เมื่อได้กำหนดรายละเอียดแล้ว ขั้นต่อไปก็คือ การออกแบบและพัฒนา เช่น ถ้าเป็นซอฟต์แวร์ ก็จะต้องมีการเขียนโค้ด โดยโปรแกรมเมอร์ และ เลือกใช้ภาษาคอมพิวเตอร์ตามที่กำหนด อาจจะมีการใช้เครื่องมือจำพวก CASE เข้ามาช่วยในการพัฒนาและดูแลโปรเจค ช่วยในการติดต่อสื่อสาร ระหว่างผู้พัฒนาในทีมงาน หรือจัดทำเอกสาร เป็นต้น การเขียนโค้ดอยู่ ในส่วนที่เรียกว่า implementation เมื่อได้ส่วนของโปรแกรมที่ต้อง การแล้ว ก็จะมีการทดสอบโดยการคอมไพล์และทดลองรัน เพื่อดูว่า โปรแกรมที่เขียนขึ้นนั้น ทำงานได้ตามที่ต้องการหรือไม่ ซึ่งการทดสอบ ก็อาจจะใช้พวก debugger เข้ามาช่วยในการตรวจสอบ ซึ่งการทดสอบ ก็จะทำเป็นลำดับขึ้นไปในเชิง bottom-up ถ้าพบว่า มีส่วนที่ไม่ถูกต้อง ก็ต้องกลับไปแก้ไข หรือบางทีอาจจะต้องมีการออกแบบใหม่ในบางส่วน หรืออาจจะทำแค่เป็น prototype ขึ้นมาดูก่อนแล้วค่อยทำโปรแกรมจริง เป็นต้น การออกแบบฮาร์ดแวร์ โดยเฉพาะอย่างยิ่ง การออกแบบชิป หรือวงจรรวม ถ้ามองรวมๆ ขบวนการในการออกแบบ ก็ถูกแบ่งออกเป็นขั้นตอน เหมือนกับ ในกรณีของการออกแบบซอฟต์แวร์ แต่จะมีขั้นตอนและรายละเอียดปลีกย่อย มากกว่า และต้องใช้เครื่องมือ(ซอฟต์แวร์)มากกว่า ผลที่ได้จากการออกแบบวงจร ก็คือสิ่งที่อธิบายการทำงานของวงจรหรือ ระบบที่ต้องการ เช่น อาจจะอยู่ในรูปของโค้ดภาษา เช่น VHDL หรือ Verilog (ทั้งสองเป็นภาษาอธิบายการทำงานของฮาร์ดแวร์) หรืออาจจะอยู่ในรูปของ netlist ที่บ่งบอกว่า ใช้ชิ้นส่วนอะไรบ้างและพอร์ตไหนต้องต่อเข้ากับพอร์ตไหน ของชิ้นส่วนเหล่านั้น เป็นต้น หรือถ้าเป็นระดับวงจรรวม ก็อาจจะเป็น layout ที่กำหนดรูปลักษณะของทรานซิสเตอร์แต่ละตัว การว่างตำแหน่งและ ส่วนเชื่อมต่อ (interconnect) ของทรานซิสเตอร์แต่ละตัว ซึ่งวงจรรวมอาจจะ มีทรานซิสเตอร์เป็นจำนวนมากมายหลายสิบล้านตัว (เช่น ในซีพียูทั่วๆไปในปัจจุบัน) ในกรณีของซอฟต์แวร์ที่เราเขียนโค้ดโดยใช้ภาษาระดับสูง แล้วค่อยแปลง เป็นภาษาเครื่องสำหรับระบบ/สถาปัตยกรรมเป้าหมาย (target architecture) (หรืออาจจะใช้พวก scripting language แทน) แต่ความแตกต่างที่เราเห็นได้ชัดระหว่างการออกแบบฮาร์ดแวร์และซอฟต์แวร์ คือ เครื่องมือ ต้นทุนและการผลิต ยกตัวอย่าง เช่น มีคอมพิวเตอร์หนึ่งเครื่อง มีคอมไพล์เลอร์ และ toolkits/API ต่างๆ เท่านี้ก็สามารถสร้างงานเป็นซอฟต์แวร์ ได้แล้ว ในขณะที่การออกแบบและพัฒนาฮาร์ดแวร์จะต้องอาศัยการผลิตหรือ ประกอบชิ้นส่วนเข้ามาเกี่ยวข้อง ยกตัวอย่างเช่น ออกแบบวงจรรวมมาแล้ว แต่ไม่ได้ส่งไปผ่านขบวนการผลิตออกมาเป็นชิปใส่อยู่ในแพคเกจเป็นตัวๆ ก็เหมือนกับว่า เราเขียนโค้ดในภาษาซีแล้วไม่ได้มีการคอมไพล์เป็นโปรแกรมที่ทำงานได้ นอกจากนั้นยังต้องอาศัยชุดของเครื่องมือที่เป็นซอฟต์แวร์ เพื่อใช้ในการออก แบบในแต่ละขั้นตอน (เรียกว่า CAD = Computer-Aided Design) ซึ่ง tool แต่ละตัวก็มีราคาแพง และใช้เฉพาะงาน ถ้าเราออกแบบบอร์ดลายพิมพ์ ก็ใช้โปรแกรมพวก schematics มาวาดรูปวงจรซึ่งมีราคาไม่สูงมาก ทำเป็น layout ออกมาแล้วก็ส่งไปทำแผนพิมพ์ และประกอบชิ้นส่วนต่อไป แต่ถ้าเป็นการออกแบบวงจรรวม แล้วจะต้องใช้เครื่องมือมากกว่านั้น เช่น ถ้าจะทำขั้นตอน timing analysis เพื่อดูว่า ระบบที่ออกแบบจะทำงานได้กับ ใช้สัญญาณเวลาที่เราตั้งไว้หรือไม่ ก็ต้องใช้เครื่องมือ(ซอฟต์แวร์) จะทำ simulation เพื่อดูว่า วงจรที่ประกอบด้วยลอจิกย่อยๆนั้น ทำงานได้ถูกต้อง หรือไม่ ก็ต้องใช้ซอฟต์แวร์พวก simulator หรือถ้าจะดูว่า เราวางตำแหน่งภายใน ของชิปดีหรือไม่ จะมีปัญหากับการระบายความร้อนภายในตัวชิปหรือไม่ ก็ต้อง ใช้โปรแกรมสำหรับงานดังกล่าวอีก (thermal analysis) เหล่านี้เป็นตัวอย่างคร่าวๆ นอกจากนั้นเวลาผลิตออกมาแล้ว ถ้าออกมามาผิด การจะแก้ไขก็ทำได้ลำบาก เช่น ถ้าเป็นระบบบอร์ด ก็อาจจะถอดออกแล้ว บัดกรีเข้าไปใหม่ แต่ถ้าเป็น SMD (surface mounted device) ก็อาจจะลำบากหน่อย หรือถ้าเป็นวงจรรวม ถ้ายังไม่ได้บรรจุอยู่ในแพคเกจ ก็อาจจะพอแก้ไขได้ในบางกรณี แต่โดยทั่วไป แล้วมักจะโยนทิ้งไป นั่นก็หมายถึง ต้นทุนการผลิตที่สูงขึ้นนั่นเอง จะเห็นได้ว่าการออกแบบด้านฮาร์ดแวร์นั้นจะต้องลงทุนสูงกว่า ไม่ว่าจะเป็นเรื่อง ของเครื่องมือที่ใช้ และต้นทุนอันเนื่องมาจาการผลิตและราคาชิ้นส่วน การจะลดค่าใช้จ่ายโดยรวมก็ทำได้สองส่วน คือส่วนที่เป็นซอฟต์แวร์ในการออกแบบ และส่วนที่เป็นตัวฮาร์ดแวร์จริงๆ เช่น แทนที่จะออกแบบวงจรรวมโดยใช้ได้เพียง ครั้งเดียว ก็ใช้ชิปที่สามารถทำการโปรแกรมได้หลายครั้ง ซึ่งวงจรรวมจำพวกนี้ ก็เช่น FPGAs (field programmable gate arrays), CPLDs (complex programmable logic devices) หรือจะเป็นพวกชิปสำหรับงานทางด้าน DSP (digital signal processing) เป็นต้น ซึ่งชิปประเภทนี้ จะมีข้อได้เปรียบ กว่าการออกแบบวงจรรวมแล้วส่งไปเจือสาร (คนไทยเขาเรียกกันอย่างนี้ คือเป็นการ ส่งวงจรรวมที่ออกแบบแล้วไปผลิตเป็นชิปนั่นเอง) ซึ่งถ้าเราส่งวงจร ไปเจือสาร ค่าใช้จ่ายจะประมาณหลายหมื่นบาทต่อชิปหนึ่งตัว (พวกที่เป็น prototype) ถ้าทำจำนวนมากๆ เช่น หลักหมื่นหลักแสนตัวหรือมากกว่านั้น ราคาจะถูกลง แต่ถ้าสิบตัวร้อยตัว เรียกว่าไม่คุ้ม ดังนั้นการใช้ชิปวงจรรวมที่สามารถ ทำการโปรแกรมได้จะเหมาะสมกว่า ไม่ว่าในส่วนของการศึกษา หรือส่วนของการ ผลิตสินค้า ซึ่งเราไม่ต้องการจำนวนมากๆ ส่วนการลดค่าใช้จ่ายในเรื่องซอฟต์แวร์ ก็คงจะเป็น การจัดหาซอฟต์แวร์สำหรับ การออกแบบในราคาถูกหรือฟรี ผมเคยอ่านข่าวหนึ่งซึ่งรายงานว่า มีมหาวิทยาลัยเอกชนแห่งหนึ่ง (อยู่เลยลาดกระบังไปหน่อยนึง) ได้จัดซื้อซอฟต์แวร์จากบริษัท Cadence (เป็นบริษัทยักษ์ใหญ่ที่ผลิตซอฟต์แวร์สำหรับการออกแบบวงจรรวม และใช้กันเกือบทุกบริษัทที่ออกแบบชิป ) เป็นมูลค่ารวมราว หนึ่งร้อยล้านบาท โดยมี license สำหรับผู้ใช้สูงสุดประมาณ 15 คน (ถ้าจำไม่ผิด) เป็น floating-node license เพื่อนำมาใช้ในการออกแบบ จากตัวอย่างนี้จะเห็นได้ว่า ถ้าเป็นอาจารย์หรือนักศึกษาตาดำๆในมหาวิทยาลัยของรัฐ คงจะไม่มีงบประมาณไปซื้อซอฟต์แวร์เป็นชุดอย่างนั้นมาลงไว้ในระบบ แล้วถ้าซื้อมาแล้วก็อาจจะไม่คุ้มเพราะถ้าซื้อมาลงแล้วไม่มีการออกแบบวงจรรวม เพื่อขาย ก็จะสูญเสียเงินไป อย่างในยุโรป ในส่วนของการศึกษาจะมีเงินสนับสนุน จาก EU ทั้งซอฟต์แวร์ (โดยเฉพาะอย่างยิ่งของ Cadence) และการส่ง prototype ไปผลิต ตามโรงงานในประเทศต่างๆ เช่น ฝรั่งเศล เบลเยี่ยม และเยอรมัน ซึ่งจุดประสงค์เพื่อต้องการส่งเสริมการออกแบบวงจรรวม เพื่อให้สามารถแข่งขัน ได้กับอเมริกา และญี่ปุ่น การทำสินค้าออกมาในราคาถูกหรือฟรีได้นั่น จะต้องมีต้นทุนที่ถูกด้วย อย่างในกรณีของ ซอฟต์แวร์เปิด(หรือเสรี) นั่นทำได้เนื่องจากว่า เครื่องมือนั่นหาได้และฟรี เป็นต้น ดังนั้น ถ้าจะออกแบบและพัฒนาฮาร์ดแวร์ให้ได้ต้นทุนต่ำ ส่วนหนึ่งที่ทำได้ก็เป็นซอฟต์แวร์ ที่ช่วยในการออกแบบฮาร์ดแวร์ และรวามถึงการนำส่วนของฮาร์ดแวร์หรือวงจรรวมที่ ได้ออกแบบไปแล้วกลับมาใช้อีก นอกเหนือจากซอฟต์แวร์ที่อยู่ในการออกแบบวงจรโดยอัตโนมัติ (electronic design automation) ดังที่กล่าวมาแล้ว ก็อาจจะเชื่อมโยงไปถึง CAD พวกอื่นๆ เช่น ในการออกแบบอาคาร โครงสร้าง หรือส่วนจักรกล เป็นต้น มีหลายตัวอย่างที่พยายามนำหลักการของ Opensource Software มาใช้กับการ ออกแบบและพัฒนาซอฟต์แวร์ เช่น Open Design Circuits (http://circu.its.tudelft.nl/) หรือที่ http://www.scsise.wmin.ac.uk/~seamang/freehardware.html ซึ่งมีเป้าหมายเพื่อลดต้นทุนการพัฒนา (Ultra Low Cost Open Chip/Hardware Development) และให้ผู้สนใจสามารถแชร์ความคิดและผลงานของตนได้ ซึ่งก็รวมไปถึง ซอฟต์แวร์ด้วย ในปัจจุบันมีซอฟต์แวร์หลายตัวที่มีการแจกจ่ายออกไปภายใต้ลิขสิทธิ์แบบ GPL บางตัวก็ทำงานได้ดีเทียบเท่ากับซอฟต์แวร์เชิงพานิชย์ในประเภทเดียวกัน บางตัว ก็ทำงานพอใช้แก้ไขได้ เป็นต้น หลายคนในความสนใจในเรื่องนี้ แต่ก็มักจะต้องตั้งคำถามว่า แล้วซอฟต์แวร์พวกนี้ ทำงานได้ดีขนาดไหน คุ้มไหมถ้าจะนำมาใช้งานจริง เพื่อผลิตงานและไว้วางใจได้ ไม่ก่อให้เกิดปัญหาที่จะตามมา อันเนื่องมาจากซอฟต์แวร์ดังกล่าว (คงจะคล้ายๆกับข้อสงสัยที่ว่า จะเลือกใช้ลีนุกซ์แทนซอฟต์แวร์อื่นๆ เช่น WinNT, Netware สำหรับงานในองค์กรจะมีผลเป็นอย่างไร) Opensource ในทางซอฟต์แวร์ไม่ได้หมายถึงแค่ เปิดเผยโค้ดและให้ผู้ใช้สามารถนำไปใช้ได้ เท่านั้น แต่ยังหมายถึงการเปิดเผย ทรัพย์สินทางปัญญาของเจ้าของไปพร้อมกันด้วย (ไม่มากก็น้อย) หลักการสำคัญของ Open/Free Intellectual Property เราจะได้ know-how ที่นอกเหนือจากตัวงาน และหลักการนี้ก็นำไปใช้ได้กับการออกแบบฮาร์ดแวร์ เช่น สมมุติว่า มีใครออกแบบบอร์ดเป็นฮาร์ดแวร์สำหรับใช้อ่าน SmartCard แล้วเปิดเผย วงจรและอธิบาย ว่าออกแบบอย่างไรใช้ชิ้นส่วนอะไรบ้าง เขียนไดรเวอร์อย่างไร เป็นต้น แล้วใครสนใจจะ ทำตามก็สามารถทำได้ โดยไม่ต้องเสียเวลามาออกแบบเอง หรืออาจจะใช้เป็นแนวทางใน การพัฒนาฮาร์ดแวร์ของตนเองก็ได้ หรือสมมุติว่า มีนักศึกษาออกแบบไมโครคอนโทรเลอร์ 16/32 บิตแล้ว เปิดเผยโค้ดที่ใช้ในการออกแบบ ถ้าใครสนใจจะนำไปผลิตหรือศึกษาก็ได้ หรือบริษัทอย่าง Sun Microsystems ก็หันมาให้ความสนใจกับการเปิดเผยฮาร์ดแวร์/ชิป เช่น ราวเดือนมีนาคมที่ผ่านมา มีการเปิดเผยรายละเอียดเกี่ยวกับการออกแบบจาวาชิป (ชื่อ picoJava) โดยใช้ license ที่เรียกว่า Sun's community source เปิดเผยโค้ดในการออกแบบตัวชิปในระดับ RTL แต่อย่างไรก็ตาม การนำไปผลิตยังต่อขึ้นอยู่กับบริษัท Sun. ในอนาคต การพัฒนาซอฟต์แวร์สำหรับ Opensource คงมีอยู่ต่อไปถ้ามีคนสนใจและ ได้เข้าไปมีส่วนรวม ส่วน Open Hardware/Chip ก็อาจจะเกิดขึ้นตามมาก็ได้ ไม่แน่ ในอนาคต อาจจะไปพบโฮมเพจที่โชว์ผลงานเกี่ยวกับการออกแบบชิป 64-บิต สำหรับไมโครโปรเซสเซอร์ โดยมีนักออกแบบจากที่ต่างๆเข้าไปสนับสนุนและร่วมกับ นักออกแบบระบบ เช่น กลุ่มนักออกแบบโอเอส เป็นต้น --- end ______________________________________________________ Get Your Private, Free Email at http://www.hotmail.com ==================================================================== This is Linux-SIS mailing list. If you ever want to remove yourself from the list, send a mail to majordomo@nectec.or.th with body "unsubscribe linux-sis" ====================================================================