RENESAS ForgeFPGA การจำลองซอฟต์แวร์
ข้อมูลที่สำคัญ
การจำลองเป็นเทคนิคในการใช้สิ่งกระตุ้นอินพุตที่แตกต่างกันกับการออกแบบในเวลาที่ต่างกัน เพื่อตรวจสอบว่าโค้ด RTL ทำงานในลักษณะที่ต้องการหรือไม่ ใช้เพื่อตรวจสอบความทนทานของการออกแบบ การจำลองช่วยให้ผู้ใช้สามารถ view แผนภาพเวลาของสัญญาณที่เกี่ยวข้องเพื่อทำความเข้าใจคำอธิบายการออกแบบในการออกแบบ file มีพฤติกรรม
Testbenches คือโค้ดบางส่วนที่ใช้สำหรับการจำลอง ม้านั่งทดสอบแบบธรรมดาจะสร้างอินสแตนซ์ของหน่วยที่ทดสอบ (UUT) และขับเคลื่อนอินพุต ซอฟต์แวร์ Go Configure ใช้ Icarus Verilog (iVerilog) และ GTKWave เพื่อสังเกตรูปคลื่นการจำลองด้วยสิ่งเร้าที่ให้ไว้ใน Testbench
เอกสารนี้อธิบายขั้นตอนที่ต้องดำเนินการขณะติดตั้ง Icarus บนระบบของคุณ และวิธีการรันการจำลองให้สำเร็จ
การติดตั้งอิคารัส Verilog
a- ติดตั้ง Icarus Verilog (IVerilog) เวอร์ชันล่าสุด https://bleyer.org/icarus/
b- อย่าลืมเพิ่ม IVerilog ให้กับ PATH และปล่อยให้ติดตั้ง GTKWave (ดูรูปที่ 1)
c- เปิด Go Configure Software และเลือกชิ้นส่วน: SLG47910(Rev BB) เพื่อเปิด Forge Workshop (ดูรูปที่ 2)
d- คลิกที่ FPGA Editor ที่อยู่ตรงกลางของแถบเครื่องมือด้านบน หรือผู้ใช้สามารถดับเบิลคลิกที่โครงสร้าง FPGA Core ที่อยู่ตรงกลางหน้าต่างก็ได้
e- หน้าต่างใหม่จะเปิดขึ้นเรียกว่า Forge Workshop ในแถบเครื่องมือเมนูด้านบน คลิกที่ตัวเลือก → การตั้งค่า ในกล่องโต้ตอบการตั้งค่า ไปที่เครื่องมือใต้แท็บการตั้งค่าผู้ใช้ ยกเลิกการเลือกช่องใช้ "สภาพแวดล้อมระบบ" สำหรับทั้ง Icarus Verilog และ GTKWave เพิ่มเส้นทางไปยัง Iverilog และ GTKWave ที่บันทึกไว้ในระบบของคุณลงในพื้นที่ที่กำหนด (ดูรูปที่ 4)
คุณพร้อมที่จะจำลองม้านั่งทดสอบแล้ว และทำตามขั้นตอนข้างต้นเพื่อให้แน่ใจว่า GTKWave เปิดใช้งานโดยอัตโนมัติเมื่อจำลองม้านั่งทดสอบบนซอฟต์แวร์ Go Configure
ม้านั่งทดสอบ
ขั้นตอนที่สำคัญที่สุดในการนำระบบไปใช้ให้ประสบความสำเร็จคือการตรวจสอบการออกแบบและฟังก์ชันการทำงานของระบบ การตรวจสอบระบบที่ซับซ้อนหลังจากใช้งานฮาร์ดแวร์ไม่ใช่ทางเลือกที่ชาญฉลาด มันไม่ได้ผลทั้งในด้านเงิน เวลา และทรัพยากร ดังนั้น ในกรณีของ FPGA จะใช้ testbench เพื่อทดสอบซอร์สโค้ด Verilog
สมมติว่าเรามีอินพุตขนาด 11 บิต และเราต้องการทดสอบอุปกรณ์เพื่อหาค่ารวมอินพุตที่เป็นไปได้ทั้งหมด เช่น (211) เนื่องจากชุดค่าผสมนี้มีจำนวนมาก จึงเป็นไปไม่ได้ที่จะทดสอบด้วยตนเอง ในกรณีเช่นนี้ ม้านั่งทดสอบจะมีประโยชน์มาก เนื่องจากคุณสามารถทดสอบการออกแบบโดยอัตโนมัติสำหรับค่าที่เป็นไปได้ทั้งหมด และด้วยเหตุนี้ จึงยืนยันความน่าเชื่อถือของการออกแบบการทดสอบได้ Verilog Testbenches ใช้เพื่อจำลองและวิเคราะห์การออกแบบโดยไม่จำเป็นต้องใช้อุปกรณ์ฮาร์ดแวร์ทางกายภาพใดๆ
การออกแบบภายใต้การทดสอบ เรียกโดยย่อว่า DUT เป็นโมดูลที่สามารถสังเคราะห์ได้ของฟังก์ชันการทำงานที่เราต้องการทดสอบ กล่าวอีกนัยหนึ่งคือการออกแบบวงจรที่เราต้องการทดสอบ เราสามารถอธิบาย DUT ของเราได้โดยใช้หนึ่งในสามสไตล์การสร้างแบบจำลองใน Verilog - ระดับเกต, Dataflow หรือพฤติกรรม
ม้านั่งทดสอบไม่สามารถสังเคราะห์ได้ ดังนั้นจึงใช้เพื่อการจำลองเท่านั้น สิ่งนี้ทำให้ผู้ใช้สามารถใช้โครงสร้าง Verilog ได้เต็มรูปแบบ เช่น คำสำคัญ เช่น “for”, “$display” และ “$monitor” เป็นต้น สำหรับการเขียน testbenches ม้านั่งทดสอบแบบธรรมดาจะสร้างอินสแตนซ์ของยูนิตที่ทดสอบ (UUT) หรืออุปกรณ์ที่ทดสอบ (DUT) และอินพุตของไดรฟ์
ทำความเข้าใจกับ Testbench
นิยามมาตราส่วนเวลาใน Testbench
เมื่อทำการจำลอง ซอฟต์แวร์จำเป็นต้องทราบว่ามีการกำหนดเวลาอย่างไร หน่วยการหน่วงเวลาถูกระบุโดยใช้คำสั่ง `timescale ซึ่งระบุหน่วยเวลาและความแม่นยำสำหรับโมดูลที่ตามมา `มาตราส่วนเวลาช่วยในการพิจารณาว่า #1 หมายถึงอะไรในแง่ของเวลา # ใช้เพื่อกำหนดความล่าช้าที่จะนำมาใช้ในระบบตามหน่วยเวลาที่ระบุในไทม์สเกล ดังนั้น #1 หมายถึงความล่าช้า 1 ns ถ้า time_unit อยู่ใน ns
รูปแบบประโยค :
`ไทม์สเกล / -
time_unit คือระยะเวลาที่ความล่าช้าของ #1 แสดงถึง ฐาน time_precision แสดงถึงจำนวนจุดทศนิยมของความแม่นยำที่จะใช้สัมพันธ์กับหน่วยเวลา (ดูบรรทัดที่ 23 ในรูปที่ 5)
เราสามารถใช้โครงสร้างมาตราส่วนเวลาเพื่อใช้หน่วยเวลาที่แตกต่างกันในการออกแบบเดียวกันได้ ผู้ใช้ต้องจำไว้ว่าข้อกำหนดการหน่วงเวลานั้นไม่สามารถสังเคราะห์ได้และไม่สามารถแปลงเป็นตรรกะของฮาร์ดแวร์ได้ ฟังก์ชันการหน่วงเวลามีไว้เพื่อการจำลองเท่านั้น -เวลา และ $เรียลไทม์ ฟังก์ชั่นระบบส่งคืนเวลาปัจจุบันและรูปแบบการรายงานเริ่มต้นสามารถเปลี่ยนแปลงได้ด้วยงานระบบอื่น $timeformat
Exampเลอ:
`ไทม์สเกล 10us/100ns
`ไทม์สเกล 1ns/1ps
#10 รีเซ็ต = 1; // หน่วงเวลาสัญญาณ 10 ns
#0.49 $display( “T = %0t ณ เวลา #0.49”, $เรียลไทม์);
ความล่าช้าที่ระบุคือ #0.49 ซึ่งน้อยกว่าครึ่งหน่วยเวลา อย่างไรก็ตาม ความแม่นยำของเวลาถูกระบุเป็น 1ps และด้วยเหตุนี้เครื่องจำลองจึงไม่สามารถมีขนาดเล็กกว่า 1ns ได้ ซึ่งทำให้มีการปัดเศษคำสั่งการหน่วงเวลาที่กำหนดและให้ค่า 0ns ดังนั้นคำสั่งนี้จึงไม่ทำให้เกิดความล่าช้าใดๆ
บันทึกการจำลอง:
T = 1 ณ เวลา #0.49
ประกาศโมดูล
การประกาศโมดูลใน Testbench ใดๆ จะไม่เหมือนกับโค้ด Verilog หลัก ใน Testbench โมดูลจะถูกประกาศโดยไม่มีพอร์ตเทอร์มินัลใดๆ ไปด้วย (ดูบรรทัดที่ 25 ในรูปที่ 5)
รูปแบบประโยค :
โมดูล -
การประกาศโมดูลตามมาด้วยการกำหนดสัญญาณอินพุตและเอาต์พุตที่กำหนดไว้ก่อนหน้าในการออกแบบหลัก file.
เราใช้สัญญาณสองประเภทสำหรับสัญญาณการขับขี่และการตรวจสอบระหว่างการจำลอง ประเภทข้อมูล reg จะเก็บค่าไว้จนกว่าจะกำหนดค่าใหม่ให้กับมัน ประเภทข้อมูลนี้สามารถกำหนดค่าได้เฉพาะในบล็อกเสมอหรือบล็อกเริ่มต้นเท่านั้น
ประเภทข้อมูลแบบใช้สายนั้นเหมือนกับการเชื่อมต่อทางกายภาพ มันจะเก็บค่าที่ขับเคลื่อนโดยพอร์ต กำหนดคำสั่ง หรือ reg ชนิดข้อมูลนี้ไม่สามารถใช้ในการเริ่มต้นหรือบล็อกเสมอไป การประกาศพารามิเตอร์และจำนวนเต็มใดๆ ก็ทำได้ในส่วนนี้เช่นกัน
Exampเลอ:
เร็ก ก,ข; // อินพุตในโค้ด HDL ถูกกำหนดเป็น reg ใน testbench
ลวด y; // สัญญาณเอาท์พุตใน HDL ถูกกำหนดให้เป็นสายใน testbench
การสร้างอินสแตนซ์ DUT
วัตถุประสงค์ของม้านั่งทดสอบคือการตรวจสอบว่าโมดูล DUT ของเราทำงานหรือไม่ ดังนั้นเราจึงจำเป็นต้องสร้างอินสแตนซ์โมดูลการออกแบบของเราเพื่อทดสอบโมดูล
รูปแบบประโยค :
- (สัญญาณ 1), . สัญญาณ1>(สัญญาณ2));
Exampเลอ:
ALU d0 (.a(a), // สัญญาณ "a" ใน ALU ควรเชื่อมต่อกับ "a" ในโมดูล ALU_tb
.b(b), // สัญญาณ “b” ใน ALU ควรเชื่อมต่อกับ “b” ในโมดูล ALU_tb
.c(c)) ;// สัญญาณ "c" ใน ALU ควรเชื่อมต่อกับ "c" ในโมดูล ALU_tb
เราได้สร้างอินสแตนซ์ของโมดูล DUT ALU ให้กับโมดูลทดสอบแล้ว ชื่ออินสแตนซ์ (d0) เป็นตัวเลือกของผู้ใช้ สัญญาณที่มีจุด “” ด้านหน้าคือชื่อของสัญญาณภายในโมดูล ALU ในขณะที่สายไฟหรือเร็กที่เชื่อมต่อในม้านั่งทดสอบจะอยู่ถัดจากสัญญาณในวงเล็บ () ขอแนะนำให้เขียนโค้ดการเชื่อมต่อแต่ละพอร์ตในบรรทัดแยกกัน เพื่อให้ข้อความแสดงข้อผิดพลาดในการคอมไพล์ชี้ไปที่หมายเลขบรรทัดที่เกิดข้อผิดพลาดอย่างถูกต้อง เนื่องจากการเชื่อมต่อเหล่านี้สร้างขึ้นตามชื่อ ลำดับที่ปรากฏจึงไม่เกี่ยวข้อง
การสร้างอินสแตนซ์ DUT ยังสามารถทำได้สำหรับโมดูลที่โมดูล Testbench มีชื่อสัญญาณที่แตกต่างกัน การทำแผนที่สัญญาณที่ถูกต้องเป็นสิ่งสำคัญเมื่อสร้างอินสแตนซ์
Exampเลอ :
ALU d0 (.a(A), // สัญญาณ "a" ใน ALU ควรเชื่อมต่อกับ "A" ในโมดูล ALU_tb
.clk(นาฬิกา), // สัญญาณ "clk" ใน ALU ควรเชื่อมต่อกับโมดูล "นาฬิกา" ALU_tb
.ออก(ออก)) ; // สัญญาณ "ออก" ใน ALU ควรเชื่อมต่อกับ "OUT" ในโมดูล ALU_tb
เสมอ & บล็อกเริ่มต้นใน Testbench
มีสองบล็อกตามลำดับใน Verilog เริ่มต้นและเสมอ เราใช้มาตรการกระตุ้นในบล็อกเหล่านี้
บล็อกเริ่มต้น
บล็อกเริ่มต้นซึ่งดำเนินการเพียงครั้งเดียวและสิ้นสุดเมื่อมีการดำเนินการบรรทัดสุดท้ายของบล็อก สิ่งกระตุ้นจะถูกเขียนลงในบล็อกเริ่มต้น (ดูบรรทัดที่ 54-72 ในรูปที่ 5)
ไวยากรณ์:
..
เริ่มต้นเบื้องต้น
$ การถ่ายโอนข้อมูลfile-
$dumpvars();
..(ป้อนสิ่งเร้า)
จบ
บล็อกเริ่มต้นจะเริ่มดำเนินการเมื่อเริ่มต้นการจำลอง ณ เวลา t = 0 เริ่มต้นด้วยบรรทัดแรกระหว่างจุดเริ่มต้นและจุดสิ้นสุด แต่ละบรรทัดจะดำเนินการจากบนลงล่างจนกว่าจะถึงความล่าช้า เมื่อถึงความล่าช้า การดำเนินการของบล็อกนี้จะรอจนกระทั่งเวลาล่าช้า (หน่วย 10 เวลา) ผ่านไป จากนั้นจึงเริ่มดำเนินการอีกครั้ง
ผู้ใช้สามารถกำหนดสิ่งเร้าโดยใช้ลูป (สำหรับ ในขณะที่ if-else) และภายในบล็อกเริ่มต้นนี้ แทนที่จะป้อนชุดค่าผสมทั้งหมดด้วยตนเอง
Exampเลอ :
เริ่มต้นเริ่มต้น
ก = 0; ข = 0; // เริ่มดำเนินการ
#10 ก = 0; ข = 1; // การดำเนินการอยู่ที่ t = เวลา 10 หน่วย
#10 ก = 1; ข = 0; // การดำเนินการอยู่ที่ t = เวลา 20 หน่วย
จบ
ทิ้ง Files
สิ่งที่ต้องจำไว้อีกประการหนึ่งคือการประกาศ $ทิ้งfiles และ $รถดัมพ์ ภายในบล็อกเริ่มต้น (ดูบรรทัดที่ 55-56 ในรูปที่ 5) $ทิ้งfile ใช้เพื่อดัมพ์การเปลี่ยนแปลงค่าของ nets และ register ใน file ที่ถูกตั้งชื่อให้เป็นข้อโต้แย้งของมัน
เช่นampเลอ:
$ทิ้งfile(“alu_tb.vcd”);
จะดัมพ์การเปลี่ยนแปลงใน file ชื่อ alu_tb.vcd การเปลี่ยนแปลงจะถูกบันทึกไว้ใน file เรียกว่าวีซีดี file นั่นหมายถึงการถ่ายโอนข้อมูลการเปลี่ยนแปลงมูลค่า VCD (การถ่ายโอนข้อมูลการเปลี่ยนแปลงค่า) จะเก็บข้อมูลทั้งหมดเกี่ยวกับการเปลี่ยนแปลงค่า เราไม่สามารถมี $dump ได้มากกว่าหนึ่งรายการfile คำสั่งในการจำลอง Verilog
$ ราคารถดัมพ์ ใช้เพื่อระบุตัวแปรที่จะทิ้ง (ในไฟล์ file กล่าวถึงโดย $dumpfile- วิธีที่ง่ายที่สุดในการใช้งานคือไม่มีข้อโต้แย้งใดๆ ไวยากรณ์ทั่วไปของ $dumpvars คือ
$รถดัมพ์ - - -
โดยพื้นฐานแล้วเราสามารถระบุได้ว่าโมดูลใดและตัวแปรใดในโมดูลที่จะถูกทิ้ง วิธีที่ง่ายที่สุดในการใช้งานคือตั้งค่าระดับเป็น 0 และชื่อโมดูลเป็นโมดูลด้านบน (โดยทั่วไปคือโมดูล Testbench ด้านบน)
$รถดัมพ์(0, alu_tb);
เมื่อตั้งค่าระดับเป็น 0 และระบุเฉพาะชื่อโมดูลเท่านั้น ระบบจะทิ้งตัวแปรทั้งหมดของโมดูลนั้นและตัวแปรทั้งหมดในโมดูลระดับล่างทั้งหมดที่สร้างอินสแตนซ์โดยโมดูลบนสุดนี้ หากโมดูลใดไม่ได้สร้างอินสแตนซ์โดยโมดูลระดับบนสุดนี้ ตัวแปรจะไม่ครอบคลุม อีกประการหนึ่งคือการประกาศ $ทิ้งfile ต้องมาก่อน $dumpvars หรืองานระบบอื่นๆ ที่ระบุดัมพ์ กองขยะเหล่านี้ fileจะต้องประกาศก่อนที่จะป้อนข้อมูลการกระตุ้น มิฉะนั้นจะไม่มีการบันทึกค่าลงในดัมพ์เหล่านี้ files.
บล็อคเสมอ
ตรงกันข้ามกับคำสั่งเริ่มต้น การบล็อกเสมอจะดำเนินการซ้ำๆ แม้ว่าการดำเนินการจะเริ่มต้นที่เวลา t = 0 ก็ตาม เช่นampเนื่องจากสัญญาณนาฬิกาเป็นสิ่งจำเป็นสำหรับการทำงานของวงจรซีเควนเชียล เช่น ฟลิปฟล็อป ต้องจัดหามาอย่างต่อเนื่อง ดังนั้นเราจึงสามารถเขียนโค้ดสำหรับการทำงานของนาฬิกาในเครื่องทดสอบได้ดังนี้ (ดูบรรทัดที่ 52 ในรูปที่ 5):
เสมอ
#10 clk = ~clk;
เอ็นด์โมดูล
ข้อความข้างต้นจะถูกดำเนินการหลังจาก 10 ns โดยเริ่มจาก t = 0 ค่าของ clk จะถูกกลับด้านหลังจาก 10 ns จากค่าก่อนหน้า ดังนั้นการสร้างสัญญาณนาฬิกาที่มีความกว้างพัลส์ 20 ns ดังนั้นคำสั่งนี้จึงสร้างสัญญาณความถี่ 50 MHz สิ่งสำคัญคือต้องทราบว่า การเริ่มต้นของสัญญาณเสร็จสิ้นก่อนที่จะบล็อกเสมอ หากเราไม่ดำเนินการในส่วนการกำหนดค่าเริ่มต้น สัญญาณ clk จะเป็น x ตั้งแต่ t – 0 และหลังจาก 10 ns สัญญาณจะกลับเป็น x อีกอัน
ม้านั่งทดสอบการตรวจสอบตัวเอง
ม้านั่งทดสอบที่ตรวจสอบตัวเองจะมีคำสั่งเพื่อตรวจสอบสถานะปัจจุบัน
- $แสดง งานระบบส่วนใหญ่จะใช้เพื่อแสดงข้อความแก้ไขข้อบกพร่องเพื่อติดตามการไหลของการจำลอง
เริ่มต้นเบื้องต้น
ก = 0 ; ข = 0 ; ค = 0; #10; // ใช้อินพุตรอ
ถ้า( y ! == 1) เริ่มต้น
$display( “000 ล้มเหลว”) ; //ตรวจสอบ
ค = 1; #10 ; //ใช้อินพุตรอ
จบ
อย่างอื่นถ้า ( y ! == 0) เริ่มต้น
$display("001 ล้มเหลว") // ตรวจสอบ
ข = 1; ค = 0; #10 ; จบ
อย่างอื่นถ้า(y!==0)
$display (“ 010 ล้มเหลว”); //ตรวจสอบ
จบ
เอ็นด์โมดูล
$แสดง ใช้เพื่อแสดงค่าของตัวแปร สตริง หรือนิพจน์ จากข้างต้น เช่นampเมื่อใดก็ตามที่ลูป if-else ใดๆ เป็นไปตามที่ต้องการ บันทึกของโปรแกรมจำลองจะแสดง $ ตามลำดับแสดง คำแถลง. มีการขึ้นบรรทัดใหม่ตามค่าเริ่มต้นที่ส่วนท้ายของสตริง
$แสดง (“เวลา = %t , A = %b, B = %b, C = % b”, $เวลา, ก,บี,ค);
ตัวอักษรที่กล่าวถึงในเครื่องหมายคำพูดจะถูกพิมพ์ตามที่เป็นอยู่ ตัวอักษรพร้อมด้วย % หมายถึงรูปแบบสตริง เราใช้ %b เพื่อแสดงข้อมูลไบนารี เราสามารถใช้ %d, %h, %o แทนทศนิยม เลขฐานสิบหก และฐานแปด ตามลำดับ %g ใช้สำหรับแสดงจำนวนจริง สิ่งเหล่านี้จะถูกแทนที่ด้วยค่าที่อยู่นอกใบเสนอราคาตามลำดับที่กล่าวถึง สำหรับเช่นampจากนั้น ข้อความข้างต้นจะถูกแสดงในบันทึกการจำลองเป็น: เวลา = 20, A = 0, B =1, C = 0
โต๊ะ 1. รูปแบบตาราง Verilog
การโต้แย้ง | คำอธิบาย |
%ชม., %ชม | แสดงในรูปแบบเลขฐานสิบหก |
%d, %D | แสดงในรูปแบบทศนิยม |
%ข, %ข | แสดงในรูปแบบไบนารี |
%m, %M | แสดงชื่อตามลำดับชั้น |
%s, %S | แสดงเป็นสตริง |
%ที, %ที | แสดงในรูปแบบเวลา |
%ฉ, %ฉ | แสดง 'ของจริง' ในรูปแบบทศนิยม |
%อี, %อี | แสดง 'ของจริง' ในรูปแบบเลขชี้กำลัง |
$แสดง ส่วนใหญ่จะพิมพ์ข้อมูลหรือตัวแปรในขณะนั้นเหมือนกับ printf ใน C เราต้องพูดถึง $แสดง สำหรับข้อความอะไรก็ตามที่เราต้องทำ view ในบันทึกการจำลอง
- $เวลา
$เวลา เป็นงานระบบที่จะคืนค่าเวลาปัจจุบันของการจำลอง
- $เฝ้าสังเกต
$เฝ้าสังเกต จะตรวจสอบข้อมูลหรือตัวแปรที่เขียนและเมื่อใดก็ตามที่ตัวแปรเปลี่ยนแปลงก็จะพิมพ์ออกมา
ค่าที่เปลี่ยนแปลง มันบรรลุผลที่คล้ายกันในการเรียก $display หลังจากทุกครั้งที่มีข้อโต้แย้งใด ๆ ได้รับ
ปรับปรุงแล้ว -เฝ้าสังเกต ก็เหมือนกับงานที่ถูกสร้างขึ้นมาเพื่อให้ทำงานอยู่เบื้องหลังของเธรดหลักที่คอยติดตามและ
แสดงการเปลี่ยนแปลงค่าของตัวแปรอาร์กิวเมนต์ -เฝ้าสังเกต มีไวยากรณ์เหมือนกับ $แสดง.
$เฝ้าสังเกต(“ เวลา = %t, A = %b, B = %b, C = % b”, $เวลา, ก,บี,ค);
จากรูปที่ 7 คุณจะสังเกตได้ว่ามีการเพิ่มบรรทัดใหม่ของโค้ดเพื่อประเมินตนเองของม้านั่งทดสอบ ตำแหน่งของ $แสดง และ $เฝ้าสังเกต ข้อความในส่วนต่างๆ ของม้านั่งทดสอบจะให้ผลลัพธ์ที่แตกต่างกัน (ดูรูปที่ 8) -เวลา ที่กล่าวถึงในคำสั่งเหล่านี้จะพิมพ์เวลาที่มีการพิมพ์ค่า ในขณะเดียวกันหน่วยที่บอกว่า 170000 เราจะเห็นว่ามูลค่าของ A และ B แตกต่างกันอย่างไรเนื่องจาก $แสดง และ $เฝ้าสังเกต คำกล่าว
ซอฟต์แวร์ GTKWave
GTKWave เป็นคลื่น GTK+ ที่มีคุณลักษณะครบถ้วน viewเอ้อสำหรับ Unix, Win32 และ Mac OSX ซึ่งอ่าน LXT, LXT2, VZT, FST และ GHW fileรวมทั้ง VCD/EVCD มาตรฐาน fileและอนุญาตให้พวกเขา viewไอเอ็นจี เป็นทางการ webเว็บไซต์อยู่ที่ http://gtkwave.sourceforge.net/ - GTKWave เป็นสิ่งที่แนะนำ viewเอ้อโดยเครื่องมือจำลอง Icarus Verilog
เมื่อผู้ใช้สร้างม้านั่งทดสอบเพื่อทดสอบฟังก์ชันการทำงานของการออกแบบได้สำเร็จแล้ว ผู้ใช้จะสามารถใช้ซอฟต์แวร์ GTKWave เพื่อ view รูปคลื่น
เพื่อเปิดใช้งานซอฟต์แวร์ GTKWave ไปที่ view ผู้ใช้จะต้องคลิกที่ปุ่ม Simulate Testbench ที่ด้านบนของแถบเครื่องมือหรือจากเมนูหลัก Tools→ Simulation→ Simulate Testbench หากไม่มีข้อผิดพลาดทางไวยากรณ์ ขึ้นอยู่กับการออกแบบ GTKWave ควรเปิดใช้งานโดยอัตโนมัติ ไม่เช่นนั้นผลลัพธ์ของสิ่งเร้าใน Testbench จะแสดงในส่วน Logger ของหน้าต่าง
ซอฟต์แวร์ GTKWave จะเปิดไฟล์ดัมพ์รูปแบบ .vcdfile โดยอัตโนมัติ หน้าต่าง GTKWave จะไม่แสดงรูปคลื่นเมื่อเปิดขึ้น สิ่งนี้ทำให้ผู้ใช้มีโอกาสเลือกสัญญาณที่ต้องการ view และสังเกต ในการเลือกสัญญาณ ผู้ใช้จะต้องแสดง โดยผู้ใช้ต้องคลิกที่ชื่อโมดูล/อินสแตนซ์ทางด้านซ้ายของหน้าต่างใต้แท็บ SST เมื่อคลิก + ของทุกอินสแตนซ์ คุณจะเห็นสัญญาณที่เกี่ยวข้องกับอินสแตนซ์นั้นในส่วนด้านล่าง จากนั้นคุณสามารถลากและวางสัญญาณที่ต้องการหรือดับเบิลคลิกสัญญาณเพื่อแสดงในหน้าต่างสัญญาณ คุณยังสามารถเลือกทั้งหมด (CTRL + A) และแทรกลงในหน้าต่างสัญญาณ (ดูรูปที่ 9)
ขณะนี้สัญญาณถูกเพิ่มลงในหน้าต่างสัญญาณแต่ยังไม่ได้จำลอง หลังจากเพิ่มสัญญาณที่ต้องการลงในหน้าต่างสัญญาณแล้ว ให้คลิกที่ เพื่อปรับสัญญาณให้พอดีกับความกว้างปัจจุบันของหน้าต่าง จากนั้นจึงโหลดสัญญาณจากการรีโหลด
สัญลักษณ์ที่ปรากฏบนแถบเครื่องมือ ตอนนี้คุณสามารถเห็นสัญญาณพร้อมค่าตามลำดับ
ค่าสัญญาณ
ตามค่าเริ่มต้น ค่าของสัญญาณจะอยู่ในรูปแบบเลขฐานสิบหกและคลื่นทั้งหมดจะเป็นสีเขียว (หากทำงานอย่างถูกต้อง)
ผู้ใช้สามารถเปลี่ยนคุณสมบัติของสัญญาณเหล่านี้ได้โดยการคลิกขวาที่สัญญาณและเลือกรูปแบบข้อมูลหรือรูปแบบสี ผู้ใช้ยังสามารถแทรกสัญญาณว่างเพื่อสร้างส่วนระหว่างกลุ่มสัญญาณได้ เมื่อคุณได้ผลลัพธ์ด้านแสงที่ต้องการแล้ว คุณสามารถบันทึกการกำหนดค่าของคุณได้โดยดำเนินการต่อไป File → เขียนบันทึก File.
แถบเครื่องมือ GTKWave
แถบเครื่องมือ (ดูรูปที่ 10) ช่วยให้ผู้ใช้สามารถใช้งานฟังก์ชันพื้นฐานของสัญญาณได้ ให้เราหารือเกี่ยวกับแต่ละตัวเลือกบนแถบเครื่องมือจากซ้ายไปขวา
- ตัวเลือกเมนู: ภายใต้ตัวเลือกนี้เราทำได้ view คุณสมบัติต่างๆ ทั้งหมดของซอฟต์แวร์ที่สามารถใช้เพื่อเล่นกับซอฟต์แวร์ได้ รายละเอียดภายใต้ตัวเลือกเมนูนี้ครอบคลุมอยู่ในส่วนที่ 8 ของคู่มือผู้ใช้นี้
- ตัดร่องรอย: ใช้เพื่อลบ/ตัดสัญญาณที่เลือกจากหน้าต่างสัญญาณ
- คัดลอกร่องรอย: ใช้เพื่อคัดลอกสัญญาณที่เลือกจากหน้าต่างสัญญาณ
- วางร่องรอย: การติดตามการคัดลอก/ตัดสามารถวางที่ตำแหน่งอื่นในหน้าต่างสัญญาณได้
- ซูมพอดี: ใช้เพื่อให้พอดีกับสัญญาณตามขนาดของหน้าต่างที่ผู้ใช้เลือกแสดง
- ซูมเข้า: ใช้เพื่อซูมเข้าหน้าต่างสัญญาณ
- ซูมออก: ใช้เพื่อซูมออกหน้าต่างสัญญาณ
- ซูม เลิกทำ: ใช้เพื่อยกเลิกการซูมเข้า/ออกบนหน้าต่างสัญญาณ
- ซูมเพื่อเริ่ม: สิ่งนี้จะซูมหน้าต่างสัญญาณโดยแสดงเวลาเริ่มต้นของสัญญาณ
- ซูมไปที่จุดสิ้นสุด: สิ่งนี้จะซูมหน้าต่างสัญญาณที่แสดงเวลาสิ้นสุดของสัญญาณ
- ค้นหาขอบก่อนหน้า: วิธีนี้จะเลื่อนเครื่องหมายไปทางด้านซ้ายเพื่อระบุขอบก่อนหน้า
- ค้นหาขอบถัดไป: วิธีนี้จะเลื่อนเครื่องหมายไปทางขวาเพื่อระบุขอบถัดไป
- เลื่อนพันธะล่าง/บน: ใช้สิ่งนี้เราสามารถกำหนดกรอบเวลาที่ผู้ใช้ต้องการแสดงได้ สำหรับเช่นampเนื่องจากเราสามารถกำหนดกรอบเวลาเป็น 0 วินาทีถึง 500 ns ได้ โดยจะแสดงสัญญาณภายใต้ระยะเวลานั้นเท่านั้น
- โหลดซ้ำ: รีโหลดจะถูกกดทุกครั้งที่มีการเปลี่ยนแปลงสัญญาณที่แสดง มันจะโหลดใหม่และแสดงสัญญาณตามพารามิเตอร์ใหม่ สำหรับเช่นampหลังจากเปลี่ยนกรอบเวลาของสัญญาณแล้ว เราต้องโหลดสัญญาณใหม่เพื่อแสดงสัญญาณในกรอบเวลาใหม่ที่ตั้งไว้
ตัวเลือกเมนู
จากมุมซ้ายบนของซอฟต์แวร์ GTKWave ผู้ใช้สามารถเข้าถึงตัวเลือกเมนูได้โดยคลิกที่เส้นแนวตั้งสามเส้น (ดูรูปที่ 11) ผู้ใช้สามารถค้นหาตัวเลือกต่อไปนี้ได้ภายใต้ตัวเลือกเมนู:
File
การ File เมนูย่อยประกอบด้วยรายการต่าง ๆ ที่เกี่ยวข้องกับการเข้าถึง files,นำเข้า-ส่งออกวีซีดี fileการพิมพ์ และการอ่าน/การเขียน files และออก
แก้ไข
เมนูย่อยแก้ไขใช้เพื่อดำเนินการฟังก์ชันยูทิลิตีต่างๆ เช่น การเปลี่ยนแปลงการแสดงข้อมูลของค่าในหน้าต่างย่อยของ wave การใช้ตัวเลือกใต้เมนูย่อยแก้ไข ผู้ใช้สามารถเปลี่ยนรูปแบบข้อมูลของสัญญาณ จัดเรียงใหม่ เลื่อน ตัดแต่ง ไฮไลต์ กลุ่มสัญญาณ แสดงความคิดเห็นเกี่ยวกับสัญญาณ เปลี่ยนสีของสัญญาณ ฯลฯ
ค้นหา
เมนูย่อยการค้นหาใช้เพื่อค้นหาชื่อและค่าสุทธิ ช่วยในการทำงานกับระดับลำดับชั้นต่างๆ ของสัญญาณและอินสแตนซ์ใน VCD file.
เวลา
เมนูย่อยเวลาประกอบด้วยฟังก์ชันพิเศษที่ดำเนินการโดยปุ่มการนำทางและแผงสถานะ
ช่วยให้สามารถใช้งานฟังก์ชันที่เรียบง่ายและเกี่ยวข้องกับเวลา เช่น การซูม การเลื่อนไปยังจุดเวลาใดจุดหนึ่ง การเลื่อนสัญญาณไปในทิศทางใดทิศทางหนึ่ง ฯลฯ
เครื่องหมาย
เมนูย่อยของมาร์กเกอร์ใช้เพื่อดำเนินการต่างๆ บนมาร์กเกอร์ ตลอดจนควบคุมการเลื่อนนอกหน้าจอ
ช่วยให้ฟังก์ชันการทำงานของการเพิ่มเครื่องหมายจำนวนมากบนหน้าต่างสัญญาณ อนุญาตให้ใช้เครื่องหมายชื่อได้สูงสุด 26 รายการ และเวลาสำหรับทั้งหมดจะต้องแตกต่างกัน
a- เพื่อเพิ่มเครื่องหมายในหน้าต่างสัญญาณ
คลิกซ้ายที่จุดที่ต้องการซึ่งคุณต้องการวาง Marker แล้วกด ALT + N ซึ่งจะวางเครื่องหมายที่มีชื่อ (A,B,C ฯลฯ) ไว้ที่จุดที่ต้องการ ผู้ใช้สามารถดำเนินการนี้ต่อไปได้ใน 26 สถานที่เวลาที่แตกต่างกัน
เพื่อเปรียบเทียบค่าเวลาของเครื่องหมายสถานที่ทั้งหมด เมนู → เครื่องหมาย → แสดงข้อมูลการเปลี่ยนแปลงเครื่องหมาย
นี่จะเป็นการเปิดหน้าต่างพร้อมค่าเวลาที่มาร์กเกอร์แต่ละตัว ผู้ใช้สามารถบันทึกค่าเวลาของเครื่องหมายแต่ละอันที่วางไว้ด้วยตนเองแล้วลบออกเพื่อคำนวณความแตกต่างของเวลาระหว่างเครื่องหมาย 2 อัน
b- หากต้องการลบ Marker ในหน้าต่างสัญญาณ
ผู้ใช้สามารถไปที่ Menu → Markers → Collect Named Marker การดำเนินการนี้จะลบเครื่องหมายนามสกุลที่วางอยู่ในหน้าต่างสัญญาณ ผู้ใช้สามารถลบ Markers ที่มีชื่อทั้งหมดได้โดยไปที่ Menu → Markers → Collect All Named Marker (รูปที่ 12)
ในรูปที่ 13 เราจะเห็นว่าสีของสัญญาณเปลี่ยนไปอย่างไร คุณสามารถสังเกตเห็นสัญญาณว่างเปล่าที่ถูกเพิ่มลงในหน้าต่างสัญญาณพร้อมกับความคิดเห็น - สัญญาณว่างเปล่า
นอกจากนี้ ให้สังเกตการมีอยู่ของเครื่องหมายระบุชื่อ 6 อัน (A – E) และการรวมค่าเวลาระหว่างเครื่องหมายเหล่านี้ใน ps
View
การ View เมนูย่อยใช้เพื่อควบคุมคุณลักษณะต่างๆ ที่เกี่ยวข้องกับการแสดงภาพกราฟิกของรายการสถานะตลอดจนค่าในหน้าต่างย่อยสัญญาณ จากเมนูนี้ คุณสามารถแปลงหน้าต่างสัญญาณเป็นขาวดำหรือสีได้เช่นกัน ที่ View เมนูย่อยยังช่วยให้คุณเปลี่ยนมิติเวลาตั้งแต่วินาที (วินาที) ถึงฟิโกวินาที (fs) ผู้ใช้สามารถค้นหาตัวเลือกนี้ได้ View → ปรับขนาดเป็นมิติเวลา → fs
ช่วย
เมนูย่อยวิธีใช้ประกอบด้วยตัวเลือกสำหรับการเปิดใช้งานวิธีใช้ออนไลน์ตลอดจนการแสดงข้อมูลเวอร์ชันของโปรแกรม
บทสรุป
เอกสารนี้ถูกสร้างขึ้นเพื่อช่วยเหลือผู้ใช้ในการจำลองการออกแบบของตนได้สำเร็จ และตรวจสอบฟังก์ชันการทำงานโดยแก้ไขการร่างม้านั่งทดสอบที่จำเป็น และใช้ Icarus Verilog ร่วมกับ GTKWave เพื่อแสดงรูปคลื่นและสังเกตผลลัพธ์
ประวัติการแก้ไข
การแก้ไข | วันที่ | คำอธิบาย |
1.00 | 20 พฤษภาคม 2024 | การเปิดตัวครั้งแรก |
R19US0011EU0100 Rev.1.0
20 พฤษภาคม 2024
© 2024 เรเนซาส อิเล็กทรอนิกส์
เอกสาร / แหล่งข้อมูล
![]() |
RENESAS ForgeFPGA การจำลองซอฟต์แวร์ [พีดีเอฟ] คู่มือการใช้งาน REN_r19us0011eu0100, การจำลองซอฟต์แวร์ ForgeFPGA, ซอฟต์แวร์ ForgeFPGA, ForgeFPGA, การจำลอง ForgeFPGA, การจำลองซอฟต์แวร์, การจำลอง, ซอฟต์แวร์ |