实验目的
理解存储系统进行位扩展、字扩展的基本原理,能利用相关原理解决实验中汉字字库的存储扩展问题,并能够使用正确的字库数据填充。
实验内容
现有如下 ROM 组件,4片4K*32位 ROM ,7片 16K*32位 ROM,请在 Logisim 平台构建 GB2312 汉字编码的16K*16点阵汉字字库,电路输入为汉字区号和位号,电路输出为8×32位(16K*16=256 位点阵信息),待完成的字库电路输入输出引脚见后图,具体参见工程文件中的 storage.circ 文件,图中左侧是输入引脚,分别对应汉字区位码的区号和位号,中间区域为8个32位的输出引脚,可一次性提供一个汉字的256位点阵显示信息,右侧是实际显示区域,用于观测汉字显示是否正常。待完成字库子电路封装已经完成,请勿修改以免影响后续自动测试功能。
实验过程
1. 打开 Logisim 软件,创建新的电路文件。
2.在编辑栏中打开工具箱,选择“Project Rom”文件夹,将其中的 4 片 4K32 位 ROM 和 7 片 16K32 位 ROM 分别拖动到电路面板中,并调整它们的位置和大小。这里需要注意,每个 ROM 的输入地址线数为 12 位和 14 位,输出数据线数为 32 位。
3.在工具箱中找到字库子电路,并将其拖动到电路面板中。该子电路已经封装好了读取汉字区号和位号、计算ROM地址、读取ROM数据等功能,我们只需要连接它的输入输出引脚即可。
4. 添加输入输出引脚。根据文字要求,在电路左侧添加两个输入引脚,分别对应汉字区号和位号;在电路中间添加 8 个 32 位输出引脚,表示一个汉字的 256 位点阵信息。要注意选择正确的端口类型和数量,以确保电路能够正常工作。
5.连接字库子电路。将字库子电路的输入引脚分别连接到汉字区号和位号的输入引脚上,将字库子电路的输出引脚连接到 8 个 32 位输出引脚上。
6.连接 ROM。将字库子电路输出的 ROM 地址连接到 4 片 4K32 位 ROM 和 7 片 16K32 位 ROM 的地址输入端口上,将 ROM 的数据输出引脚连接到字库子电路的数据输入端口上。
7. 测试字库电路是否正常工作。使用仿真工具在 Logisim 中进行测试,包括输入汉字区号和位号,观测 8 个 32 位输出引脚是否能够正确显示一个汉字的 256 位点阵信息。
实验详细操作步骤
电路图
2) 设计分析与说明
对区号和位号经过一系列处理之后计算出存储器的14位偏移地址
其中0-11位位地址线,12和13位为片选信号
2位片选信号用来决定选择4个4K*32中的哪一个
12位地址线用来选择相应ROM的地址
将选中地址内的数据输出到相应的数据线
8个输出引脚D0-D7,每个引脚输出32位数据,总计输出8*32=256位数据,从而可以表示16*16字形点阵所需要的256位信息
输入:**汉字在GB2312编码中的区号和位号。
注意:这里区号引脚和位号引脚都只接受7个位数据,这是因为GB2312-80将汉字分为94个区和94个位,故7个位(可表示0-127)即可涵盖区间[0,94]。以“边”字为例,其GB2312编码为1763,17表示区号,63表示位号,故为了显示“边”,我们需要往区号引脚输入0010001(17),往位号引脚输入0111111(63)。
输出:**GB2312区位码对应的汉字字形码。
电路总共有8个输出引脚D0-D7,每个引脚输出32位数据,总计输出8*32=256位数据,从而可以表示16*16字形点阵所需要的256位信息。
3) 实验结果的记录与分析
经测试,标准库与待测字库的显示一致,字库实现正确
4) 列出操作步骤及顺序
对区号和位号经过一系列处理之后计算出存储器的偏移地址,每个偏移地址对应一个16*16汉字点阵码
每次使用同一个存储器偏移地址同时对8个32位ROM进行寻址,单次寻址就可获得8*32=256位数据,其中每个32位ROM保存16*16点阵码的固定两行(表示一行需要16位,两行即32位)
将2个 4K*16 ROM位扩展成1个 4K*32 ROM(使用splitter)
将4个 4K*32 ROM字扩展成1个 16K*32 ROM(使用multiplexer)
字库电路的8个输出引脚(D0-D7)连接至16*16 LED点阵屏上,从而显示汉字的形状
2、MIPS 寄存器文件设计
**实验目的:**为MIPS CPU构造核心功能部件,进一步熟悉多路选择器,译码器,解复用器等Logisim部件的使用
**实验内容:**设计完成满足如下规格要求的 MIPS 通用寄存器组。
1)利用 logisim 平台构建一个 MIPS 寄存器组,内部包含 32 个 32 位寄存器,其具体功能如下,具体封装文件为 regfile.circ.
表 1 芯片引脚与功能描述
2.为减少实验中画图工作量,实验工程文件中对 5 位寄存器地址进行了简化,具体见引脚示意图,最终只需实现 4 个寄存器,0 号寄存器功能仍然是恒零。后续实验中如需要使用 32 个寄存器的 MIPS 寄存器文件组,将提供标准组件。
3.注意时钟信号和电平信号不要混连,时钟仅仅触发状态改变。
3) 实验结果的记录与分析
经测试,符合条件,电路设计正确
4) 列出操作步骤及顺序
输入引脚:
分别通过reg1# reg2# write_reg#获得输入的三个寄存器编号,因为实验只要求实现0-3号寄存器,所以只需提取5位编号输入的低2位(00/01/10/11)
通过 write_data 获取要写入寄存器的32位数据,通过 WE 获取写入标志
通过 clk 获取时钟信号
输出引脚:
将读寄存器1的值输出到reg1
将读寄存器2的值输出到reg2
将4个寄存器当前保存的值输出到$0,$1,$2,$3
寄存器选择输出:
利用多路复用器(multiplexer),多路复用器可以通过select bits选择多个输入中的一个进行输出
将四个寄存器的输出引脚同时接到多路复用器的输入引脚上,将reg1#和reg2#作为多路复用器的select bits,从而选择指定输入进行输出。
寄存器选择写入:
利用解复用器(demultiplexer),解复用器可以将输入只通过select bits指定的线路输出。
将write_data同时连接到四个寄存器的data引脚(由于0号寄存器恒为0,因此可以忽略data引脚,或者将en置0)
将we引脚作为解复用器的输入
将write_reg#作为解复用器的select bits
通过解复用器将要写入数据的寄存器的enable引脚置1,下个时钟信号到来时,只有该写入寄存器的enable引脚为1,因此wrtie_data数据只会写入到该寄存器中(其余寄存器enable引脚为0,时钟信号不会触发寄存器写入),从而实现寄存器选择写入
实验结果
疑难小结
本次实验是针对 GB2312 汉字编码的 16K*16 点阵汉字字库的构建,通过使用 Logisim 平台中的 ROM 组件和字库子电路,成功实现了汉字区号和位号到点阵信息的转换。在实验过程中,我深入了解了 GB2312 编码的原理、汉字点阵信息的存储方式以及 Logisim 中 ROM 组件和子电路的使用方法,并具备了使用 Logisim 构建字库电路的能力。
在实验中,我遇到了一些问题,比如
1.ROM 组件的选择和配置。在构建字库电路时,需要选择适当的 ROM 组件,并配置输入地址线数、输出数据线数等参数。如果选择不当或者配置错误,将会导致电路无法正常工作。
2.字库子电路的连接。字库子电路封装了读取汉字区号和位号、计算 ROM 地址、读取 ROM 数据等功能,但是要正确连接其输入输出引脚并调整参数才能发挥其作用。如果连接不当或者参数设置不正确,将会导致电路无法正常工作。
3.测试方式的选择。在测试字库电路时,需要选择合适的测试方式,包括输入汉字区号和位号、观察 8 个 32 位输出引脚是否能够正确显示一个汉字的 256 位点阵信息等方面。如果测试方式选择不当,可能会导致测试结果不准确。
通过本次实验,我也学习到了一些实用的调试技巧,比如使用仿真工具进行测试、观察波形进行调试等,这些技巧对我的电路设计以及其他实验项目也有很大帮助。
最后,我认为本次实验的收获非常大,不仅提高了我的实验技能和电路设计能力,而且拓宽了我的知识面和思维方式。我将继续努力,在未来的实验中取得更好的成果。