Verilog不完整if else,case锁存

1前提

仅在组合逻辑电路(电平触发)中产生锁存, 因时序逻辑电路本身具有存储功能(边沿触发, 边沿到来前保持原状)

2验证

2.1 if…else

module latchOrDff(
clk,
data,
enable,
q );
input clk,data,enable;
output q;
reg q;
always @(posedge clk) begin
    if (enable) 
        q<=data;
    //else 
    //    q=1'b0
end
endmodule

在这里插入图片描述
去掉注释后:
在这里插入图片描述

module latchOrDff(
//clk,
data,
enable,
q );
input data,enable;
output q;
reg q;
always @(enable or data) begin
    if (enable) 
        q=data;
    //else 
    //    q=1'b0;//若写q=q;仍锁存器
end
endmodule

在这里插入图片描述
(↑RTL ANALYSIS Schematic if-else以上三种情况)

去掉注释后:
在这里插入图片描述

↑仅此处无reg,因二选一选择器不存值

2.2 case

module latchOrDff(
clk,
data,
enable,
q );
input clk,data,enable;
output q;
reg q;
always @(posedge clk) begin
    case (enable) 
    1'b1: q=data;
    //1'b0: q=1'b0;
    //default: q=1'b0;
end
endmodule

RTL图同if else

module latchOrDff(
//clk,
data,
enable,
q );
input data,enable;
output q;
reg q;
always @(enable or data) begin
    case (enable) 
    1'b1: q=data;
    //1'b0: q=1'b0;
    //default: q=1'b0;//若写q=q;仍锁存器
end
endmodule

3小结

  1. 逻辑电路中if 补else, case补default
  2. 补的内容不能锁存(赋原值)

4绝佳的参考文章

https://blog.csdn.net/qq_40696831/article/details/88855164

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Verilog中,if语句和else语句必须完整。这意味着在if语句后面必须加上else语句,以防止锁存器的发生。这是因为在Verilog中,如果if语句没有else语句,那么在特定的条件下,如果条件不满足,那么变量的值将保持在上一个时钟周期的值。这可能会导致意外的行为和错误的结果。为了保证代码的正确性和可靠性,我们必须在if语句后面加上else语句。引用 Verilog中的if else语句可以连续使用,即在else语句的部分再使用if else语句。这样可以实现多层次的条件判断。例如: ```verilog if (condition1) begin // 执行代码块1 end else if (condition2) begin // 执行代码块2 end else if (condition3) begin // 执行代码块3 end else begin // 执行代码块4 end ``` 在上面的代码中,首先判断condition1,如果满足条件,则执行代码块1;如果不满足,则判断condition2,以此类推。最后,如果所有条件都不满足,则执行代码块4。这样可以根据不同的条件执行不同的代码块,实现复杂的逻辑控制。引用<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [关于verilog中if与case语句不完整产生锁存器的问题](https://download.csdn.net/download/weixin_38729399/12759013)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【Verilog 语法】~ if-else、case、for、generate、函数 function、任务 task、过程块、位宽计算、阻塞/非...](https://blog.csdn.net/qq_40549426/article/details/125128858)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值