P3
实验内容¶
实验一 :计数器实验¶
- 构建 4 位同步二进制计数器 CNTR4U子电路。
整体方案设计¶
输入输出引脚¶
- CLK:时钟脉冲
- D0~D3:用于装载的数据
- LD:装载标志,即标志是否从D进行装置
- CLR:重置标志,表示是否将Q置0
- ENT、ENP:控制是否锁定计数器,即是否自增
- Q:4位输出
- RCO:是否已达最大值,即Q是否全为1
电路图¶
仿真测试¶
- 首先进行自增测试,测试enp、ent=1时能否实现每次时钟脉冲结果加1
- clr测试,将clr置为1,再进行一次时钟脉冲
- LD测试,将LD设置为true,测试从D进行装载
- 测试使用ENP、ENT锁定
错误现象及分析¶
- 在完成实验的过程中,没有遇到任何错误。
实验二 :数字时钟实验¶
- 显示时分秒 6 个 BCD 码数字,到 23:59:59 后清零,同时蜂鸣 1 秒,到整点时点亮 LED 灯 1 秒,可设置 BCD 码格式的初始时间。
整体方案设计¶
输入输出引脚¶
- CLK:时钟脉冲
- LD:读取
- hh-sl:输入的初始时间
- h1-s0:当前的时间
电路图¶
- 主电路
-
设计思路
- 采用同步设计,即时钟脉冲直接连接到了全部6个计数器
- 但是不是每次没冲所有位都需要加1,只有秒的个位每次加以,其他变化都是由进位造成的。使用比较模块判断一位及之前是否已经全部最大,即将要发生进位,如果发生,则将自身的CLR置为1,即进位后清零,将下一位的ENT置为1,使得在下一次脉冲中下一位会加以即进位
- LD直接连接到所有计数器,但LD置为1时,在下一次脉冲时会将时间进行赋值
-
此外当除了小时之外全部是0时led亮起;小时也为0时喇叭也响起
-
比较模块(用于比较两个4位数是否相同)
仿真测试¶
- 23:59:59进位测试:
- 整点测试:
错误现象及分析¶
- 在完成实验的过程中,没有遇到任何错误。
实验三 :移位寄存器实验¶
- 构建 4 位通用移位寄存器SHRG4U 子电路
整体方案设计¶
输入输出引脚¶
- CLK:时钟脉冲
- LIN/RIN:左移/右移的移入位
- CLR:清0标志位
- ABCD:要装载的值
- QA-QD:输出结果
- S1S0:运算模式的选择
电路图¶
- 二进制随机生成器
仿真测试¶
-
生成的二进制序列
-
序号 序列 1 1000 2 0100 3 0010 4 1001 5 1100 6 0110 7 1011 8 0101 9 1010 10 1101 11 1110 12 1111 13 0111 14 0011 15 0001 16 1000 17 0111 18 0010 19 1001 20 1100
错误现象及分析¶
- 在完成实验的过程中,没有遇到任何错误。
实验四 :4 位无符号数乘法器¶
- 实现两个四位二进制无符号数相乘的功能
整体方案设计¶
输入输出引脚¶
- XY:乘数和被乘数
- Z:计算结果
- RST:重置电路,并加载新的乘数和被乘数
电路图¶
-
设计思路
- 与实现时钟的思路类似,使用cmp模块用于给计数器的ENT赋值进而控制计算(移位次数)
- 时钟信号负责控制寄存器,寄存器会存储上次的运算结果用于本次运算
- 每次运算需要取低位判断是否要i加上一个乘数,之后再进行移动操作
仿真测试¶
- 3*5=15
- 9*7=63
错误现象及分析¶
- 最初没有考虑加法进位的问题,计算较大的数如13*13会出现错误。
- 改进:增加一个选择器,发生进位时移入1
实验五 :寄存器堆实验¶
- 实现具有读写功能的寄存器堆电路
整体方案设计¶
输入输出引脚¶
- RW:指示要写入的寄存器,经过译码器
- CLK:时钟脉冲
- RA:要读取的寄存器A
- RB:要读取的寄存器B
- RDA:寄存器A的读取结果
- RDB:寄存器B的读取结果
- Din:要写入的数据
- WE:是否开启写入
电路图¶
- 连接测试电路
仿真测试¶
- 将7写入寄存器2,13写入寄存器22,并读取进行验证
错误现象及分析¶
- 在完成实验的过程中,没有遇到任何错误。
思考题¶
实现闹钟功能¶
- 如图所示增加一个闹钟模块,thh-tsl时设定的闹钟时间,当到达时间之后会将sound2置为1,喇叭响起;之后只需点击两下off,就会将sound2重新置为0,关闭闹钟
- 到达时间后闹钟响起
- 使用off关闭闹钟
实现 4 位 Booth 乘法器的功能¶
- 电路图
- 思路:
- 在无符号乘法器上修改,主要修改右侧的部分
- 首先增添一个寄存器存储\(y_{-1}\)的值,并使用时钟脉冲控制更新
- 使用比较器比较\(y_{-1}\)和\(y_0\)再经过编码后传递给选择器,对应\(+-X\)以及不变三种情况
- 测试
- \(-7*4=-28\)
- \(-8*-8=64\)
实现4 位无符号数除法器¶
- 电路图
- 实现思路
- 左侧复用乘法的计数器,但是除法要多做一次(n+1)
- 右侧使用加减交替法,根据最高位判断是+y还是-y
- 测试
- \(5/2=2\dots1\)
-
\(7/3=2\dots1\)
-
遇到的问题,5/2这个一直算不对,仔细阅读ppt发现
- 最后一次上商为“0”的话,需要“纠余”处理,即把试商时被减掉的除数加回去,恢复真正的余数。(为1则不需要)
- 添加右下角电路后解决