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

IP CORE 之 RAM 设计- ISE 操作工具

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2023-4-10 16:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x

本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。


6 b4 c1 T& t% F

系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。后续会陆续更新 Xilinx 的 Vivado、ISE 及相关操作软件的开发的相关内容,学习FPGA设计方法及设计思想的同时,实操结合各类操作软件,会让你在技术学习道路上无比的顺畅,告别技术学习小BUG卡破脑壳,告别目前忽悠性的培训诱导,真正的去学习去实战应用,这种快乐试试你就会懂的。话不多说,上货。

* c0 {0 B+ E! h- n$ w. `5 n


. H( h1 ]1 f/ o7 Y; F/ {( G
                       IP CORE 之 RAM 设计- ISE 操作工具
. Q% F) H6 E6 Z! X' w/ U6 J4 F

9 v/ M- C. B0 ]/ M# v
3 C7 P" F0 n9 D+ N

本篇实现基于叁芯智能科技的SANXIN -B02 FPGA开发板,如有入手开发板,可以登录官方淘宝店购买,还有配套的学习视频。


8 q4 t$ g1 c# F, ~  |

随机存取存储器(random access memory,RAM)又称作"随机存储器"。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。按照存储单元的工作原理,随机存储器又分为静态随机存储器(Static RAM,SRAM)和动态随机存储器(Dynamic RAM,DRAM)。在FPGA内部的存储块为SRAM。

3 Z$ M9 j- ^& z6 O0 W

  • 设计要求/ k: ?2 M) h5 f9 k4 q, e+ _5 `

设计一个深度为256,宽度为8的RAM。不需要初始化内容。

8 m, L" q# F/ ^' d6 K6 M( S6 O8 n

  • 设计原理
    6 O& x  i3 e2 o

RAM,此种存储器支持写操作,支持读操作。在存储器建造时,可以进行初始化数据,也可以不进行初始化数据。RAM的初始化文件也是coe文件,原理和ROM类似。

由于设计RAM深度为256,故而地址的宽度为8位。


8 Q- ]$ d3 r0 E2 {( F2 X

RAM工作原理为,在时钟上升沿采样到rden为1时,将addr所指示的存储空间的数据进行输出;在时钟上升沿采样到wren为1时,将wdata存储到addr所指示的存储空间中去。

7 t4 c+ W& a! x. R5 n

  • 架构设计和信号说明& M/ _' O& p* G, y+ s5 G4 T

此模块命名为ram_test。my_ram为ip core。

7 s& |- a- N( T* X2 e7 M

% T& G3 S) S, x


; _9 m- B9 N4 ~) x


3 c% P$ }) b5 j1 M5 B& |


2 p1 }7 V: [6 W

  • 调用 ip core 之 RAM
    9 N7 M7 N1 h2 n* m. O

" J) w( a' g0 _: ?) y* N

建好工程之后,右键点击工程,选择New Source,新建IP核。


, s8 f1 z1 g0 T' E& \7 b


) g' @: L' f9 F3 d, Q2 ?0 x


- q2 V/ h0 C" q  M$ o" f) R


; y$ n+ K. W2 M3 z

找到对应路径,命名为my_ram。


) P( |+ _6 M9 i3 d( I( `4 R( f4 i

% G# q7 z4 E) m7 B( M  n

打开IP核库之后,搜索Block Memory即可看到我们的RAM。

6 t5 c) O8 o) ?1 k5 j

3 p) Q4 X* k' F: _1 t0 Z3 h


. L3 d  m, Z# z1 k% e- w$ ]! W

点击Next。

0 z( x% Y: x. m& G7 x4 g

" m2 ]# r# N4 |

/ a2 @; y3 S  }

点击Finish。


. K. e6 B& S" ], W, n

+ g+ R4 A* i( c+ G' ?! I

  |: C% j  _7 p' T6 M2 [' T

点击Next。

0 B3 l9 x/ J8 [" a" a. J

- {/ S  {6 q2 q


! l1 O( x& a" a& a8 e9 y5 d

选择默认的Single Port RAM。点击Next。


( A  E5 B; ^& ]9 L% `3 C


3 m. b$ r4 b0 H5 W3 w, o

$ ]' v0 S7 x! e# {4 B" Q& o3 ~

数据位宽为8,数据深度为256。Enable选择Always Enable。点击Next。


9 h; j' |, v- G0 {3 i& R0 u/ O. p


0 Y& I6 L; |/ K

# ~( }4 Y. w0 Y! @- G% I9 A, n

: g8 d7 k3 E$ E2 K+ G& f

此界面的数据初始化我们不需要做,因为RAM的数据是我们自己写入的,不是提前固化好的,所以这个界面我们保持默认点击Next。


  Y1 M; W9 G1 T. m; W5 w


4 j. m$ g0 h# q* O. a


% m/ ^- W% G" r/ x: |6 m+ q: p; V


1 u9 A/ B3 V- G8 N6 w& k

复位端口同样不使用,如果需要,可以勾选上。我们这里保持默认点击Next。


% P6 h  Y1 K& }( a5 Q

. s& F1 g3 z% u4 H2 t- H

* n3 Z8 x8 h+ o7 \6 M

点击Generate。


3 _$ c* N: g* z' O6 i
  • 顶层设计7 `8 [5 g. b/ \3 T

顶层负责调用my_ram,例化文件在ipcore_dir -> my_ram.veo中。


* E; A- t3 h3 X+ L

设计代码为:


3 w7 L6 t7 g3 L7 v% B


! Z8 c8 ^8 W3 W/ N& t

- ^+ L8 Z* ^0 b* D; @/ u

  • RTL仿真" h9 o) M, s' L' L5 j

在某些地址中,写入一些数据,然后读出来。由于写进去后,还需要读出来,所以地址不在使用随机值,固定在0,100,200,255地址写入随机值。

) }1 x. X1 T) ~# P

仿真代码为:

5 k& p' q  k3 D0 y) Q$ H


9 T: `5 H6 N- T2 E' h8 {

, R. o8 u6 J) e* u: ?

经过设置后,进行RTL仿真。


2 ?# f! O4 s" C8 e/ h8 D% E) K3 Q

通过波形图中,可以看出,在地址为0时,写入数据为36;在地址为100时,写入数据为129;在地址为200时,写入数据为9;在地址为255时,写入数据为99。经过一段时间后,对上述几个地址进行读取,输出的数据与写入数据相同(输出时,输出数据要比地址晚两拍)。

, ^2 q; d& e! g( {8 ^5 D

该用户从未签到

2#
发表于 2023-4-10 17:11 | 只看该作者
verilog语言和C语言很像,但是verilog易学难精呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 15:42 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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