26
6/3/2011 1 Bieân soaïn: Toáng Vaên On Ñaïi hoïc Baùch Khoa TP HCM Baøi 6 Moâ hình luoàng döõ lieäu Bieân soaïn: Toáng Vaên On Ñaïi hoïc Baùch Khoa TP HCM Noäi dung baøi hoïc Phaùt bieåu gaùn tieáp tuïc (assign), phaùt bieåu gaùn aån (implicit) tieáp tuïc. Trì hoaõn gaùn, trì hoaõn gaùn aån vaø trì hoaõn khai baùo net ñoái vôùi phaùt bieåu gaùn tieáp tuïc. Bieåu thöùc, toaùn töû vaø toaùn haïng. Caùc pheùp toaùn soá hoïc, logic, quan heä, baèng, töøng bit (treân bit), ruùt goïn, dòch, noái vaø ñieàu kieän. Caùc maïch logic thöïc teá.

Chuong_06

Embed Size (px)

DESCRIPTION

Chuong 6

Citation preview

Page 1: Chuong_06

6/3/2011

1

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Baøi 6

Moâ hình luoàng döõ lieäu

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Noäi dung baøi hoïc

Phaùt bieåu gaùn tieáp tuïc (assign), phaùt bieåu gaùn aån (implicit) tieáp tuïc.

Trì hoaõn gaùn, trì hoaõn gaùn aån vaø trì hoaõn khai baùo net ñoái vôùi phaùt bieåu gaùn tieáp tuïc.

Bieåu thöùc, toaùn töû vaø toaùn haïng.

Caùc pheùp toaùn soá hoïc, logic, quan heä, baèng, töøng bit (treân bit), ruùt goïn, dòch, noái vaø ñieàu kieän.

Caùc maïch logic thöïc teá.

Page 2: Chuong_06

6/3/2011

2

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Pheùp gaùn tieáp tuïc

Ñaây laø phaùt bieåu cô baûn nhaát trong moâ hình luoàng döõ lieäu, ñöôïc söû duïng ñeå kích moät giaù trò leân moät net. Pheùp gaùn tieáp tuïc thay theá caùc coång trong moâ taû maïch vaø moâ taû maïch naøy ôû möùc tröøu töôïng cao hôn. Phaùt bieåu gaùn tieáp tuïc baét ñaàu baèng töø khoùa assign.

Cuù phaùp:

// Cuù phaùp cuûa assign ôû daïng ñôn giaûn nhaát

assign <drive_strength>? <delay>? <list_of_assignments>;

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Pheùp gaùn tieáp tuïc

<drive_strength> laø tuøy choïn vaø coù theå ñöôïc chæ ra theo möùc ñoä maïnh ñaõ ñeà caäp ôû chöông 3. Chöông naøy khoâng ñeà caäp ñeán ñaëc taû ñoä maïnh. Giaù trò tuøy ñònh cuûa ñoä maïnh laø strong1 vaø strong0.

Giaù trò <delay> cuõng tuøy choïn vaø coù theå ñöôïc söû duïng ñeå chæ ra trì hoaõn treân phaùt bieåu assign (gioáng nhö trì hoaõn cuûa coång). Ñaëc taû trì hoaõn ñöôïc chæ ra trong chöông naøy.

Caùc pheùp gaùn tieáp tuïc coù caùc ñaëc tính sau:

Page 3: Chuong_06

6/3/2011

3

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Pheùp gaùn tieáp tuïc

1. Veá beân traùi cuûa pheùp gaùn luoân luoân laø moät net (scalar hoaëc vector) hoaëc noái cuûa caùc net, khoâng theå laø register (scalar hoaëc vector).

2. Pheùp gaùn tieáp tuïc luoân luoân tích cöïc. Bieåu thöùc cuûa pheùp gaùn ñöôïc ñaùnh giaù ngay khi moät trong caùc toaùn haïng ôû veá beân phaûi thay ñoåi vaø giaù trò naøy ñöôïc gaùn cho net beân veá traùi.

