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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
转——LWHPS2FPGA深入浅出(1)-点亮LED
) B. A' |2 X9 X& z6 b. n. \

* V9 o5 U% V/ l2 w6 ^
+ p! R9 H# U( H% g; O. Y

作者:chenzhufly  QQ:36886052

1 ?. ~& |- V, [; j# y/ v

   本文主要涉及lightweight HPS-to-FPGA bridge的应用,SoCARM通过lightweightHPS-to-FPGA bridge控制FPGA侧的3LED
1、  硬件环境
硬件平台:Embest SoC --LarkBoard
软件平台:开发板-linux-3.10.31
                 Quartus 14.0
7 L' ?3 [5 S* O- O' p
2、  系统设计框图

8 b9 F, @; G0 N' f& u/ j5 P) l2 D

8 M4 f# j1 `0 C8 C! y5 i: }. c5 Z! w6 O9 s& H4 M3 d

/ J! W8 e3 @  E7 ~) o) v
ARM通过lightweight HPS-to-FPGA bridge控制FPGA侧的3个LED,其中Lark Board中FPGA侧的LED硬件连接如下:

$ X: v4 r! K- H9 |5 w4 R3 S
9 y- R, i2 r: _* r# Q( [5 p
3、  SoC中硬件系统设计- s1 a6 Z* J8 `8 W9 e
硬件连接关系如下图所示:
2 j$ k# ^; a$ X9 v

8 t& @: |5 g, @1 S6 k) F! `8 u5 `& e* L1 I* ~/ ~
& p" H; R* R$ ~8 D& J1 c1 U4 o
, ^2 k; h# ?# [! B) C3 p
其中PIO_LED的地址分配我0x0 - 0xf

4 C0 K' w/ r5 e2 k7 `$ |

/ \: m3 C3 c, m1 J  ^3 G# ]
  b- W* K. b2 [% ~% Z; f硬件系统例化文件如下:
4 C  ^; V! r6 W, T2 |* O) W* p. H8 j
  • .pio_led_external_connection_export                     (o_fpga_led[2:0]),
    / c1 k  V1 K& E0 x0 H7 K# d8 Q' e
6 f! u7 i, i7 W; t
[color=rgb(51, 102, 153) !important]复制代码

6 R" P0 D9 |: w" M$ @$ X' R% G! y
' `: u7 D% e+ j/ g8 J; M& f* H& S4 F% B- H) q

% C% c$ M- v: A. j1 v: n& X4 W设计完毕后开始生成硬件系统信息,并在Quartus中编译生成sof文件,接着转换成rbf文件,用来替换TF卡中的rbf文件
: g0 J% Z7 p5 o: f" @$ s& t! |
9 V2 m3 @; c+ x/ y. U* ?  x9 _" j( U- i  g
具体代码可以详见附件中的工程文件,在此不在赘述3 B1 F* B! `- w/ m

0 V8 U$ s2 S; w- a4、ARM侧代码设计
& a% V2 \! A8 A8 g! [& _     注意: lightweight HPS-to-FPGA bridge在ARM中的地址映射为0xff200000,通过上面的设计可以看出LED的偏移地址为0,通过这个地址的操作就可以控制FPGA侧的LED.
- c! W+ j  L7 \% B, t1 P  L# Q) Q& D- v8 T: e: K2 E6 \' R
详细代码如下 blinker.c:
$ H2 Z  [' _+ f$ w& ?* {  K% t
  • #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;
  • }
    - U# p, D+ Z9 B. }% P
/ |6 t3 O7 X/ ^+ S! U: s2 d4 g2 R
+ S0 e( ?: n6 g
% z* k8 Q) S. |! [. r- O* y
5、测试结果9 k) w( N6 o. P/ s2 d
运行./blinker 0    LED全亮/ m/ z' w4 o5 `- }9 P0 Z
运行./blinker 7    LED全灭: L. F- k7 v. z7 s& {1 c

6 j  D4 A6 ]+ p" c1 F6 N6 ?

0 V7 p! H' Z5 M1 P6、小结, E. ~3 t: B: e$ y7 a+ u  w
1)通过上述过程,可以完成通过lightweight HPS-to-FPGA bridge控制FPGA侧LED的目的
; }$ o' l! c2 L; ]2)这个应用比较简单,易于操作,还需要向更加深入的方向努力( ~  \. N. B2 _1 b/ R2 o, F7 W
. r0 F" O' h* l3 W' c( z9 T2 q, o
FPGA工程文件:
游客,如果您要查看本帖隐藏内容请回复

- w" v/ r3 f* N/ m0 |* M, y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-30 21:50 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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