首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同进程中的阻塞和非阻塞分配

不同进程中的阻塞和非阻塞分配
EN

Stack Overflow用户
提问于 2021-12-28 09:01:52
回答 2查看 154关注 0票数 -1

我有一些verilog代码,在这些代码中,我使用了一个变量“逻辑1:0 internalSaveSense =2‘b00”,这里我使用阻塞赋值,而在其他一些过程中,我对相同的变量"internalSaveSense <= 1'b0;“使用非阻塞赋值。这是给我一个警告“阻塞和非阻塞分配在不同的进程”,我如何解决这个问题?

供参考的代码:

代码语言:javascript
复制
module someModuleName(in, out, qsave, save, restore);

input in;
output out; 
output reg qsave = 1'b0;
input reg save;
input reg restore;

always@(save) begin
  if(save == 1'b1) 
    qsave <= out;
end

assign out = (restore == 1'b1) ? qsave : in;

endmodule 

我收到的警告信息是:

代码语言:javascript
复制
Warning-[SM_BNDP] Blocking and Non Blocking Assignments in different Processes
Found blocking and non-blocking assignments for signal 'qsave'.

我尝试将阻塞分配更改为(qsave= 1'b0 )为非阻塞分配(qsave <= 1'b0),但它引发了语法错误:

代码语言:javascript
复制
Error-[SE] Syntax error
Following verilog source has syntax error :
2138: token is '<='
output reg qsave <= 1'b0;

我刚接触verilog,不知道如何解决这个警告。任何帮助都将不胜感激。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-12-28 10:10:07

output reg qsave = 1'b0;替换output reg qsave;

另外,下面的always块将被推断为闩锁。添加一个elsedefault条件以避免它。

代码语言:javascript
复制
always@(save) begin
  if(save == 1'b1) 
    qsave <= out;
end
票数 -1
EN

Stack Overflow用户

发布于 2021-12-29 14:24:40

在一种可综合的Verilog码中,通常使用具有非边缘或嵌套灵敏度列表的块来制作组合电路。因此,如果您的目标是编写可合成的代码,请在组合块中使用阻塞赋值:

代码语言:javascript
复制
module someModuleName(in, out, qsave, save, restore);

input in;
output out; 
output reg qsave = 1'b0;
input reg save;
input reg restore;

//combinational block
always@(save) begin
  if(save == 1'b1) 
    qsave = out;
end

assign out = (restore == 1'b1) ? qsave : in;

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

https://stackoverflow.com/questions/70504831

复制
相关文章

相似问题

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