Verilog中, if和else已经搭配了,还产生锁存器

guangshaqian 2018-06-08 11:16:08
这段代码画粉色线那句会产生锁存器,是因为加了一个定值。那有没有加一个定值,而又不产生锁存器的方法
...全文
1779 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_37134265 2018-12-13
  • 打赏
  • 举报
回复
这个警告可以忽略
neoitachi 2018-08-20
  • 打赏
  • 举报
回复
本来,你这就是个锁存器,因为一直保持一个值,所以这个警告可以忽略。
liu_y_yun 2018-07-14
  • 打赏
  • 举报
回复
reg [31:0] Fword;

always @ (posedge clk or negedge rst_n)
begin
if(~rst_n)
Fword <= 32'h0;
else
Fword <= Fword + 32'h100000;
end

锁存器一般是组合逻辑条件不完备会产生,
你这完全是时序逻辑了,貌似也不应该产生锁存器才对。

如果你确定产生了锁存器,可以试试楼上的办法(有个位宽的笔误, 修改如下)
wire [31:0]
reg [11:0] Fword_tmp;

always @ (posedge clk or negedge rst_n)
begin
if(~rst_n)
Fword_tmp <= 12'h0;
else
Fword_tmp <= Fword_tmp + 1'b1;
end

assign Fword = {Fword_tmp, 20'd0};
莫弦 2018-07-10
  • 打赏
  • 举报
回复
试着这么写呢?

reg [3:0] Fword_tmp;

always @ (posedge clk or negedge rst_n)
begin
if(~rst_n)
Fword_tmp <= 4'd0;
else
Fword_tmp <= Fword_tmp + 1'b1;
end

assign Fword = {Fword_tmp, 28'd0};

之所以产生锁存器是因为你加的参数32'h10000000并不能对Fword的后面的28个bit产生数值上的变化,这样就会产生锁存器;
我是Trustintruth 2018-07-08
  • 打赏
  • 举报
回复
你这个应该是一个计算单元连一级存储器啊,本来描述的就有存储为什么还要消除锁存器呢
guangshaqian 2018-06-08
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
<= 修改为 = 试试
还是无法消除警告
zgl7903 2018-06-08
  • 打赏
  • 举报
回复
<= 修改为 = 试试

6,163

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