在verilog中实现PIPO
我希望在verilog HDL中实现32位并行并行输出。这是我写的代码在verilog中实现PIPO,verilog,icarus,Verilog,Icarus,我希望在verilog HDL中实现32位并行并行输出。这是我写的代码 module pipo(input_seq, answer,reset, clock); input [31:0] input_seq; input reset,clock; output [31:0] answer; always @ (reset) begin if(!reset) begin answer[3
module pipo(input_seq, answer,reset, clock);
input [31:0] input_seq;
input reset,clock;
output [31:0] answer;
always @ (reset)
begin
if(!reset)
begin
answer[31:0]<=1'b0;
end
end
always @ (posedge clock)
begin
answer[31:1]<=input_seq[30:0];
end
endmodule
有什么问题吗?您使用的是
answer
作为寄存器,但它被声明为导线<代码>导线是连接两个点的东西,因此没有任何驱动力。另一方面,reg
可以存储价值和驱动力
将answer
的声明更改为reg
,应该会有所帮助
output reg [31:0] answer;
您正在使用
answer
作为寄存器,但它声明为有线<代码>导线是连接两个点的东西,因此没有任何驱动力。另一方面,reg
可以存储价值和驱动力
将answer
的声明更改为reg
,应该会有所帮助
output reg [31:0] answer;
我建议您在描述组合逻辑时,使用阻塞赋值
always @ (reset)
begin
if(!reset)
begin
answer[31:0]=1'b0; //blocking assignment
end
end
About this block:
always @ (posedge clock)
begin
answer[31:1]<=input_seq[30:0];
end
始终@(重置)
开始
如果(!重置)
开始
答案[31:0]=1'b0//阻塞分配
结束
结束
关于这个街区:
始终@(posedge时钟)
开始
回答[31:1]我建议您在描述组合逻辑时,使用阻塞赋值
always @ (reset)
begin
if(!reset)
begin
answer[31:0]=1'b0; //blocking assignment
end
end
About this block:
always @ (posedge clock)
begin
answer[31:1]<=input_seq[30:0];
end
始终@(重置)
开始
如果(!重置)
开始
答案[31:0]=1'b0//阻塞分配
结束
结束
关于这个街区:
始终@(posedge时钟)
开始
回答[31:1]这是带测试台的工作代码,这是带测试台的工作代码。您不应将寄存器的复位逻辑和寄存器的时钟逻辑拆分为单独的块。您应该有一个块始终@(posedge时钟或negedge重置)
。在您的设计中,如果断言复位时时钟切换,时钟块仍将执行,这不是建立触发器模型的正确方法。您不应将寄存器的复位逻辑和寄存器的时钟逻辑拆分为单独的块。您应该有一个块始终@(posedge时钟或negedge重置)
。在您的设计中,如果断言重置时时钟切换,则仍将执行时钟块,这不是建立触发器模型的正确方法。