Verilog 阻塞分配的非法左侧
我是verilog的新手。我正在为10x16圆移位寄存器编写代码。你能帮我解决这个错误吗?还有,是否可以进行任何优化Verilog 阻塞分配的非法左侧,verilog,Verilog,我是verilog的新手。我正在为10x16圆移位寄存器编写代码。你能帮我解决这个错误吗?还有,是否可以进行任何优化 module shift_reg_v( output [15:0] word_out ); integer i; integer j; reg [159:0] coeff; reg [15:0] word; initial begin for (i=0;i<160;i=i+1) begin coeff[i] = 0;
module shift_reg_v(
output [15:0] word_out
);
integer i;
integer j;
reg [159:0] coeff;
reg [15:0] word;
initial
begin
for (i=0;i<160;i=i+1)
begin
coeff[i] = 0;
end
for (i=0;i<16;i=i+1)
begin
word[i] = 0;
end
end
always
begin
for (j=0;j < 10;j = j+1)
begin
for (i=0;i < 16;i = i+1)
begin
if (j==0)
begin
word[i] = coeff[(16*(j+1))+i];
end
else
begin
coeff[(16*j)+i] = coeff[(16*(j+1))+i];
end
end
end
coeff[159:144] = word[15:0];
word_out[15:0] = word[15:0];
end
endmodule
模块移位\u reg\u v(
输出[15:0]字输出
);
整数i;
整数j;
注册[159:0]系数;
reg[15:0]字;
最初的
开始
对于(i=0;i指错误:
错误-[IBLHS-NOREG]左侧非法行为
a、 sv,42
非注册类型在此作业的左侧无效
冒犯性的表达是:word_out[15:0]
来源信息:word_out[15:0]=word[15:0]
任何程序赋值语句的LHS必须是reg
类型。程序赋值语句为reg
变量、整型变量、实型变量或时间变量赋值,并且不能为导线
赋值。注意reg
可以保存或者根据某些触发事件存储一些值,而wire
无法存储任何值
将word\u out
设置为reg
,如下所示:
module shift_reg_v(
output reg [15:0] word_out
);
关于警告:
警告-[PALF]始终找到潜在回路
a、 sv,24
此始终块没有事件控制或延迟语句,它可能
在模拟中导致无限循环
此外,不对始终
块执行有任何敏感度。这可能会导致无限循环。始终
块没有触发控制
。从此块将无限执行
对于组合逻辑中的自动灵敏度列表,使用始终@(*)
(或SystemVerilog中的始终梳
)
作为侧注,您可能有一个clk
,作为模块的时钟输入,并使始终在时钟边缘上工作。这将有助于对顺序逻辑建模。(注意非阻塞分配的用法指错误:
错误-[IBLHS-NOREG]左侧非法行为
a、 sv,42
非注册类型在此作业的左侧无效
冒犯性的表达是:word_out[15:0]
来源信息:word_out[15:0]=word[15:0]
任何程序赋值语句的LHS必须是reg
类型。程序赋值语句为reg
变量、整型变量、实型变量或时间变量赋值,并且不能为导线
赋值。注意reg
可以保存或者根据某些触发事件存储一些值,而wire
无法存储任何值
将word\u out
设置为reg
,如下所示:
module shift_reg_v(
output reg [15:0] word_out
);
关于警告:
警告-[PALF]始终找到潜在回路
a、 sv,24
此始终块没有事件控制或延迟语句,它可能
在模拟中导致无限循环
此外,不对始终
块执行有任何敏感度。这可能会导致无限循环。始终
块没有触发控制
。从此块将无限执行
对于组合逻辑中的自动灵敏度列表,使用始终@(*)
(或SystemVerilog中的始终梳
)
作为旁注,您可能有一个clk
,作为模块的时钟输入,并使始终在时钟边缘工作。这将有助于建模顺序逻辑。(注意非阻塞分配的使用此外,您需要更正以下代码:-
coeff[i]=0;
这是一种位分配,应明确指定为编码实践
coeff[i]='h0;
此外,您需要更正以下代码:-
coeff[i]=0;
这是一种位分配,应明确指定为编码实践
coeff[i]='h0;
是你的verilog代码吗?如果我没有错!!是的,我很抱歉没有清楚地提到这一点。是你的verilog代码吗?如果我没有错!!是的,我很抱歉没有清楚地提到这一点。如果我不想填写coeff[i]=i
,在这种情况下如何进行位赋值?如果我不想给出fillcoeff[i]=i
,在这种情况下如何进行位分配?警告:Xst:646-分配了信号但从未使用过。此未连接的信号将在优化过程中被修剪。警告:Xst:653-使用了信号但从未分配过。此无源信号将自动连接到值1010101010101010。有人能帮我吗s警告?从未使用过coeff[15:0]
。在始终
块中,当j=0
时,选择如果条件,并且从未分配coeff[15:0]
。从此警告开始。我进行了更改,以便将值分配给coeff[15:0],但警告仍然存在。我已删除else语句。请建议。if(j==0)
begin
word[I]=coeff[(16*(j+1))+I];
end
coeff[(16*j)+I]=coeff[(16*(j+1))+I]
您能帮忙吗?@sharvill111
为了更好地理解错误/警告,您可以发布一个新问题。警告:Xst:646-信号已分配但从未使用。此未连接的信号将在优化过程中被修剪。警告:Xst:653-信号已使用但从未分配。此无源