跳转至

实验要求

1 设计32位ALU(4分)

  • 完成仿真测试
  • 查看RTL分析、综合和实现的电路图 (Schematic)
  • 查看电路资源使用情况

1.1 设计要求

你需要按照实验内容文档对 ALU 进行设计。在这里,我们给出顶层模块的接口及其含义作为设计约束。

module alu(
    input  [31:0] a,  // 第一操作数,移位运算中为被移位的数据
    input  [31:0] b,  // 第二操作数,移位运算中由b[4:0]提供移位量
    input  [11:0] f,  // flag:运算选择信号,使用12位独热码选择输出结果
    output [31:0] y   // 输出所选运算的32位结果
);
    // 请在此处完成组合逻辑设计
endmodule

端口 方向 位宽 含义
a 输入 32 第一操作数,移位运算中为被移位的数据
b 输入 32 第二操作数,移位运算中由 b[4:0] 提供移位量
f 输入 12 flag,运算选择信号,用来选择ALU的输出模式;有效操作码恰有一位为1
y 输出 32 输出结果,取值为 f 选中的运算结果

注意事项: * 三种移位运算均只使用 b[4:0],移位量范围为 0 至 31。例如,b = 32'h00000021 时,移位量为 1。左移时移出 32 位范围的高位丢弃。 * 表中的 12 种独热码为有效操作码,其余操作码的输出可自行定义。

1.2 验收要求

仿真:自行编写testbench,在检查实验时向助教展示波形,说明你设计的正确性。

2 设计译码器及译码器联合电路(6分)

  • 采用模块化设计
  • 完成电路仿真和上板测试
  • 查看RTL分析、综合和实现的电路图(Schematic)
  • 查看电路资源使用情况

2.1 设计要求

你需要分别设计4线-10线BCD译码器和七段数码管译码器,并在顶层模块中例化两个译码器和MUX,完成联合电路。两个译码器接收同一组BCD输入,通过MUX选择LED或数码管显示链路。顶层模块的接口如下:

module lab1_top(
    input  [4:0] sw,   // switch:拨码开关,低4位输入BCD码,第4位选择显示链路
    output [9:0] led,  // light-emitting diode:LED指示灯,高电平点亮
    output [6:0] cn,   // cathode,低电平有效:数码管a-g段的控制信号
    output [7:0] an,   // anode:数码管位选,低电平选中对应数码管
    output       dp    // decimal point:小数点,低电平点亮
);
    // 请在此处例化两个译码器和MUX,完成顶层连线
endmodule
端口 方向 位宽 含义
sw 输入 5 switch,拨码开关输入; sw[3:0] 为BCD输入,sw[0] 为最低位;sw[4]=0 选择LED,sw[4]=1 选择数码管
led 输出 10 light-emitting diode,发光二极管指示灯; 高电平点亮,led[0] 至 led[9] 分别对应数字0至9
cn 输出 7 c表示cathode(阴极),n表示低电平有效,控制各段亮灭; 低电平点亮,cn[6:0] 依次对应数码管的a、b、c、d、e、f、g段
an 输出 8 anode,阳极位选控制,用来选择哪一位数码管显示; 低电平有效,固定为 8'b11111110,选中最右侧一位数码管
dp 输出 1 decimal point,小数点控制; 固定为 1'b1,关闭小数点

注意事项:

  • 输入10至15时,4线-10线BCD译码器输出 10'b0,七段数码管译码器输出 7'b1111111。
  • 未被选择的显示链路应熄灭:LED的关闭值为 10'b0,数码管段选的关闭值为 7'b1111111。

2.2 验收要求

仿真:自行编写testbench,在检查实验时向助教展示波形,说明你设计的正确性。测试应覆盖两个译码器的译码结果、两种显示链路的选择,以及输入10至15时的关闭行为,并检查位选和小数点输出。

上板测试:通过拨码开关设置BCD输入和显示选择,逐个检查0至9的显示结果,以及输入10至15时的关闭行为。期望观察到的上板现象如下:

sw[4] sw[3:0] LED现象 数码管现象
0 0至9 编号与输入值相同的LED点亮,其余LED熄灭 全部熄灭
1 0至9 全部熄灭 最右侧一位显示对应数字,其余位熄灭
0或1 10至15 全部熄灭 全部熄灭

小数点应始终熄灭。检查时还需结合代码说明两个译码器和MUX的模块划分、例化与顶层连线。

3 实验验收要求

本次实验需要验收 ALU 和 译码器联合电路的设计。其中,ALU 只需通过仿真测试保证电路输出的正确性即可。译码器联合电路设计则要求在通过仿真测试的基础上进行上板,并得到符合期望的上板现象。
这里请大家特别关注几个重要的内容:

  • 数码管控制信号低电平有效。
  • 模块化设计:在联合电路设计实验中,我们不允许大家在同一个module中完成所有内容的设计,必须至少按照设计图中的模块划分来进行设计(当然,你可以自行增加或在模块中例化更多模块)。
  • 电路资源的使用情况:我们不要求大家尽可能少地使用资源,我们希望通过这个实验能够让大家了解查看资源使用量的方法,以及如何通过查看资源使用量来优化设计。
  • 组合逻辑赋值:使用 always @(*) 描述组合逻辑时,每个被赋值的信号在所有执行路径上都有赋值。可以在开头设置默认值,再根据 if 或 case 条件覆盖。若某些分支遗漏赋值,信号需要保留原值,综合工具可能推断出锁存器。这是我们极不愿意看到的。