verilog中的移位寄存器

问题描述

我设计了一个串入并行输出移位寄存器作为编码器的输入寄存器

module ShiftRegister_SIPO(clk,in,out);
input clk,in;
output [3:0] out;
reg [3:0] tmp;

always @(posedge clk)
begin
tmp = {tmp[2:0],in};
end
assign PO = tmp;
endmodule

一旦获得所需的并行输出数据,即使 clk=1,我如何保留该值?因为即使在获得输出数据之后,该值也会不断变化。例如,如果我给
测试平台的一部分

in=1;
#10
in=0;
#10
in=1;
#10
in=1;

#5 clk=~clk;

我在第 4 个时钟周期得到 1011 ,但随后该值不断变化。我能否在剩余时间内将其保留为 1011,仍然保持 clk=1。 提前致谢

解决方法

在您的示例中,该值将移动时钟的每个正沿。为了防止它在某些情况下移位,您需要一种启用或禁用移位的方法。例如:

always @(posedge clk)
begin
   if (enable)
      tmp <= {tmp[2:0],in};
end

因此,控制 enable 信号可以控制换档。如果它的值较低,则不会发生移位,并且 'tmp' 的值将保持不变,直到您再次启用它。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...