ps.如果内容与目录一致,请直接拉到页面底部
第一关:汉字国标转区位码实验
- 实验目的
- 视频讲解
- 实验内容
- 电路框架
- 电路引脚
- 电路测试
- 常见的调试问题
实验目的
(1)帮助学生理解汉字机的内码和区位码,最终使用相关工具批量获取一段文字 GB2312 使用简单的电路实现机内码 GB2312 转换编码和区位码; (2)学生了解字形码显示的基本原理,可以在实验环境中实现汉字 GB2312 编码点阵显示。
视频讲解
实验内容
在 logisim 打开实验数据包中的实验数据包 data.circ 在相应的电路中,完成国家标码转区位码的子电路设计。输入引脚为16位 GB2312 双字节国标;输出为区号和位号(区号从1开始计数).6为了定义转换子电路的引脚,请在电路中复制相应的隧道标签信号,注意不要增加引脚,不要修改子电路的包装,以免影响其他电路模块中子电路的正常呼叫。
电路框架
data.circ
电路引脚
信号 | 输入/输出 | 位宽 | 说明 |
---|---|---|---|
GB2312 | 输入 | 16 位 | 汉字机内码 |
区号 | 输出 | 7 位 | 汉字区位码中的区号-行号 ROW |
位号 | 输出 | 7 位 | 汉字区位码中的位号-列号 COL |
电路测试
如果汉字能正确显示华,说明正确
实验完成后,打开文本编辑工具 data.circ 复制粘贴所有文本信息 Educoder 平台的 data.circ 在文件中,单击评估按钮进行本关测试。平台将自动测试您设计的电路。为便于测试,请勿修改子电路包装。本关测试的用途如下:
Cnt GB2312 ROW COL
00 bbaa 1b 0a
01 d6d0 36 30
02 bfc6 1f 26
03 bcbc 1c 1c
04 b4f3 14 53
常见的调试问题
注意实验文件data.circ 与GB2312ROM.circ前者应该在同一目录下调用GB2312ROM.circ电路,有可能每个人在做实验的时候都没有把它放在一起,然后在找不到这个文件的时候指向另一个目录GB2312ROM.circ,这样,将相应文件的路径带到电路文件中,上传平台时测试这条路径的文件肯定不存在,所以不能加载这条电路。 以下两种方法可以解决这个问题: (1)本地修改,本地直接修改data.circ,GB2312ROM.circ切割移动到新目录时,注意切割,确保再次打开data.circ找不到原来的GB2312ROM.circ,当提示找不到文件时,单击同一目录GB2312ROM.circ,然后退出存盘ok,再次提交测试。 (2)直接EduCoder修改平台,直接在代码框中搜索文件路径 去掉绝对路径,改为以下形式 远程更改后,将代码文本复制到本地,修改本地文件,当然也可以直接在本地编辑修改。 默认输入10进制,如果输入16进制,需要增加0x开头。
第二关:汉字机内码获取实验
- 实验目的
- 实验内容
- 电路框架
- 电路引脚
- 电路测试
- 常见的调试问题
实验目的
(1)帮助学生理解汉字机的内码和区位码,最终使用相关工具批量获取一段文字 GB2312 使用简单的电路实现机内码 GB2312 转换编码和区位码; (2)学生了解字形码显示的基本原理,可以在实验环境中实现汉字 GB2312 编码点阵显示。
实验内容
从国家标准码到区位码的转换电路完成后,可以在汉字显示电路中进行测试,并尝试在下图所示的电路中进行测试 ROM 将下面给出的指定句子存储在存储器中。请注意,不允许通过逐字检码表获取编码。我们应该掌握批量转换的方法和原理。
12345ABCDEFGABCDEFG轻轻地走了,就像我轻轻地来了一样;我轻轻地挥手告别西方的云彩。河边的金柳是夕阳下的新娘;波光中的艳影在我心中荡漾。
电路框架
data.circ
电路引脚
信号 | 输入/输出 | 位宽 | 说明 |
---|---|---|---|
EduCoder | 输出 | 16 位 | 该引脚用于汉字机内码 Educoder 请勿删除自动测试 |
电路测试
该电路中的计数器用于自动生成和存储汉字 GB2312 编码的 ROM 组件的地址序列可以在启用时钟后自动模拟右侧 LED 依次显示矩阵区域ROM提前预存的汉字内容(时钟自动模拟快捷键:Ctrl k)。
实验完成后,打开文本编辑工具 data.circ 复制粘贴所有文本信息 Educoder 平台的 data.circ 在文件中,单击评估按钮进行本关测试。平台将自动测试您设计的电路。为便于测试,请勿修改子电路包装。本关测试的用途如下:
Cnt GB2312
00 a3b1
01 a3b2
02 a3b3
03 a3b4
04 a3b5
05 a3c1
06 a3c2
07 a3c3
08 a3c4
...
常见的调试问题
注意实验文件data.circ 与GB2312ROM.circ前者应该在同一目录下调用GB2312ROM.circ电路,有可能每个人在做实验的时候都没有把它放在一起,然后在找不到这个文件的时候指向另一个目录GB2312ROM.circ,这样,将相应文件的路径带到电路文件中,上传平台时测试这条路径的文件肯定不存在,所以不能加载这条电路。 以下两种方法可以解决这个问题: (1)本地修改,本地直接修改data.circ,GB2312ROM.circ切割移动到新目录时,注意切割,确保再次打开data.circ找不到原来的GB2312ROM.circ,当提示找不到文件时,单击同一目录GB2312ROM.circ,然后退出存盘ok,再次提交测试。 (2)直接EduCoder修改平台,直接在代码框中搜索文件路径 去掉绝对路径,改为以下形式 假如你的本地测试是ok的,上传Educoder平台输出为悬浮状态X,主要有两种可能的原因。 第一种可能是你上传了错误的代码,上传了其他目录的框架文件,根本没有实现电路,所以没有输出。为了判断这种情况,你只需要下载平台的代码并打开它;br> 另外一种可能是你电路的封装引脚可能因为增删改引脚发生了变化,系统测试时对应的输出引脚没有连接正确,所以需要仔细检查待测电路的封装,目前所有框架文件均提供了待测电路的封装测试子电路,仔细检查引脚是否和连线错位。
下图就是没有测试引脚的框架,最新框架如上图,有一二educoder的输出引脚。
第3关:偶校验编码设计
- 实验目的
- 实验内容
- 电路框架
- 电路引脚
- 电路测试
- 常见调试问题
实验目的
帮助学生掌握奇偶校验基本原理和特性,能在 Logisim 中实现偶校验编码电路,检错电路,理解校验码传输的原理。
实验内容
在 logisim 中打开实验资料包中的 data.circ 文件,在对应电路中完成偶校验编码电路。实验电路输入输出引脚如图所示。输入:16位原始数据;输出:17位校验码(16位数据位+1位校验位),其中校验位存放在最高位,注意输入16位原始数据的每一位都已经通过分线器利用隧道标签引出,可以直接复制到绘图区使用。
电路框架
data.circ
电路引脚
信号 | 输入/输出 | 位宽 | 说明 |
---|---|---|---|
原始数据 | 输入 | 16 位 | 无冗余信息的原始数据 |
校验码 | 输出 | 17 位 | 最高位为偶校验位的偶校验数据 |
电路测试
电路框架提供了偶校验编码传输测试子电路,完成偶校验解码电路后可以进行测试,具体测试电路如下图所示:
完成实验后利用文本编辑工具打开 data.circ ,将所有文字信息复制粘贴到 Educoder 平台的 data.circ 文件中,再点击评测按钮即可进行本关测试,平台会对你设计的电路进行自动测试,为方便测试,请勿修改子电路封装,本关测试用例如下:
00 bbaa 0bbaa
01 d6d0 0d6d0
02 bfc6 1bfc6
03 bcbc 0bcbc
04 b4f3 0b4f3
05 d1a7 1d1a7
06 cac7 1cac7
07 b9fa 1b9fa
08 bcd2 1bcd2
09 bdcc 0bdcc
0a d3fd 0d3fd
0b b2bf 1b2bf
0c d6b1 1d6b1
0d caf4 1caf4
0e b5c4 0b5c4
0f c8ab 0c8ab
...
常见调试问题
注意实验文件data.circ 与GB2312ROM.circ应该放在同一个目录下,前者调用了GB2312ROM.circ电路,有可能大家做实验的时候没有放在一起,然后找不到这个文件的时候大家指向了另外一个目录的GB2312ROM.circ,这样对应文件的路径就带到电路文件中去了,上传平台时测试这个路径的文件肯定是不存在的,所以就无法加载这个电路。 解决这个问题可以采用以下两种方法: (1)本地修改,直接将本地的data.circ,GB2312ROM.circ剪切移动到一个新目录中,注意一定是剪切,要保证再次打开data.circ的时候找不到原来的GB2312ROM.circ,当提示找不到该文件的时候就就点击同目录的GB2312ROM.circ,然后存盘退出就ok,再次提交测试。 (2)直接EduCoder平台修改,直接在代码框搜索该文件路径 去掉绝对路径,改成如下形式即可 如果你本地测试是ok的,上传Educoder平台出现输出为悬浮态X,主要有两种可能的原因。 第一种可能是你上传错了代码,有可能上传的是别的目录的框架文件,根本没有实现电路,所以没有任何输出,要判断是否是这种情况只需要将平台的代码下载到本地打开看看就知道了; 另外一种可能是你电路的封装引脚可能因为增删改引脚发生了变化,系统测试时对应的输出引脚没有连接正确,所以需要仔细检查待测电路的封装,目前所有框架文件均提供了待测电路的封装测试子电路,仔细检查引脚是否和连线错位。
第4关:偶校验解码电路设计
- 实验目的
- 实验内容
- 电路框架
- 电路引脚
- 电路测试
- 常见调试问题
实验目的
帮助学生掌握奇偶校验基本原理和特性,能在 Logisim 中实现偶校验编码电路,检错电路,理解校验码传输的原理。
实验内容
在logisim中打开实验资料包中的 data.circ 文件,在对应电路中完成偶校验检错电路。输入:17位校验码,校验位存放在最高位;输出:16位原始数据,1位检错位;实验电路输入输出引脚定义如图所示,注意17位校验码的每一位都通过分线器利用隧道标签引出,方便实验时使用。
电路框架
data.circ
电路引脚
信号 | 输入/输出 | 位宽 | 说明 |
---|---|---|---|
校验码 | 输入 | 17 位 | 最高位为偶校验位的偶校验数据 |
检错位 | 输出 | 1 位 | 1 表示有错,0 表示无错 |
数据位 | 输出 | 16 位 | 无冗余信息的原始数据 |
电路测试
电路框架提供了偶校验编码传输测试子电路,完成偶校验解码电路后可以进行测试,具体测试电路如下图所示:
完成实验后利用文本编辑工具打开 data.circ ,将所有文字信息复制粘贴到 Educoder 平台的 data.circ 文件中,再点击评测按钮即可进行本关测试,平台会对你设计的电路进行自动测试,为方便测试,请勿修改子电路封装,本关测试用例如下:
Cnt ParityD GB2312 Err
00 0bbaa bbaa 0
01 16d01 6d01 1
02 1bfc6 bfc6 0
03 1cbcd cbcd 1
04 14f34 4f34 1
05 11a7e 1a7e 0
06 1cac7 cac7 0
07 19fa3 9fa3 1
08 1cd23 cd23 1
09 1dcc7 dcc7 1
0a 13fd3 3fd3 0
0b 1b2bf b2bf 0
0c 16b17 6b17 0
0d 1caf4 caf4 0
0e 1c497 c497 1
0f 08abe 8abe 1
...
常见调试问题
注意实验文件data.circ 与GB2312ROM.circ应该放在同一个目录下,前者调用了GB2312ROM.circ电路,有可能大家做实验的时候没有放在一起,然后找不到这个文件的时候大家指向了另外一个目录的GB2312ROM.circ,这样对应文件的路径就带到电路文件中去了,上传平台时测试这个路径的文件肯定是不存在的,所以就无法加载这个电路。 解决这个问题可以采用以下两种方法: (1)本地修改,直接将本地的data.circ,GB2312ROM.circ剪切移动到一个新目录中,注意一定是剪切,要保证再次打开data.circ的时候找不到原来的GB2312ROM.circ,当提示找不到该文件的时候就就点击同目录的GB2312ROM.circ,然后存盘退出就ok,再次提交测试。 (2)直接EduCoder平台修改,直接在代码框搜索该文件路径 去掉绝对路径,改成如下形式即可 如果你本地测试是ok的,上传Educoder平台出现输出为悬浮态X,主要有两种可能的原因。 第一种可能是你上传错了代码,有可能上传的是别的目录的框架文件,根本没有实现电路,所以没有任何输出,要判断是否是这种情况只需要将平台的代码下载到本地打开看看就知道了; 另外一种可能是你电路的封装引脚可能因为增删改引脚发生了变化,系统测试时对应的输出引脚没有连接正确,所以需要仔细检查待测电路的封装,目前所有框架文件均提供了待测电路的封装测试子电路,仔细检查引脚是否和连线错位。
第5关:16位海明编码电路设计
- 实验目的
- 视频讲解
- 实验内容
- 电路框架
- 电路引脚
- 电路测试
- 常见调试问题
实验目的
帮助学生掌握海明码设计原理与检错纠错性能,能独立设计实现汉字 GB2312 编码的海明校验编码体系,并最终在实验环境中利用硬件电路实现对应的编解码电路。
视频讲解
实验内容
在 logisim 中打开实验资料包中的 data.circ 文件,在对应电路中完成海明校验编码电路。输入输出引脚定义如图所示。输入:16位原始数据;输出:22位校验码(16位数据位+5位校验位+1位总校验位),注意输入16位原始数据的每一位都已经通过分线器利用隧道标签引出,可以直接复制到绘图区使用。
电路框架
data.circ
电路引脚
信号 | 输入/输出 | 位宽 | 功能描述 |
---|---|---|---|
原始数据 | 输入 | 16 位 | 原始待编码数据 |
海明码 | 输入 | 22 位 | 海明编码 |
电路测试
完成海明解码电路后可以在海明编码传输电路中进行测试。
Educoder测试:确认实验完成正确后可利用文本编辑工具打开 data.circ ,将所有文字信息复制粘贴到 Educoder 平台的 data.circ 文件中,再点击评测按钮即可进行本关测试,平台会对你设计的电路进行自动测试,为方便测试,请勿修改子电路封装,本关测试用例如下:
Cnt GB2312 Hamming
00 bbaa 373a52
01 d6d0 3aed88
02 bfc6 177cb9
03 bcbc 374b68
04 b4f3 36cf95
05 d1a7 3a9ab4
06 cac7 19acb5
07 b9fa 171fda
08 bcd2 174d11
09 bdcc 375c61
0a d3fd 3abf6e
0b b2bf 36ab76
0c d6b1 3aeb8e
0d caf4 19afa8
0e b5c4 16dc2b
0f c8ab 198a5f
...
常见调试问题
注意实验文件data.circ 与GB2312ROM.circ应该放在同一个目录下,前者调用了GB2312ROM.circ电路,有可能大家做实验的时候没有放在一起,然后找不到这个文件的时候大家指向了另外一个目录的GB2312ROM.circ,这样对应文件的路径就带到电路文件中去了,上传平台时测试这个路径的文件肯定是不存在的,所以就无法加载这个电路。 解决这个问题可以采用以下两种方法: (1)本地修改,直接将本地的data.circ,GB2312ROM.circ剪切移动到一个新目录中,注意一定是剪切,要保证再次打开data.circ的时候找不到原来的GB2312ROM.circ,当提示找不到该文件的时候就就点击同目录的GB2312ROM.circ,然后存盘退出就ok,再次提交测试。 (2)直接EduCoder平台修改,直接在代码框搜索该文件路径 去掉绝对路径,改成如下形式即可 如果你本地测试是ok的,上传Educoder平台出现输出为悬浮态X,主要有两种可能的原因。 第一种可能是你上传错了代码,有可能上传的是别的目录的框架文件,根本没有实现电路,所以没有任何输出,要判断是否是这种情况只需要将平台的代码下载到本地打开看看就知道了; 另外一种可能是你电路的封装引脚可能因为增删改引脚发生了变化,系统测试时对应的输出引脚没有连接正确,所以需要仔细检查待测电路的封装,目前所有框架文件均提供了待测电路的封装测试子电路,仔细检查引脚是否和连线错位。
第6关:16位海明解码电路设计
- 实验目的
- 视频讲解
- 实验内容
- 电路框架
- 电路引脚
- 电路测试
- 调试问题
- 常见调试问题
实验目的
帮助学生掌握海明码设计原理与检错纠错性能,能独立设计实现汉字 GB2312 编码的海明校验编码体系,并最终在实验环境中利用硬件电路实现对应的编解码电路。
视频讲解
实验内容
在 Logisim 中打开实验资料包中的 data.circ 文件,在对应电路中完成海明校验解码电路。输入输出引脚定义如图,输入:22位校验码;输出:16位原始数据,1位检错位;2位检错位;无错误状态位。注意输入16位原始数据的每一位都已经通过分线器利用隧道标签引出,可以直接复制到绘图区使用。
电路框架
data.circ 【实验资料包码云下载】
电路引脚
信号 | 输入/输出 | 位宽 | 功能描述 |
---|---|---|---|
海明码 | 输入 | 22 位 | 海明编码 |
0位错 | 输出 | 1 位 | 为 1 表示检错码为零,未检测到任何错误 |
1 位错 | 输出 | 1 位 | 为 1 表示检错码不为零,检测到 1 位错 |
2 位错 | 输出 | 1 位 | 为 1 表示检错码不为零,检测到 2 位错 |
纠错后数据 | 输出 | 16 位 | 尽力纠错后的原始数据 |
电路测试
完成海明解码电路后可以在海明编码传输电路中进行测试。
Educoder测试:确认实验完成正确后可利用文本编辑工具打开 data.circ ,将所有文字信息复制粘贴到 Educoder 平台的 data.circ 文件中,再点击评测按钮即可进行本关测试,平台会对你设计的电路进行自动测试,为方便测试,请勿修改子电路封装,本关测试用例如下:
Cnt Hamming GB2312 NoErr Err1 Err2
00 373a52 bbaa 1 0 0
01 3aed88 d6d0 1 0 0
02 177cb9 bfc6 1 0 0
03 374b68 bcbc 1 0 0
04 36cf95 b4f3 1 0 0
05 3a9ab4 d1a7 1 0 0
06 19acb5 cac7 1 0 0
07 171fda b9fa 1 0 0
...
7f 1a8684 xxxx 0 0 1
80 190f3b xxxx 0 0 1
调试问题
常见调试问题
注意实验文件data.circ 与GB2312ROM.circ应该放在同一个目录下,前者调用了GB2312ROM.circ电路,有可能大家做实验的时候没有放在一起,然后找不到这个文件的时候大家指向了另外一个目录的GB2312ROM.circ,这样对应文件的路径就带到电路文件中去了,上传平台时测试这个路径的文件肯定是不存在的,所以就无法加载这个电路。 解决这个问题可以采用以下两种方法: (1)本地修改,直接将本地的data.circ,GB2312ROM.circ剪切移动到一个新目录中,注意一定是剪切,要保证再次打开data.circ的时候找不到原来的GB2312ROM.circ,当提示找不到该文件的时候就就点击同目录的GB2312ROM.circ,然后存盘退出就ok,再次提交测试。 (2)直接EduCoder平台修改,直接在代码框搜索该文件路径 去掉绝对路径,改成如下形式即可 如果你本地测试是ok的,上传Educoder平台出现输出为悬浮态X,主要有两种可能的原因。 第一种可能是你上传错了代码,有可能上传的是别的目录的框架文件,根本没有实现电路,所以没有任何输出,要判断是否是这种情况只需要将平台的代码下载到本地打开看看就知道了; 另外一种可能是你电路的封装引脚可能因为增删改引脚发生了变化,系统测试时对应的输出引脚没有连接正确,所以需要仔细检查待测电路的封装,目前所有框架文件均提供了待测电路的封装测试子电路,仔细检查引脚是否和连线错位。
第7关:海明编码流水传输实验
- 实验目的
- 视频讲解
- 实验内容
- 电路框架
- 电路引脚
- 电路测试
- 测试用例
实验目的
学生熟悉流水数据传输机制,流水暂停原理,为最终的流水 CPU 设计做好技术储备,最终学生能对实验环境提供的五段流水编码传输电路进行简单修改,实现数据编码在不可靠网络中的可靠传输。
视频讲解
实验内容
图中将海明编码传输过程分成了5个阶段(取数,编码,传输,解码,显示)类似 CPU 指令流水线的处理过程。中间蓝色长条为流水接口部件(内部实际是若干锁存器/寄存器,用于锁存数据和控制信号),流水接口部件提供同步清零控制信号,试启用时钟自动仿真运行该电路(CTRL+T),观察接收方接受到的信息,当发生两位错时,将会发生错误。 尝试使用最少的器件简单修改该电路,使得解码阶段出现两位错时,系统能自动重传出错的编码(类似指令流水线中的分支跳转),从而使得该电路能正确传输所有数据。 解题思路:当出现两位错时,首先要将编码阶段和传输阶段的数据清空,这部分数据会导致接收端数据顺序不一致,同时要将已经进入显示阶段的数据锁定,并将取数阶段的地址回滚到正确的位置。
电路框架
data.circ
电路引脚
信号 | 输入/输出 | 位宽 | 功能描述 |
---|---|---|---|
EDU | 输入 | 1 | 为 1 时随机干扰器按照固定模式触发干扰,而不是随机,方便 EduCoder 在线测试 |
1err | 输出 | 1 | 解码阶段检测到 1 位错 |
2err | 输出 | 1 | 解码阶段检测到 2 位错 |
clr2 | 输出 | 1 | 编码阶段流水寄存器同步清零信号 |
clr3 | 输出 | 1 | 随机干扰阶段流水寄存器同步清零信号 |
clr4 | 输出 | 1 | 解码阶段流水寄存器同步清零信号 |
en5 | 输出 | 1 | 显示阶段流水寄存器使能信号 |
电路测试
Educoder 测试:确认实验完成正确后可利用文本编辑工具打开 data.circ ,将所有文字信息复制粘贴到 Educoder 平台的 data.circ 文件中,再点击评测按钮即可进行本关测试,平台会对你设计的电路进行自动测试,为方便测试,请勿修改子电路封装,本关测试用例如下:
测试用例
Cnt Err1 Err2 Clr2 Clr3 Clr4 En5
00 0 0 0 0 0 1
01 0 1 0 0 0 1
02 0 1 0 0 0 1
03 1 0 0 0 0 0
04 1 0 0 0 0 0
05 1 0 0 0 0 0
06 0 0 0 0 0 0
07 0 0 0 0 0 0
08 0 0 0 0 0 0
09 0 0 0 0 0 0
......
备注:(Cnt 为时钟节拍数)。 ####常见调试问题
注意实验文件data.circ 与GB2312ROM.circ应该放在同一个目录下,前者调用了GB2312ROM.circ电路,有可能大家做实验的时候没有放在一起,然后找不到这个文件的时候大家指向了另外一个目录的GB2312ROM.circ,这样对应文件的路径就带到电路文件中去了,上传平台时测试这个路径的文件肯定是不存在的,所以就无法加载这个电路。 解决这个问题可以采用以下两种方法: (1)本地修改,直接将本地的data.circ,GB2312ROM.circ剪切移动到一个新目录中,注意一定是剪切,要保证再次打开data.circ的时候找不到原来的GB2312ROM.circ,当提示找不到该文件的时候就就点击同目录的GB2312ROM.circ,然后存盘退出就ok,再次提交测试。 (2)直接EduCoder平台修改,直接在代码框搜索该文件路径 去掉绝对路径,改成如下形式即可 如果你本地测试是ok的,上传Educoder平台出现输出为悬浮态X,主要有两种可能的原因。 第一种可能是你上传错了代码,有可能上传的是别的目录的框架文件,根本没有实现电路,所以没有任何输出,要判断是否是这种情况只需要将平台的代码下载到本地打开看看就知道了; 另外一种可能是你电路的封装引脚可能因为增删改引脚发生了变化,系统测试时对应的输出引脚没有连接正确,所以需要仔细检查待测电路的封装,目前所有框架文件均提供了待测电路的封装测试子电路,仔细检查引脚是否和连线错位。
第8关:16位CRC并行编解码电路设计
- 实验目的
- 视频讲解
- 实验内容
- 电路框架
- 电路引脚
- 电路测试
- 常见调试问题
实验目的
学生掌握 CRC 循环冗余校验码的基本原理,能看懂串行 CRC 编解码电路,并利用所学数字逻辑知识设计实现 GB2312 编码16位数据的并行 CRC 编解码电路。。
视频讲解
实验内容
在 Logisim 中打开实验资料包中的 data.circ 文件,尝试利用纯组合逻辑电路实现 CRC 并行编解码电路,输入输出引脚定义如图1.13所示。输入:16位原始数据;输出:22位校验码(16位数据位+5位 CRC 校验位+1位偶校验位),注意输入16位原始数据的每一位都已经通过分线器利用隧道标签引出,可以直接复制到绘图区使用。
电路框架
data.circ
电路引脚
信号 | 输入/输出 | 位宽 | 功能描述 |
---|---|---|---|
原始数据 | test | 16 位 | 原始待编码数据 |
CRC 校验码 | 22 位 | CRC 校验编码,可以采用 CRC-5,也可以采用 CRC-6 实现 | |
无错误 | 输出 | 1 位 | 为 1 表示检错码为零,未检测到任何错误 |
1 位错 | 输出 | 1 位 | 为 1 表示检错码不为零,检测到 1 位错 |
2 位错 | 输出 | 1 位 | 为 1 表示检错码不为零,检测到 2 位错 |
纠错后数据 | 输出 | 16 位 | 尽力纠错后的原始数据 |
电路测试
完成 CRC 解码电路后可以在 CRC 编码传输测试电路中进行测试。
:确认实验完成正确后可利用文本编辑工具打开 data.circ ,将所有文字信息复制粘贴到 Educoder 平台的 data.circ 文件中,再点击评测按钮即可进行本关测试,平台会对你设计的电路进行自动测试,为方便测试,请勿修改子电路封装,本关测试用例如下:
Cnt Send ErrM Mask Err2 Err1 Recv
00 bbaa 0 000000 0 0 bbaa
01 d6d0 0 000000 0 0 d6d0
02 bfc6 0 000000 0 0 bfc6
03 bcbc 0 000000 0 0 bcbc
04 b4f3 0 000000 0 0 b4f3
...
常见调试问题
注意实验文件data.circ 与GB2312ROM.circ应该放在同一个目录下,前者调用了GB2312ROM.circ电路,有可能大家做实验的时候没有放在一起,然后找不到这个文件的时候大家指向了另外一个目录的GB2312ROM.circ,这样对应文件的路径就带到电路文件中去了,上传平台时测试这个路径的文件肯定是不存在的,所以就无法加载这个电路。 解决这个问题可以采用以下两种方法: (1)本地修改,直接将本地的data.circ,GB2312ROM.circ剪切移动到一个新目录中,注意一定是剪切,要保证再次打开data.circ的时候找不到原来的GB2312ROM.circ,当提示找不到该文件的时候就就点击同目录的GB2312ROM.circ,然后存盘退出就ok,再次提交测试。 (2)直接EduCoder平台修改,直接在代码框搜索该文件路径 去掉绝对路径,改成如下形式即可 如果你本地测试是ok的,上传Educoder平台出现输出为悬浮态X,主要有两种可能的原因。 第一种可能是你上传错了代码,有可能上传的是别的目录的框架文件,根本没有实现电路,所以没有任何输出,要判断是否是这种情况只需要将平台的代码下载到本地打开看看就知道了; 另外一种可能是你电路的封装引脚可能因为增删改引脚发生了变化,系统测试时对应的输出引脚没有连接正确,所以需要仔细检查待测电路的封装,目前所有框架文件均提供了待测电路的封装测试子电路,仔细检查引脚是否和连线错位。
第9关:CRC编码流水传输实验
- 实验目的
- 视频讲解
- 实验内容
- 电路框架
- 电路引脚
- 电路测试
- 测试用例
- 常见调试问题
实验目的
学生熟悉流水数据传输机制,流水暂停原理,为最终的流水 CPU 设计做好技术储备,最终学生能对实验环境提供的五段流水编码传输电路进行简单修改,实现数据编码在不可靠网络中的可靠传输。
视频讲解
实验内容
图中将 CRC 编码传输过程分成了5个阶段(取数,编码,传输,解码,显示)类似 CPU 指令流水线的处理过程。中间蓝色长条为流水接口部件(内部实际是若干锁存器/寄存器,用于锁存数据和控制信号),流水接口部件提供同步清零控制信号,试启用时钟自动仿真运行该电路(CTRL+T),观察接收方接受到的信息,当发生两位错时,将会发生错误。 尝试使用最少的器件简单修改该电路,使得解码阶段出现两位错时,系统能自动重传出错的编码(类似指令流水线中的分支跳转),从而使得该电路能正确传输所有数据。 解题思路:当出现两位错时,首先要将编码阶段和传输阶段的数据清空,这部分数据会导致接收端数据顺序不一致,同时要将已经进入显示阶段的数据锁定,并将取数阶段的地址回滚到正确的位置。
电路框架
data.circ
电路引脚
信号 | 输入/输出 | 位宽 | 功能描述 |
---|---|---|---|
EDU | 输入 | 1 | 为 1 时随机干扰器按照固定模式触发干扰,而不是随机,方便 EduCoder 在线测试 |
1err | 输出 | 1 | 解码阶段检测到 1 位错 |
2err | 输出 | 1 | 解码阶段检测到 2 位错 |
clr2 | 输出 | 1 | 编码阶段流水寄存器同步清零信号 |
clr3 | 输出 | 1 | 随机干扰阶段流水寄存器同步清零信号 |
clr4 | 输出 | 1 | 解码阶段流水寄存器同步清零信号 |
en5 | 输出 | 1 | 显示阶段流水寄存器使能信号 |
电路测试
Educoder 测试:确认实验完成正确后可利用文本编辑工具打开 data.circ ,将所有文字信息复制粘贴到 Educoder 平台的 data.circ 文件中,再点击评测按钮即可进行本关测试,平台会对你设计的电路进行自动测试,为方便测试,请勿修改子电路封装,本关测试用例如下:
测试用例
Cnt Err1 Err2 Clr2 Clr3 Clr4 En5
00 0 0 0 0 0 1
01 0 1 0 0 0 1
02 0 1 0 0 0 1
03 1 0 0 0 0 0
04 1 0 0 0 0 0
05 1 0 0 0 0 0
06 0 0 0 0 0 0
07 0 0 0 0 0 0
08 0 0 0 0 0 0
09 0 0 0 0 0 0
......
备注:(Cnt 为时钟节拍数)。
常见调试问题
注意实验文件data.circ 与GB2312ROM.circ应该放在同一个目录下,前者调用了GB2312ROM.circ电路,有可能大家做实验的时候没有放在一起,然后找不到这个文件的时候大家指向了另外一个目录的GB2312ROM.circ,这样对应文件的路径就带到电路文件中去了,上传平台时测试这个路径的文件肯定是不存在的,所以就无法加载这个电路。 解决这个问题可以采用以下两种方法: (1)本地修改,直接将本地的data.circ,GB2312ROM.circ剪切移动到一个新目录中,注意一定是剪切,要保证再次打开data.circ的时候找不到原来的GB2312ROM.circ,当提示找不到该文件的时候就就点击同目录的GB2312ROM.circ,然后存盘退出就ok,再次提交测试。 (2)直接EduCoder平台修改,直接在代码框搜索该文件路径 去掉绝对路径,改成如下形式即可 如果你本地测试是ok的,上传Educoder平台出现输出为悬浮态X,主要有两种可能的原因。 第一种可能是你上传错了代码,有可能上传的是别的目录的框架文件,根本没有实现电路,所以没有任何输出,要判断是否是这种情况只需要将平台的代码下载到本地打开看看就知道了; 另外一种可能是你电路的封装引脚可能因为增删改引脚发生了变化,系统测试时对应的输出引脚没有连接正确,所以需要仔细检查待测电路的封装,目前所有框架文件均提供了待测电路的封装测试子电路,仔细检查引脚是否和连线错位。
q:3303847739。
备注“运算器设计(HUST)
私聊