实验平台在vivado2019.1,选择的FPGA板卡为xc7k325Tffg900-1。
从最简单的加法器做起,
半加器( half addr): 是指对输入的两个一位二进制数相加(a与b),输出一个结果位(sum)和进位(c),没有进位的输入加法器电路,是一个实现一位二进制数的加法电路。
真值表为:
输入 | 输出 | ||
a | b | sum | c |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
真值表达式为:
sum = a b, c = a & b
那么verilog实现代码为:
`timescale 1ns / 1ps
module half_adder(
input a,
input b,
output sum,
output c
);
assign c = a & b;
assign sum = a ^ b;
endmodule
仿真测试代码为:
`timescale 1ns / 1ps
module half_adder_tb(
);
reg a;
reg b;
wire out;
wire c;
half_adder half_adder1(
.a(a),
.b(b),
.out(out),
.c(c)
);
initial begin
a = 1;
b = 1;
# 10
$display("a = %d, b = %d, sum = %d, c = %d",a,b,sum,c);
end
endmodule
功能正确
查看RTL层的原理图
可以看到RTL实现方式:
与运算直接由与门实现,
异或由一个比较器+一个选择器实现。
接下来看看综合后的模块需要多少FPGA资源吧。
使用vivado将当前half_adder.v打包成IP。
创建block design
运行综合,查看原理图
可以看到半加器在FPGA上的实现为:由两个2输入1输出的查找表实现
运行实现,查看设备
可以看到最终由两个6输入2输出的LUT实现,这是由于XC7K系列的FPGA的LUT资源就是6输入2输出的,具体可以查看7K系列的数据手册。