Dịch thiết kế

Một phần của tài liệu Thiết kế module xử lý trong thiết bị vô tuyến cấu hình mềm dựa trên công nghệ FPGA (Trang 63 - 105)

Đa số các chương trình dịch có tính năng tự động cao, nó chuyển tệp thiết kế sang các dạng tệp khác phục vụ cho phần nạp trình linh kiện, mô phỏng và phân tích thời gian. Ngoài ra nó còn cho một số tệp báo cáo và các tệp tương thích với các hệ chương trình khác. Biên tập là một trong những phần chương trình quan trọng nhất của thiết kế hệ thống.

Chương trình biên tập liên kết các đầu vào của thiết kế và các ứng dụng ngoại vi - phần thiết kế ứng dụng đồ hoạ, dùng ký tự, dạng sóng, thiết

kế biểu tượng và quản lý tài nguyên của linh kiện - với các phần ứng dụng sau khi đã xử lý như bộ phân tích thời gian, bộ mô phỏng và bộ nạp chương trình. Chương trình biên tập cho phép dịch các tệp thiết kế theo các chuẩn khác nhau như VHDL, Verilog, OrCAD Schematic…

Bộ biên tập khi chạy sẽ thực hiện một chuỗi các thao tác để tạo ra các tệp chương trình với sự trợ giáp từ bên ngoài ít nhất, nó cho phép đặt nhiều chế độ dịch cho các thiết kế khác nhau.

Biên tập trước tiên lấy những thông tin định nghĩa cho các sự kết nối trong tệp thiết kế để kiểm tra lỗi của toàn bộ thiết kế. Sau khi tạo được sơ đồ của toàn bộ thiết kế nó liên kết, tổ hợp các tệp thiết kế lại với nhau vào trong một mặt bằng số liệu để xử lý chúng nhanh và hiệu quả.

Nếu một thiết kế không thể gán vào một linh kiện duy nhất thì chương trình biên tập tự động hay tuỳ theo yêu cầu thiết kế mà chia nhỏ thiết kế ra để gán chúng vào các linh kiện của cúng một họ. Ta có thể đặt chế độ để trình biên tập ghi ra các tệp cho các ứng dụng khác, bao gồm cả các tệp netlist cho mô phỏng về thời gian, mô phỏng chức năng, phân tích thời gian, và mô phỏng nhiều dự án…

Sau cùng trình biên dịch tạo ra một hay nhiều tệp phục vụ cho việc nạp trình linh kiện. Ta có thể mở tệp này hay thực hiện các ứng dụng khác nhau sau khi đã dịch thiết kế.

3.3.4 Tải nạp chương trình

Đây là bước tạo ra sản phẩm thiết kế. Tải chương trình có thể coi là tải thông tin xuống dễ thay đổi như SRAM. Thông tin cấu hình của thiết bị được nạp vào trong bộ nhớ của thiết bị. Luồng bit mà nó được truyền đi có chứa tất cả các thông tin định nghĩa logic và các đường nối của thiết kế và thông tin này khác nhau đối với mỗi thiết kế.

Thiết bị SRAM mất đi cấu hình của chúng khi mất nguồn vì vậy các luồng bit cần phải cất giữ ở đâu đó để giải quyết bài toán. Thông thường thông tin cấu hình của thiết bị được lưu trong ROM, đây là thành phần kết hợp với phần cứng mà nó nối từ máy tính tới bo mạch có chứa thiết bị đích.

Nạp chương trình dùng để lập chương trình cho các thiết bị logic có thể lập trình được nhưng không bị thay đổi như PROM. Việc nạp chương trình giống như chức năng tải chương trình, các thông tin về cấu hình vẫn còn sau khi mất nguồn. Các cách nạp chương trình (cấu hình):

1.Cấu hình nối tiếp bị động (Passive Serial Configuration-PS): Trong cấu hình nối tiếp bị động dữ liệu cấu hình được truyền từ một thiết bị nhớ như một thiết bị cấu hình hay một bộ nhớ flash tới FPGA trên chân DATA. Dữ liệu cấu hình được chốt vào trong FPGA trên sườn lên của DCLK. Dữ liệu cấu hình được chuyển một bit trên một chu kỳ đồng hồ.

2.Cấu hình nối tiềp tích cực (Active Serial Configuration_AS): Cấu hình AS có thể được thực hiện bởi việc sử dụng một thiết bị có cấu hình nối tiếp. Dữ liệu cấu hình được truyền tới FPGA trên chân DATA. Dữ liệu cấu hình này được đồng bộ với đầu vào DCLK và được truyền 1 bit trên một chu kỳ đồng hồ.

3. Cấu hình đồng bộ song song bị động (Passive Parallel Synchronous configuration_PPS): Cấu hình đồng bộ song song đồng bộ có thể được thực hiện bởi một thiết bị chủ thông minh, như một vi xử lý. Trong cấu hình PPS, dữ liệu cấu hình được chuyển từ một thiết bị nhớ như bộ nhớ Flash tới FPGA trên những chân DATA[7..0] và được đồng bộ bởi chân đầu vào DCLK trên sườn trước của DCLK, một byte dữ liệu cấu hình được chốt vào trong FPGA. Sườn xuống 8 xung tiếp theo của DCLK để xắp xếp thứ tự dữ liệu trong FPGA.

4. Cấu hình song song bị động nhanh (Fast Passive Parallel configuration _FPP): Cấu hình FPP có thể được thực hiện bằng cách sử dụng một cấu hình Altera được tăng cường hay một thiết bị chủ thông minh như là một bộ vi xử lý. Trong cấu hình FPP, dữ liệu cấu hình được truyền từ một thiết bị nhớ, như là một thiết bị có cấu hình tăng cường hay bộ nhớ Flash tới FPGA trên chân DATA[7..0]. Dữ liệu cấu hình này được chốt vào FPGA trên sườn lên của DCLK và được truyền 1 byte trên một chu kỳ đồng hồ.

5. Cấu hình không đồng bộ song song bị động (Passive Parallel Asynchronous configuration_PPA): Cấu hình PPA có thể được thực hiện bằng cách sử dụng một thiết bị chủ thông minh như một bộ vi xử lý. Trong cấu hình PPA, dữ liệu cấu hình được truyền từ thiết bị nhớ như một thiết bị cấu hình hay bộ nhớ Flash tới FPGA trên những chân DATA[7..0]. Từ sơ đồ cấu hình không đồng bộ, những tín hiệu điều khiển được sử dụng để điều chỉnh chu kỳ cấu hình.

6. Cấu hình không đồng bộ nối tiếp bị động.(Passive Serial Asynchronous configuration_PSA)

Cấu hình PSA có thể được thực hiện bằng cách sử dụng một thiết bị chủ thông minh như một vi xử lý. Trong cấu hình PSA, dữ liệu cấu hình được truyền từ một thiết bị nhớ như là một thiết bị cấu hình hay bộ nhớ Flash tới FPGA trên chân DATA. Từ sơ đồ cấu hình không đồng bộ những tín hiệu điều khiển được sử dụng để điều chỉnh chu kỳ cấu hình.

7. Cấu hình dùng chuẩn JTAG

Cấu hình JTAG được sử dụng những chân giao diện IEEE Std1149.1 JTAG và hỗ trợ chuẩn JAMSTAPL. Cấu hình JTAG có thể được thực hiện bằng cách sử dụng một cáp tải xuống FPGA

CHƯƠNG 4

THIẾT KẾ VI ĐIỀU KHIỂN TRÊN FPGA

Do giới hạn của đồ án nên toàn bộ quá trình thiết kế sẽ không được trình bày đầy đủ mà sẽ chỉ mô tả kiến trúc của lõi vi điều khiển AVR đã thiết kế và các bộ phận ngoại vi được tích hợp ngay trên đó.

4.1 Mô tả mô hình của thiết kế 4.1.1 Đặc điểm mô hình thiết kế

Vi điều khiển AVR là một bộ xử lý RISC (Reduced Instruction Set Computer) với kiến trúc Harvard (đơn vị xử lý trung tâm CPU có bộ nhớ chương trình và bộ nhớ dữ liệu tách biệt). Những đặc điểm chính của họ vi điều khiển AVR:

- Bộ nhớ flash được tích hợp ngay trên chip và có khả năng lập trình ngay trên hệ thống được dùng làm bộ nhớ chương trình (ta không cần bộ nhớ EPROM hay ROM bên ngoài để chứa mã chương trình, bộ nhớ chương trình có thể được nạp chương trình trong khi bộ xử lý vẫn ở nguyên vị trí trên bản mạch).

- Các thanh ghi đa năng (theo truyền thống của các bộ xử lý RISC thực sự) là một tập gồm nhiều thanh ghi, các biến có thể lưu trong CPU chứ không phải lưu trữ bên trong bộ nhớ, vì việc truy nhập lên bộ nhớ thường tốn thời gian hơn và như vậy chương trình sẽ chạy nhanh hơn.

-Bộ nhớ dữ liệu ngay trên chip loại EEPROM và RAM có trong hầu hết các thành viện họ AVR. CPU có kiến trúc Harvard, còn các bộ nhớ EEPROM và RAM được nhìn nhận như là bộ nhớ dữ liệu và được dùng để cất giữ hằng và biến.

thiện tính năng với tốc độ xử lý khoảng 10 lần so với các bộ xử lý thông thường (họ 8051) hoạt động ở cùng tần số xung nhịp.

- Có bộ định thời ngay trên chip và lập trình được với mạch chia tần tách biệt.

- Các nguồn ngắt bên trong và bên ngoài.

- Có bộ định thời watchdog ngay trên chip và lập trình được với bộ dao động độc lập. Bộ phận này được dùng để khôi phục lại trạng thái hoạt động trong trường hợp xảy ra lỗi khi chạy phần mềm.

- Có mạch reset khi cấp lại nguồn.

Một lõi AVR nhúng phải thực hiện được những chức năng của vi điều khiển AVR: từ những bộ điều khiển tiny AVR với 1 KB flash ROM, không có Ram và 8 chân lên tới những bộ điều khiển MegaAVR 128 KB flash ROM, 4 KB RAM, 4 KB EEPOM, 10 bit ADC với 8 kênh, những bộ định thời, bộ so sánh…

Với AVR đa số những lệnh chỉ cần một chu kỳ đồng hồ để thực hiện. Trong những ứng dụng, tỷ số trung bình của những chu kỳ đồng hồ trên một lệnh là 1.2 đến 1.7 phụ thuộc vào ứng dụng nhưng đa số là 1.4. Sự thi hành của AVR có một đường liên kết ngắn với hai giai đoạn (tìm nạp và thực hiện lệnh). Với công nghệ 0.5 µm những lõi này có thể chạy hầu hết ở 16 MHz.

Atmega103 là một bộ điều khiển 8 bit thích hợp với kiến trúc AVR của Atmel. Atmega103 không phải là một bộ điều khiển đặc biệt của họ AVR, nhưng đây là bộ điều khiển khá nổi bật, đủ cấu hình có khả năng mô phỏng cho đa số bộ điều khiển họ AVR. Ở đây ta sẽ ít quan tâm đến thiết bị ngoại vi vì việc thêm thiết bị ngoại vi mới sẽ không khó. Mục đích chính của thiết kế là thu được một bộ điều khiển 100% thích hợp với tập lệnh

AVR và càng mạnh càng tốt.

Atmega103 sẽ là mô hình của thiết kế bằng ngôn ngữ VHDL. Một số tham số cho việc tổng hợp thiết kế lõi AVR:

- 1 lệnh/một chu kỳ đồng hồ cho hầu hết các lệnh.

- Tần số clock: ~50 MHz (gấp 3 lần so với sự thực hiện của Atmel).

4.1.2 Kiến trúc của lõi AVR

Những đặc tính của lõi: - Cơ cấu RISC tải-nạp

- Kiến trúc Harvard với bus chương trình/dữ liệu riêng biệt. Bộ nhớ chương trình được truy nhập với một đường ống đơn. Trong khi một lệnh đang được thực hiện, lệnh tiếp theo được đem về từ bộ nhớ chương trình. Điều này cho phép những lệnh sẽ được thực hiện trong mọi chu kỳ đồng hồ

- Hai mức liên kết: tìm nạp và thực hiện.

- Hầu hết những lệnh chỉ thực hiện trong một chu kỳ đồng hồ. Việc thực thi trong một chu kỳ đơn lẻ đạt được nhờ sử dụng kiểu kiến trúc đường ống hai tầng.

- Chiều rộng từ lệnh biến thiên: 16 hay 32 bit, hầu hết những lệnh rộng 16 bit.

- Tệp thanh ghi (RF) với 32 thanh ghi và những bộ điều khiển ngoại vi được nối trực tiếp với ALU, cho phép hai thanh ghi độc lập được truy nhập trong một lệnh đơn thực hiện trong một chu kỳ đồng hồ.

- Bộ nhớ vào/ra với 64 thanh ghi.

- Tệp thanh ghi con trỏ X, Y, Z 16 bit cho mỗi thanh ghi, dùng để định địa chỉ gián tiếp bộ nhớ dữ liệu và bộ nhớ chương trình (PM).

Những thanh ghi con trỏ có khả năng tăng và giảm.

Tập lệnh

Số học Xử lý bit Chuyển đổi Nhảy Rẽ nhánh Gọi

ADD Rd, Rr ADC Rd, Rr ADIW Rd+1:Rd,K6 SUB Rd, Rr SUBI Rd, K8 SBC Rd, Rr SBCI Rd, K8 SBIW Rd+1:Rd, K6 INC Rd DEC Rd AND Rd, Rr ANDI Rd, K8 OR Rd, Rr ORI Rd, K8 EOR Rd, Rr COM Rd NEG Rd CP Rd, Rr CPC Rd, Rr CPI Rd, K8 SWAP Rd LSR Rd ROR Rd ASR Rd MUL Rd, MULS Rd, Rr MULSU Rd, Rr FMUL Rd, Rr FMULS Rd, Rr FMULSU Rd, Rr BSET s BCLR s SBI A, b CBI A, b BST Rd, b BLD Rd, b NOP BREAK** SLEEP WDR MOV Rd, Rr MOVW Rd+1:Rd, Rr+1: Rr IN Rd, A OUT A, Rr PUSH Rr POP Rr LDI Rd, K8 LDS Rd, K16 LD Rd, X LD Rd, -X LD Rd, X+ LDD Rd, Y+K6 LD Rd, -Y LD Rd, Y+ LDD Rd, Z+K6 LD Rd, -Z LD Rd, Z+ STS K16, Rr ST X, Rr ST -X, Rr ST X+, Rr STD Y+K6, Rr ST -Y, Rr ST Y+, Rr STD Z+K6, Rr ST -Z, Rr ST Z+, Rr LPM LPM Rd, Z LPM Rd, Z+ ELPM ELPM Rd, Z ELPM Rd, Z+ SPM RJMP K12 IJMP EIJMP JMP K22 CPSE Rd, Rr SBRC Rr, b SBRS Rr, b SBIC A, b SBIS A, b BRBC s, K7 BRBS s, K7 RCALL K12 ICALL EICALL CALL K22 RET

Cấu trúc đường ống

Đường ống làm việc theo cách tiếp nhận đồng thời một lệnh mới từ bộ nhớ của chương trình trong khi lệnh trước đó đang được thực thi trong phần khác của bộ xử lý.

Atmega103 có một đường ống với 6 giai đoạn: - Đọc bộ nhớ chương trình.

- Phân tích đầu ra bộ nhớ chương trình và đưa vào trong thanh ghi lệnh.

- Giải mã lệnh và đọc tệp thanh ghi. - Phân tích đầu ra tệp thanh ghi.

- Thực hiện hay truy nhập không gian nhớ chung. - Ghi file thanh ghi.

Mỗi giai đoạn của đường ống có nhiều trạng thái độc lập. Về cơ bản mỗi giai đoạn đường ống nhận những giá trị từ giá trị phía trước trong một luồng shift-like. Chỉ những thanh ghi ‘đầu cuối’ sẽ chứa dữ liệu thực sự được dùng, còn những cái phía trước chỉ dùng để đồng bộ.

Tài nguyên phần cứng

Những đoạn đường ống có thể yêu cầu truy nhập tới các tài nguyên phần cứng. Những tài nguyên phần cứng chính trong lõi:

- Lõi AVR

- Bộ nhớ chương trình và bộ nhớ dữ liệu - UART

- Timer/Counter - PORTA và PORTB

Mỗi yêu cầu có thể nhận được chỉ một tài nguyên tại một thời điểm. Nếu đòi hỏi sự truy nhập song song từ một tài nguyên, bộ phận quản lý truy nhập sẽ xác nhận một lỗi khi mô phỏng và chỉ ra một lỗi thiết kế.

Đường ống được xây dựng để mỗi tài nguyên bình thường được truy nhập trong thời gian một đoạn đường ống cố định.

4.2 Mô tả những tài nguyên phần cứng của thiết kế

Sử dụng sơ đồ cấu trúc Atmega103 ta có thể tạo ra những mô hình VHDL riêng biệt cho những khối mà được nối tới những bus bên trong và sau đó thiết kế khối điều khiển tới xử lý toàn bộ thứ tự sắp xếp liên quan và những cờ điều khiển lần lượt các khối.

Trước khi việc này có thể được bắt đầu, cần xác định tiêu chuẩn cơ bản của những mô hình và đầu tiên là định nghĩa kiểu cơ bản. Trong bất kỳ mô hình số nào nó biết chắc chắn rằng dữ liệu có thể được truyền qua những mô hình tiêu chuẩn và vì thế trong trường hợp này ta sẽ sử dụng thư viện std_logic_1164 làm tiêu chuẩn cho những mô hình số.

Để sử dụng thư viện này, mỗi tín hiệu sẽ được định nghĩa kiểu std_logic cơ bản và thư viện ieee.std_logic_1164.all sẽ được khai báo ở đầu mục trong những mô hình của bộ vi xử lý.

Mỗi khối trong vi xử lý sẽ được định nghĩa như một khối riêng rẽ cho hệ thống xử lý trong VHDL. Để đơn giản hoá VHDL cho những khối riêng lẻ, một tập những chức năng tiêu chuẩn được định nghĩa trong một gói gọi là hàm chức năng được dùng cho những kiểu định nghĩa và những chức năng cho tập mô hình

4.2.1 ALU

Một phần quan trọng của những vi xử lý là ALU (Arithmetic Logic Unit). Khối này trong vi xử lý lấy một số đầu vào từ những thanh ghi và

thực hiện những hàm logic (not, and, or, xor) trên những đầu vào, hay những chức năng số học (cộng, trừ).

Để thiết bị hoạt động như một bộ vi xử lý, ta phải định nghĩa tập lệnh cơ bản. Những tập lệnh ALU, hàm bộ nhớ được thực hiện:

ADD, ADC, ADIW

SUB, SUBI, SBC, SBCI, SBIW INC, DEC

AND, ANDI OR, ORI, EOR

COM, NEG, CP, CPC, CPI, SWAP

Một phần của tài liệu Thiết kế module xử lý trong thiết bị vô tuyến cấu hình mềm dựa trên công nghệ FPGA (Trang 63 - 105)

Tải bản đầy đủ (DOC)

(105 trang)
w