Thiết kế hệ thống xử lý ảnh video trên FPGA (CycloneII), chương 17 docx

12 310 0
Thiết kế hệ thống xử lý ảnh video trên FPGA (CycloneII), chương 17 docx

Đ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

Chương 17: THỰC HÀNH I. Viết chương trình dòch 8 led từ trái sang phải và ngược lại 1. Mô hình Dùng chương trình Graphic Editor của phần mềm Maxplus có hỗ trợ một số IC đơn giản như: các cổng, IC đếm, đa hợp… và có thể mô phỏng chương trình đã biên soạn. Như bài bên dưới, ta đưa ra mô hình gồm IC đếm 4 bit và IC giải mã 74LS138. Khi có xung thì bộ đếm 4 bit sẽ bắt đầu đếm từ 0000 đến 1111 nhưng ta chỉ cần đếm từ 000 đến 111 nên chỉ chọn 3 ngõ ra từ QA, QB, QC và từ tín hiệu ra của bộ đếm, ta cho nó là tín hiệu vào của IC giải mã 74138 lần lượt được giải mã từ Y0 đến Y7. Khi đó, đèn được nối với tín hiệu ra Y sẽ làm đèn sáng tuần tự. 2. Chương trình Bước 1: Viết các chương trình riêng a. Chương trình chia tần số Vì tần số toàn cục của KIT quá lớn (25 MHz) nên ta không thể quan sát được. Do đó, ta phải chia tần số xuống khoảng 1Hz. LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY clk_div IS PORT ( clock_25Mhz : IN STD_LOGIC; clock_1MHz : OUT STD_LOGIC; clock_100KHz : OUT STD_LOGIC; clock_10KHz : OUT STD_LOGIC; clock_1KHz : OUT STD_LOGIC; clock_100Hz : OUT STD_LOGIC; clock_10Hz : OUT STD_LOGIC; clock_1Hz : OUT STD_LOGIC); END clk_div; ARCHITECTURE a OF clk_div IS SIGNAL count_1Mhz: STD_LOGIC_VECTOR (4 DOWNTO 0); SIGNAL count_100Khz, count_10Khz, count_1Khz: STD_LOGIC_VECTOR (2 DOWNTO 0); SIGNAL count_100hz, count_10hz, count_1hz: STD_LOGIC_VECTOR (2 DOWNTO 0); SIGNAL clock_1Mhz_int, clock_100Khz_int, clock_10Khz_int, clock_1Khz_int: STD_LOGIC; SIGNAL clock_100hz_int, clock_10Hz_int, clock_1Hz_int: STD_LOGIC; BEGIN PROCESS BEGIN Chia 25 WAIT UNTIL clock_25Mhz 'EVENT AND clock_25Mhz = '1'; IF count_1Mhz < 24 THEN count_1Mhz <= count_1Mhz + 1; ELSE count_1Mhz <= "00000"; END IF; IF count_1Mhz < 12 THEN clock_1Mhz_int <= '0'; ELSE clock_1Mhz_int <= '1'; END IF; clock_1Mhz <= clock_1Mhz_int; clock_100Khz <= clock_100Khz_int; clock_10Khz <= clock_10Khz_int; clock_1Khz <= clock_1Khz_int; clock_100hz <= clock_100hz_int; clock_10hz <= clock_10hz_int; clock_1hz <= clock_1hz_int; END PROCESS; Chia 10 PROCESS BEGIN WAIT UNTIL clock_1Mhz_int 'EVENT AND clock_1Mhz_int = '1'; IF count_100Khz /= 4 THEN count_100Khz <= count_100Khz + 1; ELSE count_100khz <= "000"; clock_100Khz_int <= NOT clock_100Khz_int; END IF; END PROCESS; Chia 10 PROCESS BEGIN WAIT UNTIL clock_100Khz_int 'EVENT AND clock_100Khz_int = '1'; IF count_10Khz /= 4 THEN count_10Khz <= count_10Khz + 1; ELSE count_10khz <= "000"; clock_10Khz_int <= NOT clock_10Khz_int; END IF; END PROCESS; Chia 10 PROCESS BEGIN WAIT UNTIL clock_10Khz_int 'EVENT AND clock_10Khz_int = '1'; IF count_1Khz /= 4 THEN count_1Khz <= count_1Khz + 1; ELSE count_1khz <= "000"; clock_1Khz_int <= NOT clock_1Khz_int; END IF; END PROCESS; Chia 10 PROCESS BEGIN WAIT UNTIL clock_1Khz_int 'EVENT AND clock_1Khz_int = '1'; IF count_100hz /= 4 THEN count_100hz <= count_100hz + 1; ELSE count_100hz <= "000"; clock_100hz_int <= NOT clock_100hz_int; END IF; END PROCESS; Chia 10 PROCESS BEGIN WAIT UNTIL clock_100hz_int 'EVENT AND clock_100hz_int = '1'; IF count_10hz /= 4 THEN count_10hz <= count_10hz + 1; ELSE count_10hz <= "000"; clock_10hz_int <= NOT clock_10hz_int; END IF; END PROCESS; Chia 10 PROCESS BEGIN WAIT UNTIL clock_10hz_int 'EVENT AND clock_10hz_int = '1'; IF count_1hz /= 4 THEN count_1hz <= count_1hz + 1; ELSE count_1hz <= "000"; clock_1hz_int <= NOT clock_1hz_int; END IF; END PROCESS; END a; *Cách khác Ngoài ra để chia tần số từ 25.17MHz xuống thành 1.5Hz, ta dùng FlipFlop T. Vì tín hiệu ra Q của FlipFlop T bằng ½ xung vào nên ta dùng cách này để chia đôi tần số khoảng 23 lần thì xung ra là gần 1Hz. Chương trình FlipFlopT LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fft IS PORT (clk : IN STD_LOGIC; B : OUT STD_LOGIC); END fft; ARCHITECTURE bb OF fft IS SIGNAL C: STD_LOGIC; BEGIN PROCESS (clk) BEGIN B<= C; IF (clk 'EVENT AND clk='1') THEN C<= NOT(C); END IF; END PROCESS; END bb; Chöông trình chia taàn soá duøng FlipFlopT: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cf IS PORT ( clk_25MHz : IN STD_LOGIC; clk_1Hz : OUT STD_LOGIC); END cf; ARCHITECTURE bb OF cf IS COMPONENT fft PORT ( clk : IN STD_LOGIC; B : OUT STD_LOGIC); END COMPONENT; SIGNAL B, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22 : STD_LOGIC; BEGIN X1:fft PORT MAP (clk => clk_25MHz, B => B); X2:fft PORT MAP (clk => B, B => B1); X3:fft PORT MAP (clk => B1, B => B2); X4:fft PORT MAP (clk => B2, B => B3); X5:fft PORT MAP (clk => B3, B => B4); X6:fft PORT MAP (clk => B4, B => B5); X7:fft PORT MAP (clk => B5, B => B6); X8:fft PORT MAP (clk =>B6, B => B7); X9:fft PORT MAP (clk => B7, B => B8); X10:fft PORT MAP (clk => B8, B => B9); X11:fft PORT MAP (clk => B9, B => B10); X12:fft PORT MAP (clk => B10, B => B11); X13:fft PORT MAP (clk => B11, B => B12); X14:fft PORT MAP (clk => B12, B => B13); X15:fft PORT MAP (clk => B13, B => B14); X16:fft PORT MAP (clk => B14, B => B15); X17:fft PORT MAP (clk => B15, B => B16); X18:fft PORT MAP (clk => B16, B => B17); X19:fft PORT MAP (clk => B17, B => B18); X20:fft PORT MAP (clk => B18, B => B19); X21:fft PORT MAP (clk => B19, B => B20); X22:fft PORT MAP (clk => B20, B => B21); X23:fft PORT MAP (clk => B21, B => B22); X24:fft PORT MAP (clk => B22, B => clk _1Hz); END; b. Chương trình đếm Ta viết chương trình đếm đến 8: từ ‘000’ đến 111. Do đó chỉ cần có các tín hiệu như: xung (clk) và 1 thanh ghi COUNT (3 bit) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY Counter IS PORT ( Clock : IN STD_LOGIC; Count : OUT STD_LOGIC_VECTOR (2 DOWNTO 0)); END Counter; ARCHTECTURE behavior OF Counter IS SIGNAL internal_count: STD_LOGIC_VECTOR (2 DOWNTO 0); BEGIN PROCESS (Clock) BEGIN IF (clock'EVENT AND clock='1') THEN internal_count <= internal_count + 1; END IF; END PROCESS ; count <= internal_count; END behavior; c. Chửụng trỡnh ủa hụùp 3-8 decode Vieỏt chửụng trỡnh ủa hụùp 3-8 decode. Tửứ ủũa chổ cuỷa A, B, C ta choùn Y0, Y1, Y2, Y3, Y4, Y5, Y6, Y7. LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; . Chương 17: THỰC HÀNH I. Viết chương trình dòch 8 led từ trái sang phải và ngược lại 1. Mô hình Dùng chương trình Graphic Editor của phần mềm Maxplus. Khi đó, đèn được nối với tín hiệu ra Y sẽ làm đèn sáng tuần tự. 2. Chương trình Bước 1: Viết các chương trình riêng a. Chương trình chia tần số Vì tần số toàn cục của KIT quá lớn (25 MHz). MAP (clk => B14, B => B15); X17:fft PORT MAP (clk => B15, B => B16); X18:fft PORT MAP (clk => B16, B => B17); X19:fft PORT MAP (clk => B17, B => B18); X20:fft PORT MAP

Ngày đăng: 05/07/2014, 16:20

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan