Verilog 阻塞分配的非法左侧

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;

我是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;
    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
,在这种情况下如何进行位赋值?如果我不想给出fill
coeff[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-信号已使用但从未分配。此无源