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个字节的十六进制表示。
这种格式常用于调试和反汇编器中,用于分析和修改程序在内存中的表示。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)