如何解决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 举报,一经查实,本站将立刻删除。