วันศุกร์ที่ 27 กุมภาพันธ์ พ.ศ. 2558

Keypad

4x4 Matrix Membrane Keypad


1. บอร์ด Altera FPGA (WARRIOR CYCLONE3 DEV) ชิปหมายเลข EP3C10E144C8                        1 บอร์ด
2. สายดาวน์โหลด ByteBlaster II Cable หรือ สายดาวน์โหลดUSB Blaster Cab                                  1 ชุด
3. เครื่องคอมพิวเตอร์                                                                                                                 1 ชุด
4. ออสซิลโลสโคป                                                                                                                      1 เครื่อง
5. Mini 4x4 Matrix Keyboard board                                                                                             1 อัน
6. ตัวต้านทาน 470 โอม                                                                                                              4 ตัว
7. สายไฟ                                                                                                                                   -  เส้น



http://www.parallax.com/sites/default/files/styles/full-size-product/public/27899.png?itok=zmmewvUT


http://images.elektroda.net/79_1296684161.gif


code


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

entity keypad is
port (  
dataout : out std_logic_vector(3 downto 0);
LEDin : in std_logic_vector(3 downto 0) := "0000";
LEDout : out std_logic_vector(3 downto 0) := "0000";
CLK : in std_logic

);
end keypad ;

architecture behav of keypad  is

  type state_type is (S0,S1,S2,S3);
  signal staterow : state_type := S0;
  signal count : integer :=0;
  signal data : std_logic_vector(3 downto 0);
  signal LEDdata : std_logic_vector(3 downto 0);


begin
process(CLK) begin

if rising_edge(CLK) then
   count<=count+1;

   case staterow is
     when S0 =>
data <= "1000";
  LEDdata <= LEDin;
if(count=500000) then
  staterow <= S1;
  count <=0;
end if;

when S1 =>
data <= "0100";
LEDdata <= LEDin;
if(count=500000) then
  staterow <= S2;
  count <=0;
end if;
when S2 =>
data <= "0010";
LEDdata <= LEDin;
if(count=500000) then
  staterow <= S3;
  count <=0;
end if;
when S3 =>
data <= "0001";
LEDdata <= LEDin;
if(count=500000) then
  staterow <= S0;
  count <=0;
end if;

end case;
end if;
dataout <= data;
LEDout <= LEDdata;
end process;
end behav;

ภาพการทดลอง



วันอังคารที่ 24 กุมภาพันธ์ พ.ศ. 2558

LAB 2 จงออกแบบวงจรดิจิลัทโดยใช้ภาษา VHDL สำหรับนำไปสร้างเป็นวงจรในชิป FPGA โดยใช้บอร์ดที่มีอยู่ในห้องแล็ป

LAB 2

 จงออกแบบวงจรดิจิลัทโดยใช้ภาษา VHDL สำหรับนำไปสร้างเป็นวงจรในชิป FPGA โดยใช้บอร์ดที่มีอยู่ในห้องแล็ป


อุปกรณ์การทดลอง

  1.  คอมพิวเตอร์                                                                                                   1  เครื่อง
  2.  FPGA Board (Altera WARRIOR CYCLONE III EP3C10E144C8)               1  บอร์ด
  3.  Osciloscope                                                                                                 1  เครื่อง
  4.  WS2812 RGB LED                                                                                         1 ดวง

  5.  USB Blaster                                                                                                 1  ชุด


วิธีการทดลอง

2.1) วงจรดิจิทัลมี I/O ดังนี้
    - CLK (input) มีความถี่ 50MHz ใช้สำหรับกำหนดจังหวะการทำงานของวงจรทั้งหมด (เป็นการ           ออกแบบวงจรดิจิทัลแบบ Synchronous Design)
    - RST_B (input) เป็นอินพุตสำหรับใช้รีเซตแบบ Asynchronous สำหรับการทำงานของวงจรโดย         รวม (ทำงานแบบ Active-Low) ซึ่งได้จากวงจรปุ่มกด (Push Button)
    - PB (input) เป็นอินพุตจากปุ่มกด 1 ปุ่ม ทำงานแบบ Active-low เพื่อใช้ในการเปลี่ยนสีของ               WS2812 RGB LED จำนวน 1 ดวง
    - DATA (output) เป็นเอาต์พุตสำหรับนำไปควบคุมการทำงานของ WS2812 RGB LED เพียง 1         ดวง ซึ่งเป็นสัญญาณตามข้อกำหนดของชิป WS2812 เพื่อส่งข้อมูลจำนวน 24 บิต
