มีคนบอกฉันว่าอะไรคือความแตกต่างระหว่าง RTL และโค้ด Verilog เชิงพฤติกรรม มีการแบ่งเขตที่ชัดเจนระหว่างการออกแบบในสองระดับนี้หรือไม่?
มีคนบอกฉันว่าอะไรคือความแตกต่างระหว่าง RTL และโค้ด Verilog เชิงพฤติกรรม มีการแบ่งเขตที่ชัดเจนระหว่างการออกแบบในสองระดับนี้หรือไม่?
คำตอบ:
รหัสพฤติกรรมเป็นระดับที่สูงกว่าและมักจะไม่สามารถสังเคราะห์ได้ โครงสร้างเช่นลูปความล่าช้าและคำสั่ง "เริ่มต้น" เป็นพฤติกรรม
รหัส RTL อยู่ในระดับต่ำกว่าและมีวัตถุประสงค์เพื่อสังเคราะห์ มันกำหนดวงจรเป็นการรวมกันของการลงทะเบียนเชื่อมต่อระหว่างกันและการดำเนินการดำเนินการกับสัญญาณระหว่างการลงทะเบียนเหล่านั้น
นำมาจาก Yahoo Answers และพบได้ทันทีกับ Google!
รหัส "ระดับการถ่ายโอนการลงทะเบียน" คือรหัสที่อธิบายในแง่ของการลงทะเบียนและตรรกะเชิงผสมที่อยู่ระหว่างพวกเขาและตั้งใจที่จะใช้เป็นข้อมูลเข้าสู่เครื่องมือสังเคราะห์ รหัสจะยึดติดกับชุดย่อยที่สังเคราะห์ได้ [1] ของภาษา ไม่มีความล่าช้าอย่างชัดเจนเวลาทั้งหมดอยู่ในรูปของขอบนาฬิกา โครงสร้างที่เป็นตัวแทนของแลตช์ทริกเกอร์ระดับมักจะหลีกเลี่ยง โดยทั่วไปรีจิสเตอร์จะโอเวอร์คล็อกนาฬิกาจำนวนเล็กน้อยซึ่งสามารถให้รายละเอียดกับตัววิเคราะห์เวลาได้ โดยปกติแล้วจะมีการรวมตรรกะเชิงตรรกะไว้ด้วยกัน [2] เพื่อตั้งถิ่นฐานภายในวงจรนาฬิกาเดี่ยวซึ่งจำกัดความซับซ้อนของมัน มันเป็นระดับที่สูงกว่าแบบจำลองระดับเกท แต่มันก็ยังกำหนดค่าที่รีจิสเตอร์ทุกตัวมีในทุกรอบสัญญาณนาฬิกา
รหัส "พฤติกรรม" เป็นรหัสทั่วไปที่อธิบายพฤติกรรมในระดับที่สูงกว่าสำหรับใช้ในการจำลอง แต่ไม่ได้ตั้งใจจะสังเคราะห์ได้ อาจใช้เพื่ออธิบายสภาพแวดล้อมโดยรอบการออกแบบของคุณในแบบจำลอง อาจใช้เป็นขั้นตอนแรกในการออกแบบเพื่อให้ได้การออกแบบโดยรวมก่อนที่การออกแบบ RTL โดยละเอียดของแต่ละโมดูลจะถูกนำไปใช้
[1] อนุญาตให้ชุดย่อยที่แน่นอนแตกต่างกันระหว่างเครื่องมือสังเคราะห์
[2] ถ้ามันไม่ได้อยู่ในรอบเดียวมากกว่าการจำลองและซินซิสอาจให้ผลลัพธ์ที่แตกต่างกันและตัววิเคราะห์เวลาจะแสดงการละเมิดเว้นแต่จะมีการบอกอย่างชัดเจนว่าไม่ควรทำ
ความหมายทั่วไปมากขึ้น
รหัสพฤติกรรม: ตามนิยามจะกำหนดพฤติกรรมขององค์ประกอบดิจิตอล มันไม่ได้ให้ข้อมูลว่าจะนำไปใช้กับ HW จริง ๆ ได้อย่างไร (การสังเคราะห์) มันจะไม่ให้ข้อมูลว่าจะดำเนินการลงทะเบียนและประตูอย่างไรเพื่อดำเนินการที่จำเป็น มันเหมือนกับเขียนอัลกอริธึมหรือ FSM ใน C
RTL: มันเป็นรูปแบบที่แม่นยำยิ่งขึ้นขององค์ประกอบดิจิตอล มันให้ข้อมูลวิธีการใช้งานรหัสเป็น HW จริง (หลังจากการสังเคราะห์) นอกจากนี้ยังให้ข้อมูลว่าจะถ่ายโอนข้อมูลระหว่างการลงทะเบียนและประตูได้อย่างไร
เป็นภาษาเดียวกัน แต่ใช้สไตล์ที่แตกต่าง ด้วยประสบการณ์ที่คุณสามารถแยกพวกเขาออกจากกันได้อย่างรวดเร็วนี่คือลักษณะบางอย่างของแต่ละคน:
รหัส verilog เกี่ยวกับพฤติกรรมโดยทั่วไปดูเหมือนโปรแกรมคอมพิวเตอร์ตามลำดับที่รันจากบนลงล่างภายในinitial begin
บล็อก คุณอาจพบว่าไม่มีพอร์ตอินพุต / เอาต์พุตที่กำหนดไว้ในระดับบนสุดโมดูลพฤติกรรมเนื่องจากการส่งออกอาจจะเป็นสิ่งอำนวยความสะดวกจำลองเช่นคอนโซล$display()
หรือระบบแฟ้มด้วย$open
หรือรูปแบบของคลื่น Dumper ด้วยและ$dumpfile
$dumpvars
นาฬิกาสำหรับความล่าช้าระหว่างงบสร้างโดยใช้การจำลองยาวรอเวลาเช่นและเรียกใช้งาน#4000
wishbone_master.checked_read(addr, value)
สำหรับการสร้างในระดับที่สูงขึ้นเหล่านี้คือมันไม่ชัดเจนว่าสิ่งที่เทียบเท่าเทคโนโลยีสังเคราะห์จะ / อาจจะเป็น
Verilog สำหรับการสังเคราะห์มักจะมีพอร์ตอินพุต / เอาท์พุตเนื่องจากไม่มีพอร์ตเชื่อมต่อโมดูลจะไม่มีผลข้างเคียงและสามารถกำจัดได้ [1] ความล่าช้าอาจนำมาใช้โดยการนับรอบของนาฬิกาโดยเฉพาะ หมายเหตุบางฟังก์ชั่นระบบ Verilog เช่น$clog2(PARAMETER)
อาจได้รับอนุญาตในรหัสสำหรับการสังเคราะห์ดังนั้นการปรากฏตัวของ$function
ไม่ได้รับประกันทั้งสองวิธี รหัสสำหรับการสังเคราะห์มีแนวโน้มที่จะประกอบด้วย 'กระบวนการ' อิสระจำนวนมากแต่ละรายการที่มีรายการความไว เทคโนโลยีบางอย่างจะอนุญาตให้initial begin
บล็อกสำหรับการเริ่มต้นหน่วยความจำอีกครั้งซึ่งไม่รับประกัน
ในที่สุดนักออกแบบรู้วัตถุประสงค์ของรหัสที่พวกเขาเขียนและจะเรียกมันอย่างเหมาะสมกับชุดเครื่องมือการสังเคราะห์หรือในการจำลอง
[1] ยกเว้นบล็อก IP บางตัวซึ่งอาจทำการเชื่อมต่อกับชิปภายในเช่น JTAG