实验目的
一、 掌握算术逻辑单元 (ALU) 的功能。
二、 掌握数据通路和控制器的设计方法。
三、 掌握组合电路和时序电路,以及参数化和结构化的Verilog描述方法。
四、 了解查看电路性能和资源使用情况。
五、 利用ALU设计应用器件。
实验环境
Vivado 2019.2 on ubantu20.04
实验步骤
一、 完成ALU模块的逻辑设计和仿真
二、 查看32位ALU的RTL和综合电路图,以及综合电路资源和时间性能报告
三、 完成6位ALU的下载测试,并查看RTL电路图,以及实现电路资源和时间性能报告
四、 完成FLS的逻辑设计、仿真和下载测试
工程文件源代码
https://github.com/windwangustc/USTC
实验过程
一、 ALU模块的逻辑设计和仿真
根据上图的输入输出逻辑真值表,可以很容易的设计出ALU功能模块,代码如下:
module alu #(parameter WIDTH=32)
(
input clk,
input [WIDTH-1:0] a,b,
input [2:0]f,
output reg [WIDTH-1:0] y,
output reg z
);
localparam ADD=0, SUB=1, AND=2, OR=3, XOR=4;
always @(*)
begin
case(f)
ADD: y = a+b;
SUB: y = a-b;
AND: y = a&b;
OR: y = a|b;
XOR: y = a^b;
default:
begin y = 0 ;
z = 1;
end
endcase
if(y) z=0;
else z=1;
end
endmodule
以4位ALU为例进行仿真的结果如下,可以看到加减与或的逻辑结果和时序都正确,Y=0时Z输出1:
32位ALU的RTL:
二、 完成6位ALU的下载测试,并查看RTL电路图
6位ALU的逻辑电路图已经给出了,在原有的ALU上加上寄存器和译码器即可完成电路设计,同时有了寄存器就可以分析时间性能了,代码如下图所示。其中寄存器FABZY都是由module register实例化后得来,之后将这些寄存器同实例化后的ALU和Decoder连线即可。
module alu_6
(
input en,clk,
input [7:0</