Verilog HDL

Nguyễn Hà Giang

LOGO

Nội dung
1
Giới thiệu chung về Verilog

LOGO

2

Một số quy ước

3
4

Module

Port

Nội dung
1
Giới thiệu chung về Verilog

LOGO

2

Một số quy ước

3
4

Module

Port

Giới thiệu chung về Verilog
 Verilog là một ngôn ngữ mô tả phần cứng được dùng rộng rãi trong thiết kế mạch số  Verilog thường được dùng để mô tả thiết kế ở 4 dạng  Thuật toán (các lệnh như: if, case, for, while…),  Chuyển đổi thanh ghi,  Các cổng kết nối  Chuyển mạch.

LOGO

Nội dung
1
Giới thiệu chung về Verilog

LOGO

2

Một số quy ước

3
4

Module

Port

Một số quy ước của Verilog
       Khoảng trống và chú thích Định danh và từ khóa Cách biểu diễn số Kiểu dữ liệu Vector Toán tử Phép gán

LOGO

Một số quy ước của Verilog
       Khoảng trống và chú thích Định danh và từ khóa Cách biểu diễn số Kiểu dữ liệu Vector Toán tử Phép gán

LOGO

Khoảng trống và chú thích
Blank space (\b), tabs (\t) và dòng mới (\n). Chúng được bỏ qua trừ khi dùng để tách biệt các chú thích, định danh, số, chuỗi, từ khóa, Khoảng trống không được bỏ qua trong chuỗi Verilog cho phép chú thích theo một hàng và nhiều hàng  // cho phep chu thich tren 1 hang  /* cho phep chu thich tren nhieu hang */

LOGO

Một số quy ước của Verilog
       Khoảng trống và chú thích Định danh và từ khóa Cách biểu diễn số Kiểu dữ liệu Vector Toán tử Phép gán

LOGO

Định danh và từ khóa

LOGO

 Định danh là tên gán cho đối tượng để được tham chiếu trong thiết kế. Định danh có thể bao gồm cả các ký tự số và dấu gạch dưới ( _ ), dấu $ nhưng phải bắt đầu bằng ký tự chữ hoặc dấu gạch dưới  Từ khóa: là dạng đặc biệt dành riêng để định nghĩa các cấu trúc ngôn ngữ, được viết bằng chữ thường  Ví dụ

reg example; // reg la tu khoa, example la dinh danh input a ; // input la tu khoa, a la dinh danh

Một số quy ước của Verilog
       Khoảng trống và chú thích Định danh và từ khóa Cách biểu diễn số Kiểu dữ liệu Vector Toán tử Phép gán

LOGO

Cách biểu diễn số
• Số thực: trong khai báo dùng từ khóa real ( VD : real a,b,c )

LOGO

• Số nguyên: Nếu chúng chứa những số mà không định rõ kích thước thì kích thước mặc định là 32 bit, trong khai báo dùng từ khóa integer • Ví dụ : module module_songuyen(); integer a, b, c; initial begin a = 12’h234; // a kich thuoc 12 bit b = 342; // b kich thuoc 32 bit c = -39; // c kich thuoc 32 bit end endmodule

Số có cơ số

LOGO

 Là những số nguyên nhưng được khai báo dùng những cơ số nhất định, ví dụ hệ 8 (octal), hệ 16 (hexadecimal), hệ 10 (decimal), hệ nhị phân (binary)  Số có cơ số được khai báo như sau: <integer_name> = <bit_size>‟<base_number><value>; Trong đó:  <integer_name> là tên của số nguyên mà ta cần dùng,  <bit_size> là số bit nhị phân biểu diễn số nguyên,  <base_number> là cơ số. Theo đó o là bát phân, h là hệ thập lục phân, d la hệ thập phân, b là cho hệ nhị phân.  <value> giá trị của số nguyên  Ví dụ a = 4’b1001; // biểu diễn số nhị phân 4’b1001 = 4’d9 b = 5’o24; c = 5’d24; // biểu diễn bát phân // biểu diễn hệ mười

