1. Trang chủ
  2. » Luận Văn - Báo Cáo

phát triển phần mềm biên dịch ngôn ngữ phần cứng trong kiểm tra vi mạch

23 554 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 1,26 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

March 14, 2012 Verilog Compiler 1.1 Xây dựng phần mềm biên dịch ngôn ngữ phần cứng Verilog sử dụng trong kiểm chứng vi mạch Hình 1 : Xây dựng trình biên dịch file verilog Ý tưởng thiết

Trang 1

Trường Đại Học Bách Khoa Khoa Điện Tử- Viễn Thông

SHSV: 20073221

3/2012

Trang 2

March 14, 2012 Verilog Compiler

Mục Lục 2

Mục Lục

Mục Lục 2

Lời Mở Đầu 4

1 5

TỔNG QUAN VỀ HỆ THÔNG 5

1.1 Xây dựng phần mềm biên dịch ngôn ngữ phần cứng Verilog sử dụng trong kiểm chứng vi mạch 5

1.1.1 Lý do xây dựng Verilog Compiler? 6

1.1.2 Các khối chính xây dựng chương trình 7

1.2 Ngôn ngữ mô tả phần cứng –HDL (Hardware Design Language) 7

1.2.1 Ngôn ngữ VHDL 7

1.2.2 Ngôn ngữ Verilog 7

1.3 Khái niệm về trình biên dịch 8

1.4 Open Source 9

1.4.1 ODIN-ii 10

1.4.2 FCK Component 10

2 11

PHÂN TÍCH 11

2.1 Các pha trong quá trình thiết kế trình biên dịch 11

2.1.1 Phân tích từ vựng (Lexical Analysis ) 12

2.1.2 Phân tích cú pháp (Syntax Analysis) 13

2.1.3 Phân tích ngữ nghĩa (Semantic Analysis) 13

2.1.4 Sinh mã trung gian (Intermediate Code Generator) 14

2.1.5 Tối ưu mã (Code Optimizer) 14

2.1.6 Sinh mã (Code generation) 14

2.1.7 Bảng quản lý ký tự ( Symbol table manager) 14

Trang 3

March 14, 2012 Verilog Compiler

3

2.1.8 Xử lý lỗi (Error Handing) 15

2.2 Lex Tool 15

2.3 Bison Tool 17

3 19

THIẾT KẾ HỆ THỐNG 19

3.1 VERILOG2AST 19

3.2 AST2NETLIST 21

3.3 AST2FCK 22

3.4 KẾT QUẢ ĐÃ ĐẠT ĐƯỢC 22

Tài Liệu Tham Khảo 23

Trang 4

March 14, 2012 Verilog Compiler

Lời Mở Đầu 4

Lời Mở Đầu

Thiết kế trình biên dịch trong những thập niên 50 của thế kỷ trước được coi là một trong những công việc lập trình khó nhất Bởi việc thiết trình biên dịch đòi hỏi phải hiểu biết về nhiều lĩnh vực : Ngôn ngữ lập trình ,kiến trúc máy tính , lý thuyết ngôn ngữ, các thuật toán và các công nghệ phần mềm Nhưng ngày nay thì số lượng trình biên dịch đã nhiều nến nỗi mà việc thiết kế một trình biên dịch trở nên quá thừa và không cần thiết Thiết kế trình biên dịch đã trở nên dễ dàng hơn Những trình biên dịch - trình biên dịch (compiler-compiler) đã hỗ trợ cho công việc biên dịch ngôn ngữ trở nên dễ dàng và thuận tiện hơn

Thiết kế trình biên dịch một ngôn ngữ phần cứng có thể không phải là một ý tưởng mới Đã có rất nhiều công ty cũng như nhiều lập trình viên đã nghĩ đến Nhưng một trình biên dịch thông minh có thể biên dịch một thiết kế bằng ngôn ngữ mô tả phần cứng đưa vào cấu trúc dữ liệu dùng trong lĩnh vực còn khá mới

mẻ Formal Verification lá một ý tưởng thú vị Một thiết kế ghép nối file thiết kế HDL vào một cấu trúc dữ liệu dùng để kiểm chứng sẽ là một bước tiến trong quá trình kiểm chứng một thiết kế lớn phức tạp Chất xúc tác nhỏ thúc đẩy lĩnh vực Formal Verification còn đang khá lá mới mẻ

Trang 5

March 14, 2012 Verilog Compiler

1.1 Xây dựng phần mềm biên dịch ngôn ngữ phần cứng Verilog sử dụng trong kiểm chứng vi mạch

Hình 1 : Xây dựng trình biên dịch file verilog

Ý tưởng thiết kế ở đây là xây dựng một trình biên dịch ngôn ngữ phần cứng Verilog Trình biên dịch sẽ có khả năng phân tích được cấu trúc dữ liệu của một file định dạng verilog(.v) Biến đổi cấu trúc của nó thành một định dạng khác netlist và có khả năng đưa vào cấu trúc dữ liệu FCK Component FCK Component

sẽ lưu trữ dưới dạng một mạch điện FCK Component còn có khả năng hỗ trợ việc viết một property để có thể dùng trong kiểm chứng vi mạch

Trang 6

March 14, 2012 Verilog Compiler

TỔNG QUAN VỀ HỆ THÔNG 6

1.1.1 Lý do xây dựng Verilog Compiler?

Có rất nhiều hệ thống mã nguồn mở khác cũng đã xây dựng một trình biên dịch ngôn ngữ Verilog hoặc VHDL ODIN-ii là framework như vậy ODIN-ii cho phép các nhà nghiên cứu và thiết kế phần cứng có một môi trường triển khai và tối ưu

hệ thống

Bắt đầu từ thư viện FCK Component có khả năng hỗ trợ mô hình hóa mạch điện dựa trên sự phát triển của Formal Verification Bên cạnh ý tưởng mô hình hóa những cổng logic thành những đối tượng FCK còn hỗ trợ một cách tự động việc phân tích một file cũng như cài đặt thuật toán SAT Solver , OBDD…

FCK Component hoàn toàn được viết dưới dạng các class C++ Đầu vào của FCK vốn là một mạch điện vốn được nhập bằng tay Điều đó có thể thực hiện được với những thiết kế nhỏ ,ít các thành phần Một ý tưởng tự nhiên là thiết kế một phần mềm có khả năng tự động ghép nối một thiết kế phần cứng bằng ngôn ngữ verilog vào cấu trúc dữ liệu mạch điện của FCK đã được hình thành Xem xét những mã nguồn hiện nay thì ODIN-ii giúp biên dịch một thiết kế phần cứng bằng ngôn ngữ verilog Nhưng code Odin-ii hoàn toàn là thuần C , việc ghép nối trở nên khó khăn và thiếu đồng bộ Việc quản lý mã nguồn khó khăn hơn khi mà cần phải thiết kế mở rộng và bố sung nó Đầu ra của Odin-ii còn có định dạng là một file blif Tuy định dạng file blif là một định dạng đơn giản, nhưng Odin-ii đã biên dịch các khối thành mức gate netlist khá nhỏ và chi tiết, khiến cho định dạng blif là một file khá lớn ngay cả với những thiết kế nhỏ Việc giữ lại những khối như bộ MUX,

bộ CỘNG k bít sẽ là một ý tưởng hướng đến trong phần mềm của chúng ta

Trang 7

March 14, 2012 Verilog Compiler

TỔNG QUAN VỀ HỆ THÔNG 7

1.1.2 Các khối chính xây dựng chương trình

 Khối 1: Front-end (Verilog2AST): Biến code Verilog ở đầu vào, xây dựng nên mô hình cấu trúc dữ liệu cây cú pháp AST (Abstract Syntax Tree)

 Khối 2: Backend (AST2FCK): Từ cấu trúc dữ liệu cây cú pháp AST

(Abstract Syntax Tree) xây dựng nên cấu trúc Netlist của mạch

1.2 Ngôn ngữ mô tả phần cứng –HDL (Hardware Design

Language)

Hai ngôn ngữ sử dụng phổ biến việc miêu tả thiết kế một hệ thống phần cứng là Verilog và VHDL Verilog được sử dụng rộng rãi ở Mỹ , còn VHDL lại là chuẩn được sử dụng trong các ngành công nghiệp ở châu Âu

1.2.1 Ngôn ngữ VHDL

Ngôn ngữ VHDL được cung cấp để hổ trợ phát triển các hệ thống phần cứng dựa trên các loại mạch(chip) tích hợp tốc độ cao(VHSIC-Very High Speed Integrated Circuit) Việc sử dụng các loại chíp kiểu này đã thay thế dần các IC logic mà thường được sử dụng trong việc thiết kế mạch số, đem lại nhiều lợi ích và thuần tiện trong việc phát triển các hệ thống số mà phương thức thiết mạch số truyền thống khó hoặc không thể thực hiện được

1.2.2 Ngôn ngữ Verilog

Verilog dễ học và dễ sử dụng hơn VHDL Verilog được chuẩn hoá theo chuẩn IEEE vào năm 1995 và 2001 Verilog rất giống ngôn ngữ C và được giới chuyên môn nghiên cứu, sử dụng nhiều

Trang 8

March 14, 2012 Verilog Compiler

TỔNG QUAN VỀ HỆ THÔNG 8

Verilog HDL có thể được sử dụng để thiết kế hệ thống số ở nhiều mức khác nhau, ví dụ ở mức cao như các mô hình đặc trưng đến các mức thấp như mô hình

bố trí dây, điện trở, transistor trên một mạch tích hợp; mô tả các cổng logic,

flip_flop trong hệ thống số; mô tả thanh ghi và sự di chuyển dữ liệu giữa các thanh ghi (RTL - Register Transfer Level)

Tại sao sử dụng Verilog HDL ?

Verilog cho phép các nhà thiết kế logic thiết kế và mô tả hệ thống số ở nhiều mức độ khác nhau và có sự hỗ trợ từ các công cụ thiết kế bằng máy tính để giúp cho việc xử lý thiết kế ở những mức độ khác nhau

1.3 Khái niệm về trình biên dịch

Trình biên dịch (Compiler) còn gọi là phần mềm biên dịch, là một chương trình máy tính làm công việc dịch một chuỗi các câu lệnh được viết bằng một ngôn ngữ lập trình (gọi là ngôn ngữ nguồn hay mã nguồn-source language ) thành một chương trình tương đương nhưng ở dưới dạng một ngôn ngữ máy tính mới (gọi

là ngôn ngữ đích-target language) và thường là ngôn ngữ ở cấp thấp hơn, như ngôn ngữ máy Chương trình mới được dịch này gọi mã đối tượng

Một phần quan trọng trong quá trình dịch là ghi nhận lại các lỗi có trong chương trình nguồn để thông báo lại cho người viết chương trình

Trang 9

March 14, 2012 Verilog Compiler

Chương trình nguồn khung (Skeletal source program)

Chương trình nguồn (Source program)

Chương trình hợp ngữ đích (Target assembly program)

Chương trình hợp ngữ đích (Target assembly program)

Mã máy tuyệt đối (Absolute machine code)

Thư viện/tập tin đối tượng (Library/object files)

Hình 3 : Ngữ cảnh của trình biên dịch trong hệ thống xử lý ngôn ngữ

1.4 Open Source

Mục này sẽ trình bày các framework đã có sẵn dùng trong kiểm chứng vi mạch

Trang 10

March 14, 2012 Verilog Compiler

TỔNG QUAN VỀ HỆ THÔNG 10

1.4.1 ODIN-ii

ODIN-ii là một framework đã sẵn , sử dụng 2 tools flex và bison, biên dịch một file định dạng verilog , xuất ra dưới dạng netlist và có khả năng map các thành phần vào trong phần cứng FPGA

Chức năng

Odin II sử dụng trực tiếp thư viện VPR → Cho phép mô tả cấu trúc

Có khả năng đọc file Netlist sinh ra sau thiết kế và lưu vào cấu trúc giữ liệu để phân tích

Phần phân tích cú pháp trong Front-end của Odin II được xây dưng bởi các tool Bison và Flex Việc làm này cung cấp thông tin theo thứ tự cấp bậc theo dạng AST (abstract syntax tree) →Tạo ra một Netlist

 AST nhận dạng các cấu trúc theo chức năng

 Thông tin từ AST được dung để kết nối các cấu trúc trong thiết lớn, phức tạp

FCK được viết bởi nhóm nghiên cứu của trường đại học Kaiserslautern , Đức

FCK là một thư viện mã nguồn mở có cấu trúc dữ liệu mô hình hóa mạch điện dựa trên sự phát triển của Formal Verification Bên cạnh ý tưởng mô hình hóa những cổng logic thành những đối tượng FCK còn hỗ trợ một cách tự động việc phân tích một file cũng như cài đặt thuật toán SAT Solver , OBDD…

Trang 11

March 14, 2012 Verilog Compiler

2.1 Các pha trong quá trình thiết kế trình biên dịch

Phần này sẽ trình bày về các pha trong quá trình thiết kế trình biên dịch , có 6 pha

Quá trình biên dịch được chia thành nhiều giai đoạn

Các giai đoạn biên dịch được minh hoạ trong hình vẽ dưới đây

Trang 12

March 14, 2012 Verilog Compiler

PHÂN TÍCH 12

Hình 4 : Các giai đoạn trong quá trình biên dịch

2.1.1 Phân tích từ vựng (Lexical Analysis )

• Giai đoạn phân tích từ vựng sẽ đọc chương trình nguồn từ trái sang phải (linear analysis/scanning) để tách ra thành các mã thông báo (token)

• Nhiệm vụ chính: Đọc từng kí tự vào (input characters) từ chương trình nguồn và nhóm lại thành các token phục vụ cho giai đoạn phân tích cú pháp sau

đó

Trang 13

March 14, 2012 Verilog Compiler

PHÂN TÍCH 13

Hình 5 : Phân tích từ vựng

2.1.2 Phân tích cú pháp (Syntax Analysis)

• Giai đoạn phân tích cú pháp thực hiện công việc nhóm các token của

chương trình nguồn thành các cụm từ văn phạm (grammatical phrase)

• Thông thường các cụm từ văn phạm này được biểu diễn bằng cây phân tích

cú pháp (abstract syntax tree) với :

- Ngôn ngữ được định nghĩa bởi các luật sinh (production)

- Phân tích cú pháp dựa vào luật sinh để xây dựng cây phân tích cú pháp

• Cấu trúc phân cấp của một chương trình thường được diễn tả bởi quy luật

đệ qui

2.1.3 Phân tích ngữ nghĩa (Semantic Analysis)

• Giai đoạn phân tích ngữ nghĩa sẽ thực hiện việc kiểm tra xem chương trình nguồn có chứa lỗi về ngữ nghĩa hay không

• Tập hợp thông tin về các kiểu dữ liệu cho giai đoạn sinh mã về sau

Source

program

Lexical analyzer Get next token

Token

Parser

Symbol table

Trang 14

March 14, 2012 Verilog Compiler

PHÂN TÍCH 14

2.1.4 Sinh mã trung gian (Intermediate Code Generator)

• Sau khi phân tích cấu trúc và ngữ nghĩa, một số trình biên dịch sẽ tạo ra một dạng biểu diễn trung gian của chương trình nguồn

• Mã trung gian có 2 đặc tính quan trọng: Dễ tạo và dễ dàng chuyển đổi thành chương trình đíc

2.1.5 Tối ưu mã (Code Optimizer)

• Giai đoạn tối ưu mã cố gắng tối ưu mã trung gian để thu được mã máy thực hiện nhanh hơn

2.1.6 Sinh mã (Code generation)

• Giai đoạn cuối cùng của biên dịch là sinh mã đích, thường là mã máy hoặc

mã hợp ngữ

• Vị trí các vùng nhớ gán cho các biến được chương trình sử dụng

2.1.7 Bảng quản lý ký tự ( Symbol table manager)

Một nhiệm vụ quan trọng của trình biên dịch là ghi lại các định danh được sử

dụng trong chương trình nguồn và thu thập các thông tin về các thuộc tính khác

nhau của mỗi định danh

• Các thuộc tính cung cấp thông tin về vị trí bộ nhớ được cấp phát cho một định danh, kiểu và phạm vi của định danh

• Nếu định danh là tên của một thủ tục thì thuộc tính là các thông tin về số lượng và kiểu của các đối số, phương pháp truyền đối số và kiểu trả về của thủ tục (nếu có)

Trang 15

March 14, 2012 Verilog Compiler

PHÂN TÍCH 15

2.1.8 Xử lý lỗi (Error Handing)

• Mỗi giai đoạn biên dịch có thể gặp nhiều lỗi, ví dụ:

 Giai đoạn phân tích từ vựng gặp lỗi khi các ký tự không thể ghép thành một token

 Giai đoạn phân tích cú pháp gặp lỗi khi các token không thể kết hợp với nhau theo đúng cấu trúc ngôn ngữ

 Giai đoạn phân tích ngữ nghĩa gặp lỗi khi các toán hạng có kiểu không

đúng yêu cầu của phép toán

Sau khi phát hiện ra lỗi, tùy thuộc vào trình biên dịch mà có các cách xử lý lỗi khác nhau: Quá trình biên dịch có thể dừng lại hoặc tiếp tục

2.2 Lex Tool

Lex Tool là các công cụ có sẵn cho phép xây dựng một bộ phân tích từ vựng dựa trên các biểu thức chính qui Nó bao gồm lex và Flex

Sơ đồ sau chỉ rõ cách tạo một bộ phân tích từ vựng bằng cách sử dụng Lex

Lex là một công cụ để tạo một máy quét Một máy quét sẽ nhận diện các từ hay các mẫu trong một đoạn hay một file văn bản Lex được phát triển bởi M E Lesk

và E Schmidt ở phòng thí nghiệm của hãng truyền thong AT&T Bell Đầu vào của Lex là một file gồm các định nghĩa về các token được sử dụng trong các biểu thức Lex quét qua toàn bộ của văn bản để biên dịch và có thể được liên kết với các module biên dịch khác Khi biên dịch ,Lex tạo ra một file chứa hàm yylex()

Lex source

program lex.l

Lex

Trang 16

March 14, 2012 Verilog Compiler

Hình 1 Cấu trúc của một file Flex

Cấu trúc của một file Flex thường bao gồm 4 thành phần cơ bản như trên

C declarations Bao gồm các khai báo về các biến , hoặc các mảng Các định

nghĩa các hàm sẽ được sử dung để thực hiện các hành động trong phần Flex

grammar rules Đối với những chương trình đơn giản, phần này có thể không cần khai báo gì

Flex Declarations

name definition

Trang 17

March 14, 2012 Verilog Compiler

PHÂN TÍCH 17

Gồm các định nghĩa để làm cho cấu trúc của máy quét đơn giản Ví dụ DIGIT [a-zA-Z]* được hiểu là DIGIT có thể là các ký từ từ a-z hoặc A-Z Ký tự * thể hiện có thể không hoặc nhiều ký tự như vậy Định nghĩa có thể được sử dụng trong phần Flex Grammar rules bằng cách sử dụng

“{name }” ở đây là {DITGIT}

Flex Grammar rules Bao gồm một hoặc nhiều hành động tương ứng với luật

của cú pháp Flex

pattern action

Một action có thể là một hành động rỗng hay nói một cách khác nó không làm

gì cả

Các action được định nghĩa trong phần Additional C code

Additional C code Đoạn mã C sẽ được đưa đến cuối của một chương trình

Một trong những phiên bản mở rộng của Yacc đó là Bison

Bison là một công cụ để phân tích một tệp văn bản Nó phân tích các dữ liệu đầu vào dựa trên những luật được định nghĩa Đầu vào của Bison là một file có định dạng y Bison sẽ biên dịch file định dạng này thành một file chương trình C hoặc C++

Trang 18

March 14, 2012 Verilog Compiler

PHÂN TÍCH 18

Cấu trúc của file đầu vào của bison cũng có 4 thành phần tương tự như flex

C declarations Chứa các hàm , các biến hay các marco sẽ được sử dụng trong

Bison grammar rules

Bison declarations Bao gồm định nghĩa về terminal và non-terminal

Bison grammar rules Bao gồm một hoặc nhiều lời gọi hàm yyparse Hàm yylex sẽ luôn được gọi trong quá trình phân tích file

Hàm yylex ở flex đọc các ký tự dầu vào và sẽ trả về token tương ứng Bison sẽ

sử dụng các token này để phân tích và đưa ra những action tương ứng

Additional C Code Đoạn mã C sẽ được copy xuống cuối của chương trình Hàm yyerror sẽ được gọi khi có lỗi xảy ra trong quá trình phân tích file Dòng đang được phân tích được lưu trong biên yylineno

Để bắt đầu quá trình phân tích file , hàm yyparse cần được gọi Hàm yylex luôn được gọi trong Bison grammar rules Mỗi một quy tắc được thỏa mãn sẽ được trả

về một hành động nằm trong { } Chúng ta có thể thực hiện các hàm C nằm trong các dấu ngoặc nhọn này

Để tạo ra một Bison parser ta sử dụng câu lệnh sau

Ngày đăng: 16/04/2015, 09:39

HÌNH ẢNH LIÊN QUAN

Hình 1 : Xây dựng trình biên dịch file verilog - phát triển phần mềm biên dịch ngôn ngữ phần cứng trong kiểm tra vi mạch
Hình 1 Xây dựng trình biên dịch file verilog (Trang 5)
Hình 2 --  Tổng  quan về trình biên dịch - phát triển phần mềm biên dịch ngôn ngữ phần cứng trong kiểm tra vi mạch
Hình 2 - Tổng quan về trình biên dịch (Trang 9)
Hình 4 :  Các giai đoạn trong quá trình biên dịch - phát triển phần mềm biên dịch ngôn ngữ phần cứng trong kiểm tra vi mạch
Hình 4 Các giai đoạn trong quá trình biên dịch (Trang 12)
Hình 5 : Phân tích từ vựng - phát triển phần mềm biên dịch ngôn ngữ phần cứng trong kiểm tra vi mạch
Hình 5 Phân tích từ vựng (Trang 13)
Hình 5 : Đề xuất thiết kế cấu trúc AST - phát triển phần mềm biên dịch ngôn ngữ phần cứng trong kiểm tra vi mạch
Hình 5 Đề xuất thiết kế cấu trúc AST (Trang 19)
Hình sau là cách thiết kế theo Abstract Factory để parser một file sử dụng hai - phát triển phần mềm biên dịch ngôn ngữ phần cứng trong kiểm tra vi mạch
Hình sau là cách thiết kế theo Abstract Factory để parser một file sử dụng hai (Trang 21)
Hình 9 : Đề xuất thiết kế AST2NETLIST và AST2FCK - phát triển phần mềm biên dịch ngôn ngữ phần cứng trong kiểm tra vi mạch
Hình 9 Đề xuất thiết kế AST2NETLIST và AST2FCK (Trang 22)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w