วันศุกร์ที่ 7 พฤศจิกายน พ.ศ. 2557

การทดลองที่ 1.1 สำหรับบอร์ด FPGA


วัตถุประสงค์

-          ฝึกการสร้างวงจรบนโปรแกรม Altera และเปลี่ยนจากวงจรเป็นโค้ด VHDL
-          ทดลองเขียนโค้ด VHDL เพื่อรันบนบอร์ด FPGA
-          ศึกษาการทำงานของโปรแกรมโดยขึ้นอยู่กับ Slide Switches บนบอร์ด FPGA

คำสั่ง จงออกแบบวงจร 3-to-8 decoder มีทำงานตามข้อกำหนดต่อไปนี้

- มีอินพุต A(2:0) และเอาต์พุต Y(7:0)
ถ้า A(2:0) = "000" จะได้ Y(7:0) = "00000001"
ถ้า A(2:0) = "001" จะได้ Y(7:0) = "00000010"
ถ้า A(2:0) = "010" จะได้ Y(7:0) = "00000100"
ถ้า A(2:0) = "111" จะได้ Y(7:0) = "10000000"
- อินพุต A(2:0) ให้ใช้สวิตช์เลื่อน (Slide Switches) บนบอร์ด FPGA
- เอาต์พุต Y(7:0) ให้ใช้ LEDs บนบอร์ด FPGA

การออกแบบวงจร ให้ใช้วิธีดังต่อไปนี้ (สร้าง Design Project สำหรับแต่ละกรณี)

   1.1) ใช้วิธีวาดวงจร โดยใช้ลอจิกเกตพื้นฐาน อย่างเช่น AND, OR, NOT  





 โค้ดที่ได้จากการสร้างวงจรลอจิกพื้นฐาน

CODE….

LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY work;
ENTITY decoder3_to_8 IS
            PORT
            (
                        A2 :  IN  STD_LOGIC;    //input ของระบบโดยรับมาจากสวิตซ์เลื่อนจำนวน 3 บิต
                        A1 :  IN  STD_LOGIC;
                        A0 :  IN  STD_LOGIC;
                        Y7 :  OUT  STD_LOGIC;   //output ของระบบแสดงผลออกทาง LED จำนวน 8 ดวง
                        Y6 :  OUT  STD_LOGIC;
                        Y0 :  OUT  STD_LOGIC;
                        Y1 :  OUT  STD_LOGIC;
                        Y2 :  OUT  STD_LOGIC;
                        Y3 :  OUT  STD_LOGIC;
                        Y4 :  OUT  STD_LOGIC;
                        Y5 :  OUT  STD_LOGIC
            );
END decoder3_to_8;

ARCHITECTURE bdf_type OF decoder3_to_8 IS

SIGNAL SYNTHESIZED_WIRE_12 :  STD_LOGIC;
SIGNAL SYNTHESIZED_WIRE_13 :  STD_LOGIC;
SIGNAL SYNTHESIZED_WIRE_14 :  STD_LOGIC;

BEGIN

    SYNTHESIZED_WIRE_12 <= NOT(A2);  // Input ค่าตรงกันข้ามกับค่าที่รับเข้ามาทางสวิตซ์ของ A2
    SYNTHESIZED_WIRE_13 <= NOT(A1); // Input ค่าตรงกันข้ามกับค่าที่รับเข้ามาทางสวิตซ์ของ A1
    SYNTHESIZED_WIRE_14 <= NOT(A0)// Input ค่าตรงกันข้ามกับค่าที่รับเข้ามาทางสวิตซ์ของ A0
            //แสดงผลออกทาง Output Y0 – Y7
    Y7 <= SYNTHESIZED_WIRE_12 AND SYNTHESIZED_WIRE_13 AND SYNTHESIZED_WIRE_14;       
    Y6 <= A2 AND SYNTHESIZED_WIRE_13 AND SYNTHESIZED_WIRE_14;              
    Y5 <= SYNTHESIZED_WIRE_12 AND A1 AND SYNTHESIZED_WIRE_14;
    Y4 <= A2 AND A1 AND SYNTHESIZED_WIRE_14;
    Y3 <= SYNTHESIZED_WIRE_12 AND SYNTHESIZED_WIRE_13 AND A0;
    Y2 <= A2 AND SYNTHESIZED_WIRE_13 AND A0;
    Y1 <= SYNTHESIZED_WIRE_12 AND A1 AND A0;
    Y0 <= A2 AND A1 AND A0;

