Thực hiện hệ thống trải phổ trực tiếp sử dụng chaos

Một phần của tài liệu đồ án tốt nghiệp điện tử viễn thông thực hiện hệ thống trải chuỗi trực tiếp với độ rộng bit hỗn loạn trên FPGA (Trang 49)

1. Nội dung thiết kế tốt nghiệp:

2.3.Thực hiện hệ thống trải phổ trực tiếp sử dụng chaos

2.3.1. Tổng quan thực hiện hệ thống

Tổng quan của quá trình thực hiện trên FPGA gồm các bƣớc nhƣ sau: - Tạo file dữ liệu ban đầu từ Matlab và nạp vào flash trên kit DE2. - Nạp khối trải phổ lên kit và tiến hành trải phổ.

- Tín hiệu sau trải phổ lƣu tại sram đƣợc lấy ra thành 1 file vừa đƣa lên Matlab. - Tiến hành cộng nhiễu trên Matlab và ghi tín hiệu đƣợc cộng nhiễu ra 1 file. - Nạp file đã cộng nhiễu vào flash trên kit và nạp khối giải trải phổ lên kit, tiến

hành giải trải phổ và ghi kết quả ra sram.

- Đọc file sau giải trải phổ từ sram và đƣa lên Matlab để tính toán số lỗi bit và vẽ đƣờng BER.

Sơ đồ qui trình thực hiện nhƣ sau:

Hình 2. 15. Quy trình thực hiện

2.3.2. Khối trải phổ

Để thực hiện việc trải phổ, chúng em sẽ chia thành từng khối nhỏ, mỗi khối có một nhiệm vụ riêng biệt để dễ dàng cho việc viết code và kiểm thử cũng nhƣ chạy mô

45 phỏng trên ModelSim. Sau khi hoàn thành từng khối nhỏ, khối trải phổ chỉ đơn giản là việc ghép các khối nhỏ lại thành một khối hoàn chỉnh. Có một vài lƣu ý là do để tạo đƣợc chuỗi PN chúng ta phải cấp cho khối tạo PN một giá trị ban đầu, việc này chúng em sẽ thực hiện bằng cách nối các đầu vào của khối này với các switch nằm trên kit DE2, khi các switch đóng hay ngắt thì chính là các giá trị 0 hoặc 1 đƣợc đƣa vào. Lƣu ý thứ 2 là việc khởi động cho khối trải phổ bắt đầu hoạt động sẽ đƣợc thực hiện bằng cách nối chân reset của toàn bộ các khối vào một nút bấm trên Kit, nút bấm này chính là để bắt đầu quá trình trải phổ.

Hình 2. 16. Khối trải phổ.

Hình 2. 17. Mô phỏng khối trải phổ trên FPGA

46 Đây là khối quan trọng nhất trong hệ thống, nó có nhiệm vụ tạo ra các xung điều khiển p với khoảng cách thời gian giữa các xung biến đổi theo tính chất hỗn loạn để điều khiển các khối khác hoạt động cũng nhƣ tạo ra chuỗi PN. Do nhiệm vụ khá phức tạp nên chúng em quyết định chia nhỏ khối này thành các khối nhỏ hơn: VPP_PNS_LGMap_21_41,VPP_PNS_Counter_LG_21_41,VPP_PNS_Comparator_L G_21_41 và VPP_PNS_PN_FS:

Hình 2. 18. Sơ đồ khối VPP-PNS Generator

Sau khi ghép các khối nhỏ lại, khối VPP_PNS_Generator_LG_21_41 hoàn chỉnh nhƣ sau:

47 Hình 2. 20. Mô phỏng khối VPP-PNS Generator ModelSim

2.3.2.1.1. Khối tạo chaotic map

Khối này là khối VPP_PNS_LGMap trong sơ đồ tổng quát. Khối này sẽ đƣợc nạp trƣớc loại chaotic map nào mà chúng ta chọn và thực hiện tính toán để đẩy ra lần lƣợt các giá trị tính toán đƣợc từ hàm chaotic map đã đƣợc nạp vào, giá trị này sau đó sẽ đƣợc đẩy vào khối Comparator để so sánh với giá trị của khối Counter (sẽ trình bày sau).

Hình 2. 21. Các loại Chaotic map và giá trị khởi tạo, các hàm tƣơng ứng.

Khối này bao gồm 2 khối nhỏ: S/H (sample and hold) có nhiệm vụ lƣu trữ giá trị hiện thời của hàm chaotic map, khi đƣợc reset nó sẽ đƣợc nạp giá trị ban đầu X0 và mỗi khi có xung start thì lƣu lại giá trị hiện thời của chaotic map ( lấy từ đầu ra của khối tính toán F(.) ) đồng thời đẩy giá trị này ra làm đầu vào của khối tính toán F(.). Khối thứ 2 là khối F(.) có nhiệm vụ tính toán giá trị tiếp theo của hàm chaotic map mỗi khi đầu vào của nó (nhận từ khối S/H) thay đổi giá trị và đẩy giá trị này ra khối Comparator. Nhƣ vậy, khối tổng hợp của 2 khối này sẽ gồm 1 đầu vào nhận xung reset,

48 1 đầu vào nhận xung start và đầu ra X là giá trị hiện thời của hàm chaotic map: VPP_PNS_LGMap_21_41 (star, rst, X).

Có một lƣu ý là trong kit DE2 không thực hiện tính toán với các số thập phân nên chúng em sẽ nhân toàn bộ hàm chaotic map đƣợc chọn với một số nguyên lớn để đƣợc các số nguyên, giảm sai số, quy luật hỗn loạn là không thay đổi.

Ví dụ: hàm tạo giá trị hỗn loạn với logistic map, hệ số trải phổ [21:41]

2 (3.99 (( 1 ) 100) ((20000 1) 200)) 100

X   Xd   d Xd

Với d = 1.075x20000 = 10750x2.

Bƣớc nhảy m = 0.05x10000x2 = 1000/us.

Hệ số trải phổ là giá trị thu đƣợc khi lấy X2 chia cho bƣớc nhảy m. Thực nghiệm thu đƣợc giá trị này hoàn toàn biến đổi liên tục và nằm trong khoảng từ 21 tới 41

Hình 2. 22. Khối tạo Logistic Map

Hình 2. 23. Khối tạo Logistic Map

2.3.2.1.2. Khối tạo bộ đếm (adsbygoogle = window.adsbygoogle || []).push({});

Khối VPP_PNS_Counter_LG_21_41 sẽ thực hiện chức năng này. Khối này có nhiệm vụ sẽ đếm liên tục, tăng 1 đơn vị mỗi khi nhận đƣợc xung clock hệ thống. Mục đích việc đếm này là để so sánh giá trị đếm đƣợc với giá trị hiện tại của hàm chaotic

49 map đƣợc đẩy ra từ khối VPP_PNS_LGMap_21_41. Mỗi khi nó nhận 1 xung restart từ khối so sánh (sẽ trình bày sau) thì sẽ đƣợc reset để đếm lại từ 0 (khi nhận xung reset toàn bộ hệ thống, nó cũng sẽ đƣợc reset về 0) . Nhƣ vậy, khối này sẽ gồm 1 đầu vào nhận xung clock hệ thống, 1 đầu vào nhận tín hiệu reset toàn bộ hệ thống, 1 tín hiệu nhận xung restart từ khối so sánh và 1 đầu ra để đƣa ra giá trị đếm đƣợc: VPP_PNS_Counter_LG_21_41(CLK,RESET, rstCount, COUNT)

Hình 2. 24. Khối tạo bộ đếm

Hình 2. 25. Mô phỏng VPP-PNS Counter trên Model Sim

2.3.2.1.3. Khối so sánh

Khối so sánh là khối VPP_PNS_Comparator_LG_21_41 trong sơ đồ trên. Khối này có nhiệm vụ nhận đầu vào là giá trị đếm từ khối đếm C và từ khối tính toán giá trị hiện thời của hàm chaotic map X (VPP_PNS_Counter_LG_21_41 và VPP_PNS_LGMap_21_41) sau đó so sánh 2 giá trị này nếu nhƣ C = X/m – 2 với m đƣợc gọi là bƣớc nhảy (cũng đã nhân với 10000), m tùy thuộc loại chaotic map đƣợc chọn, thì sẽ xuất ra xung start để bắt đầu quá trình tạo mã PN, xung p để điều khiển hoạt động 1 số khối khác và xung rstcount để reset lại khối đếm VPP_PNS_Counter_LG_21_41. Nhƣ vậy khối này sẽ gồm 2 đầu vào nhận giá trị đếm C và giá trị hiện tại của chaotic map X, đầu vào clock hệ thống để đồng bộ với hoạt

50 động cả hệ thống, các xung điều khiển đầu ra p, rstcount và start: VPP_PNS_Comparator_LG_21_41(clk, rst, C, X, rstCount, start, p)

Hình 2. 26. Khối tạo bộ so sánh.

Hình 2. 27. Mô phỏng VPP-PNS Comparator trên ModelSim

2.3.2.1.4. Khối tạo chỗi giả ngẫu nhiên PN

Khối này là khối VPP_PNS_PN_FS trong sơ đồ trên. Nhƣ đã trình bày trong chƣơng lý thuyết, khối tạo mã PN sẽ là một thanh ghi dịch tập hợp từ một chuỗi các flip-flop, tạo nên từ một đa thức sinh cho trƣớc. Đầu tiên, chúng em sẽ viết code để tạo ra một khối hoạt động nhƣ một flip-flop, flip-flop này sẽ gồm 1 đầu vào nhận xung clock hệ thống, 1 đầu vào reset toàn bộ hệ thống, 1 đầu vào để nhận tín hiệu start (bắt đầu hoạt động để đẩy chuỗi PN ra) lấy từ khối VPP_PNS_Comparator_LG_21_41, 1 đầu vào st để nhận ra trị nạp vào ban đầu (0 hoặc 1), đầu vào tín hiệu d, đầu ra tín hiệu q, đây chính là flip-flop loại D: VPP_PNS_FF_FS(clk, rst, start, st, d, q).

51 Có một điều cần lƣu ý đó là theo nhƣ lý thuyết hoạt động, ngay khi nhận xung start đầu tiên, khối tạo mã PN sẽ ngay lập tức họat động và đẩy ra chuỗi PN tuy nhiên do chúng em sử dụng dữ liệu đầu vào là đọc ra từ flash của kit rồi sau đó mới đẩy từng bit dữ liệu đó ra và nhân với chuỗi PN nên để đồng bộ thời gian từ bit dữ liệu đầu tiên đẩy ra cùng lúc với chuỗi PN đƣợc tạo ra, chúng em sẽ để cho khối PN hoạt động từ xung start thứ 10 (sẽ giải thích kĩ hơn ở phần sau).

Sau khi có đƣợc flip-flop, việc tạo thanh ghi dịch chỉ đơn giản là ghép các flip- flop này với các đƣờng hồi tiếp theo một đa thức sinh cho trƣớc. Chúng em chọn đa

thức sinh 5 4 3

( ) 1

g xx    x x x . Nhƣ vậy ta có thanh ghi dịch có sơ đồ nối chân nhƣ sau:

Hình 2. 29. Thanh ghi dịch trong bộ tạo chuỗi PN

Hình 2. 30. Mô phỏng VPP-PNS PN trên ModelSim

2.3.2.2. Khối tạo xung clock hệ thống

Khối này lấy đầu vào là xung clock 50MHz lấy từ chân clock của kit DE2 và chia clock này thành các clock có tần số thấp hơn dùng làm xung clock cho toàn bộ hệ thống. Lý do chúng em phải chia tần số clock thấp hơn vì hoạt động đọc ghi từ flash và sram hoạt động ở tần số thấp hơn 50MHz. Nhƣ vậy, khối này sẽ gồm 1 đầu vào clk nhận xung clock 50MHz từ chân clock của kit DE2, 1 đầu vào reset chung của toàn bộ hệ thống RESET, và hai đầu ra là hai clock đƣợc chia tần nhỏ hơn CLK1 với tần số

52 50MHz/64 và CLK2 với tần số 50MHz/4: TX_ClockDivider (CLK, RESET, CLK_1, CLK_2), chân CLK2 sẽ đƣợc chúng em dùng để cấp clock cho toàn bộ các khối khác trong hệ thống

Hình 2. 31. Khối chia xung clock

Hình 2. 32. Mô phỏng khối TX_ClockDivider trên ModelSim

2.3.2.3. Khối tạo xung clock flash

Do chúng em tạo file dữ liệu đầu vào ngẫu nhiên từ MatLab và ghi file này vào trong flash của kit DE2 rồi sau đó khối trải phổ sẽ giao tiếp với flash và đọc các dữ liệu này ra để thực hiện mã hóa, mỗi lần đọc từ flash đƣợc 1 mảng 8bit dữ liệu, vì thế cần có một khối cấp xung clock cho khối giao tiếp với flash, mỗi khi khi mã hóa xong 8 bit dữ liệu nó lại tạo ra 1 xung clock để đọc 8 bit tiếp theo, cứ liên tục nhƣ vậy, để biết khi nào thì đọc xong 8 bit, chỉ cần đếm 8 xung p vì cứ sau mỗi xung p thì 1 bit dữ liệu sẽ đƣợc đẩy ra. Khối này sẽ gồm 1 đầu vào nhận xung p, 1 đầu vào nhận xung reset chung của toàn hệ thống rst và 1 đầu ra là đầu cấp xung clock đọc dữ liệu từ flash CLOCK_FLSR: Chaotic_CLOCK_FLSR (clk, rst, CLOCK_FLSR).

53 Hình 2. 34. Mô phỏng clock flash trên ModelSim

2.3.2.4. Khối tạo xung clock sram

Tín hiệu sau khi trải phổ xong đƣợc lấy mẫu 8 bit 1 lần để ghi vào trong sram, chính vì thế cần có 1 khối để mỗi khi lấy mẫu xong 8 bit thì sẽ tạo 1 xung clock cấp cho khối giao tiếp với sram để khối này ghi dữ liệu vào. Khối này sẽ gồm 1 đầu vào nhận xung clock hệ thống và cứ đếm 8 clock hệ thống (tƣơng đƣơng với việc đã lấy mẫu xong 8 bít) thì sẽ xuất 1 xung clock CLOCK_SR ở đầu ra. Để đồng bộ với thời điểm với chuỗi pn đƣợc xuất ra và nhân với dữ liệu, khối này cần cần thêm 1 đầu vào nhận xung p để xác định thời điểm bắt đầu việc mã hóa rồi sau đó mới xuất xung clock sram ra: Chaotic_CLOCK_SR_LG_21_41 (clk, rst, p, CLOCK_SR).

Hình 2. 35. Khối tạo xung clock sram bên trải phổ

Hình 2. 36. Mô phỏng khối clock sram trên ModelSim (adsbygoogle = window.adsbygoogle || []).push({});

54 Nhƣ đã trình bày ở trên, dữ liệu đƣợc lấy ra từ flash là 1 mảng 8 bit, chính vì thế khối này có nhiệm vụ biến đổi 8 bit song song này thành từng bit 1 nối tiếp và đẩy ra để nhân với mã pn. Khối này sẽ gồm 1 đầu vào là xung p, 1 đầu vào là 1 mảng 8 bit dữ liệu vào, dữ liệu 1 bit nối tiếp đầu ra: Chaotic_DataLoader_FS (p, data_in, data_out).

Hình 2. 37. Khối chuyển đổi dữ liệu nối tiếp song song bên trải phổ.

Hình 2. 38. Mô phỏng khối Dataloader trên ModelSim

2.3.2.6. Khối lấy mẫu tín hiệu

Sau khi tín hiệu đƣợc trải phổ, cần phải lấy mẫu 8 bit tín hiệu thành 1 mảng để lƣu vào sram, tuy nhiên cần lƣu ý rằng khối này sẽ bắt đầu lấy mẫu khi mã PN đã đƣợc nhân với dữ liệu, vì thế nó cần có 1 đầu vào p để đếm tới xung p thứ 10 thì mới bắt đầu lấy mẫu (vì bắt đầu từ xung p thứ 10 thì PN mới đƣợc tạo ra và nhân vào dữ liệu): Chaotic_Sampler_Sender (clk, rst, p, datain, WRITE_DATA).

55 Hình 2. 40. Mô phỏng khối lấy mẫu trên ModelSim

2.3.2.7. Khối giao tiếp với flash

Khối này có nhiệm vụ giao tiếp với flash của kit DE2 để lấy dữ liệu đã đƣợc nạp vào flash từ trƣớc đó. Kit DE2 sử dụng chip flash

Để có thể đọc đƣợc 1 mảng dữ liệu từ flash, ta phải cấu hình các chân của flash nhƣ sau:

Hình 2. 41. Mô hình logic flash trên kit DE2

Để có thể đọc đƣợc 1 mảng dữ liệu từ flash, ta phải cấu hình các chân của flash nhƣ sau:

- Chân CE# và OE@# phải đặt về mức thấp. CE# là điều khiển năng lƣợng và chọn thiết bị, OE# là điều khiển đầu ra và cổng của mảng dữ liệu.

- WE# nên để ở mức cao.

- BYTE# sẽ quyết định việc mảng dữ liệu ở dạng words hay bytes. - Thiết bị sẽ vẫn cho phép đọc tới khi nào nội dung thanh ghi bị thay đổi.

