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

Thiết kế bộ truyền nhận UART

26 1,1K 19

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 434,5 KB

Nội dung

Thiết kế bộ truyền nhận UART

Trang 1

BÁO CÁO BÀI TẬP CHUYÊN ĐỀ (KTĐT)

Đề tài: Thiết kế bộ truyền nhận UART

GVHD: Huỳnh Việt Thắng Nhóm: 7

Trang 2

1 Kiến thức cơ bản về UART:

- UART (Universal Asynchronous Receiver Transmitter) gọi là bộ thu phát dữ liệu không đồng bộ nối tiếp UART được sử dụng phổ biến để giao tiếp giữa các thiết

bị khác nhau.

- UART có nhiệm vụ chuyển đổi 1 byte (8 bit) dữ liệu từ song song sang nối tiếp

và thêm vào các bit start, stop để tạo thành khung truyền truyền đi.

- Bộ phát UART được điều khiển việc truyền tải dữ liệu bằng một xung clock gọi

là tốc độ baud.

Hình 1: Khung truyền UART

- Dữ liệu được gởi đi không đồng bộ xung clock nên giữa bộ truyền và bộ nhận cần có một sự thống nhất với nhau Vì vậy, khi bộ truyền truyền một khung dữ liệu (frame), bộ nhận sẽ lấy mẫu các tín hiệu đó và sau đó tập hợp và khôi phục lại tín hiệu gốc.

- Cơ chế này được minh họa ở hình 2, một bit thông tin được chia thành 16 điểm lấy mẫu Vì xác suất lỗi ở vị trí mẫu đầu và mẫu cuối là cao nhất còn xác suất lỗi ở vị trí giữa là thấp nhất nên ta chọn điểm lấy mẫu ở giữa.

Hình 2: Cơ chế lấy mẫu nhận dữ liệu

Trang 3

 Từ những kiến thức ở trên và yêu cầu của đề bài, ta thiết kế một bộ vừa truyền vừa nhận UART, hiển thị ngay ra giá trị vừa truyền đi.

2 Thiết kế:

2.1 Sơ đồ khối của thiết kế:

Hình 3: Sơ đồ khối của thiết kế

- Trong đó:

• Khối điều khiển CONTROL: tiếp nhận tín hiệu điều khiển tx_in để tạo tín hiệu cho phép khối truyền UART hoạt động Đồng thời nhận các giá trị dữ liệu từ rev_data để hiển thị ra led đơn.

• Khối tạo tốc độ truyền BAUD_RATE: dựa vào tần số clock của hệ thống, khối này sẽ tính toán và tạo xung nhịp truyền dữ liệu khi truyền và lấy mẫu dữ liệu khi nhận.

• Khối truyền nối tiếp UART_TRANSMITTER: nhận dữ liệu từ ngõ vào data_in và phát đi dựa trên tốc độ baud đã được tính toán trong khối BAUD_RATE.

• Khối nhận nối tiếp UART_RECEIVER: phát hiện, lấy mẫu và lưu trữ dữ liệu nhận nối tiếp từ chân uart_rx với tốc độ baud đã được tính toán ở khối BAUD_RATE.

Trang 4

2.2 Máy trạng thái hữu hạn:

- Máy trạng thái hữu hạn của bộ truyền:

reset=’0’ or uart_en=0’

Idle tx_enable=’1’ tx_count=”1001”

and tx_clken

Hình 4: Máy trạng thái hữu hạn của bộ truyền

- Trong đó:

• reset: tín hiệu reset hệ thống.

• uart_en: tín hiệu cho phép hệ thống làm việc.

• tx_enable: tín hiệu cho phép bộ truyền làm việc.

• tx_count: tín hiệu đếm số bit được truyền đi.

• tx_clken: xung cho phép dịch từng bit dữ liệu khi bộ truyền hoạt động.

Trạng thái hiện tại Mô tả Điều kiện Trạng thái kế tiếp Idle Trạng thái ban đầu khi bộ

truyền không hoạt động

tx_enable Load_txs

Load_txs Trạng thái nạp dữ liệu

vào thanh ghi dịch truyền

Trang 5

- Máy trạng thái hữu hạn của bộ nhận:

reset=’0’ or uart_en=’0’

uart_rx_sync=’0’ rx_count=”1010”

uart_rx_sync=’1’

and samp_count=”0111”

uart_rx_sync=’0’ and samp_count=”0111”

Hình 5: Máy trạng thái hữu hạn của bộ nhận

- Trong đó:

• Reset: tín hiệu reset hệ thống.

• Uart_en: tín hiệu cho phép hệ thống làm việc.

• Uart_rx_sync: tín hiệu lấy mẫu đọc được.

• Samp_count: tín hiệu đếm số lần lấy mẫu trong từng xung vào.

• Rx_count: tín hiệu đếm xung vào.

Trạng thái hiện tại Mô tả Điều kiện Trạng thái kế tiếp Idle Trạng thái ban đầu khi

bộ nhận không hoạt động

