Mô tả cơ chế phát hiện lỗi LRC
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ - VIỄN THÔNG
BÁO CÁO ĐỀ TÀI:
MÔ TẢ CƠ CHẾ PHÁT HIỆN LỖI LRC
Trang 2LỜI CẢM ƠN
Trong quá trình học tập và nghiên cứu đề tài, được sự giúp đỡ tận tình của quý thầy cô trong khoa, đặc biệt là sự hướng dẫn của thầy Võ Minh Huân, nhóm đã tiếp thu được nhiều kiến thứ bổ ích, rèn luyện kỹ năng tư duy và sử dụng các phần mềm hỗ trợ cho môn học này
Trong quá trình làm báo cáo, nhóm có cơ hội vận dụng kiến thức mà mình đã được trang bị
và thu nhận rất nhiều kiến thức thực tế mới từ việc nghiên cứu nguồn tài liệu phong phú, hình thành
kỹ năng làm việc nhóm, tìm kiếm thông tin Nhờ vậy, mà nhóm có thể tự tin hơn về những kiến thức
đã tích luỹ được và hình thành những kỹ năng mềm cho bản thân, giúp nhóm tự tin hơn trong công việc sau này
Một lần nữa, nhóm xin gửi lời cảm ơn chân thành đến thầy Võ Minh Huân, người đã hướng dẫn, giúp đỡ và tạo mọi điều kiện thuận lợi nhất để nhóm và các nhóm khác hoàn thành bài báo cáo này
Đề tài môn học đã hoàn thành đúng thời gian quy định và đạt được các kết quả nhất định Tuy nhiên, đây là đề tài tương đối mới đối với nhóm nên không thể tránh khỏi những sai sót Rất mong nhận được sự đóng góp ý kiến từ thầy!
Nhóm thực hiện đề tài xin kính chúc Thầy phụ trách môn học Kỹ thuật PLD & ASIC – TS.Võ Minh Huân thật dồi dào sức khỏe, niềm tin để tiếp tục thực hiện sứ mệnh cao đẹp của mình là truyền đạt kiến thức cho thế hệ mai sau
TP.HCM, Ngày 7 tháng 7 năm 2014 Nhóm thực hiện đề tài
Nhóm 9
Trang 3LỜI MỞ ĐẦU
Cùng với sự phát triển của khoa học và công nghệ phục vụ cho cuộc sống của con người, công nghệ viễn thông trong những năm qua đã có những bước phát triển mạnh mẽ cung cấp ngày càng nhiều tiện ích cho con người
Thế kỷ 21 chứng kiến sự bùng nổ thông tin, trong đó thông tin di động đóng một vai trò rất quan trọng Nhu cầu trao đổi thông tinngày càng tăng cả về số lượng, chất lượng và các loại hình dịch vụ kèm theo, điều này đòi hỏi phải tìm ra phương thức trao đổi thông tin mới ngày càng ưu việt và mang lại hiệu quả cao hơn.Các công nghệ di động và viễn thông ngày một phát triển nhanh chóng để hướng tới mục đích tăng tốc độ cũng như chất lượng của các dịch vụ nhằm đáp ứng nhu cầungày càng cao của con người về các thiết bị không dây bỏ túi
Một trong những khâu quan trọng nhất của việc thông tin không dây đó là việc truyền
và nhận tín hiệu Điều này cần thiết phải có một loại mã hóa dành riêng cho kênh truyền có khả năng phát hiện sai sót của tín hiệu truyền đi do các tác động của môi trường Để kiểm tra lỗi của tín hiệu truyền đi, người ta thêm các thông tin phụ vào trong bản tin (mã thừa) Mã thừa
sẻ được loại bỏ sau khi xác định xong độ chính xác của quá trình truyền Có bốn dạng kiểm tra lỗi cơ bản dùng mã thừa trong truyền dữ liệu: VRC, LRC, CRC, Checksum Trong viễn thông, một dự phòng kiểm tra theo chiều dọc (LRC) hoặc kiểm tra dư thừa ngang là một hình thức dự phòng kiểm tra được áp dụng một cách độc lập cho mỗi một nhóm song song của dòng bit Dữ liệu phải được chia thành các khối truyền tải, mà các dữ liệu kiểm tra bổ sung được thêm vào
Phương pháp phát hiện lỗi LRC có độ tin cậy tương đối cao, có thể phát hiện và sửa được lỗi nếu lỗi đơn bit Tuy nhiên, vẫn có trường hợp phương pháp LRC không thể phát hiện
được lỗi nhưng rất ít Chính vì vậy, nhóm thực hiện quyết định chọn đề tài là: “Mô tả cơ chế phát hiện lỗi LRC” làm đề tài báo cáo cuối kỳ của môn học, với mong muốn tìm hiểu, nghiên
cứu, hiểu biết thêm về đề tài này Trong phạm vi của đề tài này, nhóm thực hiện giới thiệu khái quát về phương pháp phát hiện lỗi LRC và tiến hành mô phỏng thuật toán của phương pháp LRC trên phần mềm Xilinx ISE Với kiến thức và khả năng của nhóm sẽ không tránh khỏi những sai sót, nhóm rất mong nhận được những ý kiến đóng góp của thầy
TP.HCM, Ngày 7 tháng 7 năm 2014
Nhóm thực hiện đề tài
Nhóm 9
Trang 4MỤC LỤC
Phần 1: MỞ ĐẦU
I Đặt vấn đề 5
II Các phương thức truyền 5
III Định nghĩa và phân loại lỗi 7
IV Giới thiệu về VHDL và FPGA 8
V Cơ chế phát hiện lỗi LRC 10
Phần 2: NỘI DUNG I Sơ đồ khối 15
II Các Component 15
III Nội dung lập trình từng khối 1 Khối tách truyền 19
2 Khối tạo mã 21
3 Khối kết hợp 23
4 Khối tách nhận 25
5 Khối kiểm tra 28
6 Khối xác nhận 29
IV Gỉai thích mô phỏng từng khối 30
V Testbench từng khối 42
VI Hệ thống máy phát 1 Sơ đồ khối 65
2 Phân tích số lượng cổng 65
3 Kiến trúc bên trong 66
4 Mô phỏng 67
5 Testbench 69
6 Công suất 71
7 Tốc độ 71
VII Hệ thống máy thu 1 Sơ đồ khối 74
2 Phân tích số lượng cổng 74
3 Kiến trúc bên trong 75
4 Mô phỏng 76
5 Testbench 76
6 Công suất 78
7 Tốc độ 78
Phần 3: KẾT LUẬN 81
Trang 5PHẦN I: MỞ ĐẦU
I Đặt vấn đề
Các thiết bị trong mạng khi truyền cho nhau đòi hỏi tính chính xác Tuy nhiên dữ liệu dạng
số khi được lưu trữ, xử lí hay truyền từ máy này qua máy khác có thể bị lỗi Như khi truyền dữ liệu đi xa qua môi trường điện thoại, dây cáp, không gian có thể bị ảnh hưởng bởi nhiệt độ, nhiễu đường dây, điện từ… hay do lâu ngày các bộ xử lí, bộ chuyển đổi có một sai sót nhỏ sẽ làm thay đổi dữ liệu.Trên đường truyền dữ liệu có thể bị nhiễu (điện, từ, ) dẫn đến sai lạc trong quá trình truyền
Vì vậy, trước khi nhận được dữ liệu thì phải phát hiện lỗi và sửa lỗi để nơi nhận có thể nhận thông tin một cách chính xác nhất
II Các phương thức truyền
Có 2 phương thức để truyền dữ liệu đó là : truyền song song và truyền nối tiếp
1 Truyền song song
- Mỗi bit dùng một đường truyền riêng Nếu có 8 bits được truyền đồng thời sẽ yêu cầu 8
đường truyền độc lập
- Để truyền dữ liệu trên một đường truyền song song, một kênh truyền riêng được dùng
để thông báo cho bên nhận biết khi nào dữ liệu có sẵn (clock signal)
- Cần thêm một kênh truyền khác để bên nhận báo cho bên gửi biết đã sẵn sàng để nhận
dữ liệu kế tiếp
- Ví dụ: ISA, ATA, PCI,…
Trang 62.Truyền nối tiếp
- Tất cả các bit đều được truyền trên cùng một đường truyền, bit này tiếp sau bit kia dưới tác động của xung nhịp clock
- Không cần các đường truyền riêng cho tín hiện truyền đi
- Phải đảm bảo được vấn đề thời gian giữa bên phát và bên nhận -> tránh sự xung đột
- Trong phương thức truyền nối tiếp bao gồm : truyền đồng bộ và không đồng bộ
Không đồng bộ: mỗi ký tự được đồng bộ bởi bit start và bit stop
Đồng bộ: mỗi khối ký tự được bồng bộ bởi cờ
SERIAL DATA TRANSIMISSION
- Ví dụ: RS232, SPI, I2C…
3 Bộ mã phát hiện lỗi
- Khi truyền tải một chuỗi các bit, các lỗi có thể phát sinh ra, bit 1 có thể biến thành bit
0 hay ngược lại
Ta định nghĩa tỷ lệ lỗi bởi tỷ số sau:
τ = Số bít bị lỗi / Tổng số bít đƣợc truyền
- Tỷ lệ lỗi này có giá trị từ 10-5 đến 10-8 Tùy thuộc vào từng loại ứng dụng, một lỗi có mức độ nghiêm trọng khác nhau, chính vì thế cần có các cơ chế cho phép phát hiện lỗi cũng như sửa lỗi
- Các thống kê cho thấy rằng 88% các lỗi xẩy ra do sai lệch một bit và 10% các lỗi xảy
ra do sự sai lệch 2 bit kề nhau Chính vì thế ta ưu tiên cho vấn đề phát hiện các lỗi trên một bit và sửa đổi chúng một cách tự động
Trang 7- Với ý tưởng như thế, ta sử dụng các mã phát hiện lỗi: bên cạnh các thông tin hữu ích cần truyền đi, ta thêm vào các thông tin điều khiển Bên nhận thực hiện việc giải mã các thông tin điều khiển này để phân tích xem thông tin nhận được là chính xác hay có lỗi
H4.5 Mô hình xử lý lỗi trong truyền dữ liệu
- Thông tin điều khiển được đưa vào có thể theo 2 chiến lược Chiến lược thứ nhất gọi
là bộ mã sửa lỗi (Error-correcting codes) và chiến lược thứ hai gọi là bộ mã phát hiện lỗi (Error-detecting codes) Bộ mã sửa lỗi cho phép bên nhận có thể tính toán và suy ra được các thông tin bị lỗi (sửa dữ liệu bị lỗi) Trong khi bộ mã phát hiện lỗi chỉ cho phép bên nhận phát hiện ra dữ liệu có lỗi hay không Nếu có lỗi bên nhận sẽ yêu cầu bên gởi gởi lại thông tin Với tốc độ của đường truyền ngày càng cao, người ta thấy rằng việc gởi lại một khung thông tin bị lỗi sẽ ít tốn kém hơn so với việc tính toán để suy ra giá trị ban đầu của các dữ liệu bị lỗi Chính vì thế đa số các hệ thống mạng ngày nay đều chọn
Lỗi truyền thong
2.Phân loại lỗi
Có 3 loại lỗi đó là: lỗi đơn bit, lỗi đa bit, lỗi đảo bit
a Lỗi đơn bit
- Khi truyền dữ liệu thì 1 bit của khối dữ liệu (1byte, 1 ký tự, ) bị thay đổi từ 1 sang 0 và ngược lại
Trang 8- Khi 1 bit bị lỗi thì các bit xung quanh không bị ảnh hưởng
- Thường xảy ra lỗi khi dữ liệu bị nhiễu trắng
0 0 0 0 0 0 1 0
- Thường xảy ra khi truyền truyền dữ liệu song song
b Lỗi đa bit
- Là lỗi mà khi dữ liệu truyền đi có nhiều hơn 2 bit bị lỗi ( điều này không có nghĩa là
phải 2 lỗi xãy ra liên tiếp nhau)
- Chiều dài của lỗi tính từ bit bị lỗi đầu tiên đến bit bị lỗi cuối cùng (mặc dù các bit nằm
ở giữa không bị lỗi)
0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
0 1 0 1 1 1 0 1 0 1 0 0 0 0 1 1
- Thường xảy ra trong quá trình truyền dữ liệu nối tiếp
- Thời gian của nhiễu thường dài hơn của 1 bit nhưng nó có thể tác động đến nhiều bit
Số bit bị tác động phụ thuộc và khoảng thời gian của nhiễu và tốc độ truyền
c Lỗi đảo bit
- Là lỗi xuất hiện khi có 2 lỗi liên tiếp nhau đảo giá trị cho nhau
0 0 0 0 1 0 1 0
0 changed 1
Receiver Sender
Sent
Length of burt error (5 bit)
Bits corrupted by burts error
Receiver
Trang 9VHDL là một ngôn ngữ mô tả phần cứng (hardware description language), mô tả hành
vi của mạch điện hoặc hệ thống, từ đó mạch điện vật lý hoặc hệ thống có thể được thực thi
VHDL là viết tắt của VHSIC Hardware Description Language Bản thân VHSIC là viết tắt của Very High Speed Integrated Circuits (mạch tích hợp tốc độ cao), lần đầu tiên được sáng lập bởi United State Department of Defense trong những năm 80, sau đó tạo ra VHDL Phiên bản đầu tiên là VHDL 87, lần nâng cấp sau đó có tên là HDL 93 VHDL là ngôn ngữ mô tả phần cứng nguyên gốc đầu tiên được chuẩn hóa bởi Institue of Electrical and Electronics Engineers (IEEE), tới chuẩn IEEE 1076 Trong IEEE 1164, có một chuẩn được thêm vào là giới thiệu hệ thống logic đa giá trị (multi-valued logic system)
Động cơ thúc đẩy cơ bản khi dùng VHDL (hay dùng Verilog) là VHDL là một ngôn ngữ độc lập chuẩn của các nhà công nghệ, các nhà phân phối do đó chúng có khả năng portable và kế thừa cao (reusable) Hai ứng dụng trực tiếp chính của VHDL là trong mảng các thiết bị logic lập trình được (Programmable Logic Devices) (bao gồm CPLDs – Complex Programmable Logic Devices và FPGAs – Field Programmable Gate Arrays) Mỗi khi mã nguồn VHDL được viết, chúng có thể được dùng để thực thi mạch điện trong các thiết bị lập trình được (từ Altera, Xilinx, Almel, ) hoặc có thể gửi đến các xưởng chế tạo các chíp ASIC Hiện này, rất nhiều các chip thương mại phức tạp (ví dụ như các microcontrollers ) được thiết
kế dựa trên cách tiếp cận này
Một điều chú ý về VHDL là trái ngược với các chương trình máy tính thông thường được thực hiện tuần tự thì các câu lệnh được thực hiện song song (concurrent) Vì lí do đó, nên VHDL thường được coi là một mã nguồn hơn là một chương trình Trong VHDL chỉ có các câu lệnh đặt trong PROCESS, FUNCTION, hay PROCEDURE được thực thi tuần tự
Một trong những tiện ích lớn của VHDL là cho phép tổng hợp mạch điện hoặc hệ thống trong thiết bị khả lập trình (programmable devide) (PLD hoặc FPGA) hoặc trong một hệ ASIC
Trang 102 FPGA
FPGA (Field Programable Gate Arrays) là một thiết bị bán dẫn bao gồm các khối logic lập trình được gọi là "Logic Block", và các kết nối khả trình Các khối logic có thể được lập trình để thực hiện các chức năng của các khối logic cơ bản như AND, XOR, hoặc các chức năng kết hợp phức tạp hơn như decoder hoặc các phép tính toán học Trong hầu hết các kiến trúc FPGA, các khối logic cũng bao gồm cả các phần tử nhớ Đó có thể là các Flip-Flop hoặc những bộ nhớ hoàn chỉnh hơn
Các kết nối khả trình cho phép các khối logic có thể nối với nhau theo thiết kế của người xây dựng hệ thống, giống như một bảng mạch khả trình
Một số kiến trúc FPGA hiện nay còn có thể cho phép cấu hình lại từng phần (partial configuration) Có nghĩa là cho phép một phần của thiết kế được cấu hình lại trong khi những thiết kế khác vẫn tiếp tục hoạt động
re-Một ưu điểm khác của FPGA, là người thiết kế có thể tích hợp vào đó các bộ xử lý mềm (soft processor) hay vi xử lý tích hợp (embedded processor) Các vi xử lý này có thể được thiết
kế như các khối logic thông thường, mà mã nguồn do các hãng cung cấp, thực thi các lệnh theo chương trình được nạp riêng biệt, và có các ngoại vi được thiết kế linh động ( khối giao tiếp UART, vào/ra đa chức năng GPIO, thernet ) Các vi xử lý này cũng có thể được lập trình lại (re-configurable computing) ngay trong khi đang chạy
FPGA được ứng dụng điển hình trong các lĩnh vực như: xử lý tín hiệu số, xử lý ảnh, thị giác máy, nhận dạng giọng nói, mã hóa, mô phỏng (emulation) FPGA đặc biệt mạnh trong các lĩnh vực hoặc ứng dụng mà kiến trúc của nó yêu cầu một lượng rất lớn xử lý song song, đặc biết là mã hóa và giải mã FPGA cũng được sử dụng trong những ứng dụng cần thực thi các thuật toán như FFT, nhân chập (convolution), thay thế cho vi xử lý
Hiện nay công nghệ FPGA đang được sản xuất và hỗ trợ phần mềm bởi các hãng như: Xilinx, Altera, Actel, Atmel Trong đó Xilinx và Altera là 2 hãng hàng đầu Xilinx cung cấp phần mềm miễn phí trên nền Windows, Linux, trong khi Altera cung cấp những công cụ miễn phí trên nền Windows, Linux và Solaris
V CƠ CHẾ PHÁT HIỆN LỖI LRC
1 Phát hiện lỗi
- Khi truyền dữ liệu nếu gặp lỗi thì không thể nhận ra được trước khi giải mã dữ liệu
nhận đươc
Trang 11- Khi gửi dữ liệu đi, nó sẽ được gắn vào phần đuôi 1 phần kiểm tra lỗi Bên nhận sẽ dựa vào đó để xem dữ liệu có bị lỗi hay không
- Có 4 phương pháp phát hiện lỗi: VRC, LRC, CRC, CHECKSUM
a Phương pháp VRC( bit chẵn lẽ)
- Mỗi xâu bit biểu diễn ký tự truyền đi được thêm và 1 bit, gọi là parity bit hay là bit chẵn
lẽ
- Quy ước:
Chẵn: tổng số bit 1 có trong khối dữ liệu (cả bít parity) là số chẵn
Lẻ: tổng số bit 1 có trong khối dữ liệu (cả bit parity) là số lẽ
- Ở đầu nhận dữ liệu, mạch sẽ kiểm tra từng khối dữ liệu nhận được xem có tổng số bit là chẵn(lẽ) Nếu không thì tức là đã có 1 bit nào đó trong khối dữ liệu bị sai Ngược lại là
Data
101000000001010101010
Generating function
Reciver
Data & redundancy check
Trang 12Hình 2.3.28 Mạch tạo kiểm Parity Nhận xét:
- Chỉ dò được lỗi sai số bit lẽ
- Không sửa được lỗi
- Ít được dùng trong truyền dữ liệu đi xa, đặc biệt ở tốc độ cao (hiệu suất truyền thông tin
kém)
b Phương pháp LRC
- Vẫn sử dụng phương pháp của VRC nhưng theo dạng 2 chiều (việc kiểm tra được thực hiện cả chiều ngang lẫn chiều dọc)
- Ví dụ:
1 0 1 1 0 1 1 1
1 1 0 1 0 1 1 1
0 0 1 1 1 0 1 0
1 1 1 1 0 0 0 0
1 0 0 0 1 0 1 1
0 1 0 1 1 1 1 1
0 1 1 1 1 1 1 0
Parity bit
Data bits
LRC bits
Trang 13- Theo chiều ngang, mỗi ký tự được thêm vào 1 bit kiểm tra chẵn lẽ như VRC, và được gọi là Kiểm tra chiều ngang VRC (Vertical Redundancy Check)
- Theo chiều dọc, cung cấp thêm 1 ký tự kiểm tra, được gọi là LRC (Longitudinal Redundancy Check)
- Các phép đo chỉ ra rằng việc dùng cả hai VRC và LRC giảm đi tỷ lệ lỗi không phát hiện được hai đến bốn bậc so với dùng chỉ VRC Hãy xem trường hợp bit 1 và 3 trong ký tự
1 đang bị lỗi Khi bên nhận tính toán được bit VRC cho ký tự 1, nó sẽ kiểm tra với bit VRC đã nhận, và sẽ không phát hiện được lỗi Tuy nhiên, khi nó tính toán được ký tự LRC, bit 1 và 3 của ký tự này sẽ khác với những bit đó trong ký tự LRC nhận được, và
sẽ phát hiện được lỗi
- Tuy nhiên, ngay sơ đồ này cũng không phải là thật sự tốt Bây giờ, nếu giả sử bit 1 và 3 của ký tự 5 cũng bị lỗi, phương pháp này sẽ không phát hiện được điểm sai
- Khối dữ liệu gửi đi được gắn thêm LRC Nơi nhận sẽ đem dữ liệu nhận được tập hợp theo hàng ngang và hàng dọc.Nếu:
Nếu tất cả các cột(ngang và dọc) đều =0 thì dữ liệu không bị lỗi
Nếu 1 giá trị bất kỳ bằng không thì dữ liệu bị lỗi
Ví dụ khối dữ liệu trên bị lỗi:
1 0 1 1 0 1 1 1
0 1 0 0 0 1 0 1 1 0
0 0 0 1 0 0 0 0 1 1 1 1 0 0 0 0 0
0 1 0 1 1 1 1 1 0
0 1 1 1 1 1 1 0 0
0 0 1 0 1 0 1 0 1
1 1 0 1 0 1 1 1 0
VRC
Trang 14- Vậy có lỗi xảy ra sau khi dữ liệu được truyền
- Nhận xét
Giảm tỷ lện lỗi không phát hiện được 2-4 bậc so với dùng VRC
Độ tin cậy tương đối cao
Có khả năng phát hiện và sửa lỗi nếu trường hợp lỗi đơn bit
Trang 15PHẦN II: NỘI DUNG BÁO CÁO
Phần này cho ta một cái nhìn cơ bản về các ngõ vào ra của các khối
Khối Tách Dữ Liệu-Truyền (Detach Data - Transmit Block)
Generating LRC Code
Detach Data - Receive
Trang 16A : OUT std_logic_vector(7 downto 0);
B : OUT std_logic_vector(7 downto 0);
C : OUT std_logic_vector(7 downto 0);
D : OUT std_logic_vector(7 downto 0));
Trang 17 Khối Kết Hợp (Data & Redundancy check Block)
parity1 : IN std_logic_vector(7 downto 0);
DATA2 : OUT std_logic_vector(39 downto 0));
END COMPONENT;
Khối Tách Dữ Liệu-Nhận (Detach Data – Receive Block)
COMPONENT TACH_NHAN
PORT(
data2 : IN std_logic_vector(39 downto 0);
X : OUT std_logic_vector(7 downto 0);
Y : OUT std_logic_vector(7 downto 0);
Z : OUT std_logic_vector(7 downto 0);
T : OUT std_logic_vector(7 downto 0);
K : OUT std_logic_vector(7 downto 0));
END COMPONENT;
Trang 18 Khối Kiểm Tra (Checking Data Block)
Trang 19 Khối Xác Nhận (Accept Block)
III Nội dung lập trình cho từng khối
Khối Tách Dữ Liệu-Truyền (Detach Data - Transmit Block)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity TACH_TRUYEN is thuc the khoi tach truyen
Port ( data1 : in std_logic_vector(31 downto 0); 1 ngo data vao
A : out std_logic_vector(7 downto 0); ngo ra A
B : out std_logic_vector(7 downto 0); ngo ra B
C : out std_logic_vector(7 downto 0); ngo ra C
D : out std_logic_vector(7 downto 0)); ngo ra D
end TACH_TRUYEN;
architecture Behavioral of TACH_TRUYEN is mo ta khoi TACH_TRUYEN
begin
Trang 20SENT: process (data1) viet ham tien trinh
variable i : integer ; dung bien dem Count
begin
for i in 0 to 7 loop dung vong lap de dem so gia tri
A(i) <= Data1 (i); gán du lieu cho ngo ra A
end loop;
for i in 8 to 15 loop 8 gia tri ke cho ngo ra B
B(i-8) <= Data1 (i); gán du lieu cho ngo ra B end loop;
for i in 16 to 23 loop 8 ngo ra ke cho ngo ra C
C(i-16) <= Data1 (i); gán du lieu cho ngo ra C
end loop;
for i in 24 to 31 loop 8 ngo ra con lai cho ngo ra D D(i-24) <= Data1 (i); gán du lieu cho ngo ra D
end loop;
end process SENT; ket thuc tien trinh
Trang 22 Khối Tạo Mã LRC (Generating LRC Code Block)
B : in std_logic_vector(7 downto 0); ngo vao B 8 bit
C : in std_logic_vector(7 downto 0); ngo vao C 8 bit
D : in std_logic_vector(7 downto 0); ngo vao D 8 bit
parity1 : out std_logic_vector(7 downto 0)); ngo ra parity1 8 bit end TAO_MA;
architecture Behavioral of TAO_MA is
Trang 23parity1(7) <= A(7) XOR B(7) XOR C(7) XOR D(7); bit 8 cua parity1 duoc
xor tu bit 8 cua cac ngo vao
Khối Kết Hợp (Data & Redundancy check Block)
Trang 24architecture Behavioral of KET_HOP is mo ta khoi ket hop
begin
NHAN: process (A,B,C,D,LRC) viet ham tien trinh
variable I : integer ; dung bien dem i
begin
for i in 0 to 7 loop dung vong lap de dem so gia tri
8 gia tri dau cho ngo ra DATA2 DATA2(i) <= LRC (i); gán du lieu cho ngo ra DATA2 end loop;
for i in 0 to 7 loop 8 gia tri ke cho ngo ra DATA2
DATA2(i+8) <= D (i); gán du lieu cho ngo ra DATA2 end loop;
for i in 0 to 7 loop 8 ngo ra ke cho ngo ra DATA2
DATA2(i+16) <= C (i); gán du lieu cho ngo ra DATA2 end loop;
for i in 0 to 7 loop 8 ngo ra con lai cho ngo ra DATA2
DATA2(i+24) <= B (i); gán du lieu cho ngo ra DATA2 end loop;
for i in 0 to 7 loop 8 ngo ra con lai cho ngo ra DATA2
DATA2(i+32) <= A(i); gán du lieu cho ngo ra DATA2 end loop;
end process NHAN;
end Behavioral; ket thuc mo ta
Trang 25 Khối Tách Dữ Liệu-Nhận (Detach Data – Receive Block)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity TACH_NHAN is thuc the khoi tach truyen
Port ( data2 : in std_logic_vector(39 downto 0); 1 ngo data vao
X : out std_logic_vector(7 downto 0); ngo ra X
Y : out std_logic_vector(7 downto 0); ngo ra Y
Z : out std_logic_vector(7 downto 0); ngo ra Z
T : out std_logic_vector(7 downto 0); ngo ra T
K : out std_logic_vector(7 downto 0)); ngo ra K
end TACH_NHAN;
architecture Behavioral of TACH_NHAN is mo ta khoi
TACH_NHAN
Trang 26begin
NHAN: process (data2) viet ham tien trinh
variable I : integer ; dung bien dem i
begin
for i in 0 to 7 loop dung vong lap de dem so gia tri
X(i) <= Data2 (i); gán du lieu cho ngo ra X
end loop;
for i in 8 to 15 loop 8 gia tri ke cho ngo ra Y
Y(i-8) <= Data2 (i); gán du lieu cho ngo ra Y
end loop;
for i in 16 to 23 loop 8 ngo ra ke cho ngo ra Z
Z(i-16) <= Data2 (i); gán du lieu cho ngo ra Z
end process NHAN;
Trang 28 Khối Kiểm Tra (Checking Data Block)
Port ( X : in std_logic_vector(7 downto 0); ngo vao X
Y : in std_logic_vector(7 downto 0); ngo vao Y
Z : in std_logic_vector(7 downto 0); ngo vao Z
T : in std_logic_vector(7 downto 0); ngo vao T
K : in std_logic_vector(7 downto 0); ngo vao K parity2 : out std_logic_vector(7 downto 0)); ngo ra parity2 end KIEM_TRA;
architecture Behavioral of KIEM_TRA is mo ta kien truc khoi kiem tra
parity2(0) <= X(0) XOR Y(0) XOR Z(0) XOR T(0) XOR K(0) ; bit dau cua parity1 duoc xor tu bit dau cua cac ngo vao
parity2(1) <= X(1) XOR Y(1) XOR Z(1) XOR T(1) XOR K(1) ; bit 2 cua parity1 duoc xor tu bit 2 cua cac ngo vao
parity2(2) <= X(2) XOR Y(2) XOR Z(2) XOR T(2) XOR K(2) ; bit 3 cua parity1 duoc xor tu bit 3 cua cac ngo vao
parity2(3) <= X(3) XOR Y(3) XOR Z(3) XOR T(3) XOR K(3) ; bit 4 cua parity1 duoc xor tu bit 4 cua cac ngo vao
parity2(4) <= X(4) XOR Y(4) XOR Z(4) XOR T(4) XOR K(4) ; bit 5 cua parity1 duoc xor tu bit 5 cua cac ngo vao
parity2(5) <= X(5) XOR Y(5) XOR Z(5) XOR T(5) XOR K(5) ; bit 6 cua parity1 duoc xor tu bit 6 cua cac ngo vao
Trang 29parity2(6) <= X(6) XOR Y(6) XOR Z(6) XOR T(6) XOR K(6) ; bit 7 cua parity1 duoc xor tu bit 7 cua cac ngo vao
parity2(7) <= X(7) XOR Y(7) XOR Z(7) XOR T(7) XOR K(7) ; bit 8 cua parity1 duoc xor tu bit 8 cua cac ngo vao
Khối Xác Nhận (Accept Block)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity XAC_NHAN is thuc the khoi so sánh
Port ( parity2 : in std_logic_vector(7 downto 0); 1 ngõ vào là du lieu parity2
o : out STD_LOGIC); 1 giá tri ngõ ra
end XAC_NHAN;
architecture Behavioral of XAC_NHAN is khai báo kien trúc cho khoi xac nhan
Trang 30end process COM;
IV Giải thích kết quả mô phỏng
Trang 31Tách chuỗi dữ liệu cần gửi đi thành 4 khối 8 bit ta được dữ liệu như bảng sau:
Trang 33Giả sử, dữ liệu ban đầu của các ngõ vào được cho ở bảng dưới như sau:
- Chuỗi bits mã LRC ( Parity1) ban đầu khi chưa thực hiện mô phỏng là chuỗi gồm 8 bit
“0” : 00000000
- Ta thực hiện phép toán logic “XOR” các cổng dữ liệu với nhau theo nguyên tắc như sau:
((A0 xor B0) xor C0) xor D0
((A1 xor B1) xor C1) xor D1
((A2 xor B2) xor C2) xor D2
((A3 xor B3) xor C3) xor D3
((A4 xor B4) xor C4) xor D4
((A5 xor B5) xor C5) xor D5
((A6 xor B6) xor C6) xor D6
((A7 xor B7) xor C7) xor D7
- Như vậy cuối cùng ta được kết quả tương ứng là chuỗi bit mã LRC (Parity1) 8 bit sau:
10110010 (trọng số tương ứng với trọng số của các bit dữ liệu)
Trang 34 Kết quả sau khi xử lý:
Trang 353 Khối kết hợp
Giả sử, dữ liệu ban đầu của các ngõ vào được cho ở bảng dưới như sau:
Ghép dữ liệu các ngõ vào cùng với parity thành 1 chuỗi được như bảng sau:
Trọng
số
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Data 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 1 0 1 Trọng
Trang 37 Kết quả:
4 Khối tách nhận
Giả sử, dữ liệu sau khi tiến hành kết hợp được cho ở bảng dưới như sau:
Trọng 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Data 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 Trọng 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 Data 1 1 0 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 1
Trang 38Tiến hành tách chuỗi dữ liệu:
Trang 39 Kết quả sau khi tách nhận:
5 Khối kiểm tra
Dữ liệu: