logisim实验五:汉字字库存储芯片扩展实验

实验目的

理解存储系统进行位扩展、字扩展的基本原理,能利用相关原理解决实验中汉字字库的存储扩展问题,并能够使用正确的字库数据填充。

设计要求

现有如下 ROM 组件,4 片 4K32 位 ROM ,7 片 16K32 位 ROM,请在 Logisim 平台构建 GB2312 汉字编码的 1616 点阵汉字字库,电路输入为汉字区号和位号,电路输出为 8×32 位( 1616=256 位点阵信息),待完成的字库电路输入输出引脚见后图,具体参见工程文件中的 storage.circ 文件,图中左侧是输入引脚,分别对应汉字区位码的区号和位号,中间区域为 8 个 32 位的输出引脚,可一次性提供一个汉字的 256 位点阵显示信息,右侧是实际显示区域,用于观测汉字显示是否正常。待完成字库子电路封装已经完成,请勿修改以免影响后续自动测试功能。
####电路框架
storage.circ
在这里插入图片描述
在这里插入图片描述

方案设计

  • 字扩展:加存储器中字的数量。静态存储器进行字扩展时,将各芯片的地址线、数据线、读写控制线相应并联,而由片选信号来区分各芯片的地址范围。
  • 位扩展:用多个存储器器件对字长进行扩充。位扩展的连接方式是将多片存储器的地址、片选CS、读写控制端R/W相应并联,数据端分别引出。
  • 设计思路:根据实验要求,要将4片4K32 位 ROM通过字扩展扩展成一片16K32位ROM,已给电路中地址线的位数是14位,因此将低12位地址通过分线器引出,用来将4片4K32位的ROM并联,数据端D分别与数据线相连。将14位地址线的高两位通过分线器引出连接多路选择器的选择端,四个4K32位ROM的数据端与多路选择器数据端相连,字扩展完成。
  • 实验电路图
    在这里插入图片描述

实验步骤

  • 弄清实验目的,查看实验电路。
  • 复习字扩展与位扩展。
  • 设计并连接实验电路。
  • 测试。

故障与调试

电路连接完成后忘记从参考字库中复制字库。
在这里插入图片描述
在这里插入图片描述

测试与分析

在这里插入图片描述
在这里插入图片描述

实验总结

通过本次实验,我对之前学习的字扩展与位扩展进行了复习并加深了理解,本次实验使我受益匪浅。

在数字系统设计中,使用VHDL进行存储器扩展是一个常见的需求。位扩展和字扩展是两种常用的方法,下面我会分别提供这两种扩展的VHDL代码示例。 参考资源链接:[VHDL教程:存储器容量扩展技术解析](https://wenku.csdn.net/doc/1yzz5dmqpq?spm=1055.2569.3001.10343) 首先,我们来讨论位扩展。假设我们有一个8位宽的存储器,现在需要扩展到16位宽。在VHDL中,可以通过并行连接两个8位存储器来实现这一扩展。以下是实现位扩展的VHDL代码示例: ```vhdl library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; -- 使用numeric_std库以支持数字操作 entity bit_extension is Port ( clk : in STD_LOGIC; -- 时钟信号 addr : in STD_LOGIC_VECTOR(7 downto 0); -- 地址总线 data_in : in STD_LOGIC_VECTOR(7 downto 0); -- 原始数据总线宽度 data_out : out STD_LOGIC_VECTOR(15 downto 0) -- 扩展后的数据总线宽度 ); end bit_extension; architecture Behavioral of bit_extension is -- 声明两个8位寄存器模拟存储器 signal mem1, mem2 : STD_LOGIC_VECTOR(7 downto 0); begin process(clk) begin if rising_edge(clk) then -- 假设存储器只读,简单地将输入数据直接输出 data_out(7 downto 0) <= mem1; data_out(15 downto 8) <= mem2; end if; end process; end Behavioral; ``` 接下来,我们看看字扩展的例子。假设我们需要将2个4位宽、256字的存储器扩展为一个8位宽、512字的存储器。以下是实现字扩展的VHDL代码示例: ```vhdl library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity word_extension is Port ( clk : in STD_LOGIC; addr : in STD_LOGIC_VECTOR(8 downto 0); -- 地址总线扩展 data_in : in STD_LOGIC_VECTOR(3 downto 0); data_out : out STD_LOGIC_VECTOR(7 downto 0); we : in STD_LOGIC -- 写使能信号 ); end word_extension; architecture Behavioral of word_extension is signal mem1, mem2 : STD_LOGIC_VECTOR(3 downto 0); signal internal_addr : STD_LOGIC_VECTOR(7 downto 0); begin internal_addr <= addr(7 downto 0); -- 忽略最高的地址位作为片选 process(clk, we) begin if rising_edge(clk) then if we = '1' then -- 根据地址译码选择存储器 if addr(8) = '0' then mem1 <= data_in; data_out(3 downto 0) <= mem1; else mem2 <= data_in; data_out(7 downto 4) <= mem2; end if; end if; end if; end process; end Behavioral; ``` 以上代码演示了位扩展和字扩展的基本方法。在实际应用中,还需要考虑译码逻辑、存储器初始化、控制信号等细节问题。《VHDL教程:存储器容量扩展技术解析》将为你提供这些高级概念的深入解析和更多实用的示例,使你能够更全面地掌握存储器容量扩展技术。 参考资源链接:[VHDL教程:存储器容量扩展技术解析](https://wenku.csdn.net/doc/1yzz5dmqpq?spm=1055.2569.3001.10343)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈希表扁豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值