时间:2024-08-10 来源:网络搜集 关于我们 0
继续整理牛客网经典Verilog习题讲解,牛客网里除了最新的Verilog题库还有其它领域的经典笔试、面试题,大家快和我一起刷起来吧(「链接」)。
现在输入了一个压缩的16位数据,其实际上包含了四个数据[3:0][7:4][11:8][15:12],
请按照sel选择输出四个数据的相加结果,并输出valid_out信号(在不输出时候拉低)
0: 不输出且只有此时的输入有效
1:输出[3:0]+[7:4]
2:输出[3:0]+[11:8]
3:输出[3:0]+[15:12]
本题其实就是第一题的扩展版,根据sel信号对输入进行不同的操作并输出。唯一需要注意的是,题目要求sel为‘0’时不输出结果,且仅当时的输入有效。
这就需要我们在sel为‘0’时,对d采样,并记录。而validout信号在sel非‘0’常为‘1’。 所以整个代码分为三个部分:d的采样逻辑、validout随sel变化的逻辑、out根据sel完成不同操作。本题比较简单,在代码层面没有需要特别注意的问题,不过新手朋友可能不清楚out信号5-bits的由来,或者说是计算结果的位宽该如何确定。
通常来说n bits+n bits = n+1 bits;n bits*n bits = 2n bits;但其实有一个最简单的办法,将等号左边所有变量以最大值计算,就可以知道等号右侧最大需要多少位宽了;