สารบัญ:

คอมพิวเตอร์สิบบิต - VHDL: 4 ขั้นตอน
คอมพิวเตอร์สิบบิต - VHDL: 4 ขั้นตอน

วีดีโอ: คอมพิวเตอร์สิบบิต - VHDL: 4 ขั้นตอน

วีดีโอ: คอมพิวเตอร์สิบบิต - VHDL: 4 ขั้นตอน
วีดีโอ: การใช้งาน VHDL ลง FPGA ครั้งแรกบน Cyclone IV 2024, กรกฎาคม
Anonim
คอมพิวเตอร์สิบบิต - VHDL
คอมพิวเตอร์สิบบิต - VHDL

สร้างโดย: 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 และโปรแกรมตัวอย่างได้แนบมาด้วยด้านล่าง

แนะนำ: