找回密码
 注册
关于网站域名变更的通知
查看: 279|回复: 1
打印 上一主题 下一主题

转——LWHPS2FPGA深入浅出(1)-点亮LED 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-19 09:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
转——LWHPS2FPGA深入浅出(1)-点亮LED
9 E: X1 z7 ^" \3 X8 A

5 }% S6 v: k4 @) x4 {: ~! [% P8 x
* ]- y% y+ r6 P$ n! q

作者:chenzhufly  QQ:36886052

5 A6 g3 `6 D4 i9 a

   本文主要涉及lightweight HPS-to-FPGA bridge的应用,SoCARM通过lightweightHPS-to-FPGA bridge控制FPGA侧的3LED
1、  硬件环境
硬件平台:Embest SoC --LarkBoard
软件平台:开发板-linux-3.10.31
                 Quartus 14.0

/ z# J- C9 z; D! C3 [9 ~  Y
2、  系统设计框图

/ s( w; s1 |: l" h

9 ?0 Q' p$ \. S& _: e9 `7 D9 ^0 o

1 v. Y! j: g9 H5 Y& {# ?
ARM通过lightweight HPS-to-FPGA bridge控制FPGA侧的3个LED,其中Lark Board中FPGA侧的LED硬件连接如下:
& c6 |  }: B; K; ^8 n. _: R

% P2 B$ b/ b! x! o& }3、  SoC中硬件系统设计
# E  Y* o7 a3 I) Q* }* U硬件连接关系如下图所示:

" o0 j/ y2 C3 B/ Y2 ^2 J/ K7 u) w( b( E8 K# V. _
  V) ]% y  a# j' r
8 p1 j5 _( L; n: {3 n/ ^+ |

& _+ K! R6 z" F, g- Z- [# }, ?
其中PIO_LED的地址分配我0x0 - 0xf

* ~# s) l- L1 Z+ T
2 y9 B- N: R' H6 e
1 ^+ P5 ?4 N: q; X0 U- I
硬件系统例化文件如下:$ u! L7 E: u' e5 D" @: ~9 T9 S
  • .pio_led_external_connection_export                     (o_fpga_led[2:0]),
    * w- b) s- ]2 K: N: @9 U1 F! M% ^
" z) [2 y4 Q+ z5 \, d
[color=rgb(51, 102, 153) !important]复制代码

# e: {! x' q0 u! w) K' e8 Z# ?# E6 a; s. K

) W4 o3 J6 W& S4 b! p' x6 A8 y/ y% k; K  W2 Y% J' Y) Q: _$ L1 ?
设计完毕后开始生成硬件系统信息,并在Quartus中编译生成sof文件,接着转换成rbf文件,用来替换TF卡中的rbf文件
" i, a- ~  V" k6 \. e, |
8 T9 M$ B# L4 u  u
具体代码可以详见附件中的工程文件,在此不在赘述& z, O: i) t; g" T  ]

& j! X3 ]4 k  ?& q2 ~4、ARM侧代码设计
0 _# ^7 Z( T' C  Y: z     注意: lightweight HPS-to-FPGA bridge在ARM中的地址映射为0xff200000,通过上面的设计可以看出LED的偏移地址为0,通过这个地址的操作就可以控制FPGA侧的LED.
4 H* D$ [- S) M+ m
  v' Y/ a. R4 I5 [; u- ^$ k3 m; y  Y详细代码如下 blinker.c:4 a" ]9 T. v9 E
  • #include <sys/mman.h>
  • #include <sys/types.h>
  • #include <sys/stat.h>
  • #include <fcntl.h>
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <unistd.h>
  • #include <stdint.h>
  • #define PAGE_SIZE 4096
  • #define LWHPS2FPGA_BRIDGE_BASE 0xff200000
  • #define BLINK_OFFSET 0x0
  • volatile unsigned char *blink_mem;
  • void *bridge_map;
  • int main(int argc, char *argv[])
  • {
  •         int fd, ret = EXIT_FAILURE;
  •         unsigned char value;
  •         off_t blink_base = LWHPS2FPGA_BRIDGE_BASE;
  •         if (argc < 2) {
  •                 fprintf(stderr, "Usage: %s number\n", argv[0]);
  •                 exit(EXIT_FAILURE);
  •         }
  •         /* check the bounds of the value being set */
  •         value = atoi(argv[1]);
  •         if (value < 0 || value > 7) {
  •                 fprintf(stderr, "Invalid delay setting."
  •                                 "Delay must be between 1 and 15, inclusive.\n");
  •                 exit(EXIT_FAILURE);
  •         }
  •         /* open the memory device file */
  •         fd = open("/dev/mem", O_RDWR|O_SYNC);
  •         if (fd < 0) {
  •                 perror("open");
  •                 exit(EXIT_FAILURE);
  •         }
  •         /* map the LWHPS2FPGA bridge into process memory */
  •         bridge_map = mmap(NULL, PAGE_SIZE, PROT_WRITE, MAP_SHARED,
  •                                 fd, blink_base);
  •         if (bridge_map == MAP_FAILED) {
  •                 perror("mmap");
  •                 goto cleanup;
  •         }
  •         /* get the delay_ctrl peripheral's base address */
  •         blink_mem = (unsigned char *) (bridge_map + BLINK_OFFSET);
  •         /* write the value */
  •         *blink_mem = value;
  •         if (munmap(bridge_map, PAGE_SIZE) < 0) {
  •                 perror("munmap");
  •                 goto cleanup;
  •         }
  •         ret = 0;
  • cleanup:
  •         close(fd);
  •         return ret;
  • }
    $ s, E% K5 J  b0 j' T( ]* c

* Y/ }  F* E( x0 @2 ~" s$ n

) m  R) U1 J- a+ L/ [" q: Z1 |; d8 I$ F( e  s
5、测试结果
: q& }1 c5 K4 R) Z运行./blinker 0    LED全亮* a3 G6 z- R1 ]1 }: e  j* ~
运行./blinker 7    LED全灭
! a) v4 V. x' {. v# [2 m' E
0 b$ n' j, G/ @9 Z
9 V' P6 X/ s! P. v$ J3 Z
6、小结* q2 T0 b$ N: }
1)通过上述过程,可以完成通过lightweight HPS-to-FPGA bridge控制FPGA侧LED的目的# k( W0 t' Z5 ^8 j
2)这个应用比较简单,易于操作,还需要向更加深入的方向努力
6 u4 y6 j( M% ^" W7 u- G! V0 ?, C. n! k2 R( g9 N0 F
FPGA工程文件:
游客,如果您要查看本帖隐藏内容请回复
* b  V3 K+ n# q' ^/ K) @2 o
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-1 06:00 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表