RTL vs HDL? Có gì khác biệt


24

Sự khác biệt chính giữa RTL và HDL là gì? Thành thật mà nói tôi đã tìm kiếm / googled nó nhưng mọi người đang chia rẽ ý kiến ​​của họ. Tôi nhớ một người nói rằng HDL là ngôn ngữ máy tính được sử dụng để mô tả một mạch kỹ thuật số và khi nó được tổng hợp, thì nó được coi là RTL.

Câu trả lời:


18

HDL là tên bắt tất cả cho tất cả các ngôn ngữ định nghĩa phần cứng (Verilog, VHDL, v.v.) theo cùng một cách mà Hướng đối tượng có thể tham chiếu đến C ++, Java, v.v.

RTL mặt khác là một cách để mô tả một mạch.

Bạn viết mã cấp độ RTL bằng ngôn ngữ HDL, sau đó được dịch (bằng các công cụ tổng hợp) sang mô tả cấp độ cổng trong cùng ngôn ngữ HDL hoặc bất cứ điều gì thiết bị / quy trình mục tiêu của bạn sẽ thực hiện.

Tôi sẽ cho bạn một ví dụ. Dưới đây là một dòng Verilog (HDL) mô tả một mux trong RTL:

assign mux_out = (sel) ? din_1 : din_0;

Công cụ tổng hợp của bạn có thể lấy nó và chuyển đổi nó thành một tập hợp các cổng logic hoặc chỉ là một macro mux được thiết bị cuối của bạn hỗ trợ. Ví dụ, nó có thể khởi tạo một macro mux

mux u3 (mux_out, din_1, din_0);

Trong cả hai trường hợp, bạn có thể cung cấp cùng một đầu vào cho khối (RTL hoặc mức cổng) và đầu ra của bạn phải giống nhau. Trong thực tế, có những công cụ kiểm tra đầu ra của tổng hợp so với mã RTL của bạn để đảm bảo công cụ không vô tình tối ưu hóa hoặc thay đổi một cái gì đó trong quá trình tổng hợp gây ra sự không khớp. Điều này được gọi là Xác minh chính thức.

Vì nhiều lý do, khả năng tương tác, dễ thay đổi, dễ hiểu, bạn viết mô tả của bạn về mạch kỹ thuật số là RTL, thay vì cấp độ cổng.


3
Câu trả lời hay, chỉ là một sàng lọc thêm ... RTL giả định một phong cách thiết kế nhất định - đám mây logic, thanh ghi, đám mây logic, thanh ghi, v.v ... ngụ ý thiết kế đồng bộ (đồng hồ). NẾU bạn đã mã hóa trong hdl của mình để thiết kế không đồng hồ (không đồng bộ), công cụ tổng hợp của bạn có thể sử dụng một cái gì đó không phải là RTL.
giữ chỗ

,, Trong thực tế, có những công cụ kiểm tra đầu ra của tổng hợp của bạn so với mã RTL của bạn để đảm bảo công cụ không vô tình tối ưu hóa hoặc thay đổi một cái gì đó trong quá trình tổng hợp gây ra sự không khớp. Điều này được gọi là Xác minh chính thức. '' Không, đây không phải là. Đây được gọi là Kiểm tra tương đương logic hoặc Kiểm tra tương đương chính thức. Xác minh chính thức là quá trình chứng minh (sử dụng các phương pháp toán học, không có ghế mô phỏng / thử nghiệm) rằng mô tả phần cứng của bạn thực sự mô tả hành vi mà nó dự định mô tả.
Al Bundy

14

HDL (Ngôn ngữ mô tả phần cứng) là loại ngôn ngữ được sử dụng, Verilog / VHDL so với javascript không phải HDL.

RTL (Cấp độ chuyển đổi đăng ký) là một mức độ trừu tượng mà bạn đang viết. Ba cấp độ tôi đề cập đến là Hành vi, RTL, Cấp độ cổng.

