Verilog位移位
我刚刚开始学习verilog,我偶然发现了这个问题。因此,我试图制作一个位移位器,在每次上升的时钟脉冲中,将输入位向左移位一次。然而,当我尝试运行模拟时,输出结果显示为XXXX。任何帮助都将不胜感激Verilog位移位,verilog,Verilog,我刚刚开始学习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]te
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
模块左移(参数i=3)(
输入时钟,
输入rst,
将[i:0]数据_输入,
输出寄存器[i:0]数据\u输出
);
导线[i:0]英寸;
赋值in=数据_in;
注册[i:0]温度;
始终@(posedge clk)开始
如果(rst==1)开始
temp看起来您正在使用同步重置
,您的问题主要是由于在模拟开始时没有在TB中断言重置
。在继续模拟的其余部分之前,您需要使用reset
信号遵循至少1个断言解除断言序列
至于您的代码,正如Patrick指出的,您不需要在
中创建额外的连接[i:0]。您可以直接执行temp,然后立即执行非阻塞分配和阻塞分配。我怀疑这可能与你的问题有关。顺便说一句,assign in=data\u in
的好处是什么?由于它是导线
而不是reg
(您将在始终
块中分配到它),我认为如果您使用temp,您需要提供测试台代码的片段,它不会改变任何事情