2.2) พฤติกรรมการทำงานเป็นดังนี้
- เมื่อเริ่มต้นหรือกดปุ่มรีเซต (RST_B) จะทำให้ค่าสีเป็น 0x000000 (24 บิต) และส่งออกไปยัง WS2812 RGB LED หนึ่งครั้ง
- เมื่อมีการกดปุ่ม PB แล้วปล่อยในแต่ละครั้ง จะมีการเปลี่ยนค่าสี 24 บิต แล้วส่งออกไปยัง RGB LED ใหม่หนึ่งครั้ง ตามลำดับดังนี้
0x000000 -> 0x0000FF -> 0x00FF00 -> 0xFF0000 แล้ววนซ้ำ
    2.3) แนวทางการออกแบบและทดสอบ
            -
ออกแบบวงจรโดยใช้ภาษา VHDL
            -
เขียน VHDL Testbench เพื่อทดสอบการทำงาน และจำลองการทำงาน
            -
ทดสอบการทำงานในบอร์ด FPGA แล้ววัดสัญญาณโดยใช้ออสซิลโลสโคป
               (
ยังไม่ต้องต่อวงจร RGB LED จริง)
            -
บันทึกผลและเขียนรายงานการทดลอง




0x000000 


0x0000FF 


0x00FF00 


0xFF0000 



RLT


logic elements



วันจันทร์ที่ 9 กุมภาพันธ์ พ.ศ. 2558

Lab 1 จงออกแบบวงจรดิจิลัทโดยใช้ภาษา VHDL สำหรับนำไปสร้างเป็นวงจรในชิป FPGA

 Lab 1

    จงออกแบบวงจรดิจิลัทโดยใช้ภาษา VHDL สำหรับนำไปสร้างเป็นวงจรในชิป FPGA 

อุปกรณ์การทดลอง

  1.  คอมพิวเตอร์                                                                                                   1  เครื่อง
  2.  FPGA Board (Altera WARRIOR CYCLONE III EP3C10E144C8)               1  บอร์ด
  3.  Osciloscope                                                                                                 1  เครื่อง
  4.  สาย Digital Logic Analyzer                                                                            1  ชุด
  5.  USB Blaster                                                                                                 1  ชุด

วิธีการทดลอง

1.1) วงจรดิจิทัลมี I/O ดังนี้
- CLK (input) มีความถี่ 50MHz ใช้สำหรับกำหนดจังหวะการทำงานของวงจรทั้งหมด (เป็นการออกแบบวงจรดิจิทัลแบบ Synchronous Design)
- RST_B (input) เป็นอินพุตสำหรับใช้รีเซตแบบ Asynchronous สำหรับการทำงานของวงจรโดยรวม (ทำงานแบบ Active-Low) ซึ่งได้จากวงจรปุ่มกด (Push Button)
- PB[2:0] (input) เป็นอินพุตจากปุ่มกด 3 ปุ่ม ทำงานแบบ Active-low เพื่อใช้ในการเปลี่ยนค่า Duty Cycle โดยเพิ่มทีละ 10 ในช่วง 0 ถึง 100 สำหรับสัญญาณ PWM(2:0) ที่มี 3 ช่องสัญญาณ
- PWM[2:0] (output) เป็นเอาต์พุตสำหรับนำไปควบคุมการทำงานของ RGB LED จำนวน 1 ดวง

1.2) พฤติกรรมการทำงานเป็นดังนี้
- เมื่อเริ่มต้นหรือกดปุ่มรีเซต RST_B ค่า PWM[2:0] จะเป็นลอจิก 0 ทั้ง 3 ช่องสัญญาณ และมีค่า Duty Cycle สำหรับสัญญาณ PWM[i], i=0,1,2 เป็น 0
- เมื่อกดปุ่มใดๆ PB[i], i=0,1,2, แล้วปล่อยในแต่ละครั้ง จะเพิ่มค่า Duty Cycle ของสัญญาณ PWM สำหรับช่องสัญญาณ i ทีละ 10 แต่ถ้าถึง 100 จะกลับไปเริ่มต้นที 0 ใหม่
- สัญญาณ PWM แต่ละช่อง ต้องมีความถี่เท่ากันและคงที่ และสามารถเลือกใช้ความถี่ได้ในช่วง 500Hz ถึง 1kHz

1.3) แนวทางการออกแบบและทดสอบ
- ออกแบบวงจรโดยใช้ภาษา VHDL
- เขียน VHDL Testbench เพื่อทดสอบการทำงาน และจำลองการทำงาน
- ทดสอบการทำงานในบอร์ด FPGA แล้ววัดสัญญาณโดยใช้ออสซิลโลสโคป
(ไม่ต้องต่อวงจร RGB LED จริง)
- บันทึกผลและเขียนรายงานการทดลอง

VHDL CODE



compilation Report



ผลการสังเคราะห์วงจร



การจำลองการทำงานด้วย Modlesim

ผลการทดลอง



รูปที่ 1 รูปสัญญาณจาก Oscilloscope


รูปที่ 2 รูปการต่อวงจร