CHƯƠNG III: THUYẾT MINH CHƯƠNG TRÌNH CHƯƠNG III: THUYẾT MINH CHƯƠNG TRÌNH

Một phần của tài liệu GIỚI THIỆU VỀ BỘ KIỂM SOÁT CID CHO THUÊ BAO CÓ ĐĂNG KÝ DỊCH VỤ CLI (2).doc (Trang 44 - 50)

C1 C2 XTAL

CHƯƠNG III: THUYẾT MINH CHƯƠNG TRÌNH CHƯƠNG III: THUYẾT MINH CHƯƠNG TRÌNH

CHƯƠNG III: THUYẾT MINH CHƯƠNG TRÌNH

I..Khối Clock:

Khai báo thành phần:

entity clock is

port ( clkin : in bit; clksec : out bit; clkfsk : out bit; clk8fsk : out bit; clkasyn: out bit

); end clock;

Chức năng các cổng:

clkin : nhận xung vào

clksec : xung ra cấp cho bộ Timer clkfsk : xung ra cấp cho CMX602A clk8fsk: xung ra cấp cho khối UART

clkasyn : xung ra cấp cho khối UART

Khối này nhận xung clock vào từ bộ tạo xung (thạch anh) cho CMX602A cĩ tần số 3.579545 MHz và chia ra các xung clock ở đầu ra cĩ tần số 1Hz ( clksec -để cấp cho bộ đếm giờ trong mạch), cĩ tần số 1200Hz (clkfsk –để khi nhận được tín hiệu từ chân IRQN xuống thấp thì cấp cho chân RXCK của CMX602A để hoạt động ở chế độ Data Retiming), hai xung cĩ tần số 150Hz và 1800Hz (clk8fsk và clkasyn) để cấp cho khối uart.

II..Khối Serial_parallel:

Khai báo thành phần:

entity serpar is --doi data tu serial sang parallel port ( datain : in bit;

clk : in bit; det : in bit; enout : out bit;

dataout : out bit_vector(7 downto 0) );

end serpar ;

Chức năng các cổng:

datain : dữ liệu vào dạng nối tiếp. clk : xung clock vào.

det : xung báo cĩ dữ liệu vào. enout : xung báo hiệu cĩ dữ liệu ra. dataout : dữ liệu ra dạng song song.

Khối này nhận dữ liệu từ chân RXD của CMX602A ở dạng nối tiếp và chuyển sang dạng song song 8 bit để qua bộ chọn dữ liệu đưa vào bộ đệm chờ xử lí. Trong bộ này cĩ sử dụng một signal dạng bit_vector(7 downto 0) để chứa data tạm thời trong 8 chu kỳ clock. Khi cĩ dữ liệu vào ( từng bit một) thì dữ liệu đĩ sẽ được đưa vào signal theo thứ tự. Cứ sau tám chu kỳ (signal đầy) thì port enout sẽ chuyển lên cao ( một xung ) báo hiệu cĩ data ra, và lúc này đầu ra dataout sẽ lấy giá trị của signal đĩ để xuất ra.

Khai báo thành phần:

entity timer is

port ( clk : in bit;

dc : in bit;

giay_dv : out bit_vector(7 downto 0);

giay_ch : out bit_vector(7 downto 0);

phut_dv : out bit_vector(7 downto 0); phut_ch : out bit_vector(7 downto 0); gio : out bit_vector(7 downto 0); alarm : out bit_vector(2 downto 0)); end timer;

Chức năng các cổng:

clk : xung clock vào cĩ tần số 1Hz lấy từ khối clock. dc : tín hiệu đảo cực đến.

giay_dv : dữ liệu giây hàng đơn vị. giay_ch : dữ liệu giây hàng chục. phut_dv : dữ liệu phút hàng đơn vị. phut_ch : dữ liệu giây hàng chục. gio : dữ liệu giờ. (adsbygoogle = window.adsbygoogle || []).push({});

alarm : tín hiệu báo cho biết dữ liệu ra là loại nào. Bảng hoạt động: Alarm Chế đoä 000 Giay_dv 001 Giay_ch 010 Phut_dv 011 Phut_ch 100 Gio 101 Cĩ FSK vào 110 Null

111 Reset lại bộ đếm giờ

Khối này nhận xung clock vào cĩ tần số 1Hz vào và bắt đầu đếm giờ khi cuộc gọi được thiết lập (tín hiệu đảo cực lên ‘1’) cho đến khi kết thúc đàm thoại (đảo cực xuống ‘0’). Khối này cĩ đầu ra alarm để cho bộ điều khiển biết được thời gian đếm thay đổi (alarm = ”001” – “100”: khi bộ đếm nhảy sang giây hàng chục, phút, giờ mới), dữ liệu này được chương trình nhận biết để làm tươi bộ đệm dữ liệu; biết được khi cuộc gọi kết thúc (alarm = ”000”: khi đảo cực xuống thấp); và cả khi cĩ cuộc gọi mới khác tới (alarm = ”111”) để chuẩn bị nhận dữ liệu FSK mới và reset lại bộ đếm giờ.

