อะไรคือความแตกต่างที่สำคัญระหว่าง RTL และ HDL ความซื่อสัตย์ฉันค้นหา / googled มันยังมีคนถูกแบ่งออกในความคิดเห็นของพวกเขา ฉันจำได้ว่ามีคนบอกว่า HDL เป็นภาษาคอมพิวเตอร์ที่ใช้อธิบายวงจรดิจิตอลและเมื่อมีการสังเคราะห์มันก็ถือว่าเป็น RTL
อะไรคือความแตกต่างที่สำคัญระหว่าง RTL และ HDL ความซื่อสัตย์ฉันค้นหา / googled มันยังมีคนถูกแบ่งออกในความคิดเห็นของพวกเขา ฉันจำได้ว่ามีคนบอกว่า HDL เป็นภาษาคอมพิวเตอร์ที่ใช้อธิบายวงจรดิจิตอลและเมื่อมีการสังเคราะห์มันก็ถือว่าเป็น RTL
คำตอบ:
HDL คือชื่อ catch all สำหรับภาษานิยามฮาร์ดแวร์ทั้งหมด (Verilog, VHDL และอื่น ๆ ) ในลักษณะเดียวกับ Object Oriented สามารถอ้างถึง C ++, Java และอื่น ๆ
RTL ในอีกทางหนึ่งเป็นวิธีการอธิบายวงจร
คุณเขียนรหัสระดับ RTL ของคุณในภาษา HDL ซึ่งได้รับการแปล (โดยเครื่องมือการสังเคราะห์) ไปยังคำอธิบายระดับเกตในภาษา HDL เดียวกันหรือสิ่งที่อุปกรณ์ / กระบวนการเป้าหมายของคุณจะใช้
ผมขอยกตัวอย่างให้คุณ นี่คือบรรทัดของ Verilog (HDL) ที่อธิบาย mux ใน RTL:
assign mux_out = (sel) ? din_1 : din_0;
เครื่องมือการสังเคราะห์ของคุณสามารถทำสิ่งนั้นและแปลงเป็นชุดของประตูตรรกะหรือเพียงแค่แมโคร mux ที่อุปกรณ์ปลายทางของคุณรองรับ ตัวอย่างเช่นมันอาจยกตัวอย่างมาโคร mux
mux u3 (mux_out, din_1, din_0);
ในทั้งสองกรณีคุณสามารถป้อนอินพุตเดียวกันไปยังบล็อก (RTL หรือระดับเกต) และผลลัพธ์ของคุณควรเหมือนกัน ในความเป็นจริงมีเครื่องมือที่ตรวจสอบผลลัพธ์ของการสังเคราะห์เทียบกับรหัส RTL ของคุณเพื่อให้แน่ใจว่าเครื่องมือไม่ได้ปรับให้เหมาะสมโดยไม่ตั้งใจหรือเปลี่ยนแปลงบางสิ่งในระหว่างการสังเคราะห์ที่ทำให้เกิดความไม่ตรงกัน สิ่งนี้เรียกว่าการตรวจสอบอย่างเป็นทางการ
ด้วยเหตุผลหลายประการการทำงานร่วมกันความง่ายในการเปลี่ยนแปลงความเข้าใจที่คุณเขียนคำอธิบายของวงจรดิจิตอลเป็น RTL แทนที่จะเป็นระดับเกท
HDL (Hardware description Language) เป็นประเภทของภาษาที่ใช้ Verilog / VHDL เทียบกับจาวาสคริปต์ที่ไม่ใช่ HDL
RTL (ระดับการถ่ายโอนข้อมูลลงทะเบียน) เป็นระดับของสิ่งที่เป็นนามธรรมที่คุณกำลังเขียนระดับที่ฉันอ้างถึงสามระดับคือ Behavioral, RTL, ระดับเกท
Behavioralมีชั้น abstraction ที่สูงที่สุดซึ่งอธิบายพฤติกรรมโดยรวมและมักจะไม่สามารถสังเคราะห์ได้ แต่มีประโยชน์สำหรับการตรวจสอบ
RTLอธิบายฮาร์ดแวร์ที่คุณต้องการด้วยการใช้ตรรกะ การกำหนด flip-flop, latches และวิธีการถ่ายโอนข้อมูลระหว่างกัน นี่คือการสังเคราะห์การสังเคราะห์อาจเปลี่ยนแปลง / ปรับตรรกะที่ใช้ แต่ไม่ใช่พฤติกรรม การสลับ mux สำหรับประตู ฯลฯ บางครั้งการสลับสัญญาณเพื่อเพิ่มประสิทธิภาพการออกแบบให้ดีขึ้น
Verilog RTL หมายถึง flip-flop:
logic a; //logic is SystemVerilog, could be a 'reg'
logic k; // Driven by RTL not shown
always @(posedge clk or negede rst_n) begin
if (~rst_n) begin
a <= 'b0 ;
end
else begin
a <= k ;
end
end
ตัวดำเนินการ Bitwise Combinatorial:
logic [1:0] n;
logic [1:0] m;
logic [1:0] result;
assign result = n & m ;
ระดับเกตคือการออกแบบโดยใช้เกตฐานตรรกะ (NAND, NOR, AND, OR, MUX, FLIP-FLOP) ไม่จำเป็นต้องถูกสังเคราะห์หรือเป็นผลลัพธ์จากการสังเคราะห์ นี่เป็นระดับต่ำสุดของสิ่งที่เป็นนามธรรม มันเป็นประตูตรรกะที่คุณจะใช้กับชิป แต่มันไม่มีข้อมูลตำแหน่ง
ระดับประตู Verilog (ฟังก์ชั่นเดียวกับด้านบน):
wire a;
wire k;
DFFRX1 dffrx1_i0 (
.Q (a), //Output
.QN( ), //Inverted output not used
.D (k), //Input
.CK(clk), //Clk
.RN(rst_n)// Active Low Async Reset
);
combinatorial
wire [1:0] n;
wire [1:0] m;
wire [1:0] result;
AND2X1 and2x1_i0 (
.Y( result[0]),
.A( n[0] ),
.B( m[0] )
);
AND2X1 and2x1_i1 (
.Y( result[1]),
.A( n[1] ),
.B( m[1] )
);
MyReg[7..1] := MyReg[6..0]; MyReg[0] := SerInput; MyReg.Clk = SerClk; MyReg[7..0].AR = !InBus[7..0] & Load; MyReg[7..0].AP = InBus[7..0] & Load;
(รีจิสเตอร์ shift-load แบบอะซิงโครนัสซึ่งสามารถนำไปใช้กับ Xilinx 9536 CPLD โดยใช้บล็อกที่มีการรีเซ็ต / ตั้งค่า async) จะถือว่าเป็น RTL หรือระดับเกต
AND(.a(),.b()) OR(.a(),.b())
ประตูตรรกะล้วนๆ ฉันอยู่ภายใต้การแสดงผลที่ RTL เป็นสิ่งที่คุณต้องการสังเคราะห์แม้กระทั่งวงจร combinatorial เนื่องจากคุณยังคงอธิบายการเปลี่ยนแปลงของข้อมูล แต่ไม่ใช่ตรรกะประตูโดยตรง
MyLatch
อย่างไรมันเป็นเซลล์ฐาน instantiated หรือสลักโดยนัย หากคุณยกระดับประตูเป็นระดับประตูหากคุณบอกเป็นนัยก็คือ RTL ห้องสมุดระดับประตูจะมีเวลาที่เกี่ยวข้องกับการสร้างแบบจำลองสภาพการแข่งขัน / บกพร่อง ฯลฯ การจำลอง RTL ทำงานด้วยองค์ประกอบที่เหมาะ