สารบัญ:
- ขั้นตอนที่ 1: วัสดุ
- ขั้นตอนที่ 2: บล็อกไดอะแกรมของโมดูลวงจร
- ขั้นตอนที่ 3: รหัส
- ขั้นตอนที่ 4: สาธิตและโค้ดตัวอย่าง
วีดีโอ: คอมพิวเตอร์สิบบิต - VHDL: 4 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
สร้างโดย: Tyler Starr และ Ezzeedden Gazali
บทนำ
โครงการนี้เสร็จสมบูรณ์โดยเป็นส่วนหนึ่งของโครงการสุดท้ายสำหรับ CPE 133 ที่ Cal Poly SLO เป็นโครงการที่ยอดเยี่ยมสำหรับผู้ที่ต้องการทำความเข้าใจว่าคอมพิวเตอร์ทำงานอย่างไรในระดับต่ำสุดและบรรลุภารกิจได้อย่างไร โปรเจ็กต์นี้จำลองตามคอมพิวเตอร์ SAP 8 บิตที่อธิบายไว้ในหนังสือ Digital Computer Electronics ของ Albert Malvino อย่างไรก็ตาม เราได้เพิ่มคอมพิวเตอร์เป็น 10 บิต เพื่อให้สามารถใช้งานโค้ด op (รหัสการทำงาน) ได้มากขึ้น ผู้ใช้สามารถตั้งโปรแกรมคอมพิวเตอร์ให้ดำเนินการตามชุดคำสั่งโดยป้อนคำสั่งบางอย่าง
สถาปัตยกรรมระบบและวงจร:
คอมพิวเตอร์เขียนด้วย VHDL และจะอยู่บนบอร์ด Basy 3 จาก Digilent อินพุตจะถูกจับคู่กับสวิตช์ที่ด้านล่างของบอร์ด สวิตช์สัมผัสสองตัวจะใช้สำหรับฟังก์ชันรีเซ็ตและเขียน เอาต์พุตจะแสดงบนจอแสดงผล 7 เซ็กเมนต์ของบอร์ด
คอมพิวเตอร์จะถูกแบ่งออกเป็นวงจรขนาดเล็ก (โมดูล) ที่จัดการการทำงานต่างๆ แต่ละโมดูลจะอธิบายโดยละเอียดในขั้นตอนต่อไปนี้
ขั้นตอนที่ 1: วัสดุ
สิ่งที่จำเป็นสำหรับโครงการนี้คือบอร์ด Basy3 FPGA จาก Digilent และสาย micro USB เพื่อเชื่อมต่อบอร์ดกับคอมพิวเตอร์ของคุณ
ขั้นตอนที่ 2: บล็อกไดอะแกรมของโมดูลวงจร
แผนภาพบล็อกด้านบนแสดงโมดูลวงจรต่างๆ ที่ประกอบเป็นคอมพิวเตอร์ 10 บิต ด้านล่างนี้คือคำอธิบายสำหรับแต่ละชิ้นส่วน/โมดูลที่แสดงในไดอะแกรมด้านบน
โปรแกรมเคาน์เตอร์
คำอธิบายของอินพุต: อินพุตเป็นอินพุต 5 บิตสำหรับโหลดตัวเลขลงในตัวนับโปรแกรม Cp เมื่อตัวนับสูงจะนับขอบนาฬิกาที่ตกลงมา CLR รีเซ็ตตัวนับเป็น 0 Ep เมื่อตัวนับสูงส่งออกจำนวนปัจจุบัน Sp เมื่อสูง ตัวนับจะตั้งค่าการนับเป็นตัวเลขที่อินพุต
-
คำอธิบายของผลลัพธ์:
เอาต์พุตเป็นสำเนาจำนวนสำหรับใช้กับ LEDS 0-15 Count แสดงผลการนับปัจจุบัน
- ตำแหน่งโดยรวมในระบบ: ตัวนับนี้จะติดตามตำแหน่งหน่วยความจำที่โปรแกรมอยู่ โปรแกรมทั้งหมดเริ่มต้นที่ที่อยู่หน่วยความจำ 00000 (0) และสูงถึง 11111 (31) เว้นแต่จะมีการหยุดใช้งาน ในคำสั่งกระโดด ตัวนับโปรแกรมจะนับต่อจากที่อยู่ที่โปรแกรมกำลังข้ามไป
อินพุต MUX
- คำอธิบายของอินพุต: ที่อยู่รับอินพุตจากสวิตช์ 11 ถึง 15 MAR รับอินพุตจากรีจิสเตอร์ 10 บิตที่ใช้เป็น MAR โปรแกรมควบคุมอินพุตที่จะกำหนดเส้นทางไปยังเอาต์พุต
- คำอธิบายของเอาต์พุต: เอาต์พุตจะกำหนดเส้นทางอินพุตที่เลือกไปยัง RAM
- ตำแหน่งโดยรวมในระบบ: MUX นี้กำหนดว่าจะกำหนดเส้นทางที่อยู่จากสวิตช์หรือบัสไปยัง RAM ในโหมดโปรแกรม ที่อยู่จากสวิตช์จะถูกกำหนดเส้นทาง และในโหมดรัน ที่อยู่จากบัสจะถูกกำหนดเส้นทาง
ramMUX
- คำอธิบายของอินพุต: userInput คืออินพุตที่ผู้ใช้ป้อนระหว่างโหมดโปรแกรม aRegInput เป็นข้อมูลที่มีอยู่ในการลงทะเบียน A ซึ่งใช้ระหว่างการดำเนินการย้าย การควบคุมคือตัวเลือกสำหรับ MUX นี้
- คำอธิบายของเอาต์พุต: เอาต์พุตคืออินพุตข้อมูล 10 บิตไปยัง RAM
- ตำแหน่งโดยรวมในระบบ: MUX นี้จะส่งออกข้อมูลอินพุต 10 บิตที่ใช้ในโมดูล RAM เมื่อบิตควบคุมสูง MUX จะส่งออกข้อมูลที่ผู้ใช้ป้อนในโหมดโปรแกรม เมื่อบิตควบคุมต่ำ MUX จะส่งออกข้อมูลบนบัสควบคุม
ramModule
- คำอธิบายของอินพุต: inputData คือข้อมูลที่เก็บไว้ในแรม inputAddress คือตำแหน่งที่เก็บข้อมูล โปรแกรมระบุว่าคอมพิวเตอร์อยู่ในโหมดโปรแกรมหรือรัน readWrite ระบุว่ามีการดำเนินการอ่านหรือเขียนหรือไม่ notCE เป็นบิตควบคุมสำหรับโมดูล RAM ย้าย บ่งชี้ว่ามีการดำเนินการย้าย
- คำอธิบายของเอาต์พุต: outputDataToBus คือข้อมูลที่เปลี่ยนจาก RAM ไปยังบัส outputData และ output Address คือข้อมูลและที่อยู่ที่ไปที่คำสั่ง register
- ตำแหน่งโดยรวมในระบบ: RAM อนุญาตให้โปรแกรมและจัดเก็บข้อมูลในหน่วยความจำก่อนที่โปรแกรมจะรัน เมื่อโปรแกรมทำงาน RAM จะได้รับที่อยู่จาก MAR และส่งข้อมูลออกจากที่อยู่นั้นไปยังบัส
ที่อยู่ROM
- คำอธิบายของอินพุต: opCode คืออินพุตที่มีที่อยู่ของ opcode ที่ดำเนินการโดยคอมพิวเตอร์
- คำอธิบายของผลลัพธ์: opCodeStart คือที่อยู่หน่วยความจำที่ระบุตำแหน่งไมโครคำสั่งแรกของ opCode ที่สอดคล้องกัน
- ตำแหน่งโดยรวมในระบบ: โมดูลนี้ใช้คำสั่งไมโครแบบ latched และส่งออกตำแหน่งหน่วยความจำที่สอดคล้องกับการเริ่มต้นลำดับไมโครคำสั่งนั้น
แหวนเคาน์เตอร์
- คำอธิบายของอินพุต: รีเซ็ต ตั้งค่าตัวนับกลับเป็น 100000 (สถานะ "T แรก") Clk เพิ่มตัวนับทีละตัวบนขอบนาฬิกาที่ตกลงมา NOP ระบุว่าสถานะ/รอบปัจจุบันเป็นรอบ "ไม่มีการดำเนินการ"
- คำอธิบายของผลลัพธ์: การนับคือผลลัพธ์ของตัวนับ
- ตำแหน่งโดยรวมในระบบ: ตัวนับเสียงกริ่งจะควบคุมตัวนับที่ตั้งค่าไว้ล่วงหน้าและอธิบายขั้นตอนย่อยหกขั้นตอนในแต่ละรอบคำสั่ง (T1-T6)
preCounter
- คำอธิบายของอินพุต: opCodeStart คือตำแหน่งหน่วยความจำของคำสั่งไมโครสำหรับ opCode ที่กำลังดำเนินการ T1 รีเซ็ตตัวนับเป็น 0 เมื่อสูง เมื่อ T3 สูง ระบบจะโหลด opCodeStart และนับต่อจากตำแหน่งนั้นสำหรับ 3 รอบที่เหลือ (T4-T6) CLR ตั้งค่าตัวนับเป็น 0 Clk เพิ่มตัวนับทีละตัวบนขอบที่ตกลงมา
- คำอธิบายของผลลัพธ์: controlWordLocation ส่งออกตำแหน่งหน่วยความจำของคำควบคุมที่จะดำเนินการ
- ตำแหน่งโดยรวมในระบบ: op-code แต่ละอันมีคำสั่งย่อย 3 คำสั่ง ตัวนับเพิ่มขึ้น 1 เริ่มที่ 0 สำหรับ 3 รอบแรก (รอบการดึงข้อมูล) จากนั้นตัวนับจะถูกทริกเกอร์โดยตัวนับเสียงกริ่งเพื่อโหลดที่อยู่ใน opCodeStart และเพิ่มขึ้นทีละ 1 สำหรับ 3 รอบที่เหลือ ด้วยวิธีนี้ preCounter จะควบคุมลำดับของคำสั่งไมโครที่จะดำเนินการ
ควบคุมROM
- คำอธิบายของอินพุต: controlWordLocation คือที่อยู่ของ controlWord ที่ controlROM จะส่งออก NOP ระบุว่าสถานที่นั้นเป็นตำแหน่ง "ไม่มีการดำเนินการ"
- คำอธิบายของเอาต์พุต: controlWord คือคำควบคุมที่เปิดใช้งาน/ปิดใช้งานโมดูลคอมพิวเตอร์ต่างๆ เพื่อดำเนินการตามที่ต้องการ
- ตำแหน่งโดยรวมในระบบ: โมดูลนี้จะถอดรหัสตำแหน่งหน่วยความจำจาก preCounter และส่งออก controlWord สำหรับการทำงานที่ต้องการ
อะลู
- คำอธิบายของอินพุต: A และ B เป็นอินพุตจาก Register A และ Register B ซึ่ง ALU ดำเนินการคำนวณและตรรกะ เมื่อการลบทำงาน แสดงว่า B กำลังถูกลบออกจาก A
- คำอธิบายของผลลัพธ์: ผลลัพธ์คือผลลัพธ์ของการเพิ่ม A และ B หรือการลบ B ออกจาก A ผลลัพธ์ที่มากกว่า น้อยกว่า และเท่ากับเพื่อระบุว่า (AB หรือ A=B) และถูกใช้ในโมดูลการข้ามแบบมีเงื่อนไข ข้อผิดพลาดบ่งชี้ว่าล้นหรืออันเดอร์โฟลว์เมื่อใช้งาน
- ตำแหน่งโดยรวมในระบบ: ALU ประกอบด้วยตรรกะสำหรับการดำเนินการทางคณิตศาสตร์และตรรกะที่ดำเนินการโดยคอมพิวเตอร์ โมดูลนี้สามารถเพิ่มและลบเลขฐานสอง 10 บิตสองตัว ALU ยังสามารถระบุได้ว่า A>B, A
เงื่อนไขJmp
- คำอธิบายของอินพุต: inputCount ใช้เพื่อล็อคการนับปัจจุบัน inputAddress ใช้เพื่อล็อคที่อยู่ที่จะข้ามไป loadFromRegister เมื่อล็อค inputAddress ต่ำ loadCount เมื่อแลตช์ต่ำ inputCount เมื่อ outputEnable ต่ำ เอาต์พุตจะถูกตั้งค่าเป็นที่อยู่เพื่อข้ามไปที่ gT, iT และ eQ กำหนดเงื่อนไขที่กำลังตรวจสอบ มากกว่า น้อยกว่า และเท่ากับเป็นอินพุตจาก ALU ที่ระบุผลลัพธ์ของการเปรียบเทียบระหว่าง A และ B บนขอบนาฬิกาที่เพิ่มขึ้นของ Clk inputCount และ inputAddress จะถูกอ่านในรีจิสเตอร์
- คำอธิบายของผลลัพธ์: outputJmp คือที่อยู่ที่ตัวนับโปรแกรมจะอ่าน
- ตำแหน่งโดยรวมในระบบ: โมดูลนี้จัดการการข้ามแบบมีเงื่อนไขและไม่มีเงื่อนไขสำหรับคอมพิวเตอร์ ขึ้นอยู่กับอินพุต gT, iT และ eQ โมดูลจะกำหนดเงื่อนไขที่จะตรวจสอบ และเงื่อนไขนั้นเป็นจริงหรือเท็จ หากเงื่อนไขเป็นจริง มันจะส่งออกที่อยู่ของคำสั่งเพื่อข้ามไป มิฉะนั้น จะแสดงผลการนับของคำสั่งถัดไป
binToBCD
- คำอธิบายของอินพุต: กำหนดหมายเลข 10 บิตเพื่อแปลงเป็นทศนิยมแบบเข้ารหัสไบนารี
- คำอธิบายของผลลัพธ์: หลักร้อยในหลักร้อยของเลขฐานสอง หลักสิบในหลักสิบของเลขฐานสอง หนึ่งหลักในหลักหน่วยของเลขฐานสอง
- ตำแหน่งโดยรวมในระบบ: โมดูลนี้จะแปลงหมายเลข 10 บิตจากรีจิสเตอร์เอาต์พุตเป็น BCD เพื่อให้ไดรเวอร์การแสดงผลสี่หลักของเราแสดงตัวเลขเป็นทศนิยมบนจอแสดงผล 7 ส่วน
fourDigitDriver
- คำอธิบายของอินพุต: ตัวเลขคืออินพุตไบนารี 16 บิตที่ขับเคลื่อนไปยังตัวถอดรหัส inClk เป็นนาฬิกาภายในของบอร์ด Basy และใช้สำหรับตัวแบ่งนาฬิกา RST รีเซ็ตนาฬิกาที่ใช้ในการขับตัวเลข
- คำอธิบายของเอาต์พุต: แอโนดกำหนดตำแหน่งหลักที่จะส่องสว่าง digit คือหมายเลขอินพุตของตัวถอดรหัส
- ตำแหน่งโดยรวมในระบบ: โมดูลนี้ขับเคลื่อนตัวถอดรหัสเพื่อส่งออกหมายเลข BCD ไปยังจอแสดงผล
ตัวถอดรหัส
- คำอธิบายของ Inputs:inputNumber คือตัวเลขที่มาจากไดรเวอร์และจะถูกถอดรหัส
- คำอธิบายของเอาต์พุต: แคโทดกำหนดว่าแคโทดใดที่จะเปิดเพื่อแสดงตัวเลขที่ต้องการ
- ตำแหน่งโดยรวมในระบบ: โมดูลนี้จะถอดรหัสตัวเลขที่จะแสดงบนจอแสดงผล 7 ส่วน
fourDigitDisplay
- คำอธิบายของอินพุต: ตัวเลขคือตัวเลขที่จะแสดงบนจอแสดงผล 7 ส่วน ข้อผิดพลาดระบุว่าจอแสดงผลควรอ่าน "Err" เมื่อใด Clk คือสัญญาณนาฬิกาที่หน้าจอทำงานอยู่ สัญญาณนี้จะต้องอยู่ที่ประมาณ 60 Hz เพื่อให้จอแสดงผลสามารถแสดงตำแหน่งทั้งหมด 4 หลักพร้อมกันได้
- คำอธิบายของเอาต์พุต: แอโนดกำหนดตำแหน่งหลักที่เปิดใช้งาน แคโทดกำหนดว่าแคโทดใดที่เปิดใช้งานเพื่อแสดงตัวเลขที่ต้องการ
- ตำแหน่งโดยรวมในระบบ: โมดูลนี้แสดงตัวเลขบนจอแสดงผล 7 ส่วน โปรดดูคู่มือการใช้งานของบอร์ด Basy 3 สำหรับข้อมูลที่แคโทดและแอโนดเปิดใช้งานเพื่อใช้จอแสดงผล เมื่อบิตข้อผิดพลาดสูง จอแสดงผลจะแสดง "Err"
เอาต์พุตMUX
- คำอธิบายของอินพุต: progModeInput กำหนดว่าไฟ LED ใดที่เปิดอยู่ระหว่างโหมดการเขียนโปรแกรม runModeInput กำหนดว่าไฟ LED ใดที่เปิดอยู่ในโหมดรัน modeSelect คือบิตเลือกหรือควบคุมสำหรับ MUX
- คำอธิบายของเอาต์พุต: ledOutput ระบุว่าไฟ LED ใดจะถูกเปิด
- ตำแหน่งโดยรวมในระบบ: ขึ้นอยู่กับโหมดที่คอมพิวเตอร์อยู่ใน (โปรแกรมหรือรัม) MUX จะเปิดไฟ LED ที่แตกต่างกัน ในโหมดโปรแกรม (modeSelect คือ '0') MUX จะเปิดไฟ LED เพื่อให้คล้ายกับตำแหน่งหน่วยความจำที่คอมพิวเตอร์อยู่ในและสิ่งที่อยู่ภายใน ในโหมดรัน (modeSelect คือ '1') MUX จะใช้สำหรับการดีบัก แต่สามารถตั้งค่าให้แสดงอย่างอื่นได้
นาฬิกาแบ่ง
- คำอธิบายของอินพุต:หยุดอ่าน MSB บิตห้าบิตจากบัสเพื่อตรวจจับคำสั่งหยุด ('11111') และหยุดนาฬิกา inputClk เป็นสัญญาณนาฬิกาภายในของบอร์ด Basy 3
- คำอธิบายของผลลัพธ์: ouputClk เป็นนาฬิกาใหม่ที่มีการชะลอตัว
- ตำแหน่งโดยรวมในระบบ: นาฬิกานี้ใช้เพื่อทำให้คอมพิวเตอร์ทำงานช้าลง เพื่อให้ผู้ใช้ระบุได้ว่าเกิดอะไรขึ้น นาฬิกาสามารถทำงานได้เร็วขึ้นมาก แต่ปัจจุบันตั้งไว้ที่ 2 Hz
triStateBuffer
- คำอธิบายของอินพุต: Din คืออินพุต 5 บิตที่เข้าสู่บัฟเฟอร์ Ep เป็นบิตควบคุม
- คำอธิบายของเอาต์พุต: Dout คือเอาต์พุต 5 บิตของบัฟเฟอร์
- ตำแหน่งโดยรวมในระบบ: เมื่อบิตควบคุม Ep ทำงาน บัฟเฟอร์จะส่งออกอินพุต เมื่อบิตควบคุมไม่ทำงาน บัฟเฟอร์จะไม่แสดงผลใดๆ
tenBitDRegister
- คำอธิบายของอินพุต: Dbus คืออินพุตที่รีจิสเตอร์เป็น Clk อนุญาตให้รีจิสเตอร์อ่านข้อมูลบนขอบนาฬิกาที่เพิ่มขึ้น ARST ตั้งค่าการลงทะเบียนเป็น 0 แบบอะซิงโครนัส เมื่อ outputEnable ต่ำ เนื้อหาของรีจิสเตอร์จะเป็นเอาต์พุต เมื่อ readIn ต่ำ รีจิสเตอร์จะสลัก Dbus บนขอบนาฬิกาที่เพิ่มขึ้น
- คำอธิบายของเอาต์พุต: Qbus คือเอาต์พุตของ register
- ตำแหน่งโดยรวมในระบบ: การลงทะเบียนถูกใช้หลายครั้งทั่วทั้งคอมพิวเตอร์และใช้เพื่อเก็บข้อมูลเมื่อดำเนินการ
fiveBitDRegister
- คำอธิบายของอินพุต: Dbus คืออินพุตที่รีจิสเตอร์เป็น Clk อนุญาตให้รีจิสเตอร์อ่านข้อมูลบนขอบนาฬิกาที่เพิ่มขึ้น ARST ตั้งค่าการลงทะเบียนเป็น 0 แบบอะซิงโครนัส เมื่อ outputEnable ต่ำ เนื้อหาของรีจิสเตอร์จะเป็นเอาต์พุต เมื่อ readIn ต่ำ รีจิสเตอร์จะล็อค Dbus บนขอบนาฬิกาที่เพิ่มขึ้น
- คำอธิบายของเอาต์พุต: Qbus คือเอาต์พุตของรีจิสเตอร์
- ตำแหน่งโดยรวมในระบบ: การลงทะเบียนถูกใช้หลายครั้งทั่วทั้งคอมพิวเตอร์และใช้เพื่อเก็บข้อมูลเมื่อดำเนินการ
ขั้นตอนที่ 3: รหัส
ด้านล่างนี้คือโฟลเดอร์ที่มีข้อจำกัดและไฟล์ต้นฉบับสำหรับคอมพิวเตอร์ 10 บิต
ขั้นตอนที่ 4: สาธิตและโค้ดตัวอย่าง
วิดีโอด้านบนสาธิตวิธีการตั้งโปรแกรมคอมพิวเตอร์ 10 บิตบนบอร์ด Basy 3 FPGA pdf ที่มี op-codes และโปรแกรมตัวอย่างได้แนบมาด้วยด้านล่าง
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง