Mở đầu
Hiện nay Thông tin vô tuyến là một ngành Phát triển rất mạnh mẽ, các công nghệ sử dụng trong thông tin vô tuyến ngày càng được đổi mới nhằm nâng cao tính hiệu quả trong điều chế, giải điều chế và truyền thông tin. Tuy nhiên công nghệ Phát triển càng cao thì lại càng đặt ra những khó khăn trong vấn đề thực nghiệm cho các sinh viên trong các trường Đại học. Các yêu cầu về phần cứng đôi khi lại trở thành những thử thách vô cùng phức tạp trong việc đưa các mô hình thiết kế vào thực tế. Vì vậy FPGA ra đời như một giải pháp cung cấp môi trường làm việc hiệu quả cho các ứng dụng thực tế. Tính linh động cao trong quá trình thiết kế cho phép FPGA giải quyết những bài toán phức tạp mà trước kia chỉ thực hiện nhờ phần mềm máy tính. Ngoài ra, nhờ mật độ cổng logic cao, FPGA được ứng dụng cho những bài toán đòi hỏi khối lượng tính toán lớn và dùng trong các hệ thống làm việc theo thời gian thực.
Trong số các hãng sản xuất FPGA, Xilinx là một trong các hãng đi đầu trong việc sản xuất chip, không chỉ bởi các công cụ hỗ trợ thiết kế hoàn thiện mà còn cho phép người dùng có khả năng can thiệp sâu vào hệ thống, trong đó phải kể tới các chip dòng Virtex-sản phẩm mới nhất của Xilinx trong những năm gần đây. Qua quá trình tìm hiểu, nhóm nghiên cứu đã thực hiện được một số các ứng dụng trên FPGA nhằm hướng tới việc sử dụng FPGA như một công cụ để giải quyết bài toán đo kênh MIMO. Đây là vấn đề thu hút được rất nhiều sự quan tâm của các nhà nghiên cứu trong lĩnh vực truyền thông vô tuyến. Để phục vụ cho mục đich này, trong nội dung bài luận văn dưới đây, em sẽ trình bày về việc sử dụng FPGA để thiết kế mô hình Software Defined Radio cho hệ đo thử kênh MIMO.
MỤC LỤC
Mở đầu
CHƯƠNG 1 TỔNG QUAN VỀ FPGA VÀ Ngôn ngữ VHDL
1.1. Giới thiệu về FPGA 2
1.2. Kiến trúc chung của một FPGA
1.3. Ngôn ngữ phần cứng HDL.
CHƯƠNG 2 CÁC CÔNG CỤ THIẾT KẾ
2.1. Những đặc điểm cơ bản của XtremeDSP Development Kit-IV
2.2. Các phần mềm chuyên dụng
2.3. Quy trình thiết kế tổng quát
CHƯƠNG 3 GIỚI THIỆU MÔ HÌNH SOFTWARE DEFINED RADIO CHO HỆ ĐO THỬ KÊNH MIMO .
3.1. Khái niệm MIMO
3.2. Lịch sử Phát triển hệ MIMO .
3.3. Những ưu điểm của hệ MIMO
3.4. Mô hình Software Defined Radio cho hệ đo thử kênh MIMO .
CHƯƠNG 4 KẾT QUẢ THỰC NGHIỆM
4.1. Cơ sở lý thuyết40
4.2. Mô hình thiết kế
4.3. Kết quả mô phỏng trên MATLAB
4.4. Kết quả thực nghiệm trên FPGA
Kết luận
Tài liệu tham khảo
76 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 5664 | Lượt tải: 3
Bạn đang xem trước 20 trang tài liệu Tổng quan về FPGA, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 24
trong phim. Chúng là loại bộ nhớ hội tụ đủ những yêu cầu của úng dụng của ta .Bởi vì
nó có công suất chứa lớn, tốc độ truyền dữ liệu nhanh và cổng “đọc” và “ghi” riêng.
Hơn nữa chúng được hợp nhất ở mức độ cao, làm đơn giản việc thiết kế bản mạch.
Sau khi nghiên cứu và tìm hiểu các thiết bị có sẵn trên thị trường Việt Nam thì
em chọn bộ nhớ của hãng Averlogic là AL422. Nó là một bộ nhớ hình ảnh và cũng
giống như hầu hết các bộ nhớ hình ảnh khác, nó được thiết kế và chế tạo dựa trên công
nghệ DRAM. Mặc dù bus dữ liệu bên ngoài chỉ rộng 8 Bit, phần lớn bộ nhớ hình ảnh
sử dụng bus bên trong có chiều rộng hơn. ĐIều này làm tăng tốc độ hiệu quả nhờ tính
tương đương. Logic tốc độ cao được dùng để chia tách bus bên trong thành nhiều phần
8 bit,mà sau này nó đó được đặt trên bus dữ liệu đầu ra. Thêm vào đó bộ điều khiển
DRAM và address , nó tạo ra logic được giử trong AL 422.Vị trí dữ liệu được ghi vào
được nhớ vào một thanh ghi địa chỉ. Giá trị của thanh này có thể là lớn lên hoặc về 0
(điểm bắt đầu của bộ nhớ). Tuy nhiên nó ko thể được dịch chuyển tới 1 vị trí ngẫu
nhiên nào đó mà phải được tăng hay giảm một cách tuần tự vì quá trình ghi phải diễn
ra liên tục. Những bộ nhớ hình ảnh chạy giống như những bộ đếm trong mà khi thanh
ghi tiến tới đoạn cuối của bộ nhớ, nó sẽ tự động reset về điểm bắt đầu và lại bắt đầu
ghi đè lên điểm đã có trước đó. Quá trình đọc sử dụng thanh ghi đọc tương tự. Vì thế
những bộ nhớ hình ảnh thường được gọi là First In First Out Buffers (FIFO).
Hình 13: Sơ đồ thực hiện chức năng của AL422
AL422 sử dụng 3 chân để kiểm soát quá trình ghi. WCLK, /WE, và /WRST. Dữ
liệu sẽ được ghi vào bộ nhớ theo sườn xung ghi dữ liệu (WCLK) khi chân write enable
cao (WE), và bộ đếm địa chỉ sẽ tăng dần theo sườn của xung clock. Trong trường hợp
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 25
thanh ghi (hay bộ đếm địa chỉ) ko được gia tăng thì dữ liệu ko được ghi. Để ghi lại dữ
liệu vào bộ nhớ tại điểm đầu tiên cảu thanh ghi địa chỉ có giá trị 0 ta phải đưa chân
write reset (WRST) xuống thấp và xung ghi (WCLK), địa chỉ sẽ được reset về điểm
bắt đầu của bộ nhớ và dữ liệu được ghi vào điểm bắt đầu cùng với các địa chỉ tiếp theo
khi thanh ghi địa chỉ tăng lên..
Quá trình đọc được kiểm soát bởi 4 chân, RCLK, /RE, /RRST và /OE. Dữ liệu
cũng được đọc theo sường xung của xung read clock (RCLK), thanh địa chỉ đọc ra
được gia tăng khi chân read enable (/RE) và chân OE ( output enable) cao,thì dữ liệu
mới được đưa ra. Nếu chân OE mà ở mức thấp thì thanh ghi địa chỉ đọc dừng lại và
dữ liệu không được ra hoặc thanh ghi địa chỉ vẫn tăng thế nhưng dữ liệu vẫn được chốt
tại đó và không được ra. Thanh ghi địa chỉ đọc cũng có thể được reset về điểm bắt đầu
của bộ nhớ bằng cách đăt chân read reset (/RRST) ở mức thấp và xung RCLK. Mặc dù
được điều khiển bằng tay ở bên trong, DRAM refresh thu được từ RCLK or WCLK
(bất cứ cái nào nhanh hơn), vì thế để duy trì tính nguyên vẹn của dữ liệu ít nhất 1 trong
các tín hiệu trên phải được giữ chạy nhanh hơn 1MHz.
3.1.2 Bộ biến đổi tương tự - số ADC
Hình 13: Sơ đồ khối của ADC TDA 8703
ADC được dùng biến đổi dạng sóng tương tự sang dạng xung PAM. Vì bản chất
tự nhiên riêng biệt của tín hiệu số, dạng sóng tương tự sẽ được lượng tử hoá đến mức
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 26
tương đương số gần nhất và chuyển thành tín hiệu số. Sự chuyển ADC càng lớn thì sai
số sự lượng tử hoá được đưa vào càng nhỏ. Ta thấy có rất nhiêu loại ADC trên thị
trường nhưng để thỏa mãn nhưng để đạt được những yêu cầu và lý do dùng FPGA làm
bộ điều khiển cho dao động số có nhớ em tìm hiểu trên thị trường thì em thấy
TDA8703 là phù hợp nhất.Bởi vì nó có tốc độ lấy mẫu rất cao (có thể đạt được tốc độ
tối đa là 140MHz). Tuy nhiên ta cũng có thể thay thế bởi các ADC khác có sẵn trên thị
trường.
Phần lớn ADC tốc độ cao dùng phương thức Flash Conversion, cái này sử dụng
theo các mảng song song của 2n-1 bộ so sánh (n là độ phân giải của ADC trong các
bit). Điều này có nghĩa là cứ mỗi 8bit, máy đổi điện lại yêu cầu 255 bộ so sánh. Mức
độ phức tạp này không chỉ làm tăng chi phí mà còn làm hạn chế tốc độ tối đa mà bộ
biến đổi có thể hoạt động. TDA8703 sử dụng phương thức Flash Conversion truyền
lại, trong ADC này thì bộ biến đổi được chia tách thành 7 cấp với mỗi cấp dùng 1
trình chuyển đổi cực nhanh 2 bit. Chính điều này làm giảm số bộ so sánh được yêu cầu
xuống còn 28 và đây cũng là một ưu điểm của bộ biến đổi ADC nhanh dùng phương
thức biết đổi Flash Conversion. Mặc dù nó đưa ra một góc trễ 7 chu kì đồng hồ giữa
tín hiệu tương tự được đưa vào và dữ liệu xuất hiện trên các đầu ra. Đối với chương
trình ứng dụng này thì điều đó là có thể chấp nhận được.
Hình 15: sơ đồ nối chân của ADC TDA 8703
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 27
3.1.3 Bộ khuếch đại đệm
Khi tín hiệu tương tự được đưa vào mà DSO đang hoạt động ở chế độ xen kẽ
giữa tín hiệu alnalog và logic analyser, thì tín hiệu tương tự được đưa vào 2 ADC
thông qua một bộ khuếch đại đệm. Khi đó bộ trung gian này sẽ vừa có chức năng làm
một bộ khuếch đại tín hiệu vừa có chức năng là môt bộ đệm tín hiệu. Cả 2 chức năng
này có thể đạt được với 1 bộ khuêch đại đệm (ở đây em dùng Elantec EL4332C). Bởi
vì nó thỏa mãn nhưng yêu cầu đặt ra của thiết kế.
Hình 16:Sơ đồ thực hiện nối chân của EL4332
EL4332C có bề rộng băng tần tối đa 300MHz và chứa đựng 3 bộ tiền khuêch đại
nên rất phù hợp với các đầu vào đa thành phần. Điều đó làm nó trở nên rất phù hợp
đối với ứng dụng này vì nó có thể thực hiện cả chuyển mạch đệm và đảo mạch đầu
vào. 1 tín hiệu logic đơn được dùng như đầu vào cho cả 3 bộ tiền khuêch đại. Tuy
nhiên mặt hạn chế của nó là cũng như phần lớn các bộ khuếch đại có độ rộng băng tần
cao khác, hệ số khuếch đại của nó được cố định là 2.
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 28
Hình 17:sơ đồ thực hiện khuếch đại
Hình 18:Sơ đồ khối bên trong của EL4332
3.1.4 Điều khiển logic
Những DSO trước đó có dùng những con chip bán dẫn để thiết kế và làm chúng
để điều khiển thì chỉ dùng các PLA (Programmable Logic Devices). Thế nhưng những
con chip này có độ tích hợp thấp và không thỏa mãn những như cầu sử dụng ngày
càng cần tốc độ cao nên nó dần bị thay thế.
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 29
Để có được tốc độ cao để đáp ứng được các yêu cầu ứng dụng và đo các tần số
cao thì hiện nay người ta thường dùng các chip FPGA để thực hiện. Chúng được dùng
như trái tim của cả hệ thống. Bởi vì chúng có độ tích hợp rất cao như đã trình bày ở
chương 1 nên chúng có thể đảm nhiệm nhiều nhiệm vụ và hơn thế nữa với những tính
năng của nó ta có thể dễ dàng lập trình và cấu hình nó để thực hiện những yêu cầu của
ứng dụng. Chính vì thế chúng ta sẽ giảm được kích thước của mạch bởi tất cả vần đề
điều khiển đều nằm ở con chip FPGA. Để điều khiển các khối khác trong mạch của
DSO thì ta có thể chương trình hóa cho FPGA để nó thực hiện nhiệm vụ này. Cũng bời
do chương trình hóa cho FPGA ngày nay rất dễ dàng với các ngôn ngữ như VHDL hay
verilog HDL cùng với các chương trình của Altera. Hơn nữa ngày nay giá thành của
FPGA ngày càng giảm mạch và có rất sẵn trên thị trường các linh kiện bán ở Việt
Nam.
Dưới đây là các sơ đồ logic của chip FPGA FLEX 8K của Altera
Hình 19: Sơ đồ khổi của FLEX 8K
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 30
Hình 20:Sơ đồ khối logic của FLEX8K
Ta có thể thấy trên hình vẽ thì các chân I/O đều được bố chí xung quanh chip và
chúng được kế nối vào các thanh phần logic và các LUT của chip, chúng hợp thành
các cột các hàng và thông qua các mạng kết nối ben trong chip. Và cũng giống như tất
cả các chip FPGA khác nó cung câp những xung nhịp tần số nhanh ở đầu ra và thời
gian nhanh tại nơi lấy đầu vào. Ở đây mỗi LAB(Logic Array Block) là gồm 8 LE
(logic element ) cung cấp 4 tín hiệu điều khiển và mỗi tín hiệu điều khiển có thể điều
khiển 8 LE. Trong 4 tín hiệu điều khiển của LAB thì trong đó có 2 tín hiệu có thể được
sử dụng giống như các clock và 2 tín hiệu còn lại có thể được sử dụng như tín hiều
reset và enable.Những tín hiều điều khiển có thể lấy từ tín hiệu đầu vào của ta.
Chip FPGA của Altera là EPF8282A-84, là một trong những dòng chip của họ
FLEX 8K. Nó là 1 chip 84 pin PLCC với 68 chân có thể kết nối I/O . Loại này phù
hợp với ứng dụng hơn và có những lợi thế mà con chip có thể được lắp để phát triển dễ
dàng. Do bản chất của FPGA, chúng có thể hoạt động ở tốc độ nào là phụ thuộc vào
việc thiết kế mà chúng thực hiện. Mặc dù chip được chọn là loại có tốc độ chậm nhất
nhưng nó vẫn có khả năng vận hành máy đếm lớn ở mức trên 80MHz. Cũng như tất cả
nguyên lý thiết kế mà FPGA sẽ thực hiện vận hành ở mức 50mHz hay thấp hơn thì nó
là đủ.
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 31
FLEX 8K là thiết bị cung cấp những ứng dụng rộng rãi như xử lý tín hiệu số,
dùng cho những vận hành mà có đường dữ liệu rộng và biến đổi dữ liệu. Trong thiết bị
này có những lựa chọn cho giao diện bus, tích hợp các TTL đặc biệt là điều khiển với
tốc độ cao. Những sản phẩm mà có số chân lớn có thể tích hợp được tới 32 bộ mutiple
trong một thiết bị.
FLEX 8K cung cấp 4 bộ đầu vào chuyên dụng cho việc đồng bộ điều khiển tín
hiệu cùng với trở tải lớn. Mỗi chân I/O có kết hợp một thanh ghi trên mặt ngoài của
thiết bị. Giống như đầu ra thì thanh ghi cũng có những loại có xung đồng hồ nhanh để
đảm bảo việc ra tín hiệu nhanh chóng và chúng có những thiết đặt nhanh vè mặt thời
gian. Hầu hết các FLEX 8k được cấu hình cùng với các kiến trúc CMOS SRAM. Nó
có thể cấu hình lượng dữ liệu được lưu trữ trong chuẩn công nghiệp. Nó có thể cấu
hình việc lưu trữ song song trong hay cấu hình nối tiếp trong các EEPROM hoặc cung
cấp những dữ liệu bằng điều khiển hệ thống. Việc cấu hình này có thể cho phép lưu trữ
dữ liệu nên tới 32K x 8 bit hoặc lớn hơn trong các EPROM. Hơn nữa chúng có thể lấy
từ RAM của hệ thống để cung cấp những dữ liệu cần thiết cho nó hoạt động
Chúng ta có thể dùng các công cụ phần mềm như MAX+PLUS II hay QUATUS
II để cấu hình chúng theo những ứng dụng mong muốn của người dùng. Để cấu hình
chúng thì tất nhiên chúng ta phải biết một trong những ngôn ngũ là VHDL và Verilog
HDL để lập trình mô tả phẩn cứng cần thực hiện.
3.1.5 Giao tiếp với máy tính
Có một số tuỳ chọn cho giao giao tiếp giữa DSO với PC:
Serial Port
Parallel Port
USB
ISA
PCI
Do 1 lượng tương đối lớn dữ liệu được lưu giữ trong DSO, cổng nối tiếp ko được
tính đến bởi thời gian yêu cầu để download dữ liệu vào PC ko thể chấp nhận thời gian
dài do tốc độ truyền dữ liệu của cổng nối tiếp chậm. USB cũng ko thực tế vì tính phức
tạp của nó bởi vì viết chương trình điều khiển cho USB rất phức tạp. Tuy rằng hiện
này tất cả các PC đều có cổng USB thế nhưng để cấu hình được USB trong FPGA rất
khó. Mặc dù nhanh nhưng cả PCI and ISA đều đòi hỏi sự kết nối bên trong tới PC và
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 32
vì thế rất khó để có thể cài đặt và làm cho thiết kế thêm phần phức tạp do phải làm
mạch PCI . Cổng song song được chọn vì nó có tốc độ chuyển đổi dữ liệu tương đối
cao và dễ dàng để phát triển thiết bị, dễ sử dụng và đang hiện diện trong các máy tính
để bàn tuy rằng trong thời gian gần đây có những mày laptop thì không có cổng này
nhưng mà nó vẫn được sử dụng rất rộng rãi do thực hiện đơn giàn, làm cho DSO được
dùng trong nhiều lĩnh vực và cũng có linh cơ đông.Hơn nữa tốc độ truyền của cổng
song song có thể chấp nhận được trong thiết kế của úng dụng này.
Để đơn giản và tương thích với thiết kế và nhu cầu sử dụng thì chế độ hai chiều
chuẩn được quyết định sử dụng, cái này thì có sẵn từ thời những chip 386 và tương
thích với hầu hết các chuẩn có trong máy tính hiện nay. Nó cho phép độ rộng byte
chuyển đến hướng khác và có thêm 5 line đầu vào (Status lines) và 4 line đầu ra
(Control lines). Với các thiết lập chuẩn và tương thích thì DSO cho phép người sử
dụng lựa chọn địa chỉ thích hợp cho cổng song song đặc biệt. Vì chỉ có 3 địa chỉ có thể
được sử dụng nên điều này là tương đối dễ dàng. Điều này đặc biệt có ích nếu PC đang
sử dụng có nhiều cổng.
3.2 THIẾT KẾ CHI TIẾT
3.2.1 Cấu hình để nạp vào FPGA
Vì FPGA dựa trên nền SRAM nên nó không thể lưu chương trình điều khiển có
ngay trong chip bởi khi mất nguồi điện cung cấp cho nó thì chương tình không còn
nữa chính vì thế nó phải được chương trình hoá mỗi lần hệ thống khởi động lại.Để giải
quyết điều này thì phương thức thích hợp nhất cho ứng dụng này là phương thức
Active Serial. Phương thức này bao hàm cả việc kết nối 1 serial EEPROM (E2) tới
FPGA và có thuận lợi là chỉ yêu cầu 1 chân I/O để sử dụng. 2 kết nối còn lại tới E2
được dành cho các chân cấu hình. Hơn nữa các chân cấu hình được nối cao hay thấp là
dùng để chỉ lược đồ cấu hình nào đang được sử dụng. Chính vì thế mà ta có thể giữ
được chương trình điều khiển nếu mất nguồi cung cấp cho DSO, và tiết kiệm số chân
của FPGA và có thể dùng chúng vào các úng dụng khác. Khi khỏi động lại thì chương
trình sẽ được nạp vào chip FPGA thông qua chân JTAG của FPGA và ta lại có một
DSO, thời gian này được tiến hành rất nhanh mà tạo cảm giác như không có gì.
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 33
Bằng cách sử dụng bộ hợp kênh để kết nối E2 tới FPGA và khi đó ta có thể hoặc
có thể được kết nối tới FPGA hoặc tới programming header trên bo mạch. Vì thế có
thể lập trình lại chương trình điều khiển cho FPGA trong khi chương trình cũ vẫn ở
trong bản mạch và DSO vẫn đang hoạt động. Đầu vào được chọn tới bộ hợp kênh
được đẩy mạnh bởi 1K điện trở và được kết nối tới ISP header. Khi ta nạp lại chương
trình vào E2 thì khi đó chân được tự động nối đất trong thời gian nạp lại vào trong E2
và được đẩy vào chip FPGA trong thời gian sau khi khởi động lại. Việc này làm
chuyển E2 từ chỗ được kết nối tới Altera thành được kết nối tới programmer. Sau khi
việc lập trình hoàn tất, người sử dụng chỉ phải nạp lại hay reset lại DSO để nạp lại và
bo mạch là có thể sử dụng lại DSO với những tính năng đã được cập nhật dữ liệu cấu
hình mới từ chip bộ nhớ.
3.2.2 Chế độ tiền trigger
Việc ghi dữ liệu trước điểm trigger rất hữu ích khi chúng ta dò lỗi hệ thống. thực
hiện việc này bằng cách ta để cho DSO ghi những tín hiệu liên tục đi vào, tiến trình
ghi dữ liệu này được kết thúc khi 1 xung (pulse) trigger được dò thấy trong hệ thống.
Nội dung dữ liệu sẽ được ghi vào bộ nhớ tại thời điểm trước của điểm trigger được dò
thấy. Quá trình này được thực hiện bằng cách điểu khiển thời gian của cả hai tiến trình
dò tìm điểm trigger và khi đó sẽ kết thúc việc ghi dữ liệu khi điểm trigger được dò
thấy trong tiến trình.
Việc này được thực hiện cùng với 1 bộ đếm (counter) 19bit đó là một khóa từ tín
hiệu mẫu giống như FIFO, vị vậy khi giá trị của counter bằng độ lớn địa chỉ của bộ
nhớ thì việc ghi được dừng lại.Giá trị của những sườn trước trigger có thể được thiết
đặt bởi pre-loading giá trị counter đó là một giá trị giữa 0 (không tiền trigger) và
393216 (cỡ của bộ nhớ và là lớn nhất của pre-trigger). Số 393216 là 0x60000 trong hệ
HEX, điều đó có nghĩa là số logic duy nhất là 2bit đầu tiên của counter được dùng để
dừng việc ghi.
Dữ liệu được bắt đầu ghi tại bất kì địa chỉ nào của bộ nhớ mà thang ghi địa chỉ
trỏ tới nhưng khi bắt đầu ghi tại điểm này ta phải ghi tuẩn tự kể từ đó. Khi thực hiện
đếm tiếp counter 19bit lần thứ hai .Nó được sử dụng để nhận dạng quá trình tiếp theo
và lại bắt đầu ghi vào bộ nhớ tử địa chỉ ở ô nhớ đầu tiên, dữ liệu sẽ được ghi đè lên
nhưng dữ liệu có trong bộ nhớ trước đó. Bộ counter được reset lại tại cùng một thời
điểm giống như điểm bắt đầu ghi tại FIFO và chạy từ tín hiệu lấy mẫu đầu tiên, vì vậy
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 34
giá trị được lưu trữ nếu counter có giá trị nhỏ hơn không gian của bộ nhớ nếu bằng thì
nó sẽ được reset về điểm bắt đầu và sau đó là bắt đầu điểm ghi lại tại điểm đầu của bộ
nhớ. Trước khi dữ liệu được truyển tới máy tính giá trị của counter được sử dụng để
đọc tuần tự những dữ liệu có trong bộ nhớ như hình 21 phía dưới:
Bộ counter được reset lại khi giá trị đếm của nó là lớn hơn cỡ của bộ nhớ. Bởi vì
counter bao gồm số zero nó sẽ đếm tại 0x60001, theo lí thuyết bộ counter sẽ được
reset về điểm bắt đầu khi nó đếm tới số lớn nhất có thể và được đồng bộ cùng với thời
điểm ghi (đây là hiệu ứng chất dồn). Tất cả quá trình này được thực hiện và xử lú bên
trong một con chip FPGA.
Hình 21: Sự sắp xếp của bộ nhớ
3.2.3 Dò điểm trigger
Trigger unit là đơn vị thực hiện bên trong chip FPGA nó có nhiệm vụ, giám sát
cả hai kênh cho giá trị điểm trigger (giống như hình dưới đây) . Tất cả những số từ
được lưu trữ là lớn hơn, bằng hay nhỏ hơn giá trị của mỗi thanh ghi nó đảm bảo rằng
mỗi thanh ghi không bị tràn khi lưu trữ. Bằng cách thay đổi giá trị của mỗi thanh ghi
được người sử dụng để có thể thay đổi mức của trigger. Dưới đây là bảng chân lí để
thực hiện mỗi trigger unit
Bắt đầu
của bộ
nhớ
Kết thúc Bắt đầu Giữa
Bắt đầu Giữa Kết thúc
Bắt đầu
ghi
Điểm
trigger
Trước khi sắp xếp
Kết thúc
của bộ
nhớ
Sau khi sắp xếp
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 35
Không phải đầu ra từ ADC mà cũng không phải đầu ra từ logic buffer mà nó
được chờ đợi để thay đổi chính xác tại cùng một thời điểm giá trị có thế xuất hiện trên
bus. Ví dụ như việc thay đổi từ 12 tới 10 và giá trị 14 xuất hiện trong bus, giống như
mô tả dưới đây.
Nó có thể xuất hiện khi mất sườn trigger. Giải pháp cho việc này là xung clock
phải đồng bộ dữ liệ vì vậy đầu ra từ trigger unit được chọn là mẫu duy nhất khi dữ liệu
trên bus.Chúng ta thực hiện bằng cách đặt một trigger D ngay tại đầu ra của
mạch trigger để đồng bộ xung nhịp hệ thống này và thu được một tín hiệu ra là đồng
bộ..
Trạng thái cuối cùng trong đơn vị dò điểm trigger chuyển đổi cấp độ trigger dài
hơn bình thường bằng trạng thái đầu tiên trong sườn trigger.Công việc hoàn thành
bằng cách duy nhất là chuyển tiếp 1 nếu đường trigger có giá trị 0, vì vậy mà đầu ra
duy nhất ở mức cao khi trong đó có sự truyền từ thấp tới cao và xuất hiện sườn. Bằng
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 36
cách thiết đặt tại trig-sel bus tới 0x3 được người sử dụng để không cho phép trigger và
bắt đầu quá trình ghi trực tiếp.
3.3.4 Bộ tạo xung
Việc tạo ra xung clock rất hữu ích bởi nó có thế thay đổi tần số lấy mẫu, cho
phép người sử dụng tới việc chuyển đổi độ dài quá trình ghi lại tần số lấy mẫu. Trong
hệ thống chính xung clock cung cấp bởi tần số 50MHz TTL của máy tạo xung, nó
được dùng bằng tinh thể thạch anh. Đó là được cấu hình bên trong chip FPGA nới nó
được chi tần. Ở đây ta có thế chia tần theo bằng cách dung một bộ đếm counter 5bit
khi đó ta sẽ thu được tần số mới có tỉ lệ là là ½,1/4,1/8,1/26,1/32 so với tần số hệ
thống.Chúng ta sử dụng một bộ hợp kênh để chọn tần số thích hợp cho xung clock của
DSO, ta có thể thấy tròng hình.
Để cung cấp cùng tần số lấy mẫu cho hai kênh ta phải cung cấp cho chúng lệch
nhau 1800 để đảm bảo được tín hiệu lấy mẫu tốt, vì vậy ta có thế dùng một mạch “not”
để cung cấp cho một thanh ghi dịch.
Rất nhiều thiết bị trong FPGA và cả hai FIFO’s cần truyền dữ liệu tới PC vì vậy
để thực hiện điều này ta cần sử dụng bus ba trạng thái(tri-state bus), nó được biểu diến
dưới hình sau:
Hình 22: BUS dữ liệu ra
Bởi vì việc điều khiển trong FPGA là định hướng chân trên mọi chip đệm và nó
cũng cho phép đầu ra (/OE) trên FIFO’s, nó hoạt động giống như một bước đệm trung
gian kết nối giữa chúng để tránh xung đột dữ liệu khi cả hai cùng xuất dữ liệu ra bởi vì
bus chỉ cho một dữ liệu ra trong cùng một thời điểm các đầu ra còn lại đều được để ở
mức trở kháng cao. Chúng ta dùng buffer chuẩn là 74LS245, bởi vì điện dung kí sinh
Cổng song
song
Bộ đệm
FPGA FIFO A FIFO B
Bus ba trạng thái
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 37
của nó thấp hơn cổng song song mà ở đây chúng ta dùng cổng song song để giao tiếp
với máy tính. Giống như là chip đệm các chân của nó cũng có thể thay đổi dễ dàng nếu
nó bị hư.
Bus ba trạng thái giữa ADCs và đệm logic thì được kết nối cũng có những tính
chất điều khiển như bus của cổng song song, trong đầu ra một ADC và đệm logic tới
một bus mà cả hai FPGA và FIFO cùng kiểm soát.
Hình 23: Sơ đồ logic của 74LS245
3.3.6 Giao diện logic cổng song song
Điều khiển logic phụ thuộc vào rất nhiều yếu tố như các đường điểu khiển để
thiết đặt hệ số chia tần, điểm trigger….trong đó được tạo ra bằng giao diện logic cổng
song song. 4bit đầu tiên của bus điều khiển cổng song song được sử dụng giống như
bus dữ liệu. Dữ liệu trên bus được chốt lại trong thanh điều khiển bằng các xung còn
lại của đường điều khiển, để chặn lại những tín hiệu không bình thường trên cổng song
song xuất hiện bên trong DSO. Đầu ra của con chốt này được cấu hình vào lối vào của
một bộ giải mã tới việc tăng lên số đường có thể. Một vài đường này là được sử dụng
để chốt dữ liệu từ bus dữ liệu chính của cổng song song bên trong một thanh ghi 4
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 38
hoặc 8 bit. Nó cung cấp tất cả đường điều khiển có thể có. Những đường điều khiển
còn lại của bộ mã hóa được sử dụng cho xung đọc FIFO (RCLK) và cho phép đầu ra
trên bus từ FPGA.
3.3.7 Điều khiển ADC
Khi DSO là có một kênh thì cả hai chế độ đầu ra là là tín hiệu xung PAM giống
như tín hiệu số và tín hiệu đầu vào là tín hiệu tương tự được xen kẽ nhau. Bất kì sự
khác nhau nào của tín hiệu đầu ra cũng gây ra nhiễu, giống như sự xen kẽ của mẫu tín
hiệu sẽ có sự khác nhau tại giá trị hiện thời nếu có nội dung của tín hiêu tương tự đầu
vào. Sự chuyển đổi tín hiệu tương tự thành tín hiệu số phụ thuộc vào 2 giá trị tham
chiếu của điện áp (1 cho biên độ và 1 cho thế offset). Nó được quyết định sử dụng tín
hiệu tham chiếu bên ngoài như là xây dựng một cái ADC, nó nghĩa là theo lí thuyết thì
nó nghĩa là sự cấu hình để chuyển đổi cả hai yếu tố của điện thế, ở đây cao nghĩa là
chúng ta có thế lấy ngay tín hiệu bên ngoài là câc đường logic để đưa ra công song
song, nó thường có nhiễu là nhỏ nhất.
Mặc dù có thể tìm thấy sự khác biệt về biên độ cung với sự khác biệt về đầu ra và
băng thông đủ lớn. Vì lí do này nó được quyết định để sử dụng một kết thúc khi điện
áp là 2.5V thì cấu hình trong ADC thì đầu vào có thế thay đổi 0.5V nơi mà VDC là độ
dốc của dòng một chiều. Để điều khiển của đầu vào của ADC thì phải tuân theo các
công thức sau:
0.5<Vin<4.5
Theo lí thuyết thì VDC phải như sau:
1 < VDC < 4
Trong DSO thì VDC được cung cấp bời nguồn tạo điện áp thứ hai và có một giá
trị là 1.25V, nó đưa ra như sau:
0.75<Vin<1.75
Bộ khuêch đại được cấu hình lại cho 2 giá trị điện áp là:
0.375<Vinput<0.875
Bằng việc chọn kiều của định dạng dữ liệu (DFS) của chân ADC hoạt động ở
mức cao hoặc thấp dữ liệu có thế tuôn ra giống như những số offset nhị phân hoặc là
số bù 2. Thiết đặt định dạng đầu vào tới offset để giảm nó xuống là rất phức tạp của
trigger logic và theo lí thuyết là số ô logic được sử dụng vào việc đồng bộ.
-----------------
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 39
Chương 4
CHƯƠNG TRÌNH VÀ MÔ PHỎNG TRÊN KIT DE2
4.1 TỔNG QUAN VỀ KIT DE2 VÀ CHIP CYCLONE II
Bởi vì thời gian thực hiện để tài ngắn nên em không làm ra được mạch em chỉ
mô phỏng trên Kit phát triển DE2 của Altera với họ FPGA của hãng này là Cyclon II
với chip là EP2C35F672C6. Với dòng chip này thì tài nguyên của nó lớn hơn rất nhiều
so với FLEX 8K của hãng.
Hình 24: Sơ đồ khối ghép nối giữa Cyclone II với các thành phần trên KIT
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 40
Hình 25:sơ đồ các thành phần trên kit DE2
Hình 26:Sơ đồ khối của Cyclone II
Chíp Cyclone II còn có tài nguyên rất phong phú trong đó:
Có 33.216 LE: thành phần nhỏ nhất trong chip là thành phần logic
(logic element). Mỗi LE (Logic Element) có thể được cấu hình thành một
Fip-Flop D,T,JK hay RS. Mỗi một thành phần này cũng có các đầu và là
data, clock, enable,clear và đầu ra cũng là data. Chúng cung có thể cấu
hình thành các thành phần cơ bản khác trong mỗi ứng dụng. chúng cũng
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 41
có thể cấu hình thanh các LUT (Loop Up Table). Để sử dụng cấu hình các
LE thành các thanh ghi hay là thành các LUT là tuỳ thuộc vào người sử
dụng lập trình trên các phần mềm như QUATUS II. Khi lập trình xong và
download vào chip thì chương trình của mình sẽ tự động tạo ra nhứng
thanh ghi hay những LUT tuỳ thuộc vào chưong trình của mình.
Hình dưới mô tả quá trình cấu hình các LE thành các ứng dụng của mình
như mong muốn khi lập trình các ứng dụng của mình và download vào
bên trong chip Cyclone II thì chương trình bên trong sẽ tự động dồn các
thành phần logic của ta vào chung một khu vực để giảm bớt tài nguyên.
Tuy nhiên để đảm bảo việc sử dụng tài nguyên một cách hiệu quả còn phải
phụ thuộc nhiều và kĩ năng lập trình và thiết kế của người kĩ sư.
Hình 27:Sơ đồ khối của LAB
Có 105 khối M4K RAM: các khối M4K nội dung được chứa trong các
cột của M4K cảu các khởi bộ nhớ, Mỗi khối này thì bao gồm các đầu vào
là các thanh ghi được được ghi đồng bộ và đầu ra là các được thiết kế theo
chế độ đường ống. Các đầu ra các thanh ghi có thể được đẩy qua nhưng
các đầu vào thì không thể làm thế được. Từ các thành phần này ta có thể
có các bô nhớ là dual-port hay là sinple-port. Các bộ nhớ ở đây ta có thể
dùng như RAM hay ROM hay các bộ đệm FIFO. M4K có thể hỗ trợ cho:
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 42
4,608 bit RAM.
Có thể thực hiện ở tần số 250MHz.
hỗ trợ cho cả bộ nhớ đơn cổng hay hai cổng riêng biệt.
có thể cấu hình thành các thanh ghi dịch, các bộ đệm FIFO.
có thể cấu hình thành các ROM….
Hình 28:Sơ đồ khối của M2K RAM
Có tổng cộng 483,840 bits RAM.
4 PLLs (vòng khóa pha).
Có 475 chân I/O để sử dụng: tất cả các chân I/O đều được gắn cùng
nhau trên các banks I/O. Trong Cyclone II thì có tất cả 4 banks I/O.
Trong đó thì bank 2 và banks 4 có thể hỗ trợ cho các kết nối với DDR2
và có thể up tới 167MHz/333Mbps và QDR có thể úp lên tới
167MHz/668 Mbps. Còn các bank 1 và 3 thì chỉ hỗ trợ duy nhất cho các
giao diện của SDR và DDR SDRAM. tất cả các bank của Cyclone II có
thể hỗ trợ cho các bộ nhớ SDR có thể úo lên hoạt động ở
167MHZ/167Mbps và bộ nhớ DDR và có thể hoạt động ở
167MHz/333Mpbs.
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 43
Hình 29:Sơ đồ bố chí các thanh chân trên Cyclone II
Nó được đóng gói với 672 chân.
Chương trình có thể được nạp trực tiếp từ phần mềm QUATUS II xuống chíp qua
một cáp USB.
Ngoài ra trong KIT này còn có rất nhiều tài nguyên nữa như:
Có 512 KB SRAM trong đó có 256 KB địa chỉ và có thể chứa dữ liệu
với độ dài 16 bit.
Có 8MB bộ nhớ SDRAM trong đó trong đó có thể có tới 1 MB địa chỉ
và có thể chứa dữ liệu lên tới 16 bít và có 4 banks tất cả.
Có 8MB bộ nhớ Flash và có thể chứa dữ liệu có độ rộng bít tối đa là
8bits
Nói chung trên KIT này để thực hành nghiên cứu và phát tiển thì rất hứu ích.
Bởi vì phải mô phỏng và làm thử nghiệm trên kít này và tài nguyên của con
Cyclone II rất nhiều lên lên em dùng cả RAM trong chip bằng cách cấu hình bên tròn
nhờ các tool hỗ trợ, em cũng thử nghiệm các đường bằng cách làm một sóng SINE giả
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 44
lập số với các mẫu là 8 bít. Coi như đây là các xung PAM đã được lấy mẫu qua ADC
và được kết nối tới các thành phần khác trong thiết kế.
4.2 CHƯƠNG TRÌNH VÀ MÔ PHỎNG
4.2.1. Chương trình chính điểu khiển DSO
Hình 30: Sơ đồ khổi điều khiển của DSO
Hình trên này là sơ đồ khối tổng quát của bộ điều khiển của DSO được tạo ra từ
phần mềm Quatus II sau khi chạy chương trình được viết thì nó tạo ra. Phần code của
chương trình này được đặt ở phần phụ lục bên dưới.
Trong hình này được chia thành các khối chính là :khối điều khiển logic cổng
song, khối điều khiển FIFO, khối tạo xung để chia tần, khối điều khiển dò điểm trigo.
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 45
Hình 31: Dạng mô phỏng của khối chương trình của DSO\
Hình trên là sơ đồ mô phỏng dạng xung khi thực hiện chạy mô phỏng trên phần
mềm Quatus II dựa trên device là chip Cyclone II.
Trong đó các tín hiện clk là tín hiệu clock đưa vào bộ chia tần, control là tín hiệu
đầu vào được dùng để điều khiển logic cổng song song, EXT_TRG là tín hiệu đưa vào
để điều khiển đồng bộ, các tín hiệu LOGIC_INPUTH, LOGIC_INPUTL là các đường
vào của đường logic đệm. Các tín hiệu ra còn lại là các tín hiệu điều khiển việc chọn
kênh.
Hình 32: Tài nguyên mà khối điều khiển dùng
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 46
Hình 33: Tần số cao nhất mà khối này việc được
Hình 32, 33 là hình mô tả các nguồi tài nguyên mà chương trình này sử dụng để
thực hiện các chức năng, trong đó ta có thể nhìn thấy tại hình 32 thì chương trình này
dùng hết tất cả là 128 LE, 24 thanh ghi và có đầu ra là 49 chân. Tại hình 33 thì chương
trình này chỉ có thể hoạt động cao nhất là ở tần số 33.92 MHz.
4.2.2 Chương trình điểu khiển logic cổng song song
Hình 34: Sơ đồ khối điều khiển cổng song song
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 47
Hình 35: Sơ đồ dạng xung của khổi cổng song song
Hai hình 34, 35 lần lượt là sơ đồ khối và mô tả dạng xung của chương trình điều
khiển cổng song song được tạo ra khi chạy chương trình trên phần mềm Quatus II.
Từ hình 34 ta có thể thấy là trong này có các khối lần lượt là: Bộ giải mã, các bộ
chốt, bộ hợp kênh đầu vào, và các thanh chốt dữ liệu đầu ra. Đặc biệt trong này có một
bộ bus ba trạng thái dùng để điều khiển đầu vào lấy từ đường logic hoặc là lấy từ bộ
nhớ sau khi đã được đi qua một con ADC.
4.2.3 Chương trình điểu khiển FIFO
Hình 36: Sơ đồ khối điều khiển FIFO
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 48
Hình này là mô hình tổng quát của khối điều khiển FIFO nó được tạo ra từ phần
mềm Quatus II sau khi chạy chương trình. Code của phần này được trình bày trên phần
phụ lục phía cuối khóa luận. Trong đó có các khối là một bộ đếm counter để đếm
đường địa chỉ để xác định bộ nhớ có đầy hay không để đưa ra quyết định có tiếp tục
ghi tiếp vào bộ nhớ hay không, và có thể điều khiển cho phép đọc dữ liệ bộ nhơ ra,
trong phần thực hiện này ta còn điều khiể tốc độ đọc và ghi vào bộ nhớ. Tiếp theo là
một bộ triger counter nó dùng để đếm điểm trigger khi đi qua để xác đinh xem có thể
ghi tiếp dữ liệu hay là để cho dữ liệu được lấy luôn từ phần logic để đưa tới cổng song
song.
Hình 37: Dạng xung của khổi điều khiền FIFO
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 49
Hình 38: Tần số đáp ứng của control FIFO
Hai hình 37, 38 là mô tả những tài nguyên mà nguyên phần này đã sử dụng. Hình
38 mô tả là phần này thì làm việc được ở tần số cao nhất có thể là 46.93MHz.
4.2.4 Chương trình tạo dạng xung chia theo tỉ lệ 1/2, 1/4, 1/8, 1/16, 1/32
Hình 39: Sơ đồ khối bộ chia tần
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 50
Hình 40: Dạng xung mô tả của bộ chia tần
Hình 39 và 40 là sơ đồ khối và dạng xung của khối chi tần. Khối này có nhiệm
vụ tao ra tần số lấy mẫy thích hợp cho cả khối điều khiển của DSO. Theo thiết kế thì
trong phần này có thể thực hiện một phép chia tần thành ½, ¼, 1/8, 1/16, 1/32 lần tần
số hệ thống đưa vào bằng một bộ đệm counter 5 bit.
Dạng xung mô tả phần này được mô tả trong phần hình 40 sau khi đi qua một bộ
hợp kênh và đầu ra là tần số đã chia, bộ hợp kênh này có chần sel 3bit để chọn đầu ra
trong đó khi sel là 000 thì chọn không chia, 001 thì chia ½, 010 chia ¼, 011 chia 1/8,
100 chia 1/16, 101 chia 1/32.
4.2.4 Chương trình dò điểm trigger
Hình 41: Sơ đồ khổi của bộ dò điềm trigger
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 51
Hình 42: Mô phỏng dạng xung của dò điểm trigger
Hai hình 41 và 42 là sơ đồ khối và dạng xung mô phỏng được tạo ra khi chạy
chương trình trên phần mềm Quatus II.
Hình 41 là sơ đồ khối điều khiển khối tìm điểm trigger. Phần này có nhiệm vụ dò
tìm điểm trigger để đồng bộ cho khối điều khiển của mình.
Hình 42 là dạng xung mô tả của chương trình này trong đó đầu ra của nó là
triger_out.
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 52
Kết luận
Với kết quả này, em đã bước đầu xây dựng một bộ điều khiển sử dụng trong máy
dao động số có nhớ dựa trên công nghệ FPGA. Đặc biệt qua quá trình nghiên cứu và
thực hiện đề tài em đã tích luỹ được nhiều kiến thức bổ ích:
Bước đầu nắm được kiến thức cơ bản về FPGA và ngôn ngữ mô tả phần
cứng VHDL.
Hiểu được nguyên tắc hoạt động và cấu tạo của một máy dao động số có
nhớ được xây dựng từ các mạch tương tự và các mạch số.
Nắm được cách sử dụng và lập trình bằng phần mềm QUATUS II, và hiểu
cách nạp và chạy môt chương trình trên kit phát triển DE2.
Hiểu được tư tưởng của luồng thiết kế trên công nghệ FPGA.
Xây dựng cho bản thân mình tính kỉ luật và cách học tập nghiên cứu khoa
học, cách tư duy hệ thống khi thực hiện một đề tài.
Những điều còn hạn chế và hướng phát triển của đề tài.
Do thời gian thực hiện đề tài có hạn nên em mới chỉ làm được bộ điều khiển
là một khối trong máy hiện sóng.
Chương trình mới chỉ được mô phỏng trên phần mềm Quatus II chứ chưa
được làm thực tế nên vẫn còn nhiều hạn chế.
Trong thời gian tới sau khi tốt nghiệp em sẽ tiếp tục hoàn thiện đề tài của
mình để có được một sản phẩm của mình được thiết kế trên FPGA.
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 53
PHỤ LỤC
-----Chương trình chính điều khiển DSO
library ieee;
use ieee.std_logic_1164.all;
entity main is
port(
clk :IN STD_LOGIC;
CONTROL :IN STD_LOGIC_vECTOR(3 DOWNTO 0);
LOGIC_INPUTL :IN STD_LOGIC_VECTOR(7 DOWNTO 0);
LOGIC_INPUTH :IN STD_LOGIC_vECTOR(7 DOWNTO 0);
EXT_TRIG :IN STD_LOGIC;
STATUE :OUT STD_LOGIC_VECTOR(4 DOWNTO 0);
FIFO_A_W_CLK :OUT STD_LOGIC;
FIFO_B_W_CLK :OUT STD_LOGIC;
FIFO_W_EN :OUT STD_LOGIC;
FIFO_W_RST :OUT STD_LOGIC;
FIFO_A_OE :OUT STD_LOGIC;
FIFO_B_OE :OUT STD_LOGIC;
FIFO_R_CLK :OUT STD_LOGIC;
FIFO_R_RST :OUT STD_LOGIC;
BUF_DIr :OUT STD_LOGIC;
AB_CHANEL_MEGA :OUT STD_LOGIC;
LOGIC_BUT_H_OE :OUT STD_LOGIC;
ADC_B_OE :OUT STD_LOGIC;
LOGIC_BUT_L_OE :OUT STD_LOGIC;
ADC_A_OE :OUT STD_LOGIC;
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 54
DATA :INOUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END;
ARCHITECTURE CHON OF MAIN IS
signal poit1 :std_logic_vector(18 downto 0);
signal dataout :std_logic_vector(7 downto 0);
signal pre_trig_load,clkdiv:std_logic_vector(2downto 0);
signal trig_sel,trig_load:std_logic_vector(1downto 0);
signa:buf_dir1,fifo_r_clk1,rec_en1,init1,fifo_r_rst1,fifo
_a_oe1,fifo_b_oe1,high_speed1,fifo_a_logic1,trig_falling1,fifo
_b_logic1 :std_logic;
signal triggerout1,clkout,mem_full2,fifo_w_en2,
fifo_w_rst2,fifo_w_clk2 : std_logic;
component giaotiep
port (
dieukhien :in std_logic_vector(3 downto 0);
poit :in std_logic_vector(18downto 0);
data :out std_logic_vector(7 downto 0);
data_output :out std_logic_Vector(7 downto 0);
pre_trig_load :out std_logic_vector(2 downto 0);
trig_sel :out std_logic_vector(1 downto 0);
trig_load :out std_logic_vector(1 downto 0);
clkdiv :out std_logic_vector(2 downto 0);
buf_dir :out std_logic;
fifo_r_clk :out std_logic;
rec_en :out std_logic;
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 55
init :out std_logic;
fifo_r_rst :out std_logic;
fifo_a_oe :out std_logic;
fifo_b_oe :out std_logic;
high_speed :out std_logic;
fifo_a_logic :out std_logic;
trig_falling :out std_logic;
fifo_b_logic :out std_logic
);
End component
COMPONENT coltron_fifo
port(
trig :in std_logic_vector(7 downto 0);
trig_load :in std_logic_vector(2downto 0);
trigger :in std_logic;
rec_en :in std_logic;
init :in std_logic;
clk :in std_logic;
mem_full :out std_logic;
fifo_w_en :out std_logic;
fifo_w_rst :out std_logic;
fifo_w_clk :out std_logic;
poit :out std_logic_vector(18 downto 0)
);
END COMPONENT;
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 56
----------
COMPONENT trigger_unit
port (
trig_load :in std_logic_vector(1 downto 0);
trig_value :in std_logic_vector(7 downto 0);
logic_inputL:in std_logic_vector(7 downto 0);
logic_inputH:in std_logic_vector(7downto 0);
trig_falling :in std_logic;
fifo_a_logic :in std_logic;
fifo_b_logic :in std_logic;
high_speed :in std_logic;
ext_trigger :in std_logic;
clk :in std_logic;
rec_en :in std_logic;
trig_sel :in std_logic_vector(1downto 0);
trigger_output :out std_logic
);
END COMPONENT;
--------
COMPONENT xungnhip
port (
CLOCK_50,clear :in std_logic;
sel :in std_logic_vector(2downto 0);
clk :out std_logic
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 57
);
END COMPONENT;
---------
begin
t1:giaotiep port map (control(3downto0),
poit1(18 downto 0),
DATA(7 downto 0),dataout(7 downto 0),
pre_trig_load(2 downto 0),
trig_sel(1 downto 0),
trig_load(1 downto 0),clkdiv(2 downto 0),
buf_dir1,fifo_r_clk1,rec_en1,init1,fifo_r_rst1,
fifo_a_oe1,fifo_b_oe1,high_speed1,fifo_a_logic1,
trig_falling1,fifo_b_logic1);
----------------
FIFO_A_OE<=fifo_a_oe1;
FIFO_B_OE<=fifo_b_oe1;
FIFO_R_CLK<=fifo_r_clk1;
FIFO_R_RST<=fifo_r_rst1;
LOGIC_BUT_H_OE<=not fifo_b_logic1;
ADC_B_OE<=fifo_b_logic1;
LOGIC_BUT_L_OE<=not fifo_a_logic1;
ADC_A_OE<=fifo_a_logic1;
----------------
t2:coltron_fifo port map(dataout(7 downto 0),
pre_trig_load(2 downto 0),triggerout1,
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 58
rec_en1,init1,clkout,mem_full2,
fifo_w_en2,fifo_w_rst2,fifo_w_clk2,
poit1(18downto 0));
---------------------------------
FIFO_A_W_CLK<=not fifo_w_clk2;
FIFO_B_W_CLK<= fifo_w_clk2 xor high_speed1;
AB_CHANEL_MEGA<=high_speed1;
STATUE(4 downto 0)<=mem_full2 & buf_dir1 & "000";
BUF_DIr<=buf_dir1;
FIFO_W_EN<=fifo_w_en2;
FIFO_W_RST<=fifo_w_rst2;
-----------------------
t3:trigger_unit port map(trig_load(1 downto 0),
dataout(7 downto 0),LOGIC_INPUTL(7 downto 0),
LOGIC_INPUTH(7 downto 0),trig_falling1,
fifo_a_logic1,fifo_b_logic1,high_speed1,
EXT_TRIG,clkout,
rec_en1,trig_sel(1 downto 0),triggerout1);
t4:xungnhip port map(clk,'1',clkdiv(2 downto 0),clkout);
end chon;
---------Chương trình điều khiển logic công song song
library ieee;
use ieee.std_logic_1164.all;
entity giaotiep is
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 59
port (
dieukhien :in std_logic_vector(3 downto 0);
poit :in std_logic_vector(18downto 0);
data :out std_logic_vector(7 downto 0);
data_output :out std_logic_Vector(7 downto 0);
pre_trig_load :out std_logic_vector(2 downto 0);
trig_sel :out std_logic_vector(1 downto 0);
trig_load :out std_logic_vector(1 downto 0);
clkdiv :out std_logic_vector(2 downto 0);
buf_dir :out std_logic;
fifo_r_clk :out std_logic;
rec_en :out std_logic;
init :out std_logic;
fifo_r_rst :out std_logic;
fifo_a_oe :out std_logic;
fifo_b_oe :out std_logic;
high_speed :out std_logic;
fifo_a_logic :out std_logic;
trig_falling :out std_logic;
fifo_b_logic :out std_logic
);
end ;
architecture chon of giaotiep is
signal
outmux,outtribus,q1,q2,q3,q4:std_logic_vector(7downto 0);
signal t1:std_logic_vector(1 downto 0);
signal a1,a2,a3,a4,a5,a6,a7:std_logic;
signal out1:std_logic_vector(2 downto 0);
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 60
--------------
component hopkenh
port(
a,b,c :in std_logic_vector(7 downto 0);
sel :in std_logic_vector(1 downto 0);
q :out std_logic_vector(7 downto 0)
);
end component;
-----------
component giaima
PORT
(
data : IN STD_LOGIC_VECTOR (2 DOWNTO 0);
eq1 : OUT STD_LOGIC ;
eq2 : OUT STD_LOGIC ;
eq3 : OUT STD_LOGIC ;
eq4 : OUT STD_LOGIC ;
eq5 : OUT STD_LOGIC ;
eq6 : OUT STD_LOGIC ;
eq7 : OUT STD_LOGIC
);
end component;
-----------
component reg3
port ( en :in std_logic;
a :IN std_logic_vector(2 downto 0);
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 61
q :out std_logic_vector(2 downto 0)
);
end component;
----------
component reg
port ( en :in std_logic;
a :in std_logic_vector(7 downto 0);
q :out std_logic_vector(7 downto 0)
);
end component;
------------------
component tri3
port (
a :in std_logic_vector(7 downto 0);
en :in std_logic;
q :inout std_logic_vector(7downto 0)
);
end component;
----------
begin
mux1: hopkenh port map("00000"&poit(18 downto 16),
poit(15 downto 8),poit(7 downto 0),t1,
outmux(7 downto 0));
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 62
chot1: reg3 port map(dieukhien(0),
dieukhien(3 downto 1),out1(2 downto 0));
gm: giaima port map(out1(2 downto 0),a7,a6,a5,a4,a3,a2,a1);
busstate:tri3 port map(outmux(7 downto 0),a1,
outtribus(7 downto 0));
chot2:reg port map(a2,outtribus(7 downto 0),
data_output(7 downto 0));
--data_output(7 downto 0)<=q4(7 downto 0);
chot31:reg port map(a3,outtribus(7 downto 0),q1(7 downto 0));
----
pre_trig_load(2 downto 0)<=q1(2 downto 0);
rec_en<=q1(3);
init<=q1(4);
fifo_r_rst<=q1(5);
fifo_a_oe<=q1(6) nand(q1(7) and(a6 or a7));
fifo_b_oe<=not q1(6) nand(q1(7) and(a6 or a7));
---------
chot4:reg port map(a4,outtribus(7 downto 0),q2(7 downto 0));
--
high_speed<=q2(0);
fifo_a_logic<=q2(1);
fifo_b_logic<=q2(2);
trig_sel<=q2(4 downto 3);
clkdiv<=q2(7 downto 5);
--------
chot5:reg port map(a5,outtribus(7 downto 0),q3(7 downto 0));
---
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 63
trig_load<=q3(1 downto 0);
trig_falling<=q3(2);
t1<=q3(4 downto 3);
---
buf_dir <=(a6 or a7) or a1;
data <=outtribus;
fifo_r_clk<=a1;
end chon;
-------Chương trình điều khiển FIFO
library ieee;
use ieee.std_logic_1164.all;
entity coltron_fifo is
port(
trig :in std_logic_vector(7 downto 0);
trig_load :in std_logic_vector(2 downto 0);
trigger :in std_logic;
rec_en :in std_logic;
init :in std_logic;
clk :in std_logic;
mem_full :out std_logic;
fifo_w_en :out std_logic;
fifo_w_rst :out std_logic;
fifo_w_clk :out std_logic;
poit :out std_logic_vector(18 downto 0)
);
end;
architecture chon of coltron_fifo is
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 64
signal a:std_logic_vector(18 downto 0);
signal t1,t2,t3,t4:std_logic;
-------------
component triggercounter
port(
trig :in std_logic_vector(7 downto 0);
clk :in std_logic;
counter_en :in std_logic;
load :in std_logic_vector(2 downto 0);
mem_full :out std_logic
);
end component;
------------
component counter19
PORT
(
clock : IN STD_LOGIC ;
cnt_en : IN STD_LOGIC ;
sset : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (18 DOWNTO 0)
);
end component;
------------
begin
t4<=(trigger and rec_en) or(rec_en and t3);
t2<=t4 and (not t1);
t3<=(a(17) and a(17)) or (init);
demtrigger:triggercounter port map
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 65
(trig(7 downto 0),clk,t2,trig_load(2 downto 0),t1);
dem19:counter19 port map(clk,not t1,t3,a(18 downto 0));
poit<=a;
mem_full<=t1;
fifo_w_en<=not t1;
fifo_w_rst<=not init;
fifo_w_clk<=clk;
end chon;
-----Chương trình bộ tạo xung
library ieee;
use ieee.std_logic_1164.all;
entity xungnhip is
port (
CLOCK_50,clear : in std_logic;
sel : in std_logic_vector(2 downto 0);
clk : out std_logic
);
end xungnhip;
architecture chon of xungnhip is
signal div0,div1,div2,div3,div4 : std_logic;
signal clk1,clk2,clk4,clk8,clk16,clk32 :
std_logic;
------------tao xung tre 1/2,1/4,1/8,1/16,1/32----------
component taoxung
port (
clk,clear :in std_logic;
div0,div1,div2,div3,div4 :out std_logic
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 66
);
end component;
------hop kenh-------
component hopkenhtaoxung
port (
clk1,clk2,clk4,clk8,clk16,clk32 :in std_logic;
sel in std_logic_vector(2 downto 0);
clock_out :out std_logic
);
end component;
begin
t1:taoxung
port map(CLOCK_50,'1',div0,div1,div2,div3,div4);
t2:hopkenhtaoxung
port map(CLOCK_50,div0,div1,div2,div3,div4,
sel(2 downto 0),clk);
end chon;
-------Chương trình dò điểm trigger
library ieee;
use ieee.std_logic_1164.all;
entity trigger_unit is
port (
trig_load :in std_logic_vector(1 downto 0);
trig_value :in std_logic_vector(7 downto 0);
logic_inputL :in std_logic_vector(7 downto 0);
logic_inputH :in std_logic_vector(7 downto 0);
trig_falling :in std_logic;
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 67
fifo_a_logic :in std_logic;
fifo_b_logic :in std_logic;
high_speed :in std_logic;
ext_trigger :in std_logic;
clk :in std_logic;
rec_en :in std_logic;
trig_sel :in std_logic_vector(1 downto 0);
trigger_output :out std_logic
);
end;
architecture chon of trigger_unit is
signal chotout1,chotout2:std_logic_vector(7 downto 0);
signal a1,a2,a3,b1,b2,b3,q11,q12,q13,q14,q2,q3,s:std_logic;
signal outmux21,outmux22,outmux3,outtrigD:std_logic;
--------------
component mux2
port(
a,b :in std_logic;
sel :in std_logic;
q :out std_logic
);
end component;
--------
component mux3
port(
a,b,c :in std_logic;
sel :in std_logic_vector(1 downto 0);
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 68
q :out std_logic
);
end component;
-------
component reg
port ( en :in std_logic;
a :in std_logic_vector(7 downto 0);
q :out std_logic_vector(7 downto 0)
);
end component;
-------
component trigD
port (
a :in std_logic;
clk,clear :in std_logic;
q :out std_logic
);
end component;
-------
component sosanh
PORT
(
dataa :IN STD_LOGIC_VECTOR(7 DOWNTO 0);
datab :IN STD_LOGIC_VECTOR(7 DOWNTO
AeB : OUT STD_LOGIC ;
AgB : OUT STD_LOGIC ;
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 69
AlB : OUT STD_LOGIC
);
end component;
--------
begin
chot1 :reg port map(trig_load(0),
trig_value(7 downto 0),chotout1(7 downto 0));
chot2:reg port map(trig_load(1),
trig_value(7 downto 0),chotout2(7 downto 0));
sosanh1:sosanh port map(chotout1(7 downto 0),
logic_inputL(7 downto 0),a1,a2,a3);
sosanh2:sosanh port map(chotout2(7 downto 0),
logic_inputH(7 downto 0),b1,b2,b3);
----------------------
t1:mux2 port map(a2,a3,trig_falling,outmux21);
t2:mux2 port map(b2,b3,trig_falling,outmux22);
------------------------
q11<=a1 and fifo_a_logic and (not fifo_b_logic);
q12<=not fifo_a_logic and not fifo_b_logic and not high_speed;
q13<=(a1 and b1) and fifo_b_logic;
q14<=(outmux21 and outmux22)and high_speed;
q3<=q12 or q13 or q11 or q14;
q2<=ext_trigger xor trig_falling;
------------------
t3:mux3 port map(q3,outmux22,q2,
trig_sel(1downto 0),outmux3);
t4:trigD port map(outmux3,clk,'1',outtrigD);
------------------------
Khóa luận tốt nghiệp Thử nghiệm thiết kế dao động ký số trên FPGA
Nguyễn Văn Thông K49ĐB 70
s<=(not outtrigD and rec_en) or( rec_en and s);
trigger_output<=(outtrigD and s)or(trig_sel(0)and
trig_sel(1));
end chon;
Tài liệu tham khảo
[1] PGS.Vũ Quý Điềm(chủ biên),Phạm Văn Tuân, Nguyễn Thúy Anh, Đỗ Lê Phú,
Nguyễn Ngọc Văn -Cơ sở kỹ thuật đo lường điện tử - - NXB Khoa Học và Kỹ Thuật
2006
[2] Tống Văn On - Thiết kế mạch số với VHDL và Verilog- tập 1,2- NXB Lao động
Xã hội -2007
[3] Volnei A. Pedroni - Circuit Design With VHDL
[4] DE2_UserManual
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
Các file đính kèm theo tài liệu này:
- Tổng quan về FPGA.pdf