Python의 FPGA/L 치카 (Lattice iCE40)

소규모 FPGA에서도 L 치카



Zynq는 ARM CPU가있는 비교적 풍부한 FPGA가 장착 된 보드입니다. 보다 소비 전력도 작은 FPGA
에서 고위 합성을 이용하는 것이 가능합니까? Polyphony는 컴파일러로서 최적화를 의식한 설계로 되어 있어 리소스의 소비량은 그렇게 많지 않습니다.

타겟은 iCE40(Lattice)



전력 소모가 적은 소규모 FPGA인 Lattice의 iCE40 UltraPlus UP5K에서 Python 코드를 실행해 봅시다. iCE40 UltraPlus에는 칩 내에 SPI 컨트롤러 프리미티브와 LED 드라이브 용 프리미티브가 있습니다. 이 칩을 탑재한 평가 보드 iCE40 UltraPlus Breakout board를 사용하여 L치카와 SPI를 제어해 봅시다.



iCE40 Ultra Family Data Sheet에서 발췌

타겟 보드의 RGB LED를 L 치카



평가 보드에는 RGB LED가 탑재되어 있습니다. 지금까지 Python 코드 blink.py를 사용하여 제어해 보겠습니다. 시스템 구성은 그림과 같습니다.



blink.py 에서 생성되는 모듈의 clk, rst, led 의 신호선을 사용한 톱 모듈을 Verilog-HDL 로 작성해, 벤더의 툴로 합성, 실장하는 것으로 동작 가능한 바이너리를 할 수 있습니다.



Polyphony가 출력하는 Verilog-HDL은 벤더에 독립적이므로 X사에서 실행한 동일한 Python의 코드를 L사에서 실행하는 것이 용이하게 할 수 있습니다.
iCE40UP의 특별한 점으로 톱 모듈에 LED 드라이버의 프리미티브를 사용한다는 지시를 써 둘 필요가 있습니다. 이 설명을 통해 도구가 자동으로 LED 드라이버를 통합합니다.

rgb_primitive.v
//------------------------------
// Instantiate RGB primitives
//------------------------------
SB_RGBA_DRV RGB_DRIVER (
  .RGBLEDEN (1'b1),
  .RGB0PWM  (0),
  .RGB1PWM  (green_wire),
  .RGB2PWM  (0),
  .CURREN   (1'b1),
  .RGB0     (REDn),     //Actual Hardware connection
  .RGB1     (GRNn),
  .RGB2     (BLUn)
);

defparam RGB_DRIVER.RGB0_CURRENT = "0b000001";
defparam RGB_DRIVER.RGB1_CURRENT = "0b000001";
defparam RGB_DRIVER.RGB2_CURRENT = "0b000001";

좋은 웹페이지 즐겨찾기