



















Preview text:
Thiết kế logic số (Digital Logic design)
Bộ môn Điện tử máy tính 1 Chủ đề 3
TOÁN TỬ TRONG VERILOG
Bộ môn Điện tử máy tính 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 Description 0
Mức logic 0, hoặc điều kiện sai 1
Mức logic 1, hoặc điều kiện đúng x or X Mức logic tuỳ định z or Z
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) 1010 'o7 unsized 8(octal) 0...00111 (32-bits) 1'b1 1 bit 2(binary) 1 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 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 = 4’b1010 , y = 4’b1101 , z = 4’b1xxx a <= b // = 0 a > b // = 1 y >= x // = 1 y < z // = 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) 0
a || b // (logic 1 || logic 0) 1 !a // (!logic 1) 0
(m && n ) // (x && logic 1) x
(a==2) && (b==0) // (logic 1 && logic 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ụ:
// x = 4’b1010 , y = 4’b1101 m // z = 4’b10x1 odule and2 (A,B,Y); ~x // = 4’b0101 input A,B; x&y // = 4’b1000 output Y; x | y // = 4’b1111 wire A,B; x ^ y // = 4’b0111 assign Y = A & B; x~^ y // = 4’b1000 endmodule x & z // = 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 >> 1; // y = 4’b0110
y = x << 1 ; // y = 4’b1000
y = x << 2 ; // y = 4’b0000, dịch
//trái 2 bit,các 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