最近在做课程设计,选题为
动态LED动态显示屏设计
,要求使用logisim平台
实现
一开始本来啥都不会的,可是咱不会可以学呀,年轻最不缺的就是学习能力
写这篇文章算是对自己学习的记录,后续的同学如果遇到相同的问题,也可以参考学习
加油加油!
要求:
- (1)汉字编码、汉字字库
- (2)图像的动态显示
- (3)显示方式包括左移、右移、上移、下移和频率控制
- (4)采用仿真软件设计和调试完成
组件库
wiring(线路库)
在线路库里有一些常用的组件,比如分离器,引脚,探测器,隧道,上下拉电阻,时钟等。
Gates(逻辑门库)
Plexers(复用器)
Arithmetic(运算器)
Memory(存储器)
Input/Output(输入输出器)
logisim采用原理图的方式来构建电路,每个子电路都是一个模块,都包括输入信号,输出信号(通过引脚来实现的)
点击芯片封装
朝向向左的,会放在芯片的左侧,朝向向右的,会放在芯片的右侧,朝向向下上的引脚,会放在芯片的底部
在logisim中,每一个电路都可以进行封装,而在其他的电路中作为公共模块进行调用,输入输出引脚就是我们调用的接口,类似于c语言中函数调用的参数
这是logisim中非常重要的特性,所有的电路都可以作为子电路来进行封装,在其他的电路中进行调用。从而构建复杂的电路系统,甚至是CPU
输入引脚和输出引脚其实都是引脚,只不过输出的属性不一样,可以
采用数据选择器来进行或非门的选择
数据选择器有一个使能端和一个选择端,两个输入引脚,和一个输出引脚
使能端可以不接,可以自己在属性选择中去掉使能端
可以整体修改数据的宽度,例如将数据位宽改为4位
将子电路的封装进行排版,然后新建测试电路,用鼠标拖动子电路到测试电路,即可使用子电路的封装形式
亮绿色表示高电平
深绿色表示低电平
蓝色表示高阻态或者悬浮态(未知状态) 电路中应该尽量消除这种状态,电路的引脚没有连接也有可能会产生高阻态
灰色表示飞线 表示两端并没有连接,通常使用灰线表示边框
红色表示信号冲突或者引脚类型不对
不兼容的位宽
黑色表示多位总线
橙色表示位宽不匹配
logisim可以根据真值表或者表达式自动生成电路
但是只能生成组合逻辑,并且输入引脚只能是一位的引脚
输入引脚的个数最多只能有八个,输出引脚最多只能有12个
生成一位全加器的电路
使用真值表构建电路
真值表只适合引脚数目较少来构件电路
故采用表达式来进行构建
机内码
:计算机内存储字符时使用的编码区位码
:采用四位十进制来表示汉字的一种方法,通常用于汉字的检索,配合GB2312标准一起使用区号7位,位号也是7位,所以区位码是14位
行号对应区号,列号对应位号,编号从1开始,最大值为94
区位码和机内码之间的转换: GB2312 汉字机内码 = 区位码 + 0xA0A0
字形码
:输出汉字点阵的信息编码比如显示一个汉字,汉字的显示是采用像素点的方式,输出汉字对应的图形
通常汉字的字形码用来构建汉字的字库文件
把这个弄明白后面就好做了
重点
:
为了显示班级,姓名,学号和一段自选文字,需要将这些汉字转换为GB2312机内码
获取到的机内码,存入GB2312的ROM存储器中
国标转区位码字电路
GB2312机内码的输入引脚16位,输出为两个7位的引脚,分别是区号和位号
GB2312的十六进制信息,区号和位号的十进制信息
将16位的GB2312码转换为7位的区号和7位的位号
汉字存储子电路
在此子电路中修改GB2312ROM存储器的内容,将获取到汉字的机内码存储存储器中
使用logisim打开data.circ,进入子电路
由前面的学习,可以知道
GB2312 汉字机内码 = 区位码 + 0xA0A0H
所以
区位码 = GB2312汉字机内码 - 0xA0A0H
而实验又要求采用加法器进行实现,并且输出区号和位号,采用补码的形式进行加法器实现
故
区位码 = GB2312汉字机内码 +(- 0xA0A0H)的补码
**而-0xA0A0H的补码为5F60H,两个字节的最高位+1,即等于0xDFE0 **
这里两个字节的最高位为什么加1呢?因为这是为了将国标码转换为机内码,存入GB2312存储器的就是机内码,而不是国标码,在后续的电路中转换成了国标码,从而转换成区位码
这里有点绕,可能会不好理解,请移步下文第六大点,有详细说明过程
所以
区位码 = 国标码 - 2020H
区位码 = 国标码 + 0xDFE0
添加一个DFE0常量,转为区位码
利用区号和位号进行检索的字形码存储器
(区号-1)*94 + 位号-1
电路的输入和输出
输入: 区号(7位) 位号(7位)
输出:((区号-1)*94 + 位号)-1
输出的是1024位点阵信息
一个汉字的字形码需要32*32 = 1024位
,而在logisim中ROM存储器最多为32位,所以应该进行位扩展
,需要32片 16k X 32位的ROM
这样就达到了1024位的效果,将区号和位号进行传入,即可
输出1024位点阵信息,汉字即可显示
国标码 = 区位码 + 2020H
所以
区位码 = 国标码 - 2020H
而要求使用加法器实现
所以源码的减法采用补码的加法实现,-2020H的补码就是DEF0H
区位码 = 国标码 + DFE0H
在查看了一些文章和资料后,还是有点懵,经过几次理解后,终于弄明白了
国标码 = 区位码 + 2020H
机内码 = 国标码 + 8080H
GB2312 机内码 = 区位码 + A0A0H
根据以下步骤进行
汉字
一
的区位码为5027(十进制)
说明区号为50,位号为27
- 转换为16进制表示 ,就是 321b
- 321bH + 2020H = 523B 国标码
- 523B + 8080H = D2BB 机内码
而这个GB2312机内码就是我们需要的到的数据
我们设计的GB2312机内码就得出来了,即直接向GB2312ROM存储器中存入D2BB,驱动时钟,显示汉字一
存入存储器中的D2BB机内码,存储汉字的机内码在前文说过,是16位双字节的,14位有效字节,所以拿之前的一
字来举例,它的机内码为D2BB,14位字节有效,两个最高有效位为1
而我们只需要看数据有效字节就可以了,即14位有效字节,把D2BB-8080H得出523B,即是国标码,通过国标码转区位码电路转换成区位码321B,区号为32(16进制),位号为1B(16进制)
懂了吧,应该很浅显易懂,hhhhh,就这些原理,花了两个半小时才弄懂
如下图
2023-05-09
学习了logisim软件的基本使用,一小时速成
2023-05-11
学习汉字编码实验及原理,成功在logisim平台上显示
2023-05-12
弄懂汉字显示电路基本原理,弄懂国标码、区位码、机内码三者如何转化,并做出相应说明
2023-05-14
弄懂字库子电路及原理,字扩展及位扩展
待更新。。。。。。
由于这次课程设计选题为动态LED动态显示屏设计
采用以下参考文献,感谢优秀的Mooc课程和各位大佬的开源链接
logisim基本组件介绍
汉字编码实验-ppt
计算机组成原理汉字编码与校验设计实验报告(汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码)
实验五 汉字字库实验(Logisim)
汉字字库存储芯片扩展实验
计算机硬件系统设计-Mooc课程
《计算机硬件系统设计》—自己动手画CPU
谭志虎 / 自己动手画CPU - gitee开源链接
进制转换转换以及原码反码和补码相关知识
区位码,国标码,机内码三者怎样转换?
汉字字符集编码查询
原码,反码,补码相互转换在线计算器
在线进制转换
16进制加法,减法,乘法,除法在线计算器
CSDN
自己写笔记是使用的其他平台写的,直接导入的markdown文件,文章更新迭代只能在自带的编辑器里进行编辑迭代,但是喂,我直接导入文件迭代不行吗?
我刚才更新文章,采用导入方式,没想到发出了两篇一模一样的文章,这个功能十分不人性化,吐槽一下下
可恶,以后更新要在CDSN更新了!