You are on page 1of 36

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN


KHOA KỸ THUẬT MÁY TÍNH

BÁO CÁO TỔNG KẾT


MÔN THIẾT KẾ LUẬN LÝ SỐ – CE

Đào Cao Sơn 21522550


THÀNH VIÊN NHÓM Nguyễn Phú Quí 21522523
Trần Thị Ngọc Thuý 21522664

LỚP CE118.N22.MTCL

1
Mục lục

I.Thiết kế: Modulo 3 counter:………………………………………………………………….…..…3


A.Nguyên lý hoạt động………………………………………………………………………….….….3
B.Các bước thiết kế ………………………………………………………………….……………….…3
C.Kết quả thực hiện mạch…………………………………………………………………………….6
II.Thiết kế up down counter 5 bit:……………………………………………………………….....6
A.Nguyên lý hoạt động……………………………………………………………………………...…6
B.Các bước thiết kế ………………………………………………………………….……………….…7
C.Kết quả thực hiện mạch…………………………………………………………………….…..….8
III.Thiết kế thanh Ram 32x8:……………………………………………………………………………9
A.Nguyên lý hoạt động……………………………………………………………………………...…9
B.Các bước thiết kế ………………………………………………………………….…………….……9
C.Kết quả thực hiện mạch………………………………………………………………………….…13
IV.Thiết kế Stack:...………………………………………………………………………………..……….14
A.Nguyên lý hoạt động…………………………………………………………………………..….…14
B.Các bước thiết kế ………………………………………………………………….…………….……14
C.Kết quả thực hiện mạch……………………………………………………………………….……17
V.Thiết kế FIFO:………………………………………………………………………………………….…..18
A.Nguyên lý hoạt động…………………………………………………………………………..….…18
B.Các bước thiết kế ………………………………………………………………….…………….……18
C.Kết quả thực hiện mạch……………………………………………………………………….……20
VI.Thiết kế mạch cộng từ 1 tới 8:…………………………………………………………………....21
A.Nguyên lý hoạt động…………………………………………………………………………..…..…21
B.Các bước thiết kế ………………………………………………………………….…………..…...…22
C.Kết quả thực hiện mạch……………………………………………………………………..………28
VII.Thiết kế mạch đếm số bit 1 trong số 8 bit……………………………………………………29
A.Nguyên lý hoạt động…………………………………………………………………………….….…29
B.Các bước thiết kế ………………………………………………………………….…………….…..…
29
C.Kết quả thực hiện mạch……………………………………………………………………..…….…
35

2
I.Thiết kế: Modulo 3 counter
A.Nguyên lý hoạt động
Bộ đếm có 2 đầu vào: cho phép đếm ( C ) và hướng đếm ( D ).
Khi C=1, bộ đếm sẽ đếm theo hướng được chỉ định bởi D và nó sẽ ngừng
đếm khi C = 0.
Bộ đếm sẽ đếm lên khi D=0 và đếm xuỗng khi D=1.
Bộ đếm có một đầu ra Y sẽ được xác nhận khi bộ đếm:
- Đạt tới 2 trong khi đếm xuống
Hoặc -Về 0 trong khi đếm lên.

3
B.Các bước thiết kế Modulo 3 counter
Bảng trạng thái:

Pres NEXT STATE


ent
CD = CD = CD =
Stat
0X 10 11
e
S0 S0/0 S1/0 S2/1
S1 S1/0 S2/0 S0/0
ENCODING S2 S2/0 S0/1 S1/0 B:

NEXT STATE MAP:

OUT PUT MAP:

4
Dựa vào next state map và bảng kích thích ta rút gọn được các ngõ vào
của J1,K1,J0,K0.

Mạch vẽ trên quartus:

5
C. Kết quả thực hiện mạch
WAVEFORM:

Khi C=1 :
-D=0 mạch bắt đầu đếm lên và khi đạt tới 0 thì Y (output)=1 . -
-D=1 mạch bắt đầu đếm xuống và khi đạt tới 2 thì Y(output)=1.

Khi C=0 mạch sẽ không đếm

II.Thiết kế up down counter 5 bit:


