如何理解FPGA中存放程序的RAM?

如何理解FPGA中存放程序的RAM?,第1张

FPGA内部的RAM分为两部分,一部分就是你的分布式的RAM,用于LUT,还有一种是块ram(BLOCK RAM)是一块用于存储数据的专用RAM,也就是你的系统设计中需要用到容量较大的数据储存区域(比如FIFO,SRAM等)。

FPGA实现逻辑功能就是通过LUT来的,LUT最重要的部分就是RAM,用来保存你的设计转换成的真值表。比如你有4个输入,那么这4个输入产生的组合逻辑结果最多也就是2的4次方16种结果,FPGA把这个16种结果分别对应4个输入地址,输入产生一个4位地址,就在RAM里面找到对应的结果,从而输出相应的结果。

你的理解基本正确,用于LUT的RAM不是在一起的,而是分布式的。另外有一块大的RAM用于系统设计的。

这些ram里面的数据掉电后都会丢失,这也是FPGA和CPLD的区别,FPGA每次上电都要从外部的FLASH或者在线下载BIT流到 内部的RAM里面去。

将片内RAM的20H,21H,22H单元的内容依次存入片外RAM的20H,21H,22H中:

MOV R0,#20H

MOV R1,#03H用于控制循环次数

MOV DPTR,#20H

LOOP:

MOV  A, @R0

MOVX  @DPTR , A

INC  R0片内RAM地址加一

INC DPTR;外部RAM地址加一

DJNZ  R1,LOOP;未循环完3次,跳回继续移数值

SJMP   $;停止

END

编程将片外RAM的1000H单元开始的100个字节的数据相加,结果存放于R7R6中:

MOV   R6,  #0

MOV   R7,  #0

CLR C;必须先将CY(进位标志)清零

MOV   DPTR,  #1000H

MOV   R2,  #100

LOOP:

MOVX   A,  @DPTR

ADD   A,  R6

MOV  R6,  A;存储低8位

JC  ADD2;CY为一的话,跳转到ADD2,使R7加一(即低8位有进位的话,高8位要加一)

INC   DPTR

DJNZ  R1,   LOOP

SJMP   $

ADD2:

INC R7;R7存储高8位

RET

END

程序编写

1970

70年代早期,Charles Moore在他的语言Forth中写下了第一个有意义的程序

Prolog方面的工作大约在此时开始了。

同样是在70年代早期的某一天,Xerox PARC由Alan Kay领导,开始了Smalltalk的设计工作。早期版本包括Smalltalk-72,Smalltalk-74和Smalltalk-76。

Pascal在CDC 6000-series电脑上的一个实现出现了。

编程器

Icon,SNOBOL4的一个后代产品问世。

1972

Konrad Zuse写的关于Plankalkul(见1946年)手稿终于出版了。

Dennis Ritchie设计了C。但是最终的参考手册却是在1974年发布的。

Prolog的第一个实现——Alain Colmerauer和Phillip Roussel的功劳。

1974

另一个COBOL的ANSI规范出现。

1975

Tiny BASIC,由Bob Albrecht和Dennis Allison设计(由Dick Whipple和John Arnold实现),运行在2KB内存的微型计算机上。一台4KB的机器是较为合适的,它将有2KB的内存应用于这个程序上。

Bill Gates和Paul Allen编写的一个BASIC版本以抽取每份拷贝版税的形式销售给MITS(Micro Instrumentation and Telemetry Systems)。MITS生产Altair,这是一种8080结构的微型计算机。

Scheme,一个LISP的“方言”,由G.L. Steele和G.J. Sussman设计。

Pascal用户手册和报告出版,Jensen和Wirth编写。许多人至今都认为它是Pascal方面权威的参考书籍。

B.W. Kerninghan描述了RATFOR——RATional FORTRAN。它是预处理程序,并且允许在FORTRAN中使用类C的控制结构。RATFOR被应用到了Kernighan和Plauger的“Software Tools”中,它出现在1976年。

RAM(Random Access Memory)是一种计算机内存,内存中存储的程序是以二进制形式表示的,通常使用十六进制表示。

例如,如果要表示一个内存地址为0x0000的16位二进制程序,则可以使用以下格式:

0000: 4E 45 58 54 20 50 52 4F 47 52 41 4D 0D 0A 24 00

其中,“0000”表示该程序的内存地址,后面的数字和字母则是该地址中存储的16个字节的十六进制表示。

这种格式常用于调试和反汇编器中,用于分析和修改程序在内存中的表示。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10962080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存