Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Create an account
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
wafer.jpg

Các mức mô tả trừu tượng của Verilog

E-mail Print PDF
Verilog abstraction levelVì có bạn hỏi về mức mô tả trừu tượng nên mình xin trình bày sơ qua để các bạn cùng thảo luận.

Mức trừu tượng đôi khi còn được gọi là mức hành vi trừu tượng (behavieral levels of abstraction). Theo nhận xét cá nhân mình thì ranh giới giữa các mức trừu tượng đôi khi không rõ ràng và việc phân loại các mức trừu tượng cũng có khác biệt chút ít (không nhiều) ở các tài liệu khác nhau. Thêm vào đó, các bạn cũng chú ý là Verilog HDL có những thành phần có thể tổng hợp (dùng để mô tả thiết kế) được và có những thành phần không thể tổng hợp được (dùng để viết testbench, mô phỏng). Vì vậy, khi đọc những phân tích dưới đây các bạn nên tự nhận định để phân biệt điều này.
Verilog HDL cho phép mô tả nhiều mức trừu tượng khác nhau. Hình sau đây sẽ cho thấy khả năng mô tả của Verilog HDL ở các mức trừu tượng khác nhau.
Verilog abstraction level 

Thông thường, bạn sẽ thấy Verilog được trình bày theo ba mức chính là:
  • Mức hành vi (behavioral level hay Algorithm/Function level)
Mô hình hành vi Verilog chứa các phát biểu thủ tục điều khiển sự mô phỏng và thao tác các biến của các loại dữ liệu đã được mô tả. Mỗi thủ tục sẽ chứa các phát biểu và thực thi một luồng tương ứng mà nó mô tả. Mỗi cấu trúc initial hoặc always sẽ bắt đầu một luồng hoạt động riêng. Đọc cái này có vẻ “trừu tượng” và khó hiểu nên bạn có thể hiểu như sau, mức hành vi là mức mô tả hệ thống (hay thiết kế, được hiểu là có thể hoặc không thể tổng hợp được) bằng các thuật toán (Algorithm) hay chức năng (function) mong muốn mà không quan tâm đến cấu trúc sẽ tạo ra.
behavioral level 

Ở đây, mình xin nhấn mạnh là code mô tả hành vi có thể hoặc không thể tổng hợp được. Trong một số tài liệu có ghi, mức mô tả hành vi thường dùng cho testbench và mô phỏng, điều này có thể gây hiểu lầm là mô tả hành vi không sử dụng để mô tả mạch tổng hợp được.

Mức hành vi sử dụng các phát biểu như if-else, case, for, while, forever, repeat, always, initial, task, function, ... và các loại phép gán để mô tả các thuật toán hoặc chức năng mong muốn.

Ví dụ về mô tả hành vi không thể tổn hợp được (sử dụng cho mô phỏng):

Mã (verilog):
module clock_gen;
reg clock;
initial
  clock = 1'b0;
always
  #10 clock = ~clock;
initial
  #1000 $finish;
endmodule
Ví dụ về mô tả hành vi có thể tổng hợp được:

Mã (verilog):
module half_add (S, C, A, B);
input A, B;
output S, C;
reg S, C;
always @ (A or B)
begin
S = A ^B;
C = A & B;
end
half add 

  • Mức truyền thanh ghi (Register Transfer Level – RTL)
Mức RTL là mức mô tả hệ thống dạng xử lý truyền dữ liệu giữa các thanh ghi (register, Flip-flop, Latch). Mức mô tả này sử dụng tất cả các thành phần Verilog có thể tổng hợp được.
RTL level

Hiện nay, RTL code được hiểu là bất kỳ code nào có thể tổng hợp được (có thể viết bằng Verilog hay VHDL). Theo cách hiểu này thì một code dù viết theo kiểu mô tả hành vi, mô tả mức cổng hay kiểu mô tả nào khác mà có thể tổng hợp được thành mạch cụ thể thì được gọi là RTL code.