uart_rx_sync=’0’ Check_start_bit samp_count=”0111”

Idle

Check_start_

bit

Receive_dat a

Trang 6

kiểm tra bit start và uart_rx_sync=’1’

samp_count=”0111”

và uart_rx_sync=’0’ Receive_data Receive_data Trạng thái lấy mẫu các

bit dữ liệu trên đường nhận

Uncomment the following library declaration if using

arithmetic functions with Signed or Unsigned values

Trang 7

entity baud_rate is

port (

clk : in std_logic; clock dong bo he thongreset : in std_logic; reset he thong Tich cuc muc thapuart_en : in std_logic; cho phep he thong lam viec Tich cuc muc cao

tx_clken : out std_logic; xung cho phep dich tung bit

du lieu khi bo truyen hoat dong

rx_clken : out std_logic xung cho phep xac dinh vi tri lay mau du lieu o bo nhan

);

end baud_rate;

architecture Behavioral of baud_rate is

signal tx_count: std_logic_vector(13 downto 0);

signal rx_count: std_logic_vector(9 downto 0);

signal tx_clken_temp: std_logic;

signal rx_clken_temp: std_logic;

constant temp: integer:=324; 9600=fo/((324+1)*16 - 1), fo=50 MHz

Trang 8

end if;

end if;

end process;

Trang 9

process (rx_count, rx_clken_temp)

Uncomment the following library declaration if using

arithmetic functions with Signed or Unsigned values

Trang 10

entity control is

port(

clk : in std_logic; clock dong bo he thongreset : in std_logic; reset he thong Tich cuc muc thapuart_en : in std_logic; cho phep he thong lam viec Tich cuc muc cao

tx_in : in std_logic; cho phep ghi du lieu tu data_in vao bo truyen Tich cuc muc cao

rev_data : in std_logic_vector(7 downto 0); du lieu nhan duoc

led_0 : out std_logic_vector(3 downto 0); gia tri nhan duoc xuat ra led don

led_1 : out std_logic_vector(3 downto 0); gia tri nhan duoc xuat ra led don

tx_en : out std_logic tin hieu cho phep bo truyen hoat dong

);

end control;

architecture Behavioral of control is

khai bao cac tin hieu

signal data_led_0: std_logic_vector(3 downto 0);

signal data_led_1: std_logic_vector(3 downto 0);

signal tx_in_sync: std_logic;

begin

process (rev_data)

gan gia tri cho led don

begin

data_led_0 <= rev_data(3 downto 0);

data_led_1 <= rev_data(7 downto 4);

Trang 11

end process;

led_0 <= data_led_0;

led_1 <= data_led_1;

process (clk, reset, uart_en, tx_in, tx_in_sync)

tao tin hieu cho phep truyen

Uncomment the following library declaration if using

arithmetic functions with Signed or Unsigned values

Trang 12

use IEEE.NUMERIC_STD.ALL;

Uncomment the following library declaration if instantiating

any Xilinx primitives in this code

data_in : in std_logic_vector(7 downto 0); 8 bit du lieu ngo vao

tx_enable : in std_logic; tin hieu cho phep bo truyen hoat dong

tx_clken : in std_logic; xung cho phep dich tung bit

du lieu khi bo truyen hoat dong

uart_tx : out std_logic duong truyen du lieu dong bo

);

end uart_transmitter;

architecture Behavioral of uart_transmitter is

signal state: std_logic_vector(1 downto 0);

constant idle: std_logic_vector(1 downto 0):= "00";

constant load_txs: std_logic_vector(1 downto 0):= "01";

constant shift_data: std_logic_vector(1 downto 0):= "10";

Trang 13

signal tsr: std_logic_vector(9 downto 0);

signal tx_count: std_logic_vector(3 downto 0);

Trang 14

dau ra may trang thai huu han

tx_count <= tx_count + 1; bo dem truyen

end if;

when others =>

tsr <= "0000000000";

uart_tx <= '1';

Trang 15

Uncomment the following library declaration if using

arithmetic functions with Signed or Unsigned values

use IEEE.NUMERIC_STD.ALL;

Uncomment the following library declaration if instantiating

any Xilinx primitives in this code

Trang 16

rx_clken : in std_logic; xung cho phep xac dinh vi tri lay mau du lieu o bo nhan

uart_rx : in std_logic; duong nhan du lieu dong bo

rev_data : out std_logic_vector(7 downto 0) du lieu nhan duoc

);

end uart_receiver;

architecture Behavioral of uart_receiver is

signal rx_count: std_logic_vector(3 downto 0); tin hieu dem xung vao

signal samp_count: std_logic_vector(3 downto 0); tin hieu dem so lan de lay mau trong tung xung vao

signal uart_rx_sync: std_logic; tin hieu lay mau doc duocsignal rsr: std_logic_vector(7 downto 0);

signal state: std_logic_vector(1 downto 0);

constant idle: std_logic_vector(1 downto 0):= "00";

