โปรแกรมแก้ไข Downcodes จะพาคุณไปทำความเข้าใจกับการเขียนโค้ด Verilog และวิธีทดสอบการจำลองของรีจิสเตอร์กะ 8 บิตที่รวมอยู่ในเอาต์พุตแบบอนุกรม บทความนี้ให้รายละเอียดวิธีการออกแบบชิฟต์รีจิสเตอร์ 8 บิตพร้อมการโหลดแบบขนานและเอาต์พุตแบบอนุกรม รวมถึงคำจำกัดความของโมดูล การออกแบบรีจิสเตอร์และลอจิกภายใน การใช้ลอจิกควบคุม และการเขียนโมดูลการจำลอง ด้วยขั้นตอนที่ชัดเจนและโค้ดตัวอย่าง จะช่วยให้คุณเข้าใจและเชี่ยวชาญในการประยุกต์ใช้ Verilog HDL ในการออกแบบวงจรดิจิทัล และในที่สุดก็ตระหนักถึง shift register 8 บิตที่ทำงานได้อย่างสมบูรณ์
รีจิสเตอร์กะแบบแปดบิตแบบขนานเข้าและอนุกรมเป็นรีจิสเตอร์ที่สามารถโหลดข้อมูลแบบขนานและข้อมูลเอาท์พุตแบบอนุกรม ในการเขียนโค้ด Verilog สำหรับรีจิสเตอร์ประเภทนี้ คุณสามารถกำหนดกระบวนการที่กระตุ้นด้วยสัญญาณนาฬิกา ใช้ตัวแปรรีจิสเตอร์แบบกว้าง 8 บิตเพื่อบันทึกสถานะ และกำหนดสัญญาณควบคุมเพื่อควบคุมโหลดแบบขนานและเอาต์พุตแบบอนุกรม เมื่อเขียนโค้ด ควรคำนึงถึงโหมดการทำงานที่แตกต่างกัน และควรมีการควบคุมและอินเทอร์เฟซข้อมูลที่เหมาะสม
ต่อไปนี้จะอธิบายรายละเอียดวิธีการออกแบบฟังก์ชันการโหลดแบบขนาน:
หากต้องการใช้ฟังก์ชันการโหลดแบบขนาน คุณสามารถกำหนดสัญญาณควบคุม เช่น โหลด เมื่อโหลดอยู่ในระดับสูง สถานะของรีจิสเตอร์จะได้รับการอัปเดตทันทีตามข้อมูลแบบขนานที่ปลายอินพุต แทนที่จะผ่านอินพุตแบบลำดับ ในโค้ด Verilog ตรรกะนี้สามารถนำไปใช้ในขอบนาฬิกาที่ถูกบล็อกเสมอ ด้วยการตรวจจับสัญญาณโหลด จึงสามารถตัดสินใจได้ว่าจะโหลดข้อมูลแบบขนานที่จัดไว้ให้ภายนอกลงในรีจิสเตอร์ หรือจะเลื่อนตามอินพุตแบบอนุกรม
โมดูล ShiftRegister_8bit (
clk สายอินพุต,
สายอินพุตแรก,
โหลดลวดอินพุต,
สายอินพุต serial_in,
สายอินพุต [7:0] Parallel_in,
เอาต์พุต reg [7:0] data_out
-
reg [7:0] shift_reg;
@(posedge clk หรือ posge rst) เริ่มต้นเสมอ
ถ้า (แรก) เริ่มต้น
shift_reg <= 8'b0;
data_out <= 8'b0;
สิ้นสุดอย่างอื่นถ้า (โหลด) เริ่มต้น
shift_reg <= Parallel_in; // โหลดแบบขนาน
สิ้นสุดอย่างอื่นเริ่มต้น
shift_reg <= shift_reg << 1; // เลื่อนไปทางซ้าย
shift_reg[0] <= serial_in; //ข้อมูลอินพุตแบบอนุกรมป้อนบิตต่ำสุด
จบ
จบ
@(*) เริ่มต้นเสมอ
data_out = shift_reg; // อัปเดตข้อมูลเอาต์พุตเสมอ
จบ
ในบล็อกเสมอข้างต้น รีจิสเตอร์จะเริ่มต้นโดยการตรวจจับสัญญาณรีเซ็ตเป็นอันดับแรก และสัญญาณโหลดจะถูกใช้เพื่อควบคุมว่าจะดำเนินการโหลดแบบขนานหรือการเลื่อนแบบอนุกรม ในการดำเนินการกะแบบอนุกรม นอกเหนือจากการเลื่อนรีจิสเตอร์ทั้งหมดไปทางซ้ายเพื่อให้ทราบถึงการเคลื่อนที่ของบิตข้อมูลแล้ว ยังต้องยอมรับอินพุตแบบอนุกรมใหม่ผ่านสัญญาณ serial_in อีกด้วย
โมดูล ShiftRegister_8bit_tb;
// พอร์ตอินพุต
reg clk_tb;
reg rst_tb;
reg load_tb;
reg serial_in_tb;
reg [7:0] Parallel_in_tb;
//พอร์ตเอาท์พุท
สาย [7:0] data_out_tb;
// สร้างตัวอย่างโมดูลที่จะทดสอบ
ShiftRegister_8bit ut (
.clk(clk_tb)
.rst(rst_tb)
.โหลด(load_tb)
.serial_in(อนุกรม_in_tb)
.parallel_in(parallel_in_tb),
.data_out(data_out_tb)
-
//การสร้างสัญญาณนาฬิกา
เริ่มต้นเริ่มต้น
clk_tb = 0;
ตลอดไป #10 clk_tb = ~clk_tb; // สร้างสัญญาณนาฬิกาด้วยระยะเวลา 20 หน่วย
จบ
//ทดสอบลำดับการกระตุ้น
เริ่มต้นเริ่มต้น
//เริ่มต้นสัญญาณ
rst_tb = 1; load_tb = 0;
#25 rst_tb = 0; // ปล่อยสัญญาณรีเซ็ต
#20 load_tb = 1; Parallel_in_tb = 8'b10101010; // โหลดข้อมูลทดสอบแบบขนาน
#20 load_tb = 0; // ปิดการโหลดแบบขนานและเริ่มการขยับแบบอนุกรม
serial_in_tb = 1; //เริ่มข้อมูลอินพุตแบบอนุกรมและสังเกตผลลัพธ์
#(8 * 20) serial_in_tb = 0; //ป้อนข้อมูลอนุกรมของรอบสัญญาณนาฬิกาหลายรอบและตรวจสอบเอาต์พุต
// การทดสอบเสร็จสิ้น รีเซ็ตรีเซ็ต
#40rst_tb = 1;
#20rst_tb = 0;
จบ
สิ้นสุดโมดูล
ในโมดูลการจำลอง สัญญาณนาฬิกาจะถูกสร้างขึ้นในขั้นแรกเพื่อขับเคลื่อนการทำงานของรีจิสเตอร์กะทั้งหมด จากนั้น อินพุตภายนอกจะถูกจำลองโดยการเปลี่ยนค่าของการกระตุ้นการทดสอบ ณ จุดเวลาที่กำหนด เช่น สัญญาณรีเซ็ตครั้งแรก สัญญาณควบคุมการโหลดแบบขนานของโหลด และสัญญาณอินพุตอนุกรม serial_in ในระหว่างการจำลอง ให้ตรวจสอบว่าการเปลี่ยนแปลงในเอาท์พุต data_out สอดคล้องกับพฤติกรรมที่คาดไว้ของ shift register ภายใต้การกระตุ้นสัญญาณที่แตกต่างกันหรือไม่ ตรวจสอบความถูกต้องในการทำงานของรีจิสเตอร์โดยการสังเกตรูปคลื่นการจำลองหรือบันทึกการจำลอง
โดยสรุป การออกแบบโค้ด Verilog ที่สมเหตุสมผลและการทดสอบการตรวจสอบข้อเท็จจริงเป็นขั้นตอนสำคัญเพื่อให้แน่ใจว่าการทำงานที่ถูกต้องของรีจิสเตอร์ 8 บิตแบบขนานเข้าและอนุกรมออก
ถาม: 1. จะเขียนและรันโค้ด Verilog ของ shift register 8 บิตได้อย่างไร ตอบ: ในการเขียนและรันโค้ด Verilog สำหรับรีจิสเตอร์กะ 8 บิต คุณต้องทำตามขั้นตอนต่อไปนี้:
ใช้ภาษา Verilog เพื่อเขียนโค้ดของโมดูล shift register และกำหนดพอร์ตอินพุตและเอาต์พุต เขียนโค้ด testbench สำหรับการทดสอบการจำลองของโมดูล shift register ใช้เครื่องมือจำลอง Verilog เช่น ModelSim หรือ Vivado เพื่อโหลดและคอมไพล์ไฟล์การออกแบบและไฟล์ทดสอบ รันการจำลอง สังเกตเอาต์พุตของ shift register และดำเนินการวิเคราะห์รูปคลื่นเพื่อตรวจสอบการทำงานถาม: 2. จะจำลองและทดสอบโค้ด Verilog ของรีจิสเตอร์กะ 8 บิตได้อย่างไร ตอบ: หากต้องการทำการทดสอบการจำลองโค้ด Verilog ของรีจิสเตอร์กะ 8 บิต ให้ทำตามขั้นตอนด้านล่าง:
เขียนโค้ด testbench รวมถึงเวกเตอร์ทดสอบที่กำหนดค่าให้กับสัญญาณอินพุตของโมดูล shift register และคำสั่งที่ตรวจสอบผลลัพธ์เอาต์พุต ในโค้ด testbench ให้ใช้คำสั่ง $monitor หรือ $display ใน Verilog เพื่อแสดงค่าของสัญญาณอินพุตและเอาต์พุตของโมดูลแบบเรียลไทม์ ในระหว่างการจำลอง ให้สร้างสัญญาณนาฬิกาที่เหมาะสมเพื่อควบคุมการทำงานของรีจิสเตอร์และสังเกตผลลัพธ์เอาท์พุต เรียกใช้การจำลองและสังเกตและวิเคราะห์รูปคลื่นของการจำลองเพื่อตรวจสอบว่ารีจิสเตอร์ทำงานอย่างถูกต้องถาม: 3. มีเครื่องมือจำลอง Verilog ใดที่คุณสามารถแนะนำสำหรับการจำลองโค้ด Verilog ของรีจิสเตอร์กะ 8 บิตได้หรือไม่ ตอบ: เมื่อทำการจำลองโค้ด Verilog ของ shift register 8 บิต จะมีเครื่องมือจำลอง Verilog ทั่วไปหลายตัวให้เลือก เช่น ModelSim, Vivado, ISE, Quartus ฯลฯ
ModelSim เป็นเครื่องมือจำลอง Verilog ที่ใช้กันทั่วไปซึ่งมีฟังก์ชันการจำลองและการดีบักที่มีประสิทธิภาพ และสามารถใช้เพื่อทดสอบการจำลองโค้ด Verilog Vivado เป็นชุดเครื่องมือที่ครอบคลุมที่พัฒนาโดย Xilinx ซึ่งรวมถึงฟังก์ชันการจำลองและเหมาะสำหรับการดำเนินการทดสอบการจำลองโค้ด Verilog ISE และ Quartus เป็นชุดเครื่องมือที่ครอบคลุมสำหรับอุปกรณ์ Xilinx และ Altera FPGA นอกจากนี้ยังมีฟังก์ชันการจำลองที่สามารถใช้เพื่อทดสอบการจำลองโค้ด Verilog เมื่อเลือกเครื่องมือจำลอง Verilog คุณสามารถเลือกตามความต้องการส่วนบุคคลและความต้องการของโครงการ และตัดสินใจตามคุณลักษณะที่เกี่ยวข้องได้ฉันหวังว่าบทความนี้จะช่วยให้คุณเข้าใจและเชี่ยวชาญวิธีเขียนโค้ด Verilog และการทดสอบการจำลองของรีจิสเตอร์กะ 8 บิตได้ดีขึ้น หากคุณมีคำถามใด ๆ โปรดอย่าลังเลที่จะถาม