Khi cuộc gọi được kết nối, các biến trong bộ đếm bắt đầu tăng lên sau mỗi chu kỳ xung clock ( ở sườn lên ), và gán ra cho các port. Khi giờ, phút, giây hàng chục thay đổi thì port alarm sẽ thay đổi để báo cho khối control biết để điều khiển bộ cnọn kênh data cho phép data đi vào bộ đệm ( làm tươi ), hoặc là khi cĩ tín hiệu FSK đến thì bộ chọn kênh sẽ nhận alarm để biết data đến và lưu vào vùng nhớ.

IV..Khối Mux_data:

Khai báo thành phần:

entity mux_data is port (

FSKin : in STD_LOGIC_VECTOR(7 downto 0) ; giay_dv : in STD_LOGIC_VECTOR(7 downto 0) ; giay_ch : in STD_LOGIC_VECTOR(7 downto 0) ; phut_dv : in STD_LOGIC_VECTOR(7 downto 0) ; phut_ch : in STD_LOGIC_VECTOR(7 downto 0) ; gio : in STD_LOGIC_VECTOR(7 downto 0) ; driver : in STD_LOGIC_VECTOR(2 downto 0) ; dataout : out STD_LOGIC_VECTOR(7 downto 0) ) ; end mux_data; Bảng hoạt động: driver data_out 000 giay_dv 001 giay_ch 010 phut_dv 011 phut_ch 100 gio 101 Cĩ FSK vào 110 Null

111 reset lại bộ đếm giờ

Khối này nhận dữ liệu vào từ bộ Timer, CMX602A và tín hiệu điều khiển từ khối Control vào port “driver” để trong các trường hợp khác nhau thì chọn ra dữ liệu nào sẽ được đưa vào bộ đệm: FSK đã giải điều chế hay là thời gian từ bộ đếm giờ theo bảng hoạt động ở

trên. Ví dụ khi driver = 100 thì dataout nhận giá trị của gio, khi driver = 101 thì dataout

nhận giá trị của FSK. V..Khối Buffer:

Khai báo thành phần:

entity mybuffer is

port( clk :in bit; cs :in bit; rd_buf :in bit; wr_buf :in bit;

driver :in bit_vector(0 to 2); databus :inout bit_vector(0 to 7);

end mybuffer;

clk : xung clock vào.

cs : chọn chip.

rd_buf : yêu cầu đọc buffer. wr_buf: yêu cầu ghi vào buffer. Bảng hoạt động:

Cs Wr_buf Rd_buf Chế độ họat động

0 X X Khơng họat động

1 1 x Ghi vào buffer

0 1 Đọc dữ liệu ra

0 0 Null

Khối này là bộ đệm dữ liệu 36 byte. Khi nhận tín hiệu điều khiển từ bộ điều khiển vào port “driver” và dữ liệu từ bộ Mux_data vào port “data_in” thì sẽ lưu dữ liệu vào một địa chỉ cố định trong “arr”. Khi bộ điều khiển cĩ yêu cầu đọc dữ liệu (rd_buf=’1’) thì Buffer sẽ xuất dữ liệu ra port “data_out”.

VI.. I..Khối Controlbus: Khai báo thành phần: entity controlbus is port ( clkfsk : in bit; dc : in bit; det : in bit; wr_read : in bit;

enout : in bit; --- lay tu mux_data alarm : in bit_vector(2 downto 0); driver : out bit_vector(2 downto 0);

wr_buf : out bit; wr_uart : out bit );

end controlbus; (adsbygoogle = window.adsbygoogle || []).push({});

Chức năng các cổng:

clkfsk : nhận xung vào

dc : tín hiệu đảo cực nhận vào det : xung báo cĩ dữ liệu vào.

wr_ready : xung vào báo cho biết bộ đệm sẵn sàng cho phép ghi enout : xung ra từ bộ mux_data cho biết cĩ dữ liệu ra

alarm : tín hiệu ra từ bộ Timer

driver : tín hiệu ra để điều khiển các khối khác wr_buf: xung ra yêu cầu để ghi lên buffer

wr_uart : xung ra yêu cầu để ghi lên uart

Khối này nhận các tín hiệu từ các khối như Timer, buffer, mux_data, uart, và các tín hiệu khác như đảo cực, báo cĩ dữ liệu vào để phân tích các trường hợp xảy ra và từ đĩ sẽ đưa ra các tín hiệu điều khiển lại bus dữ liệu cho phép các khối đọc và ghi dữ liệu để khơng bị xung đột, tranh chấp.

Hoạt động:

Khi dc=’0’, nếu det=’1’ thì gán driver=”101”; nếu det=’0’ thì giữ nguyên trạng thái của driver.

Khi dc chuyển từ 0 sang 1 thì gán driver=”111”.

Khi dc=’1’ thì chờ alarm, khi alarm là “001”, “010”, “011”, “100” thì gán driver=alarm; cịn alarm khác thì giữ nguyên trạng thái của driver.

wr_buf lên mức cao chỉ khi nào driver=”101” hay là enout đổi trạng thái ( 0 sang 1 hay 1 sang 0), cịn trạng thái khác thì gán ‘0’.

Port wr_uart=’1’ chỉ khi nào wr_buf=’0’ và wr_ready=’1’.

Một phần của tài liệu GIỚI THIỆU VỀ BỘ KIỂM SOÁT CID CHO THUÊ BAO CÓ ĐĂNG KÝ DỊCH VỤ CLI (2).doc (Trang 44 - 50)