首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻塞赋值的左侧非法

阻塞赋值的左侧非法
EN

Stack Overflow用户
提问于 2016-05-11 18:23:52
回答 2查看 7.2K关注 0票数 0

我是第一次接触verilog。我正在编写10x16舍入移位寄存器的代码。你能帮我解决这个错误吗?还有没有什么优化可以做的?

代码语言:javascript
复制
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

程序在输出行显示两个错误:word_out[15:0] = word[15:0];

EN

回答 2

Stack Overflow用户

发布于 2016-05-11 18:51:02

关于错误:

Error-IBLHS-NONREG非法行为左手边a.sv,42岁

非reg类型在此赋值的左侧上无效

有问题的表达式是: word_out15:0

来源信息: word_out15:0 = word15:0;

任何过程赋值语句LHS必须是reg类型。过程赋值语句为regintegerrealtime变量赋值,但不能为wire赋值。请注意,reg可以根据某个触发事件保存或存储的一些值,而wire不能存储任何值。

word_out设置为reg,如下所示:

代码语言:javascript
复制
module shift_reg_v(
    output reg [15:0] word_out
);

关于警告:

Warning-PALF电位始终循环找到a.sv,24

这个always块没有事件控制或延迟语句,它可能会在模拟中导致无限循环

此外,您为always块执行指定了not任何敏感度。这可能会导致无限循环。对于always数据块,没有触发控制。从此以后,该块将无限执行。

always @(*) (或SystemVerilog中的always_comb )用于组合逻辑中的自动敏感度列表

作为旁注,您可能有一个clk,作为模块的时钟输入,并使always模块工作在时钟的边沿。这将有助于对时序逻辑进行建模。(注意在顺序逻辑的情况下非阻塞赋值<=的用法)。

有关reg和nets.Also之间的区别,请参阅this PDF,此always block可能会很有用。

票数 6
EN

Stack Overflow用户

发布于 2016-05-11 23:15:10

此外,您还需要更正以下代码:

coeff[i] = 0;

这是一个比特分配,应该明确指定为编码实践。

coeff[i] = 'h0;

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37159794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档