微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

verilog中的移位寄存器

如何解决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' 的值将保持不变,直到您再次启用它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。