【发布时间】:2018-04-20 02:30:29
【问题描述】:
我刚刚开始学习如何学习verilog,我偶然发现了这个问题。所以我试图制作一个移位器,为每个上升时钟脉冲将输入位向左移动一次。但是,当我尝试运行模拟时,输出为 XXXX。任何帮助将不胜感激
module shift_left #(parameter i=3)(
input clk,
input rst,
input [i:0]data_in,
output reg [i:0]data_out
);
wire [i:0]in;
assign in=data_in;
reg [i:0]temp;
always @(posedge clk)begin
if(rst==1)begin
temp<=in;
end
else
data_out<=temp;
temp<=temp<<1;
temp[0]=1'b0;
end
endmodule
【问题讨论】:
-
你在一个非阻塞赋值之后立即使用阻塞赋值。我怀疑这可能与您的问题有关。顺便说一句,
assign in=data_in有什么好处?由于它是wire而不是reg(您将在always @块中分配),我认为如果您在temp<=data_in条件下使用temp<=data_in,它不会改变任何东西。 -
你需要提供你的测试台代码的片段
标签: verilog