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

从内存寻址看 FPGA 设计

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本文的目的不是介绍内存寻址的具体设计,其实很多细节我也不了解,而是想通过内存寻址的设计思想看看对 FPGA 的设计有什么帮助和借鉴。
/ G: t3 ]+ }. {# |8 _4 s0 ~8 S$ u0 n! d
内存寻址有两个的重要的设计:
- K4 h; `; K+ p" ^/ ]& l* q
8 h! H9 {5 D& r' B. _5 ]1 j- L1 g关于内存分页 - 规整即简单! f$ N! W) t# B) M2 U* O
内存分页即将内存分割为以页(一般是4KB)为单元的块,然后内存的分配和使用都是以页为最小单元。假如一个进程只需要 2KB 的内存,仍然给其分配 4KB(一页)的空间。
- |: |1 X; B& U& T2 `( @8 t% |/ I- S: F9 W' }4 Y* |5 V
关于内存分页的好处,我觉得知乎上一位知友的描述非常生动和形象。他将内存分页比喻为停车场划分停车位。停车位的划分使得停车人寻找停车位时变得简单,停车人不再需要自己判断位置空间是否够大能停下车,只需要看有没有空位即可。同时也使停车位的使用管理变得高效,停车场管理人员可以很容易判断并发布停车位的空位信息。当然,这可能只是内存分页的好处中的其中一个。
8 Z7 u. M) m1 l$ q1 H2 N$ r9 f5 A9 H$ \& S# n
我们可以总结一下内存分页的使用场景:
& H! X' r, B. N9 r
4 t* o8 z0 E4 F, e, S: N$ f有一块大的 memory 空间9 k& T) |9 s, R( g& j
. m; C- g( \( |
有很多 Users 要使用 memory
& B- C. A- C* C3 ]2 c/ K* o, D. f* h! K: f& w, c
Users 使用 memory 的时间和空间大小不确定4 Y! o7 F/ N7 E9 V
! v( \8 r, X6 x+ l* ~+ _0 U6 J) t) ]
那么当我们在 FPGA 设计中遇到这样类似的场景时,便可以借鉴内存分页的思想,将 memory 划分为不同的块,来提高 memory 的使用和管理效率。当然,对于 memory 块的划分可能导致 memory 的浪费,像前面举的例子,只需要 2KB 的内存,却分配了 4KB 的空间。如何正确的取舍,去做 tradeoff,这也是设计者需要考虑的。% s8 Y- K1 x6 c% v

& C5 r) w3 H# t" z再往本质里看,这其实是硬件设计上的一个“规整”问题。就像CPU指令集的设计,因为不同指令对 bit 利用的规整,简化了CPU的设计。规整即简单。7 B$ `  o  R% Z. M5 f; w/ f

7 L; n5 |. ]) g. l8 X0 p0 \关于页表分级 - 时间换空间, `. B8 N- f! x3 B& A& c
页表是用来将虚拟地址映射为物理地址的数据结构。对于 4KB 的页单元,需要 12-bit 来寻址。如果地址线的总位宽是 32-bit,那么我们需要 2^20 (32-12=20) 个页表,假如每个表项用 4 byte,那么页表总共要用到 4MB 的内存。这还只是一个进程用到的空间。
$ Y8 V3 p. P% V+ n
: |! J) b% ^7 u6 Z. t页表分级减少了页表对内存的使用量。用过两级分页(第一级页目录+第二级页表),即先通过第一级页目录查找到页表,再通过第二级页表去查找页,只有当第一级的页目录项用到时才去分配第二级的页表。举个例子,假如页目录和页表分别占用10-bit。页目录有2^10个项 (一共占用 4KB 内存),假如页目录只有第一项被用到,那么我们只需要分配其对应的页表,这个页表也是有2^10个项 (一共占用 4KB 内存),那么此时只用到了 4KB+4KB = 8KB 内存,相比于 4MB 节省了很大部分。( V8 L, ~7 X. }5 S& }8 Y* q$ S$ E% F

* s5 e- _1 E4 L; `我们总结一下页表分级的场景:! ~8 z% @: Z& d

0 z1 S8 F0 P  M) }多个 Users 共用一份地址线访问 memory! Z$ S2 T1 G$ w/ w* v' {5 V8 {
- b+ G8 R4 v4 U- N% Q, e- ]
每个 Users 都需要自己的 memory 空间& H0 M, `# i5 i) u9 J

# v6 W0 q2 P7 j# z8 K实际有效的 Users 的数目是动态变化的
8 ~. ]  z9 U/ O9 k4 h, b9 `% R* l! [' O, v# R
Users 对 memory 空间的使用也是动态变化的( G( ^9 v5 d3 D  A7 N6 e

7 c+ k( B* j6 j# B6 W遇到类似的场景我们便可以考虑将地址分级,对 Users 动态分配 memory 空间,几个 Users 甚至可以复用一份 memory,达到节省 memory 使用的目的。这样做当然增加了 memory 控制和管理的复杂度,也是设计上的 tradeoff。/ t* V8 k7 |+ i" V% d4 P* A

% J7 K/ _, s" _# z( c再往本质里看,这个场景其实利用了事件发生的时间上的差异。是时间“换”空间的概念,地址分级只是实现这个概念的一个手段。
  j! q- x8 l0 j% a7 f
1 J; ~1 [$ F9 _3 ]* d. O7 ?总结# c4 g( M, }; ~+ r* X
本文思考了内存寻址的两个设计点对 FPGA 设计的借鉴意义。很多时候,设计的思想是相通的,尤其是像 CPU 或者 Linux内核 这样的经典的,经久不衰的设计。

! U3 U7 Q3 D; r9 c. p

该用户从未签到

2#
发表于 2021-11-13 10:00 | 只看该作者
很多时候,设计的思想是相通的,尤其是像 CPU 或者 Linux内核 这样的经典的,经久不衰的设计
+ y: q6 ~$ }2 `" h) `2 a0 ?

该用户从未签到

3#
发表于 2021-11-13 10:41 | 只看该作者
遇到类似的场景我们便可以考虑将地址分级,对 Users 动态分配 memory 空间,几个 Users 甚至可以复用一份 memory,达到节省 memory 使用的目的。
" k' j4 o0 t& h5 W* S) W; o

该用户从未签到

4#
发表于 2021-11-13 10:56 | 只看该作者
PU指令集的设计,因为不同指令对 bit 利用的规整,简化了CPU的设计5 p& d5 p  p% T

该用户从未签到

5#
发表于 2021-11-13 10:57 | 只看该作者
当我们在 FPGA 设计中遇到这样类似的场景时,便可以借鉴内存分页的思想,将 memory 划分为不同的块,来提高 memory 的使用和管理效率2 [3 c* y4 A' Z$ X
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-29 00:25 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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