Ví dụ:

Mã (verilog):
module encoder_p (a_group, b_group, c_group,
  valid, result);
`include "com_function.h"
//Ports
input [3:0] a_group, b_group, c_group;
output  valid;
output  reg [1:0] result;
//The valid signal
assign a_valid = or_gate(a_group[3:0]);
assign b_valid = or_gate(b_group[3:0]);
assign valid  = a_valid|b_valid|or_gate(c_group[3:0]);
//The result signal
always @ (*) begin
  casez ({a_valid, b_valid})
  2'b1?: result[1:0]  = encoder(a_group[3:0]);
  2'b01: result[1:0]  = encoder(b_group[3:0]);
  2'b00: result[1:0]  = encoder(c_group[3:0]);
  default: result[1:0] = 2'b00;
  endcase
end
endmodule
  • Mức cổng (Gate)
Mức cổng là mức mô tả hệ thống dưới dạng liên kết các cổng logic kèm theo mô tả định thời (timing) nếu có. Mức này sử dụng các thanh phần mô hình cổng logic, các Flip-Flop hoặc các cell sẵn có để ghép nối với nhau tạo thành chức năng mong muốn. Một số mô hình cổng được định nghĩa sẵn bởi Verilog được liệt kê sau đây:
primitives gate
Ví dụ:
Mã (verilog):
module mux2_1 (o1,in1,in2,S0); //module
output o1;
input in1,in2,S0;
and a1 (Q, in1, S0); //and instantiation
not n1 (P,S0);  // not instantiation
and a2 (R, in2, P);  // and instantiation
or  o1 (o1, Q, R); // or instantiation
endmodule
gate level 

Các mức mô tả khác: Ngoài 3 mức cơ bản trên đây thì còn các mức trừu tượng khác mà các bạn có thể gặp như:
  • Mức luồng dữ liệu (Data-flow)
Mức dataflow là mức mô tả từng đường dữ liệu, điều khiển sử dụng phát biểu assign, các toán tử, mô tả độ trễ nếu cần, ... Như vậy, có thể thấy mức data-flow cũng gần giống với mức GATE nhưng thay vì gọi các cổng để kết nối thì viết biểu thức với các toán tử AND, OR, XOR, NOT, ... Mô tả mức dataflow rõ ràng, dễ hình dung hơn mức cổng, nhất là đối với các thiết kế lớn.
Ví dụ:
Mã (verilog):
module deco2_4 (EN, A0, A1, D0, D1, D2, D3);//module
input EN, A0, A1;
output D0, D1, D2, D3;
  assign D0 =(EN & ~A1 & ~A0);
  assign D1 =(EN & ~A1 & A0);
  assign D2 =(EN & A1 & ~A0);
  assign D3 =(EN & A1 & A0);
endmodule
data flow level 

Mô tả RTL code còn có thể được xem là sự kết hợp giữa mô tả mức hành vi (behavioral) và mô tả mức dataflow.
  • Mức Switch (hay Transistor)
Mức này là mức mô tả thấp nhất mà ngôn ngữ Verilog có thể hỗ trợ cho phép mô tả hệ thống ở mức MOS. Verilog HDL hỗ trợ các từ khóa về MOS, khai báo mass, nguồn, kéo lên , kéo xuống, ... như sau:
switch level
Ví dụ: Mô tả cồng nand
Mã (verilog):
module my_nand (input x, y, output f);
supply1  vdd;
supply0  gnd;
wire  a;
// NAND gate body
pmos p1 (f, vdd, x);
pmos p2 (f, vdd, y);
nmos n1 (f, a, x);
nmos n2 (a, gnd, y);
endmodule
nand switch level
 
 
nguồn: http://icdesignvn.com/

Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn

đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON

  HotLine: 0972 800 931 or 0938 838 404  Ms Duyên

 
 

Related Articles

Chat Zalo