A. Nguyên lý hoạt động

6
B. Các bước thiết kế

Bộ HAS:

Bộ MUX

Mạch vẽ trên quartus

7
C.Kết quả hiện thực mạch
Mô phỏng waveform
Mô phỏng

D = 1 mạch đếm xuống D = 0 mạch đếm lên

Load = 0, mạch cho phép nạp EN = 0, mạch giữ nguyên giá trị

8
III.Thiết kế thanh RAM 32x8
A. Cơ chế hoạt động
Để có thể thiết kế được thanh RAM 32x8 chúng ta bắt đầu từ những
phần nhỏ nhất của thanh ram đó chính là Memory Cell. Bằng cách sử
dụng các cổng logic và D latch để lưu trữ dữ liệu.
Sau đó sử dụng nhiều khối MC và các bộ Decoder liên kết lại với nhau
tạo các thanh RAM to hơn như RAM 4x4, RAM 8x8 và RAM 32x8
B.Các thành phần để thiết kế thanh RAM
1.Memory cell
Để thiết kế được thanh RAM 32x8 chúng ta bắt đầu thiết kế từ các
Memory cell với mỗi MC dùng để lưu trữ 1 bit của thanh RAM

1.Memory Cell

Trong đó:
- RS (Row Select) dùng để chọn hàng để MC có thể lưu trữ 1bit dữ liệu
- I (Input) giá trị đầu vào của MC
- E (Enable) cho phép nạp giá trị vào MC
Khi người dùng nạp giá trị vào MC, lúc này cổng E ( = 1) cho phép giá trị
được nạp vào và cổng RS ( = 1) thể hiện đúng hàng cần nạp vào thì cổng
ENA của D latch sẽ cho phép I được nạp vào. Cuối cùng cổng logic TRI
nhận kết quả tử D latch và giá trị từ RS ( =1) thì sẽ xuất ra kết quả
O( output)
2.RAM4x4
Sau khi đã có được MC chúng ta tiếp tục thiết kế RAM4x4 với 4 hàng, 4
cột. Và có thể lưu trữ được 4 giá trị với mỗi giá trị 4 bit
- 2 to 4 decoder

9
2.1 Decoder 2 to 4

Bộ 2-to-4-decoder trong chương trình dùng để biến đổi từ đầu vào 2


input thành đầu ra 4 bit, dùng để lựa chọn hàng tương ứng trong
RAM4x4. Dưới đây là bảng sự thật của bộ 2 to 4 decoder

2.2. Bảng Sự thật Decoder 2 to 4

- Thanh RAM4x4
Sau khi đã có bộ 2-to-4-decoder tiếp tục thiết kế tới thanh RAM4x4 với 4
hàng 4 cột và mỗi một thành phần là 1 MC
Trong đó:
- A[1..0]: Input của bộ decoder dùng để chọn hàng lưu trữ cho RAM
- RWS: Input quyết định chế độ của thanh RAM ( 0: Read, 1: Write)
- CS: Cho phép thanh RAM xuất hoặc không xuất ra output, khi kết
hợp với tín hiệu RWS ( Write: Không xuất output, Read: Xuất
output)

10
2.3.Thanh Ram 4x4

3.RAM8x8
Sau khi đã có thanh RAM4x4 tiếp tục thiết kế thanh RAM8x8 với 2 hàng
2 cột mỗi một thành phần là 1 thanh RAM4x4. Kết quả cuối cùng chúng
ta sẽ có một thanh RAM8x8 và có khả năng lưu trữ lên tới 8 số và mỗi số
chứa 8 bit

11
3.Thanh Ram 8x8

Trong đó:
- I[7..0]: Dữ liệu ban đầu để lưu trữ ( 4 bit đầu đưa vào thanh
ram4x4 đầu và 4 bit cuối đưa vào thanh ram4x4 cuối trong hàng)
- A[2..0]: Trong đó bit đầu tiên A[2] và tín hiệu CS được dùng như 1
bộ 1to2decoder và 2 bit cuối A[1..0] dùng cho bộ 2to4 decoder của
mỗi thanh RAM4x4
4.RAM16x8
Tiếp tục thiết kế tiếp thanh RAM16x8 dựa vào 2 thanh RAM8x8, có sức
chứa lên tới 16 số và mỗi số 8 bit

4.Thanh Ram 16x8

Tương tự:
- A[3..0]: Bit đầu tiên và tín hiệu CS dùng để tạo thành 1 bộ decoder
1 to 2 để lựa chọn hàng trong 2 thanh RAM và 3 bit cuối là của
thanh RAM8x8
5.RAM32x8
Tiếp tục thiết kế tiếp thanh RAM32x8 dựa vào 2 thanh RAM16x8, có sức
chứa lên tới 32 số và mỗi số 8 bit

12
5.Thanh Ram 32x8

C.Kết quả hiện thực

6.Kết quả 1

Với đầu vào Input cho chạy từ 0, giá trị A(Address) là địa chỉ tương ứng
của 32 số của thanh RAM32x8, bắt đầu ghi giá trị từ 0 – 9 (RWS = 1) và
đoạn 17 – 31(RWS = 1), còn khi A từ 10 – 16(RWS = 0) dùng đễ đọc giá
trị nhưng ban đầu chưa nạp giá trị vào nên O( output) không thể hiện
giá trị

7.Kết quả 2
Đọc giá trị input khi RWS = 0 tương ứng với từng giá trị lưu vào khi ghi
chúng ta có các O(output) tương tự, trong đó khoảng 0 – 9 và 17-31 có
giá trị được lưu trữ còn khoảng 10 – 16 thì không có lưu giá trị nên
O(output) = X

13
8.Kết quả 3
Ngoài ra tín hiệu CS cho phép ghi giá trị và khi cho CS bằng 0 ( 0 – 4) thì
khi đọc thì không có dữ liệu để xuất ra

IV.Thiết kế Stack
A.Cơ chế hoạt động
Để thiết kế stack theo cơ chế LIFO ( Last in first out), sẽ sử dụng thanh
RAM 32x8 đã thiết kế ở bài trước để lưu trữ dự liệu và 2 bộ up/down
counter 5 bit để lưu địa chỉ khi push và pop của stack.
Khi thực hiện push giá trị vào thanh ghi sẽ lấy địa chỉ của Top để thực
hiện ghi, sau đó thực hiện cộng giá trị Top và Top – 1 lên 1. Ngoài ra khi
thực hiện pop giá trị ra thanh ghi sẽ lấy địa chỉ của Top – 1 để đọc, sau
đó giảm giá trị của Top và Top – 1 đi 1.
Vì là thanh RAM 32x8 nên stack có thể lưu trữ tới 32 giá trị và sẽ đầy khi
thanh ghi Top đạt giá trị 31 và trống khi Top bằng 0. Ngoài ra địa chỉ 31
của Top sẽ không bao giờ được đọc ra
B.Các thành phần để thiết kế stack
1. 5 bit up/down counter
Dựa vào thiết kế 4 bit up/down counter chúng ta có thể mở rộng để
thiết kế thêm bộ 5 bit up/down counter, và thêm 2 chân reset và clear
cho D flip flop.

14
2. Thanh RAM 32x8
Sử dụng lại thanh RAM 32x8 đã thiết kế ở bài trước như một bộ lưu trữ
các giá trị khi push/pop của stack

3. Bộ Mux 5 bit
Dùng để chọn giá trị từ 2 bộ đếp Top và Top – 1, khi tín hiệu Select = 1
thì chọn giá trị ngỏ ra của bộ cộng Top và khi hiệu Select = 0 khi chọn giá
trị ngỏ ra của bộ cộng Top – 1

15
4. Output Logic
Sử dụng các ngỏ ra của bộ cộng Top chúng ta có thể xuất tín hiệu Full
hoặc Empty

5.Control Logic
Dựa theo bản Control table chúng ta có thể sử dụng các cổng logic để xử
lý các tín hiệu để nó hoạt động theo đúng chương trình.

6. Stack

16
Sau khi đã thiết kế xong các thành phần cơ bản trên chúng ta sẽ có mạch
cuối cùng như thế này

Trong đó:
- Reset: Khi bắt đầu chạy chương trình lúc này trong stack chưa có
giá trị gì nên phải reset giá trị của bộ Top về 0 và set giá trị của bộ
Top – 1 lên 31
- Push/pop: Kết hợp với tín hiệu E (Enable = 1) để thực hiện push
hoặc pop giá trị theo yêu cầu ( 0: Push, 1: Pop)
- E(Enable): Kết hợp với các tín hiệu khác để cho phép chương trình
hoạt động khi cho phép
- I[7..0]: Dữ liệu đầu vào của chương trình
- CLK: tín hiệu xung clock dùng để chạy chương trình
C.Kết quả hiện thực mạch

Thực hiện reset khi mới thực thi chương trình để stack bắt đầu lưu trữ
từ giá trị 0. Khi mới bắt đầu thì stack vẫn chưa lưu giá trị gì nên Empty =
1. Bắt đầu push giá trị vào chương trình push = 0

17
Khi lưu tới Top = 31 lúc này stack đã full nên tín hiệu Full = 1, tiếp theo
thực hiện pop các giá trị tương ứng ra. Đầu tiên là pop địa chỉ 30 và 29
của Top – 1 là 15, sau đó 28 và 27 là 14,….

V.Thiết kế FIFO
A. Nguyên lý hoạt động
Chúng ta sử dụng 2 bộ đếm front và back để lưu địa chỉ. Front dùng để
lưu địa chỉ đọc, khi RWS = 0, mạch cho phép đọc Khi đó sẽ xuất ra giá trị
lưu trong địa chỉ front. Lúc này front tăng lên 1. Back dùng để lưu địa chỉ
ghi, khi RWS = 1, mạch cho phép ghi. Dữ liệu được đưa vào sẽ ghi vào
địa chỉ back. Lúc này back tăng lên 1

Control table

B.Các bước thiết kế


1. Counter 6 bit
Bởi vì chỉ sử dụng bộ đếm tăng nên gán cho tất cả các cổng D đều bằng 1.
Cổng E(enable) dùng để cho phép bộ đếm hoạt động.
Tín hiệu reset để hàng đợi có giá trị khởi đầu bằng 0.
Y(output) dùng để làm địa chỉ cho thanh ghi dùng để đọc và ghi.

18
2. Mạch so sánh

3. Mạch so sánh bằng 5 bit

Ngõ ra của counter là 6 bit, khi đó 5 bit sau được đưa vào COMPARE để
so sánh 2 địa chỉ có giống nhau không. Trong trường hợp 2 địa chỉ như
nhau thì sẽ so sánh bit bên trái, nếu giống nhau thì nghĩa là back và front
có giá trị như nhau, do đó empty sẽ bật. Nếu 2 bit trái không giống nhau
thì cờ full sẽ được bật báo hàng đợi đã đầy.
4. Ram 32x8

19
6.Mux 5 bit

7. Vẽ mạch trên quartus

C.Kết quả thực hiện

20
Khi reset=1 và RW=1 thì cho phép nạp các giá trị bắt đầu từ 2 vào queue và
empty sẽ ngay lập tức từ mức 1 xuống mức 0 do đã có giá trị được nạp vào
queue. Cho đến khi RW=0 thì pop các giá trị ra từ queue theo cơ chế FIFO

Mô phỏng trường hợp queue bị đầy :

Mô phỏng trường queue bị rỗng :

VI.Thiết kế mạch cộng từ 1 tới 8


A.Nguyên lý hoạt động
Tính tổng các số từ 1 tới 8
1+2+3+4+5+6+7+8=36
Ý tưởng: Mạch gồm 2 khối chính là khối controller và khối datapath.
Khối datapath gồm:
+ Bộ cộng 8 bit.

21
+ Counter 8 bit, để đếm lên giá trị tăng dần từ 1 tới 8, là đầu vào thứ
nhất của bộ cộng.
+ Thanh ghi 8 bit để lưu giá trị result (res), là đầu vào thứ 2 của bộ
cộng.
+ Mạch so sánh bằng, dùng để so sánh từng bit của A có bằng từng bit
của B hay không.

Khi tín hiệu EN của counter được kích hoạt, counter sẽ bắt đầu đếm lên
từ 1, 2, 3, 4 … . Khi đó bộ cộng sẽ thực hiện cộng giữa giá trị của
counter và giá trị res lưu được lưu trong thanh ghi. Mỗi lần xung CLK
tích cực, bộ so sánh sẽ so sánh giá trị value do người dùng đưa vào và
giá trị của counter. Ví dụ khi muốn cộng các số từ 1 tới 8 thì value có
giá trị thập phân là 8, khi counter đã đếm tới 8 output của bộ so sánh là
1, sẽ gửi tín hiệu tới tristate để xuất kế quả ra, lúc này datapath sẽ phát
ra tín hiệu equal8 = 1 để báo rằng counter đã đếm đến số được yêu
cầu. Ngược lại với các giá trị khác 8 (1, 2, 3 …) kết quả so sánh là 0 thì
tín hiệu gửi đến tristate là 0 do đó không có kết quả nào được xuất ra
trước khi counter lên 8.
Cứ như vậy sau mỗi chu kỳ CLK thì mạch sẽ so sánh và cộng giá trị từ
counter và giá trị trong register, sau đó cập nhật lại giá trị lưu trong
register.

Khối controller gồm:


+ Khối nextstate: dùng để tạo trạng thái kế tiếp.
+ Khối statememory: Gồm các flipflop lưu trạng thái hiện tại.
+ Khối outputlogic: lưu ngõ ra tương ứng với các trạng thái hiện tại của
FSM.
Controller có input là start do người dùng nhập vào. Khi start = 1 thì
mạch sẽ bắt đầu cộng. Khi controller nhận được tín hiệu equal8 = 1 từ
datapath thì nó sẽ chuyển sang trạng thái tiếp theo, phát ra tín hiệu
done để datapath xuất ra kết quả.

B,Các bước thiết kế


Thiết kế Datapath:
1. Bộ cộng
Bộ cộng
8 bit

22
2. Counter 8 bit: để đếm lên giá trị tăng dần từ 1 tới 8, là đầu vào thứ
nhất của bộ cộng.

3. Thanh ghi 8 bit để lưu giá trị result (res), là đầu vào thứ 2 của bộ cộng.

4. Mạch so sánh bằng, dùng để so sánh từng bit của A có bằng từng bit của B
hay không.

23
Dùng cổng XNOR để so sánh từng bit với nhau,, giống nhau thì đầu ra là 1,
khác nhau đầu ra là 0. Cuối cùng sử dụng cổng and8 để and tất cả các bit lại.

5.Vẽ khối datapath

Thiết kế khối controller:

24
Bước 1: Sơ đồ trạng thái:

rst: chân reset của counter.


cnt_EN: counter enable, cho phép counter đếm lên.
start: tín hiệu bắt đầu.
done: tín hiệu báo khi đã hoàn thành và cho phép xuất kết quả.
equal8: khi giá trị của counter bằng 8 thì tín hiệu này bằng 1.

Ở trạng thái S0, mạch đợi tín hiệu start từ người dùng. Khi đó rst luôn tích
cực, luôn reset lại giá trị khi chưa bắt đầu. Tín hiệu cnt_EN lúc này cũng chưa
được bật.

Khi start = 1, chuyển sang trạng thái S1, rst không còn tích cực nữa, đồng thời
cnt_EN = 1 cho phép counter bắt đầu đếm. Lúc này sẽ đợi tín hiệu equal8 từ
datapath để sang trạng thái S2.

Khi sang trạng thái S2, tín hiệu done = 1 từ controller phát ra sẽ được gửi cho
datapath để xuất kết quả. Sau đó quay lại trạng thái S0 đợi tín hiệu start tiếp
theo.

Bước 2: Lập bảng chuyển trạng thái


Next state Output
Current state
Condition State RST cnt_EN done
start = 0 S0
S0 0 0 0
start = 1 S1
equal8 = 0 S1
S1 1 1 0
equal8 = 1 S2

25
S2 S0 1 1 1

