Logisim实验--计组(保姆级教程)-汉字国标码转区位码实验-汉字机内码获取实验-偶校验编码设计-偶校验解码电路设计-16位海明编码电路设计

该文章已生成可运行项目,

目录

汉字国标码转区位码实验

汉字机内码获取实验

偶校验编码设计

偶校验解码电路设计

16位海明编码电路设计

16位海明解码电路设计 


分享一些心得与经历

这篇文章也是会先稍微讲一下原理,再给出教程。

汉字国标码转区位码实验

(这里与下一个实验一起来将有逻辑一点)

实验目的
(1)帮助学生理解汉字机内码、区位码,最终能利用相关工具批量获取一段文字的 GB2312 机内码,并利用简单电路实现 GB2312 编码与区位码的转换;
(2)学生了解字形码显示的基本原理,能在实验环境中实现汉字 GB2312 编码的点阵显示。

实验注意

实验文件data.circ 与GB2312ROM.circ应该放在同一个目录下

实验原理:

机内码:计算机内存储字符时使用的编码

区位码:4位10进制(94*94矩阵)

GB2312汉字机内码=区位码+0xA0A0

(GB2312把汉字分成94个区,每个区有94个位,所以每个汉字可以用区号和位号来表示。比如“啊”字在16区01位,区位码就是1601。)

(在GB2312中,区位码需要转换才能得到机内码。通常的转换方法是加上A0A0H,这样每个字节的最高位都是1,区分于ASCII码。比如区位码是1601,转换成十六进制是1001H,加上A0A0H就变成B0A1H,这就是机内码。)

字形码输出汉字点阵的信息编码
点阵信息量大,所占存储空间大
用来构成汉字字库,不能用于机内存储

计数器+1使得GB2312会从中取出一个新的16位机内码,再传入到国标转区位码,转换成14位的区位码包括7位的区号,7位的位号输入字库电路,显示预先存储的1024点阵信息(32*32位)[字形码]

所以我们要先完成对国标转区位码的封装:

双击进入编辑,首先将加法器的位宽改为16

根据上述的区位、国标码之间的关系可得

​区位码=国标码+FFFF-2020H+0001H=国标码+dfe0

​由于采用加法器,所以用补码的形式表示,-2020H的补码为def0

所以这里引入一个常量,设置位宽为16,值为0xdef0

连接线路,构建加法转换成区位码

 该国标转区位码封装完成。

汉字机内码获取实验

实验目的
(1)帮助学生理解汉字机内码、区位码,最终能利用相关工具批量获取一段文字的 GB2312 机内码,并利用简单电路实现 GB2312 编码与区位码的转换;
(2)学生了解字形码显示的基本原理,能在实验环境中实现汉字 GB2312 编码的点阵显示。

实验内容
   完成国标码到区位码的转换电路后,可以在汉字显示电路中进行测试,尝试在下图所示电路中的 ROM 存储器中存入下面给出的指定句子,注意这里不允许使用逐字查码表的方式获得编码,应掌握批量转换的方法和原理。

返回汉字显示电路,接下来我们要把想要输入的汉字串的国标码(16进制码)输入GB2312中存储,我们我们要将下面这段话转成16进制,这里推荐一个网站能快速转化 传送门

12345ABCDEFGabcdefg轻轻的我走了,正如我轻轻的来;我轻轻的招手,作别西天的云彩。那河畔的金柳,是夕阳中的新娘;波光里的艳影,在我的心头荡漾。

 我们要获取的就是下面16进制这列,存入GB2312中,这里我也给出可直接复制的16进制内容

A3B1
A3B2
A3B3
A3B4
A3B5
A3C1
A3C2
A3C3
A3C4
A3C5
A3C6
A3C7
A3E1
A3E2
A3E3
A3E4
A3E5
A3E6
A3E7
C7E1
C7E1
B5C4
CED2
D7DF
C1CB
A3AC
D5FD
C8E7
CED2
C7E1
C7E1
B5C4
C0B4
A3BB
CED2
C7E1
C7E1
B5C4
D5D0
CAD6
A3AC
D7F7
B1F0
CEF7
CCEC
B5C4
D4C6
B2CA
A1A3
C4C7
BAD3
C5CF
B5C4
BDF0
C1F8
A3AC
CAC7
CFA6
D1F4
D6D0
B5C4
D0C2
C4EF
A3BB
B2A8
B9E2
C0EF
B5C4
D1DE
D3B0
A3AC
D4DA
CED2
B5C4
D0C4
CDB7
B5B4
D1FA

右键编辑存储内容,将原有的值删除,复制进入16进制值 

效果如下: 

然后将其最小化,Ctrl+K 运行时钟计数器,最后将可以将文件在记事本中复制提交结果了。

【补充】:如果觉得时钟频率太高,不好观察,可以按照下列调节时钟频率,推荐使用8Hz.

偶校验编码设计

实验目的:
帮助学生掌握奇偶校验基本原理和特性,能在 Logisim 中实现偶校验编码电路,检错电路,理解校验码传输的原理。

实验原理:

这里我们只需要通过逻辑电路求出偶校验位,根据下列连线,注意更改一下异或门的引脚数16。

更改设置如下:

偶校验解码电路设计

实验目的:
帮助学生掌握奇偶校验基本原理和特性,能在 Logisim 中实现偶校验编码电路,检错电路,理解校验码传输的原理。

根据上一个实验可以得出最终生成的校验码为D_1D_2...D_{16}P,接下来收方收到的校验码为

{D_1}'{D_2}'...{D_{16}}'{P}',利用如下公式生成检错码G

偶校验检错码: G = {D_1}'\oplus {D_2}'\oplus ...\oplus {D_{n}}'\oplus {P}'

奇校验检错码: \mathrm{G}=\overline{\mathrm{D}_1^{\prime} \oplus \mathrm{D}_2^{\prime} \oplus \mathrm{D}_3^{\prime} \cdots \oplus \mathrm{D}_n^{\prime} \oplus \mathrm{P}^{\prime}}

若G=1,表示编码不符合奇偶性,接收到的信息有错。若G=0,表示传送没有出错,严格上讲是没有出现奇数位错。奇偶校验能够检测出任意奇数位的错误,但无法检测偶数位的错误。

因此设计出电路,并正确连线。

16位海明编码电路设计

实验目的:
帮助学生掌握海明码设计原理与检错纠错性能,能独立设计实现汉字 GB2312 编码的海明校验编码体系,并最终在实验环境中利用硬件电路实现对应的编解码电路。

原理:

海明码:

注意修改一下异或的位宽,这里不再赘述。

16位海明解码电路设计 

1检错码原理与作用

检错原理当G5G4G3G2G1=0时,表示数据无传输错误,否则,表示出错。

2错误逻辑原理与设计

当发生一位数据错误时,G5G4G3G2G1所指示的数据,表示那位数据出错(例如G5G4G3G2G1=00101,则表示第5位数据出错)。若发生两位错时,G5G4G3G2G1仍不为0,由于只能纠正1位错误,故该海明编码是尽努力去纠正。因此,增加一位总的奇偶校验位G6,进行判断是一位错,还是两位错。

3纠错原理与设计

  • 当G5G4G3G2G1=0,G6=0,表示数据无出错;②G5G4G3G2G1 !=0,G6=1,表示发生一位数据出错;③G5G4G3G2GG1=0,G6=1,表示该奇偶校验位出错,即发生一位出错;④G5G4G3G2G1 !=0,G6=0,表示发生两位数据出错。

(可能新手对最后那部分的分线器的使用不是很熟练,这里提出来强调了一下设置方案,如下图)

本文章已经生成可运行项目
### 华中科技大学计算机组成原理Logisim 32ALU实验解析 在华中科技大学的计算机组成原理课程中,使用Logisim进行32ALU实验是一个重要的环节。该实验的核心目标是设计一个支持多种算术和逻辑运算的32算术逻辑单元(ALU)。以下是关于实验设计思路、功能实现以及相关注意事项的详细说明。 #### 1. 实验目标 实验的主要目标是设计一个32的ALU,能够支持以下功能: - 算术运算:加法、减法、与运算、或运算、异或运算等。 - 溢出检测:通过补码机制检测溢出情况。 - 多种控制信号输入:用于选择不同的运算模式。 #### 2. 设计思路 为了实现上述功能,可以将ALU分解为多个子模块进行设计,最终整合成完整的32ALU电路。具体步骤如下: - **8可控加减法器**:利用全加器串行输入实现8可控加减法电路,支持通过补码实现减法,并检测溢出信号[^3]。 - **4先行进74182**:设计联的4先行进电路,定义Gi、Pi为进生成函数和传递函数,Cin为进输入,C1~C4为进输出,G、P为成组进生成函数和成组进传递函数[^3]。 - **4快速加法器**:基于4先行进电路构造4快速加法器,优化加法运算的速度[^3]。 - **16快速加法器**:通过扩展4快速加法器,构建16组间先行进、组内先行进的快速加法器,注意C15接口为次高- **32ALU整合**:将上述模块组合,形成完整的32ALU电路。确保每个模块之间的连接正确,特别是进信号的传递和控制信号的分配[^1]。 #### 3. 功能实现 以下是32ALU的主要功能实现细节: - **算术运算**: - 加法:直接将两个32数相加。 - 减法:通过补码机制实现减法操作,即将减数取反后加1再与被减数相加。 - 溢出检测:当最高与次高不一致时,发生溢出。 - **逻辑运算**: - 与运算:逐执行“与”操作。 - 或运算:逐执行“或”操作。 - 异或运算:逐执行“异或”操作。 #### 4. 注意事项 在设计和实现过程中,需要注意以下几点: - **控制信号**:确保控制信号的正确分配,以选择不同的运算模式。 - **进信号**:合理设计信号的传递路径,避免延迟问题。 - **模块化设计**:将整个ALU划分为多个子模块进行设计,便于调试和验证。 - **测试验证**:使用Logisim中的测试工具对ALU进行功能验证,确保所有运算模式均能正常工作[^1]。 #### 5. 示例代码 以下是32ALU的部分实现代码示例(伪代码形式): ```python # 定义32ALU的基本结构 def alu_32bit(a, b, control): if control == "add": # 加法 result = a + b elif control == "sub": # 减法 result = a + (~b + 1) # 使用补码实现减法 elif control == "and": # 与运算 result = a & b elif control == "or": # 或运算 result = a | b elif control == "xor": # 异或运算 result = a ^ b else: result = 0 # 默认输出0 # 检测溢出 overflow = (a > 0 and b > 0 and result < 0) or (a < 0 and b < 0 and result >= 0) return result, overflow ``` ####
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wirepuller_king

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

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

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

打赏作者

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

抵扣说明:

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

余额充值