Số biểu diễn thang thời gian

LOGO

 Thời gian mô phỏng trong verilog được khai báo với từ khóa time. Đơn vị cho thời gian được khai báo trong bộ định hướng biên dịch. Khai báo thang thời gian tuan thủ cú pháp sau:  „timescale <ref_time>/<precision>  Trong đó: <ref_time> và <precision> phải là những giá trị nguyên như 1, 10, hay 100 tuy nhiên đơn vị thời gian được phép khai báo cùng với những giá trị nguyên này là fs, ps, ns, us, ms, s  Ví dụ: ‘timescale 100us/1ns; Có nghĩa là : nếu khai báo #10 thì thời gian trễ thực là 10*100 = 1000us

Một số quy ước của Verilog
       Khoảng trống và chú thích Định danh và từ khóa Cách biểu diễn số Kiểu dữ liệu Vector Toán tử Phép gán

LOGO

Kiểu dữ liệu
 Dữ liệu trong Verilog kiểu này có loại giá trị sau đây:  0 – biểu diễn logic 0 hoặc điều kiện sai  1 – biểu diễn logic 1 hoặc điều kiện đúng  x – biểu diễn logic chưa biết  z – biểu diễn trạng thái tổng trở cao

LOGO

 Verilog cho phép khai báo hai kiểu dữ liệu là reg và net. Reg (register) là một phần tử lưu trữ, cho phép giá trị lưu trữ trong kiểu dữ liệu này. Reg được dùng cho các câu lệnh cuả khối always và initial

Kiểu dữ liệu

LOGO

 Kiểu dữ liệu thuộc nhóm net (wire, wand, wor)được dùng nhiều nhất là kiểu wire thường dùng để biểu diễn kết nối, giá trị trên wire được cập nhật liên tục,  wire net1;  wire [2:0] net2;  Reg [3:0] a1, a2;  Trong quá trình mô phỏng, nếu không có giá trị nào được gán vào những đối tượng được khai báo kiểu reg thì giá trị mặc định là X (không xác định), tương tự với kiểu wire sẽ là Z,

Wire

LOGO

 Wire mô tả vật liệu đường dây dẫn trong một mạch và được dùng để kết nối các cổng hay các module. Giá trị cua wire có thể đọc, nhưng không được gán trong hàm (function), hoặc khối (block).  Wire không lưu trữ giá trị của nó nhưng vẫn phải được thực thi bởi một lệnh gán kế tiếp hay bởi sự kết nối wire với ngõ ra của một cổng hoặc một module  Cú pháp: wire[msb:lsb] bien_wire;

 Ví dụ:
wire temp; wire [7:0]a,b;

Một số quy ước của Verilog
       Khoảng trống và chú thích Định danh và từ khóa Cách biểu diễn số Kiểu dữ liệu Vector Toán tử Phép gán

LOGO

Vector

LOGO

 Net hoặc reg có thể được khai báo dưới dạng vector (độ rộng nhiều bit). Nếu độ rộng bit không được chỉ rõ, mặc định là 1 bit  Ví dụ