Current
Next state Output
State
Q1 Q0 start equal8 D1 D0 rst cnt_EN done
0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0
0 0 1 0 0 1 0 0 0
0 0 1 1 0 1 0 0 0
0 1 0 0 0 1 1 1 0
0 1 0 1 1 0 1 1 0
0 1 1 0 0 1 1 1 0
0 1 1 1 1 0 1 1 0
1 0 0 0 0 0 1 1 1
1 0 0 1 0 0 1 1 1
1 0 1 0 0 0 1 1 1
1 0 1 1 0 0 1 1 1
1 1 0 0 X X X X X
1 1 0 1 X X X X X
1 1 1 0 X X X X X
1 1 1 1 X X X X X

D1 = Q0.equal8
D0 = Q0.equal8’ + Q1’Q0’start
rst = Q1 + Q0
cnt_EN = Q1 + Q0
done = Q1

Bước 3: Thiết kế mạch:


+ Khối nextstate: Mạch tạo trạng thái kế tiếp là mạch tổ hợp phụ thuộc
vào ngõ vào FSM và giá trị trạng thái hiện tại lấy từ bộ nhớ trạng thái
(statememory)

26
+ Khối statememory (bộ nhớ trạng thái) gồm 2 flipflop để lưu trạng thái
hiện tại của FSM, lấy ngõ vào từ mạch tạo trạng thái kế tiếp.

+ Khối outputlogic: là mạch tổ hợp tạo giá trị ngõ ra tương ứng với
trạng thái hiện tại của FSM.

Từ 3 khối trên ta thiết kế được khối controller:

27
Có thể thấy ngõ ra của statememory sẽ được đưa vào ngõ vào của nextstate
để tạo trạng thái kế tiếp.

Kết hợp khối datapath và khối controller:

C.Kết quả thực hiện mạch


Mô phỏng waveform

Khi start = 0, mạch đang ở trạng thái S0.


Khi start = 1, mạch chuyển sang trạng thái S1, ở trạng thái S1 thì mạch cho
phép đếm và đợi tín hiệu equal8 nhận về từ datapath.
Khi equal8=1, mạch chuyển sang trạng thái S2, ở trạng thái S2 sẽ nhận về tín
hiệu done=1 nối vào tristate và xuất ra kết quả .

28
VII. Thiết kế mạch đếm số bit 1 trong số 8 bit
A.Nguyên lý hoạt động
Mạch đếm số bit 1 trong một số 8 bit sẽ lần lượt kiểm tra các số bit 0 của số 8 bit
có phải là bit 1 hay không, nếu là bit 1 sẽ tăng biến đếm lên 1.
Sau đó sử dụng mạch dịch bit về phía bên phải và tiếp tục kiểm tra và tăng biến
đếm.
Mạch đếm số bit 1 sẽ dừng lại giá trị input đầu vào được dịch hết qua bên phải, lúc
này giá trị input đầu vào là 0 và chương trình sẽ xuất output và dừng lại.
B.Các bước thiết kế mạch
1.Register File 1x8

Để có thể lưu trữ giá trị input đầu vào của người dùng cũng như giá trị sau khi
mach dịch phải thực hiện thì cần mạch lưu trữ.
Và mạch lưu trữ sẽ sử dụng 8 d flip-flop để có thể lưu trữ một số 8 bit
2.Shift Right 8 bit

29
Sau khi đã có mạch lưu trữ, bắt đầu thiết kế mạch dịch bit về phía bên phải sử
dụng 8 bus mux để dịch từng bit qua bên phải.
Trong đó tín hiệu SE sẽ điều khiển mạch khi SE = 0 mạch sẽ trả về số ban đầu, khi
SE = 1 mạch sẽ dịch phải 1 bit
3. Counter 4 bit

Mạch đếm số 4 bit dùng để đếm số bit 1 trong một số 8 bit, trong đó sử dụng 4 d
flip flop để có thể đếm lên tới được 4 bit. Ngoài ra vì là mạch đếm lên nên tín hiệu
D sẽ được cho bằng 0 (nối đất)
Tín hiệu E( Enable) cho phép mạch được đếm khi E = 1
Tín hiệu Reset để reset mạch về 0 cho mạch bắt đầu đếm giá trị mới hoặc đếm lại
4.Mạch Logic