constant check_start_bit: std_logic_vector(1 downto 0):= "01";constant receive_data: std_logic_vector(1 downto 0):= "10";

Trang 19

rx_count <= rx_count + 1;

if(rx_count<"1001") then chi dem den xung thu 9, loai bo bit start va stop ra du lieu nhan duoc

rsr <= (uart_rx_sync & rsr(7 downto 1)); dich du lieu

Uncomment the following library declaration if using

arithmetic functions with Signed or Unsigned values

USE ieee.numeric_std.ALL;

Trang 20

ENTITY test_uart IS

END test_uart;

ARCHITECTURE behavior OF test_uart IS

Component Declaration for the Unit Under Test (UUT)

COMPONENT full_uart

PORT(

clk : IN std_logic; clock dong bo he thong

reset : IN std_logic; reset he thong Tich cuc muc thap uart_en : IN std_logic; cho phep he thong lam viec Tich cuc muc cao

data_in : IN std_logic_vector(7 downto 0); 8 bit du lieu ngo vao

tx_in : IN std_logic; cho phep ghi du lieu tu data_in vao bo truyen Tich cuc muc cao

uart_rx : IN std_logic; duong nhan du lieu dong bo

led_0 : OUT std_logic_vector(3 downto 0); gia tri nhan duoc xuat ra led don

led_1 : OUT std_logic_vector(3 downto 0); gia tri nhan duoc xuat ra led don

uart_tx : OUT std_logic duong truyen du lieu dong bo

Trang 21

signal reset : std_logic := '0';

signal uart_en : std_logic := '0';

signal data_in : std_logic_vector(7 downto 0) := (others => '0'); signal tx_in : std_logic := '0';

signal uart_rx : std_logic := '0';

Outputs

signal led_0 : std_logic_vector(3 downto 0);

signal led_1 : std_logic_vector(3 downto 0);

signal uart_tx : std_logic;

Clock period definitions

chu ky = 20 ns, f = 50 MHz

baud_rate = 9600 => t_data = 104200 ns

constant clk_period : time := 20 ns;

constant t_data: time := 104200 ns;

BEGIN

Instantiate the Unit Under Test (UUT)

uut: full_uart PORT MAP (

Trang 22

tao du lieu vao

tx_in <= '1'; cho phep bo truyen hoat dong

wait for 20 ps;

reset <= '1';

uart_en <= '1';

Trang 23

wait for t_data;

Trang 24

Hình 6: thời điểm uart_tx nhận giá trị bit start và ghi vào trong bit MSB của led_1

Hình 7: thời điểm uart_tx nhận giá trị bit LSB của data_in và tiếp tục ghi vào led_1

Trang 25

Hình 8: thời điểm uart_tx nhận giá trị bit thứ 2 của data_in và ghi vào led_1

Hình 9: quá trình truyền nhận kết thúc, 4 bit cao của data_in được ghi vào

led_1 và 4 bit thấp của data_in được ghi vào led_0

Ngày đăng: 01/04/2016, 13:27

HÌNH ẢNH LIÊN QUAN

Hình 2: Cơ chế lấy mẫu nhận dữ liệu - Thiết kế bộ truyền nhận UART
Hình 2 Cơ chế lấy mẫu nhận dữ liệu (Trang 2)
Hình 1: Khung truyền UART - Thiết kế bộ truyền nhận UART
Hình 1 Khung truyền UART (Trang 2)
2.1. Sơ đồ khối của thiết kế: - Thiết kế bộ truyền nhận UART
2.1. Sơ đồ khối của thiết kế: (Trang 3)
Hình 4: Máy trạng thái hữu hạn của bộ truyền - Thiết kế bộ truyền nhận UART
Hình 4 Máy trạng thái hữu hạn của bộ truyền (Trang 4)
Hình 5: Máy trạng thái hữu hạn của bộ nhận - Thiết kế bộ truyền nhận UART
Hình 5 Máy trạng thái hữu hạn của bộ nhận (Trang 5)
Hình 6: thời điểm uart_tx nhận giá trị bit start và ghi vào trong bit MSB của led_1 - Thiết kế bộ truyền nhận UART
Hình 6 thời điểm uart_tx nhận giá trị bit start và ghi vào trong bit MSB của led_1 (Trang 24)
Hình 7: thời điểm uart_tx nhận giá trị bit LSB của data_in và tiếp tục ghi vào led_1 - Thiết kế bộ truyền nhận UART
Hình 7 thời điểm uart_tx nhận giá trị bit LSB của data_in và tiếp tục ghi vào led_1 (Trang 24)
Hình 8: thời điểm uart_tx nhận giá trị bit thứ 2 của data_in và ghi vào led_1 - Thiết kế bộ truyền nhận UART
Hình 8 thời điểm uart_tx nhận giá trị bit thứ 2 của data_in và ghi vào led_1 (Trang 25)
Hình 10: Kết quả tổng hợp phần cứng - Thiết kế bộ truyền nhận UART
Hình 10 Kết quả tổng hợp phần cứng (Trang 26)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w