HDLBits (60) — 更长的向量
2022-03-02 14:29 作者:僚机Wingplane | 我要投稿
本题链接:
https://hdlbits.01xz.net/wiki/Gatesv100
另请参见较短版本:门和向量
in[99:0]给出了一个100位的输入向量。我们想知道每个位与其相邻位之间的一些关系:
out_both: 此输出向量的每一位应指示相应的输入位及其左侧的相邻位(高位)是否为“1”。比如说,out_both[98] 应该指出如果 in[98] 和 in[99] 都是1. 因为 in[99] 没有左邻位,答案很明显,所以我们不需要知道out_both[99].
out_any: 此输出向量的每一位都应指示相应的输入位及其右侧的相邻位是否为“1”。比如说,out_any[2] 应该指出如果 in[98] 或 in[99] 中的任何一个都是1。 因为 in[0] 没有右邻位,所以我们不需要知道out_any[0].
out_different: 此输出向量的每一位都应指示相应的输入位及其左侧的相邻位不同。比如说,out_different[98] 应该指出如果 in[98] 与 in[99] 不同。为此,将向量视为一个闭环,所以in[99]是in[0]的左邻位。

题目
提示:
使用向量可以在3个assign语句中完成。

答案

按位操作符包括:取反(~),与(&),或(|),异或(^),同或(~^)。
按位操作符对 2 个操作数的每 1bit 数据进行按位操作。
如果 2 个操作数位宽不相等,则用 0 向左扩展补充较短的操作数。
取反操作符只有一个操作数,它对操作数的每 1bit 数据进行取反操作。
下图给出了按位操作符的逻辑规则。

参考内容:
2.4 Verilog 表达式 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog-expression.html