30
Mạch này có tác dụng kiểm tra bit cuối cùng có bằng 1 (IsOne) hay không cũng như
kiểm tra input đầu vào đã dịch hết về phía bên phải hay chưa ( IsZero )
Bên cạnh đó tín hiệu input E (Enable) đầu vào cho phép mạch có được xuất ra giá
trị hay không.
5. Datapath

31
Sử dụng các mạch đã thiết kể ở trên, kết hợp chúng lại ta được 1 mạch datapath có
chức năng đếm số bit 1 trong 1 số 8 bit
Bắt đầu chương trình khi Input được nạp vào chương trình sẽ đi qua một BUSMUX
để lựa chọn giá trị xuất ra. Ban đầu tín hiệu SE sẽ bằng 0 để chọn giá trị input của
người dùng, lúc này khối Shift Right 8 bit cũng nhận input nhưng vì SE = 0 nên
mạch sẽ không dịch bit mà trả về giá trị ban đầu.
Tiếp đó giá trị input sẽ được ghi vào thanh ghi 8 bit và xuất ra output đã được ghi,
đồng thời giá trị input được nạp vào mạch logic để kiểm tra nhưng vì lúc này SE = 0
nên mạch Logic sẽ kiểm tra nhưng input được xuất ra bằng 0
Sau khi giá trị input được nạp vào lúc này tín hiệu SE sẽ thay đổi SE = 1, cho phép
mạch logic được kiểm tra giá trị đầu vào, BUSMUX được chọn giá trị đã lưu trong
thanh ghi và mạch dịch phải bắt đầu được dịch phải
Mạch sẽ thực hiện tính toán và kiểm tra như vậy đến khi giá trị input đầu vào bằng
0 được mạch Logic kiểm tra. Khi đó tín hiệu Done = 1 từ khối Controller được đưa
vào cổng TRI cho phép xuất output từ Counter 4 bit ra
6. Khối Controller
Dựa vào khối Datapath đã thiết kế tiếp tục thiết kế khối Controller dùng để điều
khiển tín hiệu đầu vào cũng như các trạng thái cho mạch
6.1 Sơ đồ trạng thái hoạt động của mạch

32
Sẽ có 3 trạng thái hoạt động của mạch, chương trình sẽ bắt đầu khi tín hiệu Start =
1 sau đó bắt đầu tín toán và kiểm tra. Khi cờ IsZero được kích hoạt chương trình sẽ
kết thúc và xuất ra giá trị kết quả
6.2 Bảng sự thật
Dựa vào sơ đồ trạng thái ta có bảng sự thật

6.3 Thiết kế khối FSM sử dụng DFF


Vì chương trình có 3 trạng thái ta sẻ sử dụng 2 DFF và dựa vào bảng sự thật ta có
bảng của các DFF, các cổng đầu ra như sau:

33
Ta có các phương trình trạng thái
D1 = Q0.isZero
D0 = Q0.isZero’ + Q1’Q0’start
SE = Q1 + Q0
Reset = Q1'Q0'
Done = Q1
Dựa vào đó ta có thể thiết kế khối Controller như sau:

34
7. Mạch Counter Bit 1 trong một số 8 bit

Cuối cùng sau khi đã có các khối Controller và khối Datapath ta có mạch Counter số
Bit 1 trong một số 8 bit như vậy
C. Kết quả hiện thực mạch

Kết quả khi hiện thực mạch với giá trị Input ban đầu bằng = 10010111, có tổng
cộng 5 bit 1. Bắt đầu chương trình với tín hiệu Start = 1, lúc này chương trình bắt
đầu tính toán và kiểm tra. Cuối cùng xuất ra kết quả O = 5 và cờ Done được kích
bằng 1

Hiện thực mạch với 2 giá trị input, tín hiệu Start được kích = 1 highland nên
chương trình sẽ xuất ra 2 kết quả của 2 giá trị input khác nhau. Và kết quả
10010111 có 5 số bit 1 và 10110100 có 4 số bit 1.

35
36

You might also like