我希望在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[31:0]<=1'b0;
end
end
always @ (posedge clock)
begin
answer[31:1]<=input_seq[30:0];
end
endmodule
然而,这会导致以下错误日志(使用iverilog
):
pipo.v:10: error: answer['sd31:'sd0] is not a valid l-value in pipo.
pipo.v:4: : answer['sd31:'sd0] is declared here as wire.
pipo.v:16: error: answer['sd31:'sd1] is not a valid l-value in pipo.
pipo.v:4: : answer['sd31:'sd1] is declared here as wire.
Elaboration failed
有什么问题?
答案 0 :(得分:5)
您使用answer
作为注册,但它被声明为电线。 Wire
是连接两个点的东西,因此没有任何驱动力。另一方面,reg
可以存储价值和驱动力。
将answer
的声明更改为reg
,这应该会有所帮助。
output reg [31:0] answer;
答案 1 :(得分:-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
您可以通过输出output reg [31:0] answer
来修复错误,这样您就可以在always块中分配输出。