56 - Cần phải có câu lệnh để reset flash, khi này địa chỉ sẽ về giá trị không xác định.

Nhƣ vậy, khối giao tiếp với flash cần có 1 đầu vào nhận xung clock đƣợc cấp từ khối tạo xung clock flash, chân nhận tín hiệu reset của toàn bộ hệ thống ENABLE, chân 8 bit song song để nhận dữ liệu đƣợc lấy từ flash, chân FL_OE_N để cho phép flash đẩy dữ liệu ra, FL_RST_N để reset flash, FL_CE_N để chọn flash, chân ra 18bit song song để đƣa địa chỉ ô nhớ cần đọc vào flash, chân 8 bit song song READ_DATA để đẩy ra dữ liệu vừa đọc đƣợc từ flash và 1 số chân điều khiển khác có nhiệm vụ điều khiển các đèn led để từ đó có thể theo dõi hoạt động đọc ghi của khối này:

flash_Read_8to8(CLOCK_4X,ENABLE,dv,FL_ADDR,FL_DQ,FL_OE_N,FL_ RST_N,FL_WE_N,FL_CE_N,READ_DATA,READ_VIEW,ADDR_VIEW);

Hình 2. 42. Khối đọc flash

2.3.2.8. Khối giao tiếp với sram

Sau khi dữ liệu đƣợc trải phổ và lấy mẫu 8 bit 1 lần, mảng dữ liệu 8 bit này cần đƣợc ghi lần lƣợt vào sram để phục vụ quá trình cộng nhiễu vào tính BER trên MatLab. Để làm đƣợc việc này cũng cần 1 khối để giao tiếp với sram trên kit DE2, khối này gồm 1 đầu vào nhận xung clock từ khối tạo xung clock sram, 1 đầu vào nhận xung reset của toàn bộ hệ thống ENABLE, 1 chân 8 bit song song nhận dữ liệu đầu vào từ khối lấy mẫu, 1 chân ra 18 bit song song để đƣa địa chỉ ô nhớ cần ghi vào sram, 1 số chân điều khiển cho phép chọn chip, cho phép ghi, lƣu ý cần có 2 chân để điểu khiển việc ghi 8 bit dữ liệu vào nửa cao hay nửa thấp của ô nhớ bởi 1 nhớ của sram có độ lớn 16 bit.

57 Bảng 2. 2. Bảng chân lý của sram DE2

Để đọc đƣợc thì ta thiết lập chế độ ghi ta đặt WE#, CE# ở mức thấp, OE# don‟t care, LB# và UB# ở các mức tích cực phù hợp để đọc dữ liệu tƣơng ứng nhƣ trong bảng.

Hình 2. 43. Khối ghi sram

2.3.3. Khối giải trải phổ

Để thực hiện việc giải trải phổ, tƣơng tự bên trải phổ cũng sẽ đƣợc chia thành từng khối nhỏ, mỗi khối thực hiện chức năng riêng biệt. Sau khi trải phổ, file load ra từ khối sram của DE2 sẽ đƣợc nạp lại vào flash để làm đầu vào cho khối giải trải phổ. Việc này giúp cho việc giải trải phổ dễ dàng đồng bộ hơn.

Chuỗi PN sử dụng bên giải trải phổ cũng tƣơng tự nhƣ bên trải phổ, 2 chuỗi này giống nhau, cũng trạng thái khởi tạo đƣợc nhập từ switch trên kit DE2, điều này rất quan trọng vì nếu nhập nhầm giá trị khởi tạo cho chuỗi PN chúng ta sẽ thu đƣợc kết quả hoàn toàn sai lệch so với mong muốn

58 Kết quả mong muốn của khối này là sẽ thu đƣợc kết quả giống hệt ban đầu khi chƣa thực hiện cộng nhiễu (trƣờng hợp lý tƣởng).

Hình 2. 44. Khối giải trải phổ sử dụng chaos.

2.3.3.1. Khối tạo xung clock flash.

Khối Chaotic_RX_CLOCK_FLLG tƣơng tự nhƣ khối CLOCK_FLSR nhƣ bên trải phổ nhƣng do dữ liệu cần đọc từ flash chính là dữ liệu từ bên trải phổ đƣa sang, (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu đồ án tốt nghiệp điện tử viễn thông thực hiện hệ thống trải chuỗi trực tiếp với độ rộng bit hỗn loạn trên FPGA (Trang 49)