3. Caùc toaùn haïng beân veá phaûi coù theå laø net hoaëc register, scalar hoaëc vector.

4. Giaù trò trì hoaõn coù theå ñöôïc chæ ra cho pheùp gaùn theo ñôn vò thôøi gian. Giaù trò trì hoaõn ñöôïc söû duïng ñeå ñieàu khieån thôøi ñieåm maø net ñöôïc gaùn giaù trò ñaõ ñaùnh giaù. Tính chaát naøy töông töï nhö vieäc chæ ra trì hoaõn cho coång, raát höõu ích trong vieäc moâ hình haønh vi ñònh thôøi cho caùc maïch thöïc teá.

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Pheùp gaùn tieáp tuïc

Trong caùc thí duï sau ñaây, &, ^, |, {, } vaø + laø and, xor, or töøng bit, pheùp noái vaø coäng.

assign out = i1 & i2; out, i1, i2 laø caùc net.

// addr laø vector net, addr1 vaø addr2 laø

// vector register

assign addr[15:0] = addr1_bits[15:0] ^ addr2_bits[15:0];

// Veá beân traùi laø noái cuûa scalar net vaø

// vector net

assign {c_out, sum[3:0]} = a[3:0] + b[3:0] + c_in;

Page 4: Chuong_06

6/3/2011

4

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Pheùp gaùn tieáp tuïc

Thay vì khai baùo moät net vaø vieát pheùp gaùn tieáp tuïc treân net naøy, Verilog cung caáp caùch vieát taét qua ñoù pheùp gaùn tieáp tuïc coù theå ñaët treân net khi net ñöôïc khai baùo. Chæ coù moät pheùp gaùn khai baùo aån cho moät net do net chæ ñöôïc khai baùo moät laàn.

Trong thí duï sau, pheùp gaùn tieáp tuïc aån ñöôïc ñoái chieáu vôùi pheùp gaùn tieáp tuïc bình thöôøng.

wire out; assign out = in1 & in2; // bình thöôøng

wire out = in1 & in2; // aån

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Trì hoaõn

Giaù trò trì hoaõn ñieàu khieån thôøi gian giöõa thay ñoåi trong toaùn haïng beân phaûi vaø luùc giaù trò môùi ñöôïc gaùn cho veá beân traùi.

Ba phöông phaùp chæ ra trì hoaõn trong pheùp gaùn tieáp tuïc laø trì hoaõn gaùn bình thöôøng, trì hoaõn gaùn tieáp tuïc aån vaø trì hoaõn khai baùo net.

Trì hoaõn gaùn bình thöôøng

Thí duï:

assign #10 out = in1 & in2;

Giaù trò trì hoaõn ñöôïc chæ ra sau töø khoùa assign.

Page 5: Chuong_06

6/3/2011

5

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Trì hoaõn

Thay ñoåi giaù trò baát kyø cuûa in1 hoaëc in2 seõ daãn ñeán trì hoaõn 10 ñôn vò thôøi gian tröôùc khi tính laïi bieåu thöùc in1 & in2 vaø keát quaû seõ ñöôïc gaùn cho out.

Neáu in1 hoaëc in2 thay ñoåi giaù trò laàn nöõa tröôùc 10 ñôn vò thôøi gian, luùc keát quaû truyeàn ñeán out, caùc giaù trò cuûa in1 vaø in2 ôû thôøi ñieåm tính laïi ñöôïc xem xeùt.

Tính chaát naøy goïi laø trì hoaõn quaùn tính. Moät xung ngoõ vaøo ngaén hôn trì hoaõn cuûa phaùt bieåu gaùn khoâng truyeàn ñöôïc ñeán ngoõ ra. Ta xem daïng soùng cuûa thí duï treân.

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Trì hoaõn

1. Khi in1 vaø in2 leân möùc 1 ôû 20, out leân möùc 1 sau 10 (töùc taïi 30).

2. Khi in1 xuoáng möùc 0 ôû 60, out ôû möùc 0 ôû 70.

