HDLBits (108) — 左/右旋转器
本题链接:
https://hdlbits.01xz.net/wiki/Rotate100
创建一个100位左/右旋转器,带有同步加载和左/右使能。旋转器将移位出的位从寄存器的另一端移入,这与丢弃移位的移位器以及用零补位的移位器不同。如果启用,旋转器会旋转位,而不会修改/丢弃位。
load: 用数据[99:0]加载移位寄存器,而不是旋转。
ena[1:0]: 选择是否旋转以及旋转的方向。
2'b01 向右旋转一位
2'b10 向左旋转一位
2'b00 和 2'b11 不要旋转
q: 旋转器的内容

题目

答案

向量
当位宽大于 1 时,wire 或 reg 即可声明为向量的形式。Verilog 支持可变的向量域选择,
Verillog 还支持指定 bit 位后固定位宽的向量域选择访问。
[bit+: width] : 从起始 bit 位开始递增,位宽为 width。
[bit-: width] : 从起始 bit 位开始递减,位宽为 width。
对信号重新进行组合成新的向量时,需要借助大括号。
异步复位
异步复位是指无论时钟到来与否,只要复位信号有效,电路就会执行复位操作。
异步复位常常会被综合成如下电路:

异步复位的优点:大多数触发器单元有异步复位端,不会占用额外的逻辑资源。且异步复位信号不经过处理直接引用,设计相对简单,信号识别快速方便。
异步复位的缺点:复位信号与时钟信号无确定的时序关系,异步复位很容易引起时序上 removal 和 recovery 的不满足。且异步复位容易受到毛刺的干扰,产生意外的复位操作。
参考内容:
2.3 Verilog 数据类型 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog-data-type.html
5.1 Verilog 复位简介 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog2-reset.html