Hành vi có lớp trừu tượng cao nhất mô tả hành vi tổng thể và thường không tổng hợp được, nhưng rất hữu ích để xác minh.

RTL mô tả phần cứng bạn muốn bằng cách ngụ ý logic. xác định flip-flop, chốt và cách dữ liệu được chuyển giữa chúng. Đây là tổng hợp, tổng hợp có thể thay đổi / tối ưu hóa logic được sử dụng nhưng không phải hành vi. Chuyển đổi mux cho cổng vv một số lần đảo ngược tín hiệu để tối ưu hóa thiết kế tốt hơn.

Verilog RTL ngụ ý một 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

Toán tử kết hợp bitwise:

logic [1:0] n;
logic [1:0] m;
logic [1:0] result;

assign result = n & m ;

Cấp độ cổng là một thiết kế sử dụng các cổng logic cơ sở (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Nó không cần phải được tổng hợp hoặc là đầu ra từ tổng hợp. Điều này có mức độ trừu tượng thấp nhất. đó là cổng logic mà bạn sẽ sử dụng trên chip, nhưng nó thiếu thông tin vị trí.

Cổng cấp Verilog (cùng chức năng như trên):

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
);

Kết hợp

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]     )
);

Nếu người ta thiết kế một mạch như 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;(một thanh ghi dịch chuyển tải song song không đồng bộ có thể được thực hiện trên CPilin Xilinx 9536 bằng cách sử dụng các khối với thiết lập lại / đặt trước không đồng bộ) thì có thể được coi là RTL hoặc mức cổng không?
supercat

RTL, cấp độ cổng sẽ trông giống như AND(.a(),.b()) OR(.a(),.b())các cổng logic đơn thuần được nối lên. Tôi có ấn tượng rằng RTL là bất cứ thứ gì bạn định tổng hợp, thậm chí cả các mạch tổ hợp vì bạn vẫn đang mô tả sự thay đổi trong dữ liệu, nhưng không phải là cổng logic trực tiếp.
pre_randomize

1
Xin lỗi tôi không làm theo, Sẽ cố gắng làm rõ. RTL ngụ ý một flip-flop. Cấp độ cổng khởi tạo một flip-flop. Đối với các mạch đơn giản, sau đó nối một loạt các cổng logic có thể đơn giản. nhưng có thể không phải là khu vực năng lượng hiệu quả. Một bộ xử lý nguyên tử có 47 triệu bóng bán dẫn, tương đương khoảng 10 triệu NAND2. Bạn có muốn xác định và gỡ lỗi 10 triệu cổng có dây không? Đây là lợi thế của việc trừu tượng hóa một chút chúng ta có thể nghiên cứu và gỡ lỗi hành vi dự định.
pre_randomize

1
Giả sử một người đang cố gắng chỉ định 74HC74 trong HDL. Có nhiều cách người ta có thể tổng hợp một thiết bị như vậy bằng cách sử dụng kết hợp logic tổ hợp, flops chỉ đồng bộ và chốt trong suốt, nhưng tôi không thể tìm ra bất kỳ triển khai nào không liên quan đến điều kiện chủng tộc hoặc tạo ra sự bất thường về hành vi sẽ gây ra sự bất thường về hành vi. không tồn tại với các nguyên hàm phần cứng (ví dụ: nếu D và Q cao, xung runt trên CP hoặc / SD sẽ không có hiệu lực, nhưng trong các triển khai tôi có thể hình các xung như vậy có thể gây ra tính di động và / hoặc trục trặc đầu ra).
supercat

1
Làm thế nào bạn đang tạo ra MyLatchnó là một tế bào cơ sở khởi tạo hoặc một chốt ngụ ý. Nếu bạn khởi tạo cổng thì đó là cấp độ cổng Nếu bạn ngụ ý nó, đó là RTL. Thư viện cấp độ cổng sẽ có thời gian liên quan đến nó để mô hình hóa các điều kiện cuộc đua / trục trặc, vv Mô phỏng RTL chạy với các thành phần lý tưởng.
pre_randomize
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.