3. Tuy nhieân, in1 leân möùc 1 ôû 80 vaø sau ñoù xuoáng möùc 0 tröôùc 10 ñôn vò thôøi gian.

4. ÔÛ thôøi ñieåm tính laïi, 10 ñôn vò thôøi gian sau 80, in1 = 0 neân out laáy giaù trò 0. Moät xung coù ñoä roäng nhoû hôn trì hoaõn gaùn ñaõ chæ roõ seõ khoâng truyeàn ñeán ngoõ ra.

X X X

10 20 30 60 70 80 85

in1

in2

outtime

Page 6: Chuong_06

6/3/2011

6

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Trì hoaõn

Trì hoaõn gaùn tieáp tuïc aån

Moät phöông phaùp töông ñöông laø söû duïng pheùp gaùn tieáp tuïc aån ñeå chæ ra caû trì hoaõn laãn pheùp gaùn treân net.

wire #10 out = in1 & in2; // töông ñöông vôùi

wire out; assign #10 out = in1 & in2;

Trì hoaõn khai baùo net

Trì hoaõn coù theå ñöôïc chæ ra treân moät net khi ñöôïc khai baùo maø khoâng caàn pheùp gaùn tieáp tuïc treân net. Baát kyø thay ñoåi giaù trò naøo aùp duïng treân net naøy ñeàu bò trì hoaõn töông öùng.

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Trì hoaõn

wire #10 out;

assign out = in1 & in2; // töông ñöông vôùi

wire out;

assign #10 out = in1 & in2;

Page 7: Chuong_06

6/3/2011

7

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Vieäc moâ hình luoàng döõ lieäu seõ moâ taû thieát keá nhôø vaøo caùc bieåu thöùc thay vì laø caùc cell coång cô baûn. Bieåu thöùc, toaùn töû vaø toaùn haïng taïo neân neàn taûng cho vieäc moâ hình luoàng döõ lieäu

Bieåu thöùc

Bieåu thöùc laø caáu truùc keát hôïp toaùn töû vaø toaùn haïng ñeå taïo ra keát quaû. Thí duï:

addr1[20:17] + addr2[20:17]

in1 | in2

a ^ b

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn haïng

Toaùn haïng coù theå coù kieåu döõ lieäu baát kyø ñaõ xaùc ñònh trong chöông 3. Toaùn haïng coù theå laø:

- haèng, soá nguyeân, soá thöïc, net, register, time,

- bit-select (moät bit cuûa vector net hoaëc vector register),

- part-select (caùc bit ñöôïc löïa choïn cuûa vector net hoaëc vector register),

- boä nhôù hoaëc lôøi goïi haøm (seõ ñöôïc ñeà caäp ôû baøi task vaø function).

Thí duï:

Page 8: Chuong_06

6/3/2011

8

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

integer count, final_count;

final_count = count + 1; // count, soá nguyeân

real a, b, c;

c = a – b; // a, b laø caùc toaùn haïng soá thöïc.

reg [15:0] reg1, reg2;

reg [3:0] reg_out;

reg_out = reg1[3:0] ^ reg2[3:0];

// reg1[3:0] vaø reg2[3:0] laø caùc toaùn haïng

// register part-select

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn töû

Toaùn töû hoaït ñoäng treân caùc toaùn haïng ñeå taïo ra keát quaû mong muoán.

Verilog cung caáp nhieàu loaïi toaùn töû khaùc nhau.

Thí duï:

d1 && d2

!a[0]

B >> 1

Page 9: Chuong_06

6/3/2011

9

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

- Toaùn töû soá hoïc:

* nhaân

/ chia (laáy thöông soá)

+ coäng (hoaëc daáu coäng)

- tröø (hoaëc daáu tröø)

% modulus (laáy soá dö)

- Toaùn töû logic

! not logic

&& and logic

|| or logic

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

- Toaùn töû quan heä

> lôùn hôn

< nhoû hôn

>= lôùn hôn hoaëc baèng

