【问题标题】:Verilog, Parallel in Series out Shift RegisterVerilog,并行输入串行输出移位寄存器
【发布时间】:2018-03-15 07:09:56
【问题描述】:

我正在学习和练习 Verilog HDL。我想设计一个 16 位并行串行输出移位寄存器。

module verilog_shift_register_test_PISO( din, clk, load, dout );

output reg dout ;

input [15:0] din ;
input clk ;
input load ;

reg [15:0]temp;

always @ (clk or load) begin
 if (load)
  temp <= din;
 else begin
  dout <= temp[0];
  temp <= {1'b0, temp[15:1]};
 end
end
endmodule  

我写了这段代码并试图模拟它。

simulation result

simulation_result 我不明白为什么数据输出(dout)信号总是低的原因

【问题讨论】:

    标签: verilog hdl shift-register


    【解决方案1】:

    它对我有用。

    但是!
    该代码不能变成门。 您必须使用“posedge clk”或“negedge clk”。 此外,您的负载是异步的,这是非常不寻常的,并且可以 提供针对时钟边缘的竞争条件。

    always @ (posedge clk)
    begin
       if (load)
          temp <= din;
       else
       begin
         dout <= temp[0];
         temp <= {1'b0, temp[15:1]};
       end
    end
    

    此外,通常会有一个重置条件。只要没有“加载”信号,dout 就会产生 X-es。这会极大地扰乱电路的其余部分。此外,您在 dout 中还有额外的时钟延迟。如果你愿意,你可以在那里保存一个时钟周期。这是异步低电平有效复位:

    always @ (posedge clk or negedge reset_n)
    begin
       if (!reset_n)
          temp <= 16'h0000;
       else
       if (load)
          temp <= din;
       else
         temp <= {1'b0, temp[15:1]};
    end
    
    assign dout = temp[0];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多