RTL กับ HDL ความแตกต่างคืออะไร


24

อะไรคือความแตกต่างที่สำคัญระหว่าง RTL และ HDL ความซื่อสัตย์ฉันค้นหา / googled มันยังมีคนถูกแบ่งออกในความคิดเห็นของพวกเขา ฉันจำได้ว่ามีคนบอกว่า HDL เป็นภาษาคอมพิวเตอร์ที่ใช้อธิบายวงจรดิจิตอลและเมื่อมีการสังเคราะห์มันก็ถือว่าเป็น RTL

คำตอบ:


18

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 แทนที่จะเป็นระดับเกท


3
คำตอบที่ดีเพียงการปรับแต่งเพิ่มเติม ... RTL ถือว่าสไตล์การออกแบบที่กำหนด - ตรรกะเมฆลงทะเบียนตรรกะเมฆลงทะเบียน ฯลฯ ซึ่งหมายถึงการออกแบบซิงโครนัส (โอเวอร์คล็อก) หากคุณกำลังเขียนโค้ดใน hdl ของคุณสำหรับการออกแบบเครื่องมือสังเคราะห์ของคุณอาจใช้สิ่งอื่นที่ไม่ใช่ RTL
ตัวยึด

,, ในความเป็นจริงมีเครื่องมือที่ตรวจสอบผลลัพธ์ของการสังเคราะห์เทียบกับรหัส RTL ของคุณเพื่อให้แน่ใจว่าเครื่องมือไม่ได้ปรับให้เหมาะสมโดยไม่ตั้งใจหรือเปลี่ยนแปลงบางอย่างระหว่างการสังเคราะห์ที่ทำให้เกิดความไม่ตรงกัน สิ่งนี้เรียกว่าการยืนยันอย่างเป็นทางการ '' ไม่ไม่ได้ สิ่งนี้เรียกว่าการตรวจสอบความเท่าเทียมกันของตรรกะหรือการตรวจสอบความเท่าเทียมกันอย่างเป็นทางการ การตรวจสอบอย่างเป็นทางการค่อนข้างเป็นกระบวนการของการพิสูจน์ (โดยใช้วิธีการทางคณิตศาสตร์โดยไม่ต้องจำลอง / ม้านั่งทดสอบ) ว่าคำอธิบายฮาร์ดแวร์ของคุณอธิบายพฤติกรรมที่ตั้งใจจะอธิบาย
Al Bundy

14

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 หรือระดับเกต
supercat

RTL ระดับเกตจะดูเหมือนAND(.a(),.b()) OR(.a(),.b())ประตูตรรกะล้วนๆ ฉันอยู่ภายใต้การแสดงผลที่ RTL เป็นสิ่งที่คุณต้องการสังเคราะห์แม้กระทั่งวงจร combinatorial เนื่องจากคุณยังคงอธิบายการเปลี่ยนแปลงของข้อมูล แต่ไม่ใช่ตรรกะประตูโดยตรง
pre_randomize

1
ขออภัยฉันไม่ทำตามจะพยายามชี้แจง RTL หมายถึง flip-flop ระดับประตูยกระดับฟลิป สำหรับวงจรที่เรียบง่ายจากนั้นการเชื่อมโยงไปยังกลุ่มของประตูตรรกะอาจจะง่าย แต่อาจไม่มีประสิทธิภาพด้านพลังงาน หน่วยประมวลผล Atom มีทรานซิสเตอร์ 47 ล้านตัวซึ่งเทียบเท่ากับ NAND2 ประมาณ 10 ล้านตัว คุณต้องการกำหนดและแก้ปัญหาประตูแบบมีสาย 10 ล้านมือหรือไม่ นี่คือข้อดีของการสรุปเล็กน้อยที่เราสามารถศึกษาและแก้ไขปัญหาพฤติกรรมที่ตั้งใจไว้
pre_randomize

1
สมมติว่ามีใครพยายามระบุ 74HC74 ใน HDL มีหลายวิธีที่เราสามารถสังเคราะห์อุปกรณ์ดังกล่าวโดยใช้ตรรกะ combinatorial, synch-flops เท่านั้นและ latches โปร่งใส แต่ฉันไม่สามารถคิดการใช้งานใด ๆ ที่ไม่เกี่ยวข้องกับสภาพการแข่งขันหรือสร้างความผิดปกติทางพฤติกรรมซึ่งจะ ไม่มีอยู่ในฮาร์ดแวร์ดั้งเดิม (เช่นถ้า D และ Q สูงชีพจร runt ใน CP หรือ / SD ไม่ควรมีผลกระทบ แต่ในการใช้งานฉันสามารถคิดได้ว่าพัลส์ดังกล่าวอาจทำให้เกิดการแพร่กระจายและ / หรือความผิดพลาดของเอาต์พุต)
supercat

1
คุณสร้างMyLatchอย่างไรมันเป็นเซลล์ฐาน instantiated หรือสลักโดยนัย หากคุณยกระดับประตูเป็นระดับประตูหากคุณบอกเป็นนัยก็คือ RTL ห้องสมุดระดับประตูจะมีเวลาที่เกี่ยวข้องกับการสร้างแบบจำลองสภาพการแข่งขัน / บกพร่อง ฯลฯ การจำลอง RTL ทำงานด้วยองค์ประกอบที่เหมาะ
pre_randomize
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.