精华内容
下载资源
问答
  • 存储器设计

    2018-02-05 16:23:14
    模拟数据在存储器中的存取过程,先初始化ROM存储器中的内容,在通过开关选择相应的地址,将对应的存储器中内容读出来,并通过显示管显示。
  • 随着对嵌入式存储器需求的持续增长,其复杂性、密度和速度也日益增加,从而需要提出一种专用存储器设计方法。  存储器的外包设计  存储器模块都具有相对独立的特性,在一个时钟系统中它通常占用一个管道,从成本...
  • 半导体存储器,+存储器原理,存储器设计,我感觉将的挺好的,让大家了解存储器原理,与大家分享。
  • 杭电计算机组成原理存储器设计实验5
  • FPGA ROM存储器设计

    2021-04-12 23:14:27
    1.1 FPGA ROM存储器设计 1.1.1 本节目录 1)本节目录; 2)本节引言; 3)FPGA简介; 4) FPGA ROM存储器设计; 5)结束语。 1.1.2 本节引言 “不积跬步,无以至千里;不积小流,无以成江海。就是说:不积累...

    1.1 FPGA ROM存储器设计

    1.1.1 本节目录

    1)本节目录;

    2)本节引言;

    3)FPGA简介;

    4) FPGA ROM存储器设计;

    5)结束语。

    1.1.2 本节引言

    “不积跬步,无以至千里;不积小流,无以成江海。就是说:不积累一步半步的行程,就没有办法达到千里之远;不积累细小的流水,就没有办法汇成江河大海。

    1.1.3 FPGA简介

    FPGA(Field Programmable Gate Array)是在PAL、GAL等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

    FPGA设计不是简单的芯片研究,主要是利用 FPGA 的模式进行其他行业产品的设计。 与 ASIC 不同,FPGA在通信行业的应用比较广泛。通过对全球FPGA产品市场以及相关供应商的分析,结合当前我国的实际情况以及国内领先的FPGA产品可以发现相关技术在未来的发展方向,对我国科技水平的全面提高具有非常重要的推动作用。

    与传统模式的芯片设计进行对比,FPGA 芯片并非单纯局限于研究以及设计芯片,而是针对较多领域产品都能借助特定芯片模型予以优化设计。从芯片器件的角度讲,FPGA 本身构成 了半定制电路中的典型集成电路,其中含有数字管理模块、内嵌式单元、输出单元以及输入单元等。在此基础上,关于FPGA芯片有必要全面着眼于综合性的芯片优化设计,通过改进当前的芯片设计来增设全新的芯片功能,据此实现了芯片整体构造的简化与性能提升。

    以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。

    FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。

    1.1.4 FPGA ROM存储器设计

    1、ROM简介

    ROM(read-only memory),译为“只读存储器”;存储器的任何单元只能随机地读出信息,而不能写入新信息,称为只读存储器ROM,其信息通常是厂家制造时在脱机情况或者非正常情况下写入的。

    2、ROM设计

    ROM Verilog HDL代码如下:功能:输入地址,输出地址对应数据;

    module ROM_tb(addr, data, oe);

    output[31:0] data;

    input[31:0] addr;

    input oe;

    reg[31:0]mem[0:1023];

    assign  data= (oe==0)?mem[addr[11:2]]:8'h00;

    initial

      begin

       mem[0]=32'hffff_ffff;

       mem[1]=32'h1111_1111;

       mem[2]=32'h8888_8888;

       mem[3]=32'h2222_2222;

       mem[4]=32'haaaa_aaaa;

      end

    endmodule

    3、经验总结

    A)FPGA开发技术;

    B)Verilog HDL语言;

    1.1.5 结束语

    第一,希望阅读笔者的博客可以对您有所帮助。

    第二,希望读者可以快速学习FPGA这门技术。

    第三,如果需要技术沟通,可以联系笔者。希望对你有帮助,如果遇到问题,可以一起沟通讨论,邮箱:jhqwy888@163.com

    展开全文
  • FPGA RAM存储器设计

    2021-04-13 22:42:28
    1.1 FPGA RAM存储器设计 1.1.1 本节目录 1)本节目录; 2)本节引言; 3)FPGA简介; 4)FPGA RAM存储器设计; 5)结束语。 1.1.2 本节引言 “不积跬步,无以至千里;不积小流,无以成江海。就是说:不积累...

    1.1 FPGA RAM存储器设计

    1.1.1 本节目录

    1)本节目录;

    2)本节引言;

    3)FPGA简介;

    4)FPGA RAM存储器设计;

    5)结束语。

    1.1.2 本节引言

    “不积跬步,无以至千里;不积小流,无以成江海。就是说:不积累一步半步的行程,就没有办法达到千里之远;不积累细小的流水,就没有办法汇成江河大海。

    1.1.3 FPGA简介

    FPGA(Field Programmable Gate Array)是在PAL、GAL等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

    FPGA设计不是简单的芯片研究,主要是利用 FPGA 的模式进行其他行业产品的设计。 与 ASIC 不同,FPGA在通信行业的应用比较广泛。通过对全球FPGA产品市场以及相关供应商的分析,结合当前我国的实际情况以及国内领先的FPGA产品可以发现相关技术在未来的发展方向,对我国科技水平的全面提高具有非常重要的推动作用。

    与传统模式的芯片设计进行对比,FPGA 芯片并非单纯局限于研究以及设计芯片,而是针对较多领域产品都能借助特定芯片模型予以优化设计。从芯片器件的角度讲,FPGA 本身构成 了半定制电路中的典型集成电路,其中含有数字管理模块、内嵌式单元、输出单元以及输入单元等。在此基础上,关于FPGA芯片有必要全面着眼于综合性的芯片优化设计,通过改进当前的芯片设计来增设全新的芯片功能,据此实现了芯片整体构造的简化与性能提升。

    以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。

    FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。

    1.1.4 FPGA RAM存储器设计

    1、RAM简介

    随机存取存储器(英语:Random Access Memory,缩写:RAM),也叫主存,是与CPU直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。RAM工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。它与ROM的最大区别是数据的易失性,即一旦断电所存储的数据将随之丢失。RAM在计算机和数字系统中用来暂时存储程序、数据和中间结果。

    2、RAM设计

    RAM Verilog HDL代码如下:功能:输入地址,输出地址对应数据;

    module mem_top(

               input           clk  ,

               input           en_wr,

               input     [5:0] addr ,

               input     [47:0]din  ,

               output reg[47:0]dout

              );

    reg [47:0] mem [0:255];

    always @(posedge clk)

    begin

        if(en_wr)

            mem [addr] <= din;

        else

            dout <= dout;

    end

    endmodule

    3、经验总结

    A)FPGA开发技术;

    B)Verilog HDL语言;

    C)RAM设计方法;

    1.1.5 结束语

    第一,希望阅读笔者的博客可以对您有所帮助。

    第二,希望读者可以快速学习FPGA这门技术。

    第三,如果需要技术沟通,可以联系笔者。希望对你有帮助,如果遇到问题,可以一起沟通讨论,邮箱:jhqwy888@163.com

    展开全文
  • 向量存储器设计与验证,IP设计,SIMD结构,DSP,VECTOR,参数,Verilog,硬件设计,VHDL,并行存储器结构
  • 基于proteus的存储器设计

    千次阅读 2019-04-24 15:07:51
    基于proteus的存储器设计存储器电路ROM模型的批量导入数据实现方法参考资料 存储器电路 存储器是用来存储信息的部件,是计算机的重要组成部分,常见的半导体存储器类型主要有ROM和RAM:ROM是Read Only Memory(只读...

    存储器电路

    存储器是用来存储信息的部件,是计算机的重要组成部分,常见的半导体存储器类型主要有ROM和RAM:ROM是Read Only Memory(只读存储器)的缩写,RAM是Random Access Memory(随机存取存储器)的缩写。ROM存储器一般容量较大,在系统停止供电的时候仍然可以保持数据;ROM只能读出数据,不能写入数据。而RAM存储器一般容量较小,在系统掉电之后就丢失数据;RAM即可读出数据,又可写入数据。
    图1所示的存储器电路由ROM、RAM及两条总线构成:ROM存储器是2764(8K×8bit),RAM存储器是6116(2K×8bit),两条总线分别是12位地址总线ABUS_[0…11]和8位数据总线DBUS_[0…7],其中数据总线上的8位数值由两个4位的红色数码管来显示。
    ROM芯片2764的数据线D0-D7接到数据总线,地址线A0-A8由地址锁存器74LS273给出,用来对ROM片内存储单元寻址。其余地址线A9-A12接地;2764有两个控制端:#CE(片选)、#OE(读);RAM芯片6116的数据线D0-D7接到数据总线,地址线A0-A7由地址锁存器74LS273给出,用来对RAM片内存储单元寻址。其余地址线A8~A10接地; 6116有三个控制端:#CE(片选)、#OE(读)、#WE(写)。

    图1. 存储器电路
    存储器电路描述
    存储器电路设计的最重要环节是存储器与地址总线的连接,因为连接方式决定了存储器地址空间的映射关系,即决定了每个存储器芯片在整个存储空间中的地址范围。12位地址总线的理论地址空间为4K(000H-FFFH),本实验分配其中最低的512地址为ROM区(000H-1FFH),最高的128B地址为RAM区(F80H-FFFH),其余留空,如下表1所示:

    表1. 存储器的地址空间范围
    在这里插入图片描述
    存储器电路的设计一般将地址总线区分为低位地址线和高位地址线两部分:低位地址线直接和存储器芯片的地址信号连接作为片内地址译码,而高位地址线的连接主要用来产生片选信号(称为片间地址译码),以决定每个芯片在整个存储系统中的地址范围。
    在上图1的存储器电路中,12位地址总线分为低8位地址线和高4位地址线。低8位地址线ABUS_0-7分别与ROM和RAM芯片的地址线A0-A7共用;高4位地址线ABUS_8~11则通过两个3-8译码器进行译码。低位3-8译码器U13最低2位之一输出有效,则片选ROM芯片(“负逻辑”判断,使用与门);同样,高位3-8译码器U15最高1位输出与地址线A7同时有效,则片选RAM芯片(“负逻辑”判断,A7先反向,再使用或门)。值得注意的是:相同的存储器地址空间映射,可以有不同的片选电路实现方法(例如使用“正逻辑”判断)。

    ROM模型的批量导入数据实现方法

    本书借用8051单片机的伪汇编指令来实现如何把一组程序或数据一次性批量导入ROM中,使ROM在往后的实验中可以充当程序或数据存储器的角色。具体操作步骤如下:

    1)新建txt文件,把.txt后缀改名为.asm后缀,然后按照下列伪汇编指令格式输入数据:

    ORG	0000H
    	DB	01010101B			
    	DB 	01010101B	        
    	DB 	01010101B		
    	DB	01010101B		
    	                                                       
    ORG	0024H				
    	DB	0AAH			
    	DB	0AAH		        
    	DB	0AAH			
    	DB	0AAH	                              
    END          
    

    注意:上述代码中 的语句“ORG xxxxH”规定该语句后所跟数组存储的首地址,数组末尾必须以其他ORG语句或“END”作为结束。在asm文件中可以使用多个“ORG”语句来规定在存储器的不同位置存放不同长度的数组。在“ORG”语句后的“DB xxxxxxxxB”或“DB xxH”语句都表示一个存储单元存放的8位数据,前者是二进制,x表示0或1;后者是十六进制,x表示09和AF(注:若十六进制数据xxH大于A0H,则要写成0xxH,例如“DB 0A0H”)。

    2)在proteus仿真环境的菜单栏里点击 Source Code图标(红色圈标注的地方),弹出Source Code标签页,如下所示:
    在这里插入图片描述

    如果该项目没有打开过asm文件,则打开的标签页为空,需要在菜单栏里选择Source Code->Create Project,弹出的对话框如下图(左)所示。此处,在Family选项中选择8051, Contoller选项中选择80C51,则Compiler选项会自动选择ASEM-51;注意:下方Creat Quick Start Files选项不勾选!最后按下“确定”按钮。
    注意:如果使用的proteus版本内没有支持8051内核,则在Source Code的Family和Controller选项中找不到8051/80C51的内容。这意味着在proteus内无法编译asm文件,必须借助支持8051内核的第三方编译软件(例如Keil 软件,1k以内代码有免费版本)把asm文件编译成hex文件,再导入proteus的存储器,生成hex文件后,请直接跳到以下步骤(7)操作。

    3)如下图(右)所示,标签页上会出现“”*80C51()”的新project后,右键单击下方的Source Files,在弹出菜单中选择Add files(或Import Existing File)选项,在弹出的视窗中选择所需的asm文件,按确定就添加到当前的project中。
    在这里插入图片描述
    4)在project中已经添加的asm文件上双击,右侧会打开asm文本内容,如下图(左)所示。如果该project之前已经添加且编译过asm文件,则弹出的Source Code标签页右侧会直接显示asm文本内容,可以直接对asm文本内容进行修改和保存。如果要更换asm文件,可以右键单击asm文件,菜单列表中选择Remove file删除当前asm文件,然后选择Add files(或Import Existing File)选项,在弹出的视窗中重新选择新的asm文件。

    5)如下图(右)所示,若第一次编译asm文件,则右键单击asm文件,在弹出菜单点击Project Settings,弹出框的controller选项选择80C51,注:要去掉勾选Embed files(或Attach files)!确保编译生成的hex文件在project当前目录下,最后点击OK选项。
    在这里插入图片描述
    6)然后,右键单击asm文件,在弹出框内点击Build Project执行编译。编译成功后,在下方的显示栏里会出现“Compiled successfully!”字样。此时,在项目当前文件夹的子文件夹80C51的孙文件夹Debug里面,就有编译后生成的hex二进制文件(请注意看文件的修改日期,确认是最近编译的文件)。该hex文件默认编译后的文件名为Debug.hex
    注意:一个良好的编程习惯是每次编译生成hex文件后,就重命名为跟asm源程序一致的文件名,然后与同名asm源程序放在另外的固定目录下。否则下一次编译其他asm源程序的时候,会在相同路径生成重名的Debug.hex,把以前编译的hex文件覆盖。

    7)双击ROM 芯片,弹出如下图所示的对话框:在Image File中选择所需烧写的hex文件,点击OK,ROM加载成功,操作结束。
    注意:尽量避免直接加载路径“\80C51\Debug”里的Debug.hex文件,因为每一次编译asm源程序,Debug.hex都会自动刷新。但是,相同的文件名很容易混淆,难以确定加载的hex文件与哪个asm源文件对应。最好在每次编译完成后,把Debug.hex文件从路径“\80C51\Debug”里取出,另存在其他文件夹中,并且根据源文件asm的内容重命名编译生成的hex文件。
    在这里插入图片描述
    8)启动proteus仿真,在仿真过程下按暂停;点击菜单栏里的Debug,在弹出的菜单列表最下方有“Memory Contents-ROM/RAM”,如下图所示。注意:仿真工程有多少个存储器,就有多少个Memory Contents可供选择。点击需查看的Memory Contents选项,则弹出其对应的存储器内容:其中蓝色为该行的首地址(对应的是左边第一个黑色数据xxH),黑色为存储单元中的数据,按顺序从左到右,从上到下排列显示。可以通过调整显示框的宽度来改变蓝色的行首地址显示,方便查看某一个固定的地址。值得注意的是,图中显示的存储器地址是存储器地址线(A0~A7)所定义的地址。而实际的地址空间不仅要看存储器的地址线,还要参考各存储器片选信号的译码逻辑电路。此外,除非被新的hex文件覆盖,否则通过hex文件烧写定义的数据段会永远存在。所以,上图中显示的二进制数据内容比当前hex文件对应的asm源程序中定义的数据要多。
    在这里插入图片描述
    如果仿真出现下图所示的报错,可能是项目路径里面原来加载hex文件的路径被取消,或是被移动到不同路径文件夹,或是文件名变了。特别是在项目里面有多个ROM需要加载的时候,要留意在移动或修改项目的时候不要破坏原有的ROM加载路径。
    在这里插入图片描述

    参考资料

    本文的内容节选自作者编撰的教材专著《基于Proteus的计算机系统实验教程——逻辑、组成原理、体系结构、微机接口》(机械工业出版社),更详细的内容可以直接在书中查阅。
    读者如有兴趣,可以在 当当网图书京东图书亚马逊上搜索作者姓名赖晓铮即可找到这本著作。
    在这里插入图片描述
    本书详细描述了在proteus虚拟仿真环境中,从逻辑电路开始,一步一步构造运算器、存储器、控制器,最终用三种CPU体系架构(微程序、硬布线、流水线)实现了一个8位的CPU。并且,这个CPU不仅可以做逻辑、算术运算,拥有循环、分支、堆栈等程序结构,还可以完整实现对8086所有外设的控制,即替代8086完整实现了传统《微机原理》里讲到的所有外设实验。
    本书的全部proteus工程文件,PPT,实验视频以及配套的两种形式课程设计(纯汇编、硬件改动)的资料都放在 百度网盘,提取密码:34ad
    广州风标为本书配套了实验箱(如下图所示),可以让学生在电脑的proteus虚拟仿真环境中设计CPU或选择已有的8086、8051、ARM等CPU模型,然后通过虚拟总线映射到实验箱的物理总线,控制实验箱面板上的真实外设。有兴趣的读者可以自行联系 广州风标教育技术股份有限公司
    在这里插入图片描述

    展开全文
  • 近似神经网络的精密可调STT-RAM存储器设计案例
  • 基于Nios II系统的1553B总线网络存储器设计、电子技术,开发板制作交流
  • 主要包括单片机的外部程序存储器设计以及外部数据存储器设计
  • 随着对嵌入式存储器需求的持续增长,其复杂性、密度和速度也日益增加,从而需要提出一种专用存储器设计方法。  存储器的外包设计  存储器模块都具有相对独立的特性,在一个时钟系统中它通常占用一个管道,从成本...
  • DSP技术及应用实习-EMIF外扩存储器设计 有代码 文档
  • 这是大三下学期的课程设计,有摘要、目录、正文;题目为FIFO存储器设计,很详细的课程设计哦 ,对课程设计很有帮助。
  • 计算机组成原理 课程设计 存储器设计 可硬件下载
  • 半导体存储器,详细讲述了,存储器的原理,及其如何设计存储器
  • 基于VHDL的FIFO存储器设计,作为一种硬件描述语言的VHDL又有强大硬件描述功能
  • 当今的设计师面对无数的挑战:一方面他们必须满足高技术产品不断扩展的特性需求,另一方面却不得不受到无线和电池装置的电源限制。没有任何技术在这方面的要求比SoC的设计更为明显,在这种设计中,高级工艺比从前...
  • 低功耗存储器设计

    2015-09-07 21:32:51
    详细介绍了低功耗存储器的VLSI设计方法
  • 存储器设计实验实验内容.coe文件内容MEM模块代码测试用例实验结果记录仿真波形图 实验内容 1.生成一个RAM_B存储器模块,关联文件中输入64个32位数据,用16进制表示。 2.调用寄存器堆模块和存储器模块,编写一个顶层...

    实验内容

    1.生成一个RAM_B存储器模块,关联文件中输入64个32位数据,用16进制表示。

    2.调用寄存器堆模块和存储器模块,编写一个顶层模块,完成寄存器和存储器之间数据的传送。
    在这里插入图片描述

    3.调用基本ALU 模块、寄存器堆模块和存储器模块,编写一个顶层模块,完成
      lw rt, offset(rs); //取数:(rs+offset) -> rt
      sw rt, offset(rs); //存数:rt -> (rs+offset)

     16位的偏移地址offset从input输入,扩展为32位。仿真调试通过
    在这里插入图片描述

    .coe文件内容

    memory_initialization_radix=16;
    memory_initialization_vector=00000010,00632020,00010fff,00000008,ffff0000,0000ffff,88888888,99999999,aaaaaaaa,bbbbbbbb,12345678,23456789,3456789a,456789ab,56789abc,6789abcd,00000820,00632020,00010fff,20006789,ffff0000,0000ffff,88888888,99999999,aaaaaaaa,bbbbbbbb,12345678,23456789,3456789a,456789ab,56789abc,6789abcd,00000820,00632020,00010fff,20006789,ffff0000,0000ffff,88888888,99999999,aaaaaaaa,bbbbbbbb,12345678,23456789,3456789a,456789ab,56789abc,6789abcd,00000820,00632020,00010fff,20006789,ffff0000,0000ffff,88888888,99999999,aaaaaaaa,bbbbbbbb,12345678,23456789,3456789a,456789ab,56789abc,6789abcd;
    

    如何生成IP核详见ISE-IP核创建教程.

    MEM模块代码

    module Mem(clk_m,Mem_Write,
    				R_Addr_A,R_Addr_B,W_Addr,Write_Reg,rst,clk,
    				ALU_OP,offset,
    				Mem_Addr,M_R_Data,R_data_A,R_data_B,ALU_F,B);
     input clk_m,Mem_Write;
     input [4:0]R_Addr_A;//A端口读寄存器地址
     input [4:0]R_Addr_B;//B端口读寄存器地址
     input [4:0]W_Addr;//写寄存器地址
     input Write_Reg;
     input [2:0]ALU_OP;
     input rst,clk;
     input [15:0]offset;
     output [31:0]M_R_Data; 
     output [31:0]R_data_A;	
     output [31:0]R_data_B;	
     wire ZF,OF;
     output [31:0]B;
    
     output [31:0] ALU_F;	
     output [7:0] Mem_Addr;
     
    RAM_B Data_RAM (
      .clka(clk_m), // input clka
      .wea(Mem_Write), // input [0 : 0] wea
      .addra(Mem_Addr[7:2]), // input [5 : 0] addra
      .dina(R_data_B), // input [31 : 0] dina
      .douta(M_R_Data) // output [31 : 0] douta
    );
    
     assign B={{16{1'b0}},offset}; //扩展
     
    REGS REGS_1(R_data_A,R_data_B,M_R_Data,R_Addr_A,R_Addr_B,W_Addr,Write_Reg,rst,clk);
    ALU ALU_1(ALU_OP,R_data_A,B,ALU_F,ZF,OF);
    assign Mem_Addr=ALU_F[7:0];
    
    endmodule
    
    
    module REGS(R_Data_A,R_Data_B,W_Data,R_Addr_A,R_Addr_B,W_Addr,Write_Reg,rst,clk);
    	input clk;//写入时钟信号
        input rst;//清零信号
        input Write_Reg;//写控制信号
        input [4:0]R_Addr_A;//A端口读寄存器地址
        input [4:0]R_Addr_B;//B端口读寄存器地址
        input [4:0]W_Addr;//写寄存器地址
        input [31:0]W_Data;//写入数据
    	output [31:0]R_Data_A;//A端口读出数据
        output [31:0]R_Data_B;//B端口读出数据
    	 
    	 integer i;
    	 reg [31:0] REG_Files[0:31];  
        initial
            for(i=0;i<32;i=i+1) REG_Files[i]<=0;
        always@(posedge clk or posedge rst)
        begin
            if(rst)
                    for(i=0;i<32;i=i+1) REG_Files[i]<=0;
            else
                    if(Write_Reg) REG_Files[W_Addr]<=W_Data;
        end
        assign R_Data_A=REG_Files[R_Addr_A];
        assign R_Data_B=REG_Files[R_Addr_B];
    
    endmodule
    
    module ALU(ALU_OP,A,B,F,ZF,OF);
    	  input  [2:0] ALU_OP;
    	  input  [31:0] A;
    	  input  [31:0] B;
    	  output [31:0] F;
    	  output  ZF;
    	  output  OF;
    	  reg [31:0] F;
    	  reg    C,ZF,OF;
    	 always@(*)
    	  begin
    		C=0;
    		OF=0;
    		case(ALU_OP)
    			3'b000:begin F=A&B; end
    			3'b001:begin F=A|B; end
    			3'b010:begin F=A^B; end
    			3'b011:begin F=~(A|B); end 
    			3'b100:begin {C,F}=A+B;OF = A[31]^B[31]^F[31]^C; end 
    			3'b101:begin {C,F}=A-B;OF = A[31]^B[31]^F[31]^C; end 
    			3'b110:begin F=A<B; end
    			3'b111:begin F=B<<A; end
    		endcase
    		ZF = F==0;
    		end
    endmodule
    

    测试用例

    	always #33 clk=~clk;
    	always #23 clk_m=~clk_m;
    	
    	initial begin
    		
        	clk= 0;	clk_m = 0; 
    	    ALU_OP = 3'b100;
    		rst = 0;
    		
    		// lw $1,4($0)
    	    offset = 16'd4;
    		W_Addr = 5'b00001;
    		Mem_Write = 0;
    		Write_Reg = 0;
    		R_Addr_A = 5'b00000;
    		R_Addr_B = 5'b00000;
    		 #100
    		 
    		Write_Reg = 1; #100
    		
    		// lw $2,12($0)
         	offset = 16'd12;
    		W_Addr = 5'b00010;
    		R_Addr_A = 5'b00000;
    		R_Addr_B = 5'b00000;
    		Write_Reg = 1; #100
    		
    		// lw $3,4($2)
         	offset = 16'd8;
    		W_Addr = 5'b00011;
    		R_Addr_A = 5'b00010;
    		R_Addr_B = 5'b00010;
    		Write_Reg = 1; #100
    		
    		//sw $3,24[$0]
    		offset = 24'd24;
    		R_Addr_A=5'b00000; 
    		R_Addr_B=5'b00011;
    		Write_Reg = 0;
    		Mem_Write = 1;
    		#100;
    		
    		// lw $4,24($0)
    		offset = 16'd24;
    		W_Addr = 5'b00100;
    		R_Addr_A = 5'b00000;
    		R_Addr_B = 5'b00000;
    		Mem_Write = 0;
    		Write_Reg = 1; #100;
    	end
          
    endmodule
    

    实验结果记录

    在这里插入图片描述

    仿真波形图

    在这里插入图片描述

    展开全文
  • 本文介绍了FPGA外部存储器设计方法,可以有效地解决雷达实时信号处理过程中海量数据的存储问题,同时也可以充分利用FPGA去控制SDRAM和FLASH,不仅保证了资源的充分利用,也可以有效地满足信号处理过程中的高速实时...
  • 华中科技进大学计算机组成原理存储器设计实验1-7

    千次阅读 热门讨论 2020-05-25 17:50:27
    华中科技进大学计算机组成原理存储器设计实验1-7 这里写目录标题**华中科技进大学计算机组成原理存储器设计实验1-7**实验实验一 汉字字库存储芯片扩展实验实验二 MIPS寄存器文件设计实验三 MIPS RAM设计实验四 全...
  • 交叉存储器设计

    2014-05-12 17:50:05
    赞,都是自己设计
  • 【Logisim】存储器设计

    2020-07-16 16:38:52
    了解ROM和RAM的组成结构与扩展方法,了解寄存器的工作原理,了解Cache的映射机制。 华中科技大学《计算机硬件系统设计
  • 1、硬件设计 硬件设计方框图如图1所示。   从图1可看到,除CPU单元以外,网络存储器的实现主要包括两个部分:I/O接口和存储器接口。下面以CPU为中心,说明这两个接口的主要功能。 ①I/O接口。这里指CPU与...
  • 本文设计了1553B总线上的网络存储器。整个系统基于NIOS II内核设计,利用SoPC技术将接口部分的逻辑控制全部集成于FPGA片内,系统的存储量、结点数量均可扩展。
  • 实验_存储器设计与访问,内含Sinwave源码以及,sinwave演示视频,自己录制的
  • 基于FatFs文件系统的SD卡存储器设计.pdf
  •  复杂可编程逻辑器件——FPGA技术在近几年的电子设计中应用越来越广泛。FPGA具有的硬件逻辑可编程性、大容量、高速、内嵌存储阵列等特点使其特别适合于高速数据采集、复杂控制逻辑、精确时序逻辑等场合的应用。而...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,659
精华内容 4,263
关键字:

存储器设计