END bdf_type;


1.2 )  ใช้ภาษา VHDL ในการออกแบบ

CODE….
library ieee;
use ieee.std_logic_1164.all;
entity decoder3_to_8 is
port(
    A : in std_logic_vector( 2 downto 0 );   //input ของระบบโดยรับมาจากสวิตซ์เลื่อน จำนวน 3บิต
    Y : out std_logic_vector( 7 downto 0 )   //output ของระบบแสดงผลออกทาง LED จำนวน 8 บิต
);
end decoder3_to_8;
architecture dataflow of decoder3_to_8 is
begin
//แสดงผล Output  (Y)
     Y <= "00000001" when ( A = "000" )      //จะแสดงผล  "00000001" เมื่อมี input เป็น "000"
     else "00000010" when ( A = "001" )        //จะแสดงผล  "00000010" เมื่อมี input เป็น "001"
     else "00000100" when ( A = "010" )        //จะแสดงผล  "00000100" เมื่อมี input เป็น "010"
     else "00001000" when ( A = "011" )        //จะแสดงผล  "00001000" เมื่อมี input เป็น "011"
     else "00010000" when ( A = "100" )        //จะแสดงผล  "00010000" เมื่อมี input เป็น "100"
     else "00100000" when ( A = "101" )        //จะแสดงผล  "00100000" เมื่อมี input เป็น "101"
     else "01000000" when ( A = "110" )        //จะแสดงผล  "01000000" เมื่อมี input เป็น "110"
     else "10000000" when ( A = "111" )        //จะแสดงผล  "10000000" เมื่อมี input เป็น "111"
     else "- - - - - - - -";                              //จะไม่มีการแสดงผลใดๆ
end dataflow;

1.3 ) ทดลองในบอร์ด FPGA และเขียนรายงานการทดลอง



กำหนดพอร์ตให้แก่ Output และ Input เพื่อเชื่อมต่อระหว่างตัวโปรแกรมกับบอร์ด FPGA

Node Name
Location
I/O standard
Reserved
A[2]
PIN_25
3.3-V LVTTL

A[1]
PIN_24
3.3-V LVTTL

A[0]
PIN_23
3.3-V LVTTL

Y[7]
PIN_50
3.3-V LVTTL

Y[6]
PIN_49
3.3-V LVTTL

Y[5]
PIN_46
3.3-V LVTTL

Y[4]
PIN_44
3.3-V LVTTL

Y[3]
PIN_43
3.3-V LVTTL

Y[2]
PIN_42
3.3-V LVTTL

Y[1]
PIN_39
3.3-V LVTTL

Y[0]
PIN_38
3.3-V LVTTL

LCD_E
PIN_54
3.3-V LVTTL
As output driving ground
ตารางที่กำหนดพอร์ตต่างๆเพื่อเชื่อมต่อกับบอร์ด FPGA


รูปภาพของการแสดงผลออกจากบอร์ด FPGA
                        
                         

  INPUT FORM SWITCH IS “000”                     INPUT FORM SWITCH IS “001”
                        
                     

INPUT FORM SWITCH IS “010”                      INPUT FORM SWITCH IS “011”
                       
                      
 INPUT FORM SWITCH IS “100”                      INPUT FORM SWITCH IS “101”

                      
                       

INPUT FORM SWITCH IS “110”                       INPUT FORM SWITCH IS “111”

ลิงค์ : คลิปแสดงผลการทดลอง