<= nhoû hôn hoaëc baèng

- Toaùn töû baèng

== baèng logic

!= khoâng baèng logic

=== baèng case

!== khoâng baèng case

Page 10: Chuong_06

6/3/2011

10

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

- Toaùn töû treân bit

~ buø & and

| or ^ xor

^~ hoaëc ~^ xnor

- Toaùn töû ruùt goïn

(caùc toaùn töû naøy chæ coù moät toaùn haïng)

& and ruùt goïn

~& nand ruùt goïn

| or ruùt goïn

~| nor ruùt goïn

^ xor ruùt goïn

^~ hoaëc ~^ xnor ruùt goïn

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

- Caùc toaùn töû khaùc

>> dòch phaûi

<< dòch traùi

{ } noái

{{ }} sao cheùp

? : ñieàu kieän

Page 11: Chuong_06

6/3/2011

11

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn töû soá hoïc

// A vaø B laø caùc register vector. D vaø E laø

// caùc soá nguyeân

A = 4’b0011; B = 4’b0100;

D = 6; E = 4;

A * B; // 4’b1100, 12 thaäp phaân.

D / E; // 1, boû phaàn leû.

A + B; // 4’b0111, 7 thaäp phaân.

A – B; // 4’b0001, 1 thaäp phaân.

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Neáu bit baát kyø cuûa toaùn haïng coù giaù trò x, keát quaû cuûa toaøn bieåu thöùc laø x.

Thí duï:

in1 = 4’b101x; in2 = 4’b1010;

sum = in1 + in2; // giaù trò cuûa sum laø 4’bx.

13 % 3 // 116 % 4 // 0 - 7 % 2 // - 1

7 % - 2 // + 1, laáy daáu cuûa toaùn haïng thöù

// nhaát.

- 4 // aâm 4 + 5 // döông 5

Löu yù: khoâng söû duïng soá aâm daïng <sss>’<base><nnn>

Page 12: Chuong_06

6/3/2011

12

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn töû logic (&&, ||, !)

Tuaân theo caùc ñieàu kieän sau:

1. Keát quaû laø giaù trò 1-bit: 0 (false), 1 (true) hoaëc x.

2. Toaùn haïng khaùc 0 seõ töông ñöông logic 1, toaùn haïng baèng 0 töông ñöông logic 0. Neáu bit baát kyø cuûa toaùn haïng laø x hoaëc z, toaùn haïng töông ñöông x vaø thöôøng ñöôïc xöû lyù bôûi trình moâ phoûng laø ñieàu kieän sai.

3. Toaùn töû logic laáy bieán hoaëc bieåu thöùc laøm toaùn haïng.

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

// Toaùn töû logic

A = 3; B = 0;

A && B // 0. Töông ñöông 1 && 0

A || B // 1. Töông ñöông 1 || 0

!A // 0. Töông ñöông not cuûa 1

!B // 1. Töông ñöông not cuûa 0

// Giaù trò chöa bieát

A = 2’b0x; B = 2’b10;

A && B // x. Töông ñöông x && 1

// Bieåu thöùc

(a == 2) && (b == 3) // 1 neáu ( a= 2) vaø (b = 3) ñeàu ñuùng. 0 neáu moät trong hai sai.

Page 13: Chuong_06

6/3/2011

13

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn töû quan heä (>, <, >=, <=)

Neáu toaùn töû quan heä söû duïng trong 1 bieåu thöùc, bieåu thöùc naøy traû veà giaù trò logic 1 neáu bieåu thöùc ñuùng vaø 0 neáu bieåu thöùc sai. Neáu coù baát kyø bit x hoaëc z trong caùc toaùn haïng, bieåu thöùc seõ laáy giaù trò x. Thí duï:

// 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

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn töû baèng (==, !=, ===, !===)

Neáu ñöôïc söû duïng trong moät bieåu thöùc, caùc toaùn töû naøy traû veà giaù trò 1 neáu ñuùng, 0 neáu sai. Caùc toaùn töû naøy so saùnh töøng bit cuûa hai toaùn haïng, vôùi bit 0 ñöôïc ñieàn vaøo neáu chieàu daøi cuûa 2 toaùn haïng khoâng baèng nhau.

Baûng sau ñaây lieät keâ caùc toaùn töû baèng.

Page 14: Chuong_06

6/3/2011

14

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Bieåu thöùc Moâ taû

a == b Keát quaû x neáu a, b coù x hoaëc z.

(Caùc giaù trò coù theå coù: 0, 1, x)

a != b Keát quaû x neáu a, b coù x hoaëc z.

(Caùc giaù trò coù theå coù: 0, 1, x)

a === b Bao goàm caû x vaø z.

(Caùc giaù trò coù theå coù: 0, 1)

a !== b Bao goàm caû x vaø z.

(Caùc giaù trò coù theå coù: 0, 1)

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Ta caàn phaân bieät (==, !-) vôùi (===, !===).

Caùc toaùn töû (==, !=) seõ taïo ra x neáu moät trong hai toaùn haïng coù x hoaëc z trong caùc bit.

Caùc toaùn töû (===, !===) so saùnh töøng bit cuûa caû hai toaùn haïng vaø so saùnh taát caû caùc bit keå caû x vaø z. Keát quaû seõ laø 1 neáu hai toaùn haïng töông thích chính xaùc, keå caû x vaø z. Ngöôïc laïi keát quaû seõ laø 0. Caùc toaùn töû (===, !===) khoâng bao giôø sinh ra x.

Page 15: Chuong_06

6/3/2011

15

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

// A = 4, B = 3, X = 4’b1010, Y = 4’b1101

// Z = 4’b1xxz, M = 4’b1xxz, N = 4’b1xxx

A == B // Keát quaû laø 0.

X != Y // Keát quaû laø 1.

X == Z // Keát quaû laø x.

Z === M // Keát quaû laø 1.

Z === N // Keát quaû laø 0.

M !=== N // Keát quaû laø 1.

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn töû töøng bit (~, &, |, ^, ^~, ~^)

Thöïc hieän thao taùc töøng bit treân hai toaùn haïng. Caùc toaùn töû naøy laáy töøng bit trong moät toaùn haïng vaø thöïc hieän thao taùc vôùi bit töông öùng trong toaùn haïng kia.

Neáu ñoä roäng cuûa hai toaùn haïng khoâng baèng nhau, bit 0 seõ ñöôïc môû roäng ñeå töông thích chieàu daøi.

z ñöôïc xöû lyù nhö laø x.

Page 16: Chuong_06

6/3/2011

16

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Caùc toaùn töû töøng bit

and 0 1 x

0

1

x

0

0

0

0

1

x

0

x

x

or 0 1 x

0

1

x

0

1

x

1

1

1

x

1

x

xor 0 1 x

0

1

x

0

1

x

1

0

x

x

x

x

xnor 0 1 x

0

1

x

1

0

x

0

1

x

x

x

x

not result

0

1

x

1

0

x

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

// X = 4’b1010, Y = 4’b1101, Z = 4’b10x1

~X // 4’b0101, caàn phaân bieät vôùi !

X & Y // 4’b1000, caàn phaân bieät vôùi &&

X | Y // 4’b1111, caàn phaân bieät vôùi ||

X ^ Y // 4’b0111

X ^~ Y // 4’b1000

Z & Z // 4’b10x0

// X = 4’b1010, Y = 4’b0000

X | Y // 4’b1010

X || Y // 1. Töông ñöông 1 || 0.

Page 17: Chuong_06

6/3/2011

17

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn töû ruùt goïn

Toaùn töû ruùt goïn chæ coù moät toaùn haïng. Toaùn töû ruùt goïn thöïc hieän thao taùc töøng bit töø phaûi sang traùi treân moät toaùn haïng vector duy nhaát vaø daãn ñeán keát quaû 1-bit.

Nand, nor vaø xnor ruùt goïn ñöôïc suy ra baèng caùch ñaûo möùc logic cuûa keát quaû and, or, xor ruùt goïn (theo thöù töï).

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

// X = 4’b1010

&X // töông ñöông 1&0&1&0 baèng 1’b0.

|X // töông ñöông 1|0|1|0 baèng 1’b1.

^X // töông ñöông 1^0^1^0 baèng 1’b0.

// Löu yù: xor hoaëc xnor ruùt goïn coù theå ñöôïc söû duïng ñeå suy ra bit kieåm tra chaün leû cho moät vector.

Caàn phaân bieät (!, &&, ||) vôùi (~, &, |, ^) töøng bit vaø (&, |, ^) ruùt goïn. Söï khaùc nhau naèm ôû choã soá toaùn haïng maø toaùn töû caàn vaø caùch tính giaù trò keát quaû.

Page 18: Chuong_06

6/3/2011

18

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn töû dòch (>>, <<)

Toaùn töû naøy dòch moät toaùn haïng vector sang phaûi hoaëc sang traùi moät soá bit ñöôïc chæ roõ. Caùc toaùn haïng laø vector vaø soá bit caàn dòch. Khi caùc bit ñöôïc dòch, nhöõng vò trí bit troáng ñöôïc ñieàn baèng caùc bit 0.

// X = 4’b1100

Y = X >> 1; // 4’b0110

Y = X << 1; // 4’b1000

Y = X << 2; // 4’b0000

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn töû noái

Toaùn töû noái cung caáp cô cheá noái nhieàu toaùn haïng vôùi nhau.

Caùc toaùn haïng phaûi coù kích thöôùc do kích thöôùc keát quaû ñöôïc suy ra töø kích thöôùc cuûa töøng toaùn haïng.

Caùc toaùn haïng coù theå laø scalar net hoaëc scalar register, vector net hoaëc vector register, bit-select, part-select hoaëc haèng coù kích thöôùc.

Page 19: Chuong_06

6/3/2011

19

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Thí duï:

// A = 1’b1

// B = 2’b00

// C = 2’b10

// D = 3’b110

Y = {B, C} // Keát quaû: 4’b0010

Y = {A, B, C, D, 3’b001} //

//11’b10010110001

Y = {A, B[0], C[1]} // 3’b101

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn töû sao cheùp ({ { } })

reg A;

reg [1:0] B, C;

reg [2:0] D;

A = 1’b1; B = 2’b00; C = 2’b10;

D = 3’b110;

Y = {4{A}} // Y = 4’b1111

Y = {4{A}, 2{B}} // Y = 8’b11110000

Y = {4{A}, 2{B}, C} // Y = 10’b1111000010

Page 20: Chuong_06

6/3/2011

20

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn töû ñieàu kieän (? :)

condition_expr ? true_expr : false_expr;

Tröôùc tieân bieåu thöùc ñieàu kieän condition_expr ñöôïc ñaùnh giaù, neáu keát quaû laø ñuùng (logic 1), true_expr ñöôïc ñaùnh giaù, ngöôïc laïi, false_expr ñöôïc ñaùnh giaù. Neáu keát quaû cuûa bieåu thöùc ñieàu kieän laø x, true_expr vaø false_expr ñöôïc tính vaø so saùnh töøng bit, traû veà töøng vò trí bit laø x neáu caùc bit khaùc nhau vaø giaù trò cuûa caùc bit neáu chuùng gioáng nhau.

Hoaït ñoäng cuûa toaùn töû ñieàu kieän töông töï nhö maïch MUX 2:1.

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

0

2 to 1MUX

1

False_expr

True_expr

Condition_expr

Out

Page 21: Chuong_06

6/3/2011

21

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Toaùn töû ñieàu kieän thöôøng ñöôïc söû duïng trong vieäc moâ hình luoàng döõ lieäu ñeå moâ hình caùc pheùp gaùn coù ñieàu kieän. Bieåu thöùc ñieàu kieän ñoùng vai troø ñieàu khieån chuyeån maïch.

