网站大量收购独家精品文档,联系QQ:2885784924

[工学]第十八讲 系统设计实例.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]第十八讲 系统设计实例

第六章 系统设计实例 本章主要采用以前各章讲述的方法进行数字系统设计,主要体现模块化、层次化、系统化的设计思想,包括具体的设计方法和系统分解方法。 通过微处理器及其外围接口模块的实例,说明怎样用VHDL语言构建大型、复杂的数字系统。 1、存储器设计 数字系统中存储器(memory)是一个很重要的部分,因为数字系统的工作一般都会伴随着数据存储。存储器实际上是一种时序逻辑电路。数字系统中存储器主要包括:只读存储器(rom)、随机存储器(ram)和堆栈(stack)或先入先出(fifo),根据功能的不同,在VHDL描述上耶有一些区别。 VHDL语言描述存储器通常使用数组,数组中的每一个元素对应一个存储单元,每一个元素是包含多位二进制信息的数据、如整数、标准逻辑位矢量等。 ROM的设计 ROM中存储的数据一般情况先只能读不能写,因此在数字系统中常常用于存放指令和常数。 比如:设计一个64X8bit容量的ROM。 该设计有6位地址线,有8位数据线,还有一个读信号read来控制对rom进行读操作。 工作方式:在时钟信号的上升沿检测到当read信号有效时,由6位地址线选通ROM中的对应存储单元,该单元中的8位数据通过8位数据线输出;在read信号无效时,数据线上是高阻状态。 直接定义(采用在程序包中直接定义的方法对 rom进行初始化) library ieee; Use ieee.std_logic_1164.all; Package rom_int is subtype rom_word is std_logic_vector(7 downto 0) ; subtype rom_range is integer range 0 to 63; type rom_type is array ( rom_range) of rom_word; constant rom :rom_type:=( (),(),() : : end rom_int; 另外还可以采用textio的方式对rom进行初始化,现将rom中的内容存放在一个文本文件中。 subtype rom_word is std_logic_vector(7 downto 0) ; subtype rom_range is integer range 0 to 63; type rom_type is array ( rom_range) of rom_word; variable start1: booleam : true; variable i : line ; variable j : integer; variable rom :rom_type; file romin : text is in “myrom.in”; …………. if start1 then for j in rom’range loop readline(romin,i); read ( i,rom(j)); end loop; end if; 在完成了ROM的初始化之后就可以对ROM进行设计了。 Library ieee; Use ieee.std_logic_unsigned.all; Use ieee.std_logic_1164.all; Use work.rom_int.all; entity rom1 is port ( addr:in std_logic_vector(5 downto 0); clk : in std_logic; read: in std_logic; dataout: in std_logic_vector( 7 downto 0)); end entity rom1; Architecture arc1 of rom1 is signal n : integer range 0 to 63; begin process(clk) begin n = conv_integer(addr) ; if clk’event and clk=‘1’ then

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档