Tải bản đầy đủ (.pdf) (34 trang)

Lecture 3 toan tu trong verilog

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.22 MB, 34 trang )

Thiết kế logic số
(Digital Logic design)
Bộ môn Điện tử máy tính
08/2018

1


Chủ đề 3
TOÁN TỬ TRONG VERILOG
Bộ môn Điện tử máy tính
08/2018

2


Nội dung

3.1 Biểu diễn số trong Verilog

3.2 Toán tử trong Verilog
3.3 Các mô hình mô tả mạch
dùng Verilog HDL
3.4 Bài tập

3


3.1. Biểu diễn số trong Verilog
1. Biểu diễn giá trị logic:
Verilog HDL có 4 giá trị logic



Logic Value
0
1
x or X
z or Z

Description
Mức logic 0, hoặc điều kiện sai
Mức logic 1, hoặc điều kiện đúng
Mức logic tuỳ định
Trạng thái tổng trở cao

4


3.1. Biểu diễn số trong Verilog
2. Cách biểu diễn số:
Số có cơ số: số nguyên nhưng được khai báo dùng những cơ
số nhất định (hệ 2, 8, 10, 16)
Cú pháp:
integer_name = size'base value;

Trong đó:
 integer_name: tên của số nguyên cần dùng
 size: số bit nhị phân (biểu diễn số nguyên)
 base: cơ số (theo đó: b – binary; o – octal; d – decimal; h hexadecimal)
 value: giá trị thiết lập

5



3.1. Biểu diễn số trong Verilog
Ví dụ:
a = 4‘b1011; // biểu diễn số nhị phân
b = 123; // b có kích thướt mặc định 32 bit
c = 5’d30; // = 5’b11110
Số bit

Hệ cơ số

Số nhị phân tương ứng

4'd10

4 bits

10(decimal)

'o7

unsized

8(octal)

1'b1

1 bit

2(binary)


8'Hc5

8 bits

16(hex)

11000101

6'hF0

6 bits

16(hex)

110000

6'hF

6 bits

16(hex)

001111

6'hZ

6 bits

16(hex)


ZZZZZZ

1010

0...00111 (32-bits)
1

6


3.2. Toán tử trong Verilog
1. Toán tử số học:
Những toán tử số học là:
 + :cộng theo bit
 - :trừ theo bit
 * : nhân
 / :chia
 % : chia lấy dư
Nếu bất kz bit nào của một toán hạng trong toán tử số học là
x hay z thì kết quả là x.
Ví dụ:
4’b10x1 + 4’b0111 kết quả là 4’bxxxx

7


3.2. Toán tử trong Verilog
2. Toán tử quan hệ:
So sánh 2 toán hạng và trả về giá trị 0 hoặc 1 (true/false).

 > (lớn hơn )
 < ( nhỏ hơn )
 >= (lớn hơn hoặc bằng )
 <= (nhỏ hơn hoặc bằng)
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
a
a
y
y

= 4’b1010
<= b
//
> b
//
>= x
//
< z
//

,
=
=
=
=

y = 4’b1101 , z = 4’b1xxx

0
1
1
x
8


3.2. Toán tử trong Verilog
3. Toán tử so sánh bằng:
Gồm các toán tử:
 ==
Bằng logic
 !=
Không bằng logic
Tương tự như toán tử quan hệ
 ===
bằng (so sánh từng bit)
 !==
không bằng (so sánh từng bit)
Khi các toán hạng không bằng nhau về chiều dài, thì toán
hạng ngắn hơn sẽ thêm số 0 vào vị trí bit có { nghĩa nhất
(MSB).

9


3.2. Toán tử trong Verilog
3. Toán tử so sánh bằng:
Ví dụ:
// a = 4 , b = 3

// x = 4’b1010 , y = 4’b1010
// z = 4’b0xxz , m = 3’bxxz , n = 4’b0xxx
a == b // 0
x != y // 0
x == z // x
z === m // 1(thêm bit 0 vào m)
z === n // 0 (so sánh từng bit)
m !== n // 1

10


3.2. Toán tử trong Verilog
4. Toán tử logic:
Gồm các toán tử:
 &&
And logic
 ||
Or logic
 !
Not (bù) logic
Kết quả trả về giá trị 0 hoặc 1 (1 bit đơn).
Chúng có thể làm việc trên biểu thức, số nguyên, hoặc nhóm bit
Toán hạng là vector khác 0 được xem như 1
Nếu bất kz bit nào của toán hạng có giá trị x hay z thì toán hạng
được xem như x.

11



3.2. Toán tử trong Verilog
4. Toán tử logic:
Ví dụ:
// a = 3 , b = 0;
// m= 2’b0x , n = 2’b10
a && b // (logic 1 && logic 0)

a || b // (logic 1 || logic 0)

!a
// (!logic 1)

(m && n ) // (x && logic 1)

(a==2) && (b==0) // (logic 1 && logic

0
1
0
x
0)  0

12


3.2. Toán tử trong Verilog
5. Toán tử thao tác trên bit (bitwise):
So sánh từng bit hai toán hạng, gồm các toán tử:
 ~
Not – Phép đảo bit

 &
And – Phép and theo bit
 ~&
Nand – Phép nand theo bit
 |
Or – Phép or theo bit
 ~|
nor – Phép nor theo bit
 ^
Xor – Phép xor theo bit
 ~^/^~ Xnor – Phép xnor theo bit

13


3.2. Toán tử trong Verilog
5. Toán tử thao tác trên bit (bitwise):
Ví dụ:
module and2 (A,B,Y);
input A,B;
output Y;
wire A,B;
assign
Y = A & B;
endmodule

// x = 4’b1010 , y =
// z = 4’b10x1
~x
//

x&y
//
x | y
//
x ^ y
//
x~^ y
//
x & z
//

4’b1101

=
=
=
=
=
=

4’b0101
4’b1000
4’b1111
4’b0111
4’b1000
4’B10x0

14



3.2. Toán tử trong Verilog
6. Toán tử giảm:
Những toán tử giảm hoạt động trên tất cả các bit của toán
hạng đơn và kết quả trả về là 1 bit.
Gồm các toán tử giống toán tử thao tác trên bit (bitwise)
Ví dụ:

15


3.2. Toán tử trong Verilog
7. Toán tử dịch:
Gồm các toán tử logic:
 <<
Dịch trái
 >>
Dịch phải
Toán tử dịch sẽ dịch chuyển toán hạng bên trái với số lần dịch
là số toán hạng bên phải.
Những bit bị bỏ trống sẽ được làm đầy với các số 0. Nếu toán
hạng bên phải có giá trị là x hay z thì kết quả của phép dịch
chuyển là x.
// x = 4’b1100
Ví dụ:
y = x >>
y = x <<
y = x <<
//trái 2

1;

// y
1 ;
// y
2 ;
// y
bit,các chỗ

= 4’b0110
= 4’b1000
= 4’b0000, dịch
trống điền số 0
16


3.2. Toán tử trong Verilog
8. Toán tử điều kiện: “?:”
Cú pháp:
Kết quả = (điều kiện) ? kết quả khi điều kiện đúng : kết quả khi điều kiện sai

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 */
assign a = ( inc == 2) ? a+1: a-1;
assign a = (b) ? x : y;
assign a = (b ==2) ? x: y; // nếu b =
//2 thì a = x ngược lại a = y;
17



3.2. Toán tử trong Verilog
9. Toán tử ghép nối:
Ghép hai hoặc nhiều toán hạng thành một vectơ lớn
Sử dụng k{ hiệu “{}” và dùng dấu phảy “,” để ngăn cách các
biểu thức ({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
assign d[7:4] = {d[0],d[1],d[2],d[3]};
assign d = {d[3:0], d[7:4]};
--------------------------------------wire [1:0] a, b;
wire [2:0] x;
wire [3:0] y, Z;
assign x = {1’b0, a}; // x[2] = 0, x[1] = a[1], x[0] = a[0]
assign y = {a, b}; // y[3]= a[1], y[2] = a[0], y[1] = b[1], y[0] = b[0]
18


3.2. Toán tử trong Verilog
10. Toán tử nhân bản:
Tạo ra nhiều bản sao của một mục chọn
Sử dụng k{ hiệu “{}” và dùng dấu phảy “,” để ngăn cách các
biểu thức {n{ mục chọn }}
Trong đó: n - số nhân bản của mục chọn
{4{2’b10}}
= {{2’b10}, {2’b10}, {2’b10}, {2’b10}};
= 8’b10101010;
a = {3{4’b1011}};
// 12’b1011 1011 1011
{3{1’b1}}

// 111
{3{a}}
// {a,a,a}

19


3.3. Các mô hình mô tả mạch dùng Verilog HDL
1. Mô tả theo mô hình luồng dữ liệu:
Là mức mô tả từng đường dữ liệu
Câu lệnh cơ bản được dùng là assign, dùng để gán một giá trị
hay biểu thức đến một biến kiểu wire.
assign tên biến = biểu thức;

Các câu lệnh liên tiếp thực thi đồng thời.
Nền tảng căn bản của mô hình luồng dữ liệu:
 Biểu thức
 Toán hạng
 Toán tử

20


3.3. Các mô hình mô tả mạch dùng Verilog HDL
1. Mô tả theo mô hình luồng dữ liệu:
Ví dụ:
module decoder_2x4 (out, in0, in1);
output [3:0] out;
input in0, in1;
// Data flow modeling uses logic operators.

assign
assign
assign
assign

out[0]
out[1]
out[2]
out[3]

=
=
=
=

~in0 & ~in1 ;
in0 & ~in1 ;
~in0 & in1 ;
in0 & in1 ;

endmodule
21


3.3. Các mô hình mô tả mạch dùng Verilog HDL
1. Mô tả theo mô hình luồng dữ liệu:
Ví dụ:
module decoder_2x4 (out, in0, in1);
output [3:0] out;
input in0, in1;

// Data flow modeling uses logic operators.
assign out[3:0] = {in0 & in1,~in0 & in1,in0
& ~in1, ~in0 & ~in1};
//hoặc assign out = {in0 & in1,~in0 &
in1,in0 & ~in1, ~in0 & ~in1};
endmodule

22


3.3. Các mô hình mô tả mạch dùng Verilog HDL
2. Mô hình hành vi:
Hành vi của thiết kế được mô tả bằng cách sử dụng cấu trúc
thủ tục:
 Câu lệnh always: câu lệnh được thực hiện lặp lại nhiều lần
 Câu lệnh initial: câu lệnh chỉ thực thi 1 lần (dùng cho mô
phỏng)
Chỉ có kiểu dữ liệu thanh ghi (reg) mới mới có thể được gán
giá trị trong những câu lệnh này.

23


3.3. Các mô hình mô tả mạch dùng Verilog HDL
2. Mô hình hành vi:
Ví dụ:
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
endmodule

24


3.3. Các mô hình mô tả mạch dùng Verilog HDL
3. Mô hình cấu trúc:
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 thành 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.
Việc kết nối được xác định bằng cách sử dụng những net

25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×