Wire a; Wire [7:0] test; Reg b; //1 bit //8 bit // 1 bit

 Vector có thể được viết là [high#:low#] hoặc [low#:high#] nhưng số bên trái luôn là bit lớn nhất của vector  Ví dụ:
a [4:0]; // đúng a [0:4];// sai

Một số quy ước của Verilog
      Khoảng trống và chú thích Định danh và từ khóa Cách biểu diễn số Kiểu dữ liệu Vector Toán tử

LOGO

Toán tử
 Toán tử bit – wise  Toán tử logic  Toán tử kết nối  Toán tử nhân bản  Toán tử dịch  Toán tử điều kiện  Toán tử quan hệ  Toán tử bằng  Toán tử số học

LOGO

Toán tử
 Toán tử bit – wise  Toán tử logic  Toán tử kết nối  Toán tử nhân bản  Toán tử dịch  Toán tử điều kiện  Toán tử quan hệ  Toán tử bằng  Toán tử số học

LOGO

Toán tử bit - wise
 So sánh từng bít hai toán hạng  ~(NOT), &(AND),^~ ( XNOR )…

LOGO

Toán tử bit - wise
Ví dụ :
// x = 4’b1010 , y = 4’b1101 // z = 4’b10x1 ~x // = 4’b0101 x&y // = 4’b1000 x|y // = 4’b1111 x^y // = 4’b0111 x~^ y // = 4’b1000 x&z // = 4’B10x0

LOGO

Toán tử
 Toán tử bit – wise  Toán tử logic  Toán tử kết nối  Toán tử nhân bản  Toán tử dịch  Toán tử điều kiện  Toán tử quan hệ  Toán tử bằng  Toán tử số học

LOGO

Toán tử logic

LOGO

Toán tử trả về giá trị 0 hoặc 1. Chúng có thể làm việc trên biểu thức, số nguyên, hoặc nhóm bit !(NOT), &&(AND), ||(OR)… Toán hạng là vector khác 0 được xem như 1 Nếu bất kỳ bit nào của toán hạng có giá trị x hay z thì toán hạng được xem như x

Toán tử logic
 Ví dụ:

LOGO

// a = 3 , b = 0; // m= 2’b0x , n = 2’b10 a && b // ( logic 1 && logic 0 ) 0 a || b // ( logic 1 || logic 0 ) 1 !a // ( !logic1 0 ) ( a==2 ) && ( b==0 ) // ( logic 1 && logic 0 ) ( m && n ) // ( x && logic 1 ) x

0

Toán tử
 Toán tử bit – wise  Toán tử logic  Toán tử kết nối  Toán tử nhân bản  Toán tử dịch  Toán tử điều kiện  Toán tử quan hệ  Toán tử bằng  Toán tử số học

LOGO

Toán tử kết nối / nhân bản
 Kết nối {a1, a2,… , aN} ƒ Những hằng số không biết kích thước không thể thực hiện kết nối  Nhân bản {number {a1, a2,… , aN}}  Ví dụ assign d[7:4] = {d[0], d[1], d[2], d[3]}; assign d = {d[3:0], d[7:4]}; a = {3{4’b1011}}; // 12’b1011 1011 1011 {3{1’b1}} // 111 {3{a}} // {a, a, a}

LOGO

Toán tử
 Toán tử bit – wise  Toán tử logic  Toán tử kết nối  Toán tử nhân bản  Toán tử dịch  Toán tử điều kiện  Toán tử quan hệ  Toán tử bằng  Toán tử số học

LOGO

Toán tử dịch
Dịch trái <<, dịch phải >> Ví dụ :
// x = 4’b1100 y = x >> 1; // y = 4’b0110 y = x << 1 ; // y = 4’b1000 y = x << 2 ; // y = 4’b0000

LOGO

Toán tử
 Toán tử bit – wise  Toán tử logic  Toán tử kết nối  Toán tử nhân bản  Toán tử dịch  Toán tử điều kiện  Toán tử quan hệ  Toán tử bằng  Toán tử số học

LOGO

Toán tử điều kiện

LOGO

 Bt điều kiên ? Bt đúng : bt sai  Xét bt điều kiện • Nếu đúng ( logic 1 ) bt đúng được xét • Nếu sai ( logic 0 ) bt sai được xét • Nếu kết quả là x thì xét cả bt đúng và bt sai. So sánh từng bit của kết quả 2 biểu thức, nếu kết quả giống nhau trả về kết quả đó ,nếu có bit khác nhau thì trả về x  Ví dụ : wire [15:0]b = a? data : 16’bz; /* a = 1 thì data được gán vào b a = 0 thì b ở tổng trở cao a = x thì b là x */

Toán tử
 Toán tử bit – wise  Toán tử logic  Toán tử kết nối  Toán tử nhân bản  Toán tử dịch  Toán tử điều kiện  Toán tử quan hệ  Toán tử bằng  Toán tử số học

LOGO

Toán tử quan hệ

LOGO

 So sánh 2 toán hạng và trả về 0 hoặc 1  <, <=, >, >=  Nếu 1 trong số các toán hạng có bit có giá trị x hoặc z thì kết quả trả về là x  Ví dụ :

// a = 4 , b = 3 // x = 4’b1010 , y = 4’b1101 , z = 4’b1xxx a <= b // = 0 a>b // = 1 y >= x // = 1 y<z // = x

Toán tử
 Toán tử bit – wise  Toán tử logic  Toán tử kết nối  Toán tử nhân bản  Toán tử dịch  Toán tử điều kiện  Toán tử quan hệ  Toán tử bằng  Toán tử số học

LOGO

Toán tử bằng
 == và != • ƒiá trị x và z tương tự như toán tử quan hệ G • Kết quả có thể là x

LOGO

 === và !== • So sánh từng bit • x === x, z === z, x !== z • Kết quả luôn xác định (0 hoặc1) • Nếu kích thước 2 toán hạng không bằng nhau thì các bit 0 sẽ được thêm vào những bit trọng số cao của toán hạng có kích thướcnhỏ

Toán tử bằng
 Ví dụ :

LOGO

// a = 4 , b = 3 // x = 4’b1010 , y = 4’b1010 // z = 4’b0xxz , m = 3’bxxz , n = 4’b0xxx a == b // 0 x != y // 1 x == z // x z === m // 1 z === n // 0 m !== n // 1

Toán tử
 Toán tử bit – wise  Toán tử logic  Toán tử kết nối  Toán tử nhân bản  Toán tử dịch  Toán tử điều kiện  Toán tử quan hệ  Toán tử bằng  Toán tử số học

LOGO

Toán tử số học

LOGO

 Thực hiện các phép tính số học.  +, -, *, /, %.  Bất kỳ bit nào trong toán hạng là x hoặc z thì kết quả là x  Kích thước kết quả :  Phép nhân thì kích thướckếtquảbằng tổng kích thước 2 toán hạng  Các phép toán khác bằng chiều dài lớn nhất của toán hạng

Toán tử số học
 Ví dụ a = 4’b0011 ; b = 4’b0100; d=6;e=4; m = 4’b101x ; n = 4’b1010 a * b // = 4’b1100 d / e // = 1 a + b // = 4’b0111 a - b // = 4’b0001 m + n // = 4’bx 13 % 3 // = 1 16 % 4 // = 0

LOGO

Một số quy ước của Verilog
       Khoảng trống và chú thích Định danh và từ khóa Cách biểu diễn số Kiểu dữ liệu Vector Toán tử Phép gán

LOGO

Phép gán

LOGO

 2 kiếu phép gán : • kiếu blocking: [tên biến] = [biểu thức] ; • kiểu non-blocking: [tên biến] <= [biểu thức] ;  Kiếu blocking : các lệnh thực hiện tuần tự, thực hiện xong lệnh gán này mới thực hiện lệnh gán kế tiếp

 Kiểu non-blocking : các lệnh gán được thực hiện song song

Phép gán
Ví dụ 1:
initial begin #10 a = 0 ; #11 a = 1 ; #12 a = 0 ; #13 a = 1; $monitor("TIME = %tA = %b ",$time, a); #50 $finish ;

LOGO

end initial begin
end

TIME = 0 A = x TIME = 10 A = 0 TIME = 11 A = 0 TIME = 12 A = 0 TIME = 13 A = 0 TIME = 21 A = 1 TIME = 33 A = 0 TIME = 46 A = 1

Phép gán
 Ví dụ 2 :
initial begin end initial begin end

LOGO

#10 b <= 0 ; #11 b <= 1 ; #12 b <= 0 ; #13 b <= 1;
$monitor("TIME = %t B = %b ",$time, b) ; #50 $finish ;

TIME = 0 B = x TIME = 10 B = 0 TIME = 11 B = 0 TIME = 12 B = 0 TIME = 13 B = 0 TIME = 21 B = 1 TIME = 33 B = 0 TIME = 46 B = 1

Phép gán
 Ví dụ 3 :
initial begin c = #10 0 ; c = #11 1 ; c = #12 0 ; c = #13 1 ; end initial begin $monitor("TIME = %t C= %b ",$time, c); #50 $finish ; end

LOGO

TIME = 0 C = x TIME = 10 C = 0 TIME = 11 C = 0 TIME = 12 C = 0 TIME = 13 C = 0 TIME = 21 C = 1 TIME = 33 C = 0 TIME = 46 C = 1

Phép gán
 Ví dụ 4 :
initial begin d <= #10 0 ; d <= #11 1 ; d <= #12 0 ; d <= #13 1 ; end initial begin $monitor("TIME = %t D= %b ",$time, d); #50 $finish ; end

LOGO

TIME = 0 D = x TIME = 10 D = 0 TIME = 11 D = 1 TIME = 12 D = 0 TIME = 13 D = 1 TIME = 21 D = 1 TIME = 33 D = 1 TIME = 46 D = 1

Nội dung
1
Giới thiệu chung về Verilog

LOGO

2

Một số quy ước

3
4

Module

Port

Cấu trúc chung một chương trình dùng Verilog  //khai báo module  Module module_name(tên biến I/O); //module_name trùng tên file.v  Input [msb:lsb] bien;  Output [msb:lsb] bien;  Inout [msb:lsb] bien;  Reg [msb:lsb] bien reg;  Wire [msb:lsb] bien wire;  //khai bao khoi always hoac initial  …cac lenh…  endmodule

LOGO

Module

LOGO

 Module luôn bắt đầu bằng từ khóa module. Tên module, danh sách port, khai báo port phải hiện diện trước tiên trong định nghĩa module.  Danh sách port và khai báo port chỉ hiện diện khi module có port tương tác với môi trường bên ngoài  5 thành phần trong module là:  Các khai báo biến  Các phát biểu luồng dữ liệu  Thể hiện qua các module thấp hơn  Các khối hành vi  Task hoặc function  Các thành phần này là tùy chọn,có thể ở bất kỳ nơi đâu trong module không cần theo thứ tự.  Kết thúc bằng từ khóa endmodule

Module
Ví dụ 1 :
// module co port module nand_gate (c, a, b); output c; input a, b; wire d; and a1(d, a, b); not n1(c, d); endmodule

LOGO

Module
Ví dụ 2
//module ko co port `timescale 1ns / 1ps module test_bench; reg A, B; wire C; nand_gate S (C, A, B); initial begin $moniter("A = %b, B = %b, C = %b \n", A, B, C); #10 A = 1'b0; B = 1'b0; #10 A = 1'b0; B = 1'b1; #10 A = 1'b1; B = 1'b0; #10 A = 1'b1; B = 1'b1; end endmodule

LOGO

Nội dung
1
Giới thiệu chung về Verilog

LOGO

2

Một số quy ước

3
4

Module

Port

Port

LOGO

 Port cung cấp giao diện qua đó module có thể giao tiếp với môi trường bên ngoài  Kiểu của port cũng được khai báo một cách cụ thể: Đó có thể là input, output hoặc inout  Ví dụ:

module test1(a, b, c, d); intput a, b; output c; inout d; ….

Port

LOGO

 Nếu một cổng nào đó mà nhiều hơn 1 bit ta phải dùng ký hiệu “[ ]” để chỉ ra độ rộng của bus  Ví dụ:

module example(a, b, c, d); intput [7:0] a, b; output c; inout [4:0] d;

www.themegallery.com

Nguyễn Hà Giang

LOGO

Sign up to vote on this title
UsefulNot useful