// Moâ hình chöùc naêng ñeäm 3-traïng thaùi.

assign addr_bus = drive_enable ? addr_out : 36’bz;

// Moâ hình chöùc naêng MUX 2:1

assign out = control ? in1 : in0;

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Caùc thao taùc ñieàu kieän coù theå loàng vaøo nhau. Moãi true_expr hoaëc false_expr töï mình coù theå laø moät thao taùc ñieàu kieän.

Trong thí duï sau, ta cho raèng s1 vaø s0 laø 2 tín hieäu löïa choïn cuûa moät MUX 4:1 coù caùc ngoõ vaøo n, m, y, x vaø ngoõ ra out.

assign out = s1 ? (s0 ? x : y) : (s0 ? m : n);

Page 22: Chuong_06

6/3/2011

22

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Bieåu thöùc, toaùn töû vaø toaùn haïng

Thöù töï öu tieân

Ñôn nguyeân: +, -, ~, !

Nhaân, chia, modulus: *, /, %

Coäng, tröø: +, -

Dòch: >>, <<

Quan heä: <, <=, >, >=

Baèng: ==, !=, ===, !==

Ruùt goïn: &, ~&, ^, ~^, |, ~|

Logic: &&, ||

Ñieàu kieän: ? :

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Thí duï

MUX 4:1

Phöông phaùp 1: Phöông trình logic

module mux4_to_1(out, i0, i1, i2, i3, s1, s0);

output out;

input i0, i1, i2, i3, s1, s0;

assign out = (~s1 & ~s0 & i0)|

(~s1 & s0 & i1)|

(s1 & ~s0 & i2)|

(s1 & s0 & i3);

endmodule

Page 23: Chuong_06

6/3/2011

23

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Thí duï

MUX 4:1

Phöông phaùp 2: Toaùn töû ñieàu kieän

module multiplexer4_to_1(out, i0, i1, i2, i3, s1, s0);

output out;

input i0, i1, i2, i3, s1, s0;

assign out = s1 ? (s0 ? i3 : i2) : (s0 ? i1 : i0);

endmodule

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Thí duï

Maïch coäng 4-bit

module fulladd4(sum, c_out, a, b, c_in);

output [3:0] sum;

output c_out;

input [3:0] a, b;

input c_in;

assign (c_out, sum) = a + b + c_in;

endmodule

Page 24: Chuong_06

6/3/2011

24

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Thí duï

q

T_FFtff0

q

T_FFtff1

q

T_FFtff2

q

T_FFtff3

clock

clear

q0 q1 q2 q3

Maïch ñeám khoâng ñoàng boä 4-bit

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Thí duï

- Maïch ñeám 4-bit khoâng ñoàng boä

module counter(Q, clock, clear);

output [3:0] Q;

input clock, clear;

T_FF tff0(Q[0], clock, clear);

T_FF tff1(Q[1], Q[0], clear);

T_FF tff2(Q[2], Q[1], clear);

T_FF tff3(Q[3], Q[2], clear);

endmodule

Page 25: Chuong_06

6/3/2011

25

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Thí duï

clock

q

D_FF

d

q

clear

T_FF suy ra töø D_FF

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Thí duï

module T_FF(q, clk, clear);

output q;

input clk, clear;

edge_dff ff1(q, ~q, clk, clear);

endmodule

module edge_dff(q, qbar, d, clk, clear);

output q, qbar;

input d, clk, clear;

wire s, sbar, r, rbar, cbar;

Page 26: Chuong_06

6/3/2011

26

Bieân soaïn: Toáng Vaên On – Ñaïi hoïc Baùch Khoa TP HCM

Thí duï

assign cbar = ~clear;

assign sbar = ~(rbar & s),

s = ~(sbar & cbar & ~clk),

r = ~(rbar & ~clk &s),

rbar = ~(r & cbar &d);

assign q = ~(s &qbar),

qbar = ~(q & r &cbar);

endmodule