วันอังคารที่ 9 กรกฎาคม พ.ศ. 2556

โปรเจค PCI card ตอนที่ 3 ออกแบบ FPGA

โปรเจค PCI card ตอนที่ 3 ออกแบบ FPGA


ในตอนนี้ผมจะขอพูดแค่การออกแบบ FPGA สำหรับทำให้เป็น PCI card เท่านั้นนะครับ ส่วนการออกแบบให้ลง NIOS2(Soft core CPU) นั้นจะพูดอีกทีในตอนต่อๆไป

1. PCI interface
วิธีการ
  1. ช้ IP core ที่ Altera มีมาให้
  2. เขียน PCI interface ด้วย VHDL หรือ Verilog ด้วยตัวเอง 
ผมเลือกแบบที่ 2 ครับ ที่เลือกแบบที่ 2 นั้นก็เพราะท้ายสุดจะเอาบอร์ดนี้ให้ คนทั่วไปหรือนักศึกษาเอาไปเรียนรู้ ถ้าคนเอาไปแล้วยังต้องไป crack หรือต้อซึ่ง IP core มันจะทำให้ลำบากเกินไป
แต่ที่บอกว่า เขียน PCI interface ด้วย VHDL code เองนั้น ผมก็ไม่ได้เขียนเองหรือเผอิญ(อีกแล้ว)เจอหนังสือเล่มนึงสอนเขียน VHDL code แล้วเค้าก็มีตัวอย่าง code มาให้ด้วยมาลิงค์นี้เลยครับ http://www.cqpub.co.jp/hanbai/books/33/33361.htm อาจจะลำบากหน่อยเพราะเป็นภาษาญี่ปุ่น แต่ไม่เป็นไร เอาเราแค่โค้ดส่วนที่เป็น PCI interface มาใช้

2. Peripheral interface

1. DAC
MCP4922
เขียนทีเดียว 4 channel

2. ADC
MCP3208
อ่านทีเดียว 8 channel

3. DIO
อันนี้เป็นแค่ ออก output High/Low อย่างเดียว


 3. Simulation

สำคัญที่สุดคือ การ simulation ครับ โค้ด PCI interface ที่เราเอามาจะรู้ได้ยังไงว่าใช้ได้จริง ก็ต้องมาลอง simulate ดูครับ รูปข้างล่างเป็นรูปผล simulate รูปนี้เป็นการ sim ให้ สั่งงาน ADC ผ่าน PCI bus ครับ สังเกตุว่าเมื่อมีสัญญาณจาก PCI (ad, cben . ... etc ) จะมีสัญญาณออกทาง ADC (ADC_DIN, ADC_CLK ,... etc)



ส่วนรูปนี้ขยายจากรูปข้างบนอีกทีครับ


4. Memory map

จากข้อ 3 เราสามารถสื่อสารกันผ่านทาง PCI bus ได้แล้ว มาถึงการออกแบบจริง จำเป็นต้องมีสิ่งที่เรียกว่า memory map เพราะจะเป็นตัวบอกว่า เราจะสั่งงานอะไรต้อง data ไปที่ address  ไหน ข้างล่างเป็น memory map ที่ผมได้กำหนดขึ้นมาคร่าวๆ ไว้ครับ











1 ความคิดเห็น:

IBaa NB กล่าวว่า...

ช่วยแชร์โค๊ดสำหรับ interfacing mcp3208 ได้รึป่าวครับ