2021.7.3
继续HDLbits,今天的任务是把module学完。
(25)要我用两个16位的加法器做一个32位的加法器,电路思路都给我了,简单。
(26)和前面那题差不多,只是16位加法器里面的1位进位加法器要我写module。
对于参数sum的运算,我没有用hint给的异或写法,我用的是自己通过真值表整理出来的东西(自己写的果然bug了好多次hhh)。
然后我自己也尝试写一下16位加法器的module,很stupid地实例化了16个1位进位加法器,然后导致代码写了一百多行。因为我不懂实例化怎么通过循环语句实现emm(instance能通过向量之类的方法排一列吗?!)
(27)前面那题那个加法器叫做穿行多位加法器(行波进位加法器),它的缺点就是时延太高了,因为module里你前一级的加法器执行完才能执行下一级的,感觉电路资源在时间域里被浪费了。
然后这题的解决方案是把第二级的16位加法器用两个16位加法器加上一个MUX代替了。然后在前一级计算的时候后一级在同时计算,这样时延就得到了降低。总的来说这就是选择进位加法器的设计思路。(这玩意和超前进位加法器是啥关系?反正都是牺牲电路规模来满足缩短时延的思想啦)
然后解题的话一样,实例化三次16位加法器加上一个MUX就行了。
(28)做一个adder-subtractor(加法器-减法器)
//hint说一个异或门可以用一个MUX和反相器来综合,如下:
没有什么难的,但是对于这种Adder-subtractor算是第一次接触8,怪我见识短浅了。
其实减法在数字电路里就是取补码啦...就是取反加一就完事了。
然后module模块也完成了,明天整procedures的活。