1位全加器实现
一个模块实现–参考一位半加器
- 模块框图与真值表
输入 | 输出 | |||
---|---|---|---|---|
cin | in1 | in2 | cout | sum |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 0 | 1 |
0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 0 |
1 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
- 代码 assign语句,逻辑表达式比较复杂,此处就直接用加法
- RTL视图
- testbench代码
- 仿真结果
层次化设计
- 可以先对两位进行半加,然后得到进位与和cout0,再让和与cin进行半加,得到最后的和sum与cout1,两次的进位其中最多有一个1,因为半加不可能得到和与进位都为1。模块框图如下:
- 代码
- 调用以前的模块需要将前面的.v文件加到改工程文件夹里
- 通过实例化设计: rtl 中的实例化过程和Testbench 中的实例化过程是一样的,可以对比理解学习
- 注意模块名必须和工程文件一样的名字,一开始由于用第一种方法写了,所以用了另一个名字就会报错
如下:
-
RTL视图
绿色模块即为以前写的半加器模块,可以看出和自己一开始画的模块框图差不多。 -
仿真代码 testbench,和上面第一种方法一样的
- 仿真结果,参考第一种方法,结果都差不多。