THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH ADD (có code) THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH ADD (có code) THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH ADD (có code) THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH ADD (có code) THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH ADD (có code)
Trang 1KỲ THỰC HIỆN LỆNH ADD
Trang 2DANH MỤC CÁC HÌNH VẼ vi
DANH MỤC CÁC BẢNG BIỂU vii
DANH MỤC CÁC TỪ VIẾT TẮT viii
CHƯƠNG 1 TỔNG QUAN VỀ CPU KIẾN TRÚC RISC 1
1.1 GIỚI THIỆU 1
1.1.1 Lịch sử 2
1.1.2 Lý thuyết về CPU RISC 6
1.1.2.1 Quy trình thiết kế số 6
1.1.2.2 Dẫn nhập thiết kế 8
1.1.2.3 Testbench trong Verilog 9
1.1.2.4 Mô phỏng 10
1.1.2.5 Kiến trúc CPU RISC 32 bit đơn chu kỳ 11
1.1.3Hướng nghiên cứu 14
1.2 NGUYÊN LÝ CHUNG 14
1.2.1 Nguyên tắc lưu dữ liệu trong bộ nhớ 14
CHƯƠNG 2: NỘI DUNG CỦA ĐÈ TÀI 17
2.1 ĐƯỜNG DỮ LIỆU CỦA LỆNH ADD 17
2.2 CONTROL UNIT 18
2.3 KHỐI RF 19
2.4 KHỐI ALU 20
CHƯƠNG 3: KẾT QUẢ MÔ PHỎNG 22
3.1 MÔ HÌNH MÔ PHỎNG 22
3.2 KẾT QUẢ MÔ PHỎNG 22
3.3 KẾT QUẢ NẠP TRÊN KIT DE2 23
CHƯƠNG 4: NHẬN XÉT 26
CHƯƠNG 5: KẾT LUẬN 27
PHỤ LỤC 29
Trang 3HÌNH 1-1: CHIP VI XỬ LÝ ARM 1
HÌNH 1-2: LUỒNG THIẾT KẾ ASIC 8
HÌNH 1-3: HAI CÁCH KHÁC NHAU ĐẺ ĐỊNH NGHĨA DỮ LIỆU KIỂM TRA NGÕ VÀO 11
HÌNH 1-4: KIẾN TRÚC CPU RISC 32 BIT ĐƠN CHU KỲ 12
HÌNH 1-5: NGUYÊN TẮC ALIGNMENT RESTRICTION 15
HÌNH 2-1: ĐƯỜNG DỮ LIỆU LỆNH ADD 17
HÌNH 2-2: KHỐI CONTROL UNIT 18
HÌNH 2-3: KHỐI REGISTER FILE 19
HÌNH 2-4: KHỐI ALU 32 BIT 20
HÌNH 2-5: NGUYÊN TẮC THỰC HIỆN PHÉP CỘNG 32 BIT 21
HÌNH 3-1: SƠ ĐỒ MÔ PHỎNG CPU RISC 22
HÌNH 3-2: MÔ PHỎNG DẠNG SÓNG BẰNG PHẦN MỀM QUARTUS 22
HÌNH 3-3:SƠ ĐỒ ĐẤU CHÂN 23
HÌNH 3-4: KẾT QUẢ NẠP KIT 1 24
HÌNH 3-5: KẾT QUẢ NẠP KIT 2 25
Trang 4BẢNG 1-1: SO SÁNH CPU RISC VỚI CÁC CPU KHÁC 1
BẢNG 1-2: CÁC HỆ THỐNG VÀ CÁC RISC PHỔ BIẾN 6
BẲNG 1-3: THANH GHI TRONG CPU RISC 14
BẢNG 1-4: CẤU TRÚC LỆNH 16
BẢNG 2-1: KHỐI CONTROL UNIT LOẠI R 18
BẢNG 2-2: BẢNG SỰ THẬT FULL ADDER 20
Trang 5RF Register File
ALU Arithmetic logic unit
CPU Central Processing Unit
RTL Register Transfer Language
Trang 6CHƯƠNG 1 TỔNG QUAN VỀ CPU KIẾN TRÚC RISC
1.1 Giới thiệu
RISC (Reduced Instructions Set Computer - Máy tính với tập lệnh đơn giản hóa) là mộtphương pháp thiết kế các bộ vi xử lý theo hướng đơn giản hóa tập lệnh, thời gian thựchiện được đồng bộ bằng xung clock là như nhau Các bộ vi xử lý RISC thông dụng hiệnnay là PowerPC của IBM, DEC Alpha, PIC, ARM, SuperH, MIPS, SPARC, và PA-RISC
Hình 1-1: Chip vi xử lý ARM Bảng 1-1: So sánh CPU RISC với các CPU khác
Trang 71.1.1 Lịch sử
Nhiều tính năng trong các bộ VXL được thiết kế nhằm giúp công việc lập trình trở nên dễdàng hơn những tính năng thường cần vài chu kỳ máy để thực hiện lại thường bị các phầnmềm bỏ sót Cộng thêm sự khác biệt về hiệu năng giữa các CPU và bộ nhớ chính đã dẫnđến nhiều kỹ thuật hoặc nhằm tổ chức lại quá trình thực thi trong bộ xử lý, nhằm hạn chế
số lần truy cập bộ nhớ
Những phần mềm trong thực tế hầu hết tốn nhiều thời gian để thi hành một số tác vụ đơngiản, vì vậy một số nhà nghiên cứu hướng đến việc tối ưu hóa những tác vụ này Do xung
nhịp (clock rate) của CPU bị hạn chế bởi thời gian thực hiện lệnh chậm nhất, nên nếu tối
ưu lệnh này sẽ khiến cho toàn bộ tập lệnh được thực thi nhanh hơn nhiều Mục tiêu củaRISC chính là đơn giản hóa các lệnh, để mỗi lệnh có thể được thực thi chỉ trong 1 chu kỳmáy Việc tập trung đơn giản hóa các lệnh đã cho ra đời các loại "Máy tính với tập lệnhđược đơn giản hóa" - RISC
Những năm cuối 1970, các nhà nghiên cứu của IBM đã khẳng định rằng hầu hết cácphương pháp đánh địa chỉ trực giao bị các chương trình bỏ sót Đây là kết quả khôngmong muốn khi sử dụng các trình biên dịch cấp cao thay vì sử dụng hợp ngữ
Andrew Tanenbaum dựa vào kết quả đo đạc lúc đó khẳng định những thiết kế thừa quámức Ông cho rằng phần lớn các hằng có thể thực hiện bằng 13 bit, trong khi đó các CPUđược thiết kế theo bội số của 8 thường là 8, 16 hoặc 32 Nếu CPU cho phép các hằngđược cất trong những bit dư của mã lệnh sẽ làm giảm bớt đi rất nhiều lần truy cập bộ nhớ.Thay vì phải đọc từ bộ nhớ hay từ thanh ghi, quá trình thực thi sẽ nhanh hơn vì các hằng
đã ở ngay đó khi CPU cần
Một nghiên cứu nữa cũng chúng tỏ rằng những tính năng này hiếm khi được sử dụng vìthực ra chúng thực hiện chậm hơn một nhóm lệnh cùng thực hiện nhiệm vụ đó Đâygiống như một nghịch lý của tiến trình thiết kế VXL, người lập trình chỉ quan tâm đếnnhững lệnh được sử dụng phổ biến
CPU bắt đầu hoạt động nhanh hơn bộ nhớ Năm 1970, người ta tiên đoán sự việc này sẽcòn tiếp diễn không quá 1 thập niên nữa, và đến lúc đó CPU sẽ nhanh hơn bộ nhớ gấp
nhiều lần CPU cần thêm nhiều thanh ghi (hay còn gọi là cache) để có thể thực hiện ở tốc
độ nhanh hơn Nếu giảm sự phức tạp của CPU, những thanh ghi và bộ nhớ đệm mới sẽcần khoảng trống trên chip
RISC thường có tập lệnh rất lớn Cũng từ khuynh hướng đơn giản hóa đó, một số thiết kế
thú vị ra đời như MISC (Minimal Instruction Set Computer - Máy tính với tập lệnh tối thiểu) hay OISC (One Instruction Set Computer) với những máy tính như Transport Triggered Architectures, trong khi các thiết kế khác đi sâu vào vấn đề Turing tarpit.
Thời gian đầu của ngành công nghiệp máy tính, trình biên dịch chưa hình thành Côngviệc lập trình được thực hiện hoặc bằng ngôn ngữ máy (mã nhị phân) hoặc bằng hợp ngữ
Để việc lập trình đơn giản, các VXL được thêm những lệnh có thể biểu diễn trực tiếp
Trang 8những cấu trúc của ngôn ngữ lập trình cấp cao Lúc đó thiết kế phần cứng dễ hơn nhiều
so với thiết kế trình dịch, vì thế mọi phức tạp đều dồn vào phần cứng
Điểm khác nhau của CPU RISC so với CPU CISC là khả năng thực thi mọi thứ trong cácthanh ghi, đọc và lưu dữ liệu vào các thanh ghi Do đó để tránh hiểu lầm nhiều nhà
nghiên cứu thích dùng thuật ngữ load-store.
Giờ đây để hoàn thành cùng một việc, chương trình được viết với những lệnh đơn giảnthay vì với một lệnh phức tạp, phần lớn các lệnh phải đọc từ bộ nhớ nhiều hơn do đócũng mất nhiều thời gian hơn
Những CPU thời kỳ trước không có nhiều thanh ghi vì những nguyên nhân sau:
Một bit trong CPU bao giờ cũng giá trị cao hơn rất nhiều so với một bit ở bộ nhớngoài Với công nghệ tích hợp ở thời kỳ này để có thể sử dụng thêm thanh ghi nhấtđịnh phải có thêm vùng trống trên board hoặc trên chip
Một lượng lớn thanh ghi cũng sẽ cần một lượng lớn các bit trong mã lệnh để xácđịnh các thanh ghi đó
Vì những lý do trên, những chuyên gia thiết kế VXL nỗ lực để mỗi lệnh có thể thi hànhcàng nhiều kĩ thuật càng tốt Điều này dẫn đến một lệnh sẽ làm tất cả công việc như nạp 2
số cần cộng, cộng chúng lại, và cuối cùng lưu trở lại vào bộ nhớ Cũng lệnh đó lại có thểđọc một số từ thanh ghi và số còn lại từ bộ nhớ sau đó lưu kết quả vào bộ nhớ Khuynhhướng thiết kế VXL này được gọi là Complex Instruction Set Computer – CISC
Mục đích chung của thời gian này là mỗi lệnh giúp đỡ càng nhiều khả năng đánh địa chỉcàng tôt Điều này dẫn đến một số phức tạp cho CPU, mặc dù theo nguyên lý mỗi lệnh cóthể được tối ưu khác nhau, làm quá trình thiết kế nhanh hơn nếu người lập trình sử dụngcác lệnh đơn giản
Những năm đầu thập niên 1980, công nghệ thiết kế VXL đã đạt đến đỉnh điểm Sự tăngcường chỉ còn có thể hoàn thiện với công nghệ bán dẫn, như giảm bớt đường kính củacác transistor hoặc dây nối trên chip Dù cấu trúc tinh vi của chip không thay đổi nhưngvới kích thước nhỏ hơn nó vẫn có thể phục vụ ở tốc độ cao hơn Cũng có nhiều nỗ lực đểthiết kế các chip VXL đồng thời Thay vì làm cho chip chạy với tốc độ nhanh hơn người
ta làm cho nhiều chip có thể cùng chia sẻ các tác vụ
Ý tưởng đầu tiên có lẽ là "kênh dẫn" (pipeline) Đây là một khả năng nhằm chia nhỏ thời
gian thực hiện một lệnh thành nhiều chu trình, và các chu trình khác nhau của các lệnhkhác nhau có thể được thực thi đồng thời Một bộ xử lý thông thường đọc một lệnh, giải
mã nó, đọc những vùng nhớ lệnh đó cần, thực thi lệnh, trả kết quả về Với kỹ thuật "kênhdẫn", VXL có thể đọc một lệnh ngay sau khi nó đọc xong lệnh trước đó, tức là nó vừagiải mã một lệnh vừa đọc lệnh kế tiếp, tới chu kỳ kế VXL sẽ làm việc với ba lệnh cùnglúc, và cứ thế tiếp tục Lệnh theo sau sẽ hoàn thành ngay sau khi lệnh trước hoàn tất nênđây là một giải pháp rất hiệu quả nhằm tận dụng tối đa tài nguyên của các VXL
Một cách khác là dùng nhiều phân đoạn xử lý song song trong cùng một VXL Giả sửphải giải quyết một lệnh VXL sẽ tìm cách làm ngay lập tức lệnh kế tiếp trong một đơn vị
Trang 9xử lý khác Tuy nhiên đây là một giải pháp khá khó thực hiện vì nhiều lệnh đôi khi lạiphụ thuộc vào kết quả của lệnh trước nó.
Cả hai phương án trên hướng tới việc cải tiến bằng cách tăng độ phức tạp của CPU Vìkích thước trên chip là hạn hẹp đó để thêm những khả năng mới này cần loại bỏ đi nhữngtính năng khác Vì thế RISC được lợi ích trước tiên do về cấu hình nó dễ hiểu hơn CISCkhá lớn Những thiết kế RISC đầu đời phát triển được thêm những khả ích mới giúpchúng hình thành những chip CISC tương ứng Lúc này các chuyên gia bắt đầu phát hiệnđến việc cộng những điều này vào những chip CISC trong khi vẫn chắc chắn đường kínhcủa chúng, công việc này kéo dài suốt những năm cuối thập niên 1980 và đầu 1990
Dù ở bất kỳ khả năng nào, đơn vị logic của một chip RISC bao giờ cũng cần ít transistorhơn so với của một chip CISC Sự kiện này giúp người lập trình có rất nhiều sự nhạy bén,
ví dụ họ có thể:
Những đặc điểm thường thấy trong 1 chip RISC:
1 Tăng số kích thước thanh ghi
2 Sử dụng các phương pháp tối ưu để tăng mức độ xử lý song song bên trong CPU(pipeline, superscalar)
3 Tăng kích thước cache
4 Thêm các tính năng như I/O, timer v.v…
5 Thêm các bộ xử lý vector
6 Tận dụng các dây chuyền công nghệ cũ, trong khi với CISC điều này rất khó khăn
do kích thước chip lớn hơn
7 Cung cấp những chip cho những ứng dụng có yêu cầu cao về thời gian sử dụng pin
1 Định dạng chuẩn mã lệnh (ví dụ lệnh có chiều dài cố định, các bit của mã lệnh luônnằm ở vị trí cố định trong mã lệnh) sẽ làm quá trình giải mã lệnh đơn giản hơn
2 Các thanh ghi đồng nhất, do đó chúng có thể được sử dụng thay thế nhau trong mọitình huống (tuy nhiên các thanh ghi dành cho số nguyên và số thực dấu chấm động vẫnphân biệt nhau)
3 Cách đánh địa chỉ đơn giản Để có những phương pháp đánh địa chỉ phức tạp cầnkết hợp với các phép toán số học
4 Hỗ trợ rất ít kiểu dữ liệu (một số chip CISC có thể có cả các lệnh thao tác với chuỗi,
xử lý số phức hoặc ma trận Những lệnh như thế chẳng bao giờ tồn tại trong 1 chipRISC lý tưởng)
Trang 10Ngày nay, một số kiến trúc RISC được hình thành dựa vào kiến trúc Harvard, trong đóđường dữ liệu và đường chương trình khác biết Điều này làm cho quá trình đọc dữ liệu
và mã lệnh có thể thực hiện đồng thời do đó có thể nâng cao công suất của VXL
Một trong những điểm yếu của các VXL RISC thế hệ đầu tiên là hiệu ứng branch delayslot Hiệu ứng này xảy ra khi có 1 lệnh nhảy có điều kiện, lúc đó dù có thực hiện nhảyhay không thì một hoặc một số lệnh theo sau vẫn được thực thi do các lệnh này đã đượcđưa vào pipeline trong lúc lệnh nhảy đang được xử lý Điều này gây ra một khoảng thờigian trễ khi thực thi lệnh nhảy có điều kiện branch delay slot không những xuất hiệntrong những VXL RISC như MIPS, PA-RISC và SPARC mà còn cả trong các DSP nhưµPD77230 hoặc TMS320C3x Tuy nhiên ngày nay trong các thiết kế RISC hiện đạingười ta đã có thể loại bỏ được hiệu ứng này
VXL RISC được biết đến đầu tiên là siêu máy tính CDC 6600 được Jim Thornton vàSeymour Cray thiết kế năm 1964, nó có 74 mã lệnh (8086 có 400 mã lệnh) cộng với 12máy tính đơn giản được gọi là "bộ xử lý ngoại vi" để xử lý I/O CDC 6600 sử dụng kiếntrúc load-store, nó hỗ trợ 2 phương pháp đánh địa chỉ, có 11 đơn vị được "kênh dẫn hóa",năm đơn vị đọc dữ liệu và 2 đơn vị để lưu dữ liệu (bộ nhớ của nó được tổ chức theo bank
do đó các đơn vị đọc ghi có thể hoạt động đồng thời) Tốc độ xung đồng hồ/lệnh nhanhhơn 10 lần so với tốc độ truy xuất bộ nhớ
Cũng khoảng thời gian đó John L Hennessy thực hiện dự án MIPS ở Đại học Stanfordnăm 1981 MIPS hầu như chỉ chú trọng vào khả năng pipeline để phục vụ tối đa kĩ năngcủa các VXL Cho dù đã được thực hiện trước đó rồi, nhưng với RISC, phương pháp này
đã thực sự được cải tiến vượt bậc Nhưng vấn đề thiết yếu nhất, cũng phiền toái nhất, là
nó yêu cầu tất cả các lệnh quyết định phải được thực thi trong 1 chu kỳ máy Nếu đáp ứngđược yêu cầu này, pipeline có thể thi hành ở tốc độ rất cao và đây hầu như là yếu tố quyếtđịnh đến tốc độ của VXL Tuy nhiên nó cũng có mặt trái là phải bỏ đi rất nhiều lệnh cóích như nhân, chia
Hầu hết các dự án kể trên đều nhằm mục đích cải tiến các kỹ thuật hiện có, phải chờ tớinăm 1975, dự án đầu tiên nhằm cho ra đời 1 chip RISC hoàn chỉnh mới được thực hiện ởIBM Được đặt tên theo số của ngôi nhà nơi dự án được thực hiện, dự án này đã cho rađời họ VXL IBM 801 vốn được sử dụng rộng rãi trong các phần cứng của IBM
Một máy tính khác được thiết kế trên với kiến trúc load-store là Data General Nova Đây
là một CPU nhỏ 16 bit được thiết kế năm 1968 bởi 1 công ty Mỹ tên là Data General.Tuy nhiên VXL RISC được biết nhiều nhất lại đến từ một dự án được thực hiện bởichương trình VLSI (Very Large-Scale Integration) của DARPA (Defense AdvancedResearch Projects Agency) Dự án trên đã cho ra đời rất nhiều phát triển liên quan đếnthiết kế, sản xuất chip và cả đồ họa máy tính
Dự án RISC của Đại học Caifornia, Berkeley bắt đầu năm 1980 dưới sự hướng dẫn củaDavid Patterson với mục đích nâng cấp hiệu suất của các VXL dựa trên kỹ thuật pipeline
và register windows Một VXL thông thường có khá ít thanh ghi, các chương trình có thểtùy ý sử dụng các thanh ghi đó bất cứ lúc nào Vì thông thường mỗi lần gọi 1 chương
Trang 11trình con, VXL cần lưu lại giá trị một số thanh ghi và sau đó hồi phục lại các thanh ghi đókhi thực hiện lệnh return.
Dự án RISC cho ra đời VXL RISC-I năm 1982 VXL này chứa 44.420 transistor (so với100.000 transistor cho 1 VXL CISC), với 32 lệnh nhưng hoàn toàn vượt xa các VXL đơnchip cùng thời VXL RISC-II ra đời năm 1983 với 39 lệnh, chứa 40.760 transistor vànhanh gấp 3 lần RISC-I
Trong những năm đầu, các dự án chủ yếu chỉ được biết đến trong các trường đại học Đếnnăm 1986, tất cả các dự án về RISC bắt đầu cho ra đời sản phẩm Ngày nay hầu hết cácchip RISC, đều được thiết kế dựa trên kiến trúc RISC-II của Berkeley
Bảng 1-2: Các hệ thống và các RISC phổ biến
Họ MIPS, trong các máy tính SGI, PlayStation và Nintendo 64 game consoles
Họ POWER trong các SuperComputers/mainframes của IBM
Freescale (trước đây là Motorola SPS) và IBM's PowerPC trong Nintendo Gamecube,
Microsoft Xbox 360, Nintendo Wii and Sony PlayStation 3 game consoles, và chotới gần đây là Apple Macintosh
SPARC và UltraSPARC, trong tất cả các hệ thống của Sun
Hewlett-Packard PA-RISC
DEC Alpha
ARM — Palm, Inc Ban đầu sử dụng (CISC) Motorola 680x0 trong những PDA đầutiên, nhưng hiện tại là (RISC) ARM; Nintendo sử dụng 1 chip ARM7 trong GameBoy Advance và Nintendo DS Nhiều nhà sản xuất điện thoại di động, như Nokiacũng dựa trên kiến trúc của ARM
1.1.2 Lý thuyết về CPU RISC
1.1.2.1 Quy trình thiết kế số
Môi trường thiết kế tự động trong thiết kê số, quá trình thiết kế sơ khai bằng việc mô tảthiết kế bằng nhiều mức độ trừu tượng khác nhau và hoàn thành bằng việc lập thành danhsách các thiết bị cũng như các đường gắn kến giữa các linh kiện lại với nhau (netlist) chomột mạch tích hợp với phần mềm cụ thể(ASIC), mạch in (layout) cho một mạch tích hợptheo mục đích khách hàng (custom IC), hoặc một chương trình cho một thiết bị logic có
Trang 12khả năng lập trình được (PLD) Nhiệm vụ của thiết kế, một thiết kế sẽ được mô tả bởi sựhỗn hợp giữa trình bày ở cấp độ hành vi (behavioural) Verilog, sử dụng những gói(module) thiết kế Verilog đã được thiết kế sơ khai, và việc gài chương trình các bus vàwire để hợp nhất các gói thiết kế này hình thành một hệ thống hoàn chỉnh Kĩ sư thiết kếcũng phải có phương hướng tạo ra dữ liệu để kiểm tra (testbench) xem thiết kế có đúngnhiệm vụ hay chưa cũng như dùng để thực hiện phần mềm sau khi kết hợp mô phỏng đểkiểm tra thiết kế bằng phần mềm Quartus, chèn những phương pháp kiểm tra, tìm kiếmthông thường hoặc kết hợp cả ba nguyên tắc trên Sau bước kiểm tra đánh giá thiết kế,thiết kế sẽ được hướng dẫn bằng việc gắn kết để hình thành phần cứng thực sự cho hệthống thiết kế cuối cùng (ASIC, custom IC or FPLD,…) Nếu hệ thống thiết kế là ASIC,thiết kế sẽ được trình bày bởi nhà sản xuất khác; nếu là custom IC, thiết kế sẽ được sảnxuất hiện tại của nhà sản xuất; nếu là FPLD, thiết kế sẽ được nạp lên thiết bị lập trìnhđược Sau bước kết hợp và trước khi phần cứng được hình thành, một phương thức môphỏng khác phải được hình thành Việc mô phỏng này, ta có thể sử dụng testbench tương
tự testbench đã sử dụng trong thử nghiệm trước kết hợp (presynthesis)
Trang 13Hình 1-2: luồng thiết kế ASIC
1.1.2.2 Dẫn nhập thiết kế
Ban đầu trong thiết kế hệ thống số là bước kết nạp thiết kế Trong phần này, thiết kế được
mô tả bằng Verilog theo phương pháp phân tầm từ cao xuống thấp (top-down) Một thiết
kế hoàn thành chỉ có thể gồm những linh kiện ở mức cổng logic hoặc mức transistor,những khối (module) phần cứng có chức năng cấu thành rắc rối hơn được phân tập ở mức
độ hành vi, hoặc những linh kiện được chỉ mục bởi phương pháp bus Do những thiết kếVerilog ở mức cao thường được mô tả ở mức độ mà tại đó nó mô tả hệ thống nhữngthanh ghi và sự truyền dữ liệu giữa những thanh ghi này thông qua mô hình bus, việc mô
Trang 14tả hệ thống thiết kế ở cấp độ này được xem như là mức độ kết nối gói dữ liệu giữa cácthanh ghi (RTL) Một thiết kế hoàn chỉnh được mô tả như vậy sẽ tạo ra được phần cứngtương ứng thực sự rõ ràng Những cấu trúc thiết kế Verilog ở cấp độ RTL sử dụng nhữngphát biểu qui trình (producedural statements), phép gài liên tục (continuous assignments),
và những biểu hiện được gọi sử dụng khối (module) đã xây dựng sẵn Những tuyên bốqui trình Verilog (procedural statements) được dùng để mô tả mức độ hành vi ở mức cao.Một hệ thống hoặc một linh kiện được mô tả ở cấp độ hành vi thì tương ứng với việc mô
tả trong ngôn ngữ phần mềm Mô tả hệ thống một cách qui trình như vậy, cấu trúc if-else,case của Verilog cũng như những ngôn ngữ phần mềm khác đều sử dụng như nhau.Những phép gán liên tục (continuous assignment) trong Verilog là những phép gáncho việc thể hiện chức năng những khối logic, những phép cài bus, và phát biểu việc liênkết giữa hệ thống bus và các đường ngõ vào và đường ngõ ra Kết hợp với những hàmBoolean và những biểu thức có điều kiện, những cấu trúc phương pháp ngôn ngữ này cóthể được để được hình thành những linh kiện và hệ thống theo những phép gán thanh ghi
và bus của chúng Những linh kiện này có thể nhỏ như là mức cổng hay transistor, hoặc
có thể lớn như là một bộ vi xử lí hoàn chỉnh Những phát biểu gọi sử dụng khối Verilog
đã được thiết kế sẵn (instantiantion statements) được sử dụng cho những linh kiện mức
độ không cao trong một thiết kế ở cấp độ cao hơn Thay vì mô tả ở mức độ hành vi,chức năng, hoặc bus của một hệ thống, chúng ta có thể mô tả một hệ thống bằng Verilogbằng cách kết nối những linh kiện ở mức độ thấp hơn
1.1.2.3 Testbench trong Verilog
Một hệ thống được thiết kế dùng Verilog phải được thực thi và kiểm chứng xem thiết kế
đã đúng mục đích chưa trước khi hình thành ra phần cứng Trong thời gian chạy môphỏng này, những khuyết điểm trong mô hình và sự không tương xứng giữa các linh kiệndùng trong thiết kế có lẽ sẽ được tìm ra Chạy mô phỏng một thiết kế cần phải hình thành
ra một đường dữ liệu ngõ vào tìm ra và quá trình quan sát kết quả sau khi chạy môphỏng, dữ liệu dùng để kiểm chứng này được gọi là testbench Một testbench sử dụng cấutrúc mức cao của Verilog để tạo ra dữ liệu kiểm tra, quan sát đáp ứng ngõ ra, và cả việcbắt tay giữa những tín hiệu trong thiết kế Bên trong testbench, hệ thống thiết kế
Trang 15cần chạy mô phỏng sẽ được gọi ra (instantiate) trong testbench Dữ liệu testbenchcùng với tiến trình thiết kế sẽ tạo ra một mô hình mô phỏng mà sẽ được sử dụng bởi mộtphương pháp mô phỏng Verilog.
1.1.2.4 Mô phỏng
Chạy mô phỏng dùng trong việc kiểm tra thiết kế được thi hành trước khi thiết kế đượckết hợp Bước chạy mô phỏng này được biết như mô phỏng ở cấp độ hành vi, cấp độRTL hay trước tổng hợp Ở mức độ RTL, một mô hình bao gồm xung chu kì clock nhưngkhông bao gồm trí hoãn thời gian trên cổng và cáp kết nối (wire) Chạy mô phỏng ở mức
độ này sẽ chính xác theo xung clock Thời gian của việc chạy mô phỏng ở mức độ RTL
là theo tín hiệu xung clock, không quan tâm đến những vấn đề như: nguy hiểm tiềm ẩn cóthể khiến thiết kế bị lỗi (hazards, glitch), hiện tượng chạy đua không kiểm soát giữanhững tín hiệu (race conditions), những vi phạm về thời gian setup và hold của tín hiệungõ vào, và những vấn đề liên quan đến định thời khác Ưu điểm của việc mô phỏng này
là tốc độ chạy mô phỏng nhanh so với chạy mô phỏng ở mức cổng hoặc mức transistor.Chạy mô phỏng cho một thiết kế đòi hỏi dữ liệu kiểm tra Thông thường trong môitrường mô phỏng Verilog sẽ cung cấp nhiều phương pháp khác nhau để đưa dữ liệu kiểmtra này vào thiết kế để kiểm tra Dữ liệu kiểm tra có thể được tạo ra bằng đồ họa sử dụngnhững công cụ soạn thảo dạng sóng, hoặc bằng testbench Những ngõ ra của công cụ môphỏng là những dạng sóng ngõ ra (có thể quan sát trực quan)
Trang 16Hình 1-3 Hai cách khác nhau để định nghĩa dữ liệu kiểm tra ngõ vào
Để chạy mô phỏng với Verilog testbench, trong testbench sẽ kêu phần mềm thiết kế ra
để kiểm chứng, lúc này hệ thống lập trình được xem như là một thành viên của testbench,testbench sẽ cung cấp dữ liệu kiểm tra đến ngõ vào của hệ thống thiết kế Với mỗi xungclock thì ngõ ra bộ đếm sẽ tăng lên 1 Chú ý rằng, theo biểu đồ thời gian thì ngõ ra bộđếm thay đổi tại cạnh lên xung clock và không có thời gian trì hoãn do cổng cũng như trìhoãn trên đường truyền Kết quả chạy mô phỏng cho thấy chức năng của mạch đếm làchính xác mà không cần quan tâm đến tần số xung clock Hiển nhiên, những linh kiệnphần cứng thực sự sẽ có đáp ứng khác nhau Hơn nữa, nếu tần số xung clock được cấpvào mạch thực sự quá nhanh so với tốc độ truyến tín hiệu bên trong các cổng và transistorcủa thiết kế thì ngõ ra của thiết kế sẽ không thể biết được Việc mô phỏng này khôngcung cấp chi tiết về các vấn đề định thời của hệ thống thiết kế được mô phỏng Do đó,những vấn đề giấu kín về định thời của phần cứng do trì hoãn trên cổng sẽ không thể pháthiện được Đây là vấn đề điển hình của quá trỉnh mô phỏng tiền tổng hợp hoặc mô phỏng
ở mức độ hành vi Thiết kế hoạt động yếu thế nào, phục vụ được ở tần số nào chỉ có thểbiết được bằng việc kiểm tra thiết kế sau tổng hợp
1.1.2.5 CPU RISC 32 bit đơn chu kỳ
RISC(Reduced Instruction Set Computer): bộ lệnh chỉ gồm các lệnh đơn giản
Trang 17Nhiệm vụ cơ bản nhất của CPU là phải thực hiện các lệnh được yêu cầu, gọi làinstruction, Các CPU sẽ sử dụng các tập lệnh (instruction set) khác nhau để có thể giaotiếp với nó.
CPU xử lý lệnh qua 2 bước, gọi là chu kỳ lệnh:
- Nạp lệnh (Fetch): Di chuyển lệnh từ memory vào thanh ghi(register) trong CPU
- Thực thi lệnh (Excute): Giải mã lệnh và thực thi thao tác yêu cầu
Trang 18Hình 1-4: Kiến trúc CPU RISC 32 bit đơn chu kỳ
Ngôn ngữ máy cho phép người lập trình viên trình bày các chu trình đơn giản mà bộ vi
xử lý (CPU) có thể thực hiện được ngay các giới thiệu này được gọi là chỉ thị / lệnh(instruction) hoặc mã máy (machine code):
Trang 19- Mỗi bộ vi xử lý (CPU) có 1 ngôn ngữ riêng, gọi là bộ lệnh (instruction set)
- Trong cùng 1 dòng vi xử lý (processor family) bộ lệnh gần giống nhau
Instruction là dãy bit chứa yêu cầu mà bộ xử lý trong CPU (ALU) phải thực hiện
- Instruction gồm 2 thành phần:
Mã lệnh (opcode): thao tác cần thực hiện
Thông tin về toán hạng (operand): các thành viên bị tác động bởi thao tác chứatrong mã lệnh
xây dựng theo kiến trúc (RISC) với 4 nguyên tắc:
- Càng đơn giản, độ ổn đinh cao
- Càng nhỏ gọn, tốc độ xử lý nhanh
- Tăng tốc xử lý cho những vấn đề thường xuyên xảy ra
- Thiết kế đòi hỏi sự thỏa hiệp tốt
Nguyên tắc lưu dữ liệu trong bộ nhớ
- MIPS thao tác và lưu trữ dữ liệu trong bộ nhớ theo 2 nguyên tắc:
Alignment Restriction: Các đối tượng lưu trong bộ nhớ (từ nhớ) phải bắt đầu tạiđịa chỉ là bội số của kích thước đối tượng Mà mỗi từ nhớ có kích thước là 32 bit =
4 byte = kích thước lưu trữ của 1 thanh ghi trong CPU
Big Endian: MIPS lưu trữ thứ tự các byte trong 1 word trong bộ nhớ theo nguyêntắc Big Endian
Thanh ghi trong CPU
- Thanh ghi lưu trữ
MIPS lấy ra 8 thanh ghi ($16 - $23) dùng để thi hành các phép tính số học, đượcđặt tên tương ứng là $s0 - $s7
- Thanh ghi tạm thời
MIPS lấy ra 8 thanh ghi ($8 - $15) dùng để chứa kết quả trung gian, được đặt têntương ứng là $t0 - $t7
Trang 20Bảng 1-3: Thanh ghi trong CPU RISC
1.1.3 Hướng nghiên cứu
Các tập lênh của CPU RISC
Tìm hiểu đường đi của các lệnh trong cấu trúc RISC
Lưu giá vào trị thanh ghi trong Register File
Tổ chức lại quá trình thực hiện trong bộ vi xử lý hoặc nhằm giảm bớt số lần truy xuất bộnhớ
Các hằng hoàn toàn có thể biểu diễn bằng 13 bit, trong khi đó các CPU được thiết kế theobội số của 8 (thường là 8, trong những bit dư của mã lệnh sẽ làm giảm đi rất nhiều lầntruy xuất bộ nhớ Thay vì phải đọc từ bộ nhớ hay từ thanh ghi các hằng đã ở ngay đó khiCPU cần, vì thế quá trình thực thi sẽ nhanh hơn
1.2 Nguyên lý chung
1.2.1 Nguyên tắc lưu dữ liệu trong bộ nhớ
MIPS lưu dữ liệu trong bộ nhớ theo nguyên tắc Alignment Restriction, nghĩa là các đốitượng lưu trong bộ nhớ phải bắt đầu tại địa chỉ là bội số của kích thước đối tượng
Như vậy, từ nhớ phải bắt đầu tại địa chỉ là bội số của 4
Trang 21Sắp thẳng hàng và không thẳng hàng
Hình 1-5: Nguyên tắc Alignment Restriction
1.2.2 Cú pháp lệnh
opt opr , opr1, opr2
opt (operator): Tên thao tác (toán tử, tác tử)
opr (operand): Thanh ghi (toán hạng đích) chứa kết quả
opr1 (operand 1): Thanh ghi (toán hạng nguồn 1)
opr2 (operand 2): Thanh ghi / hằng số (toán hạng nguồn 2)
Bảng 1-4:Cấu trúc lệnh
Type 31- -0Format (bits)
Trang 22R Opcode (6) Rs (5) Rt (5) Rd (5) Shamt (5) Funct (6)
Trong đó:
Opcode: xác định số học / logic hoạt động sẽ được thực hiện
Rs: Thanh ghi đích mà kết quả sẽ được lưu giữ
Rt: Thanh ghi nguồn có chứa toán hạng thứ nhất
Rd: Thanh ghi nguồn có chứa toán hạng thứ hai
Shamt: Chứa số bit cần dịch trong các lệnh dịch
Funct: chứa số bit của từng loại lệnh khác nhau
CHƯƠNG 2 NỘI DUNG CỦA ĐỀ TÀI2.1 Đường dữ liệu của lệnh add