Case中default的综合结果

文章详细比较了完备和不完备case语句在Verilog设计中的差异,指出不完备case可能导致锁存器的使用。完备case使用LUT和选择器,而不完备case会利用default将多余输入连接至锁存器,仅在sel[2]为0时更新输出。
摘要由CSDN通过智能技术生成

在使用case语句时,不完备的case语句会导致Vivado综合时推断出锁存器。下面通过实例来详细看看各种情况下的综合结果:

1.完备的case语句

下述的verilog对应的电路结构是一个8选一的多路复用器:

module case_test(
    input [2:0]sel,
    input data0,
    input data1,
    input data2,
    input data3,
    input data4,
    input data5,
    input data6,
    input data7,
    output reg data_out
    );

always@(*)
begin
    case(sel)
        3'b000:data_out<=data0;
        3'b001:data_out<=data1;
        3'b010:data_out<=data2;
        3'b011:data_out<=data3;
        3'b100:data_out<=data4;
        3'b101:data_out<=data5;
        3'b110:data_out<=data6;
        3'b111:data_out<=data7;
        default:data_out<=data_out;
    endcase
end

endmodule

在这里插入图片描述

综合结果如下:

在这里插入图片描述

对于上述的综合结果,每四个输入数据以及sel对应到一个LUT6,之后将二者的输出通过sel[2]控制的选择器进行选择,在完备描述的情况下电路中不会有锁存器。

2.不完备case语句

下面是一个不完备的case语句,只对四种情况进行描述,其余用default描述:

module case_test(
    input [2:0]sel,
    input data0,
    input data1,
    input data2,
    input data3,
    input data4,
    input data5,
    input data6,
    input data7,
    output reg data_out
    );

always@(*)
begin
    case(sel)
        3'b000:data_out<=data0;
        3'b001:data_out<=data1;
        3'b010:data_out<=data2;
        3'b011:data_out<=data3;
        default:data_out<=data_out;
    endcase
end

endmodule

对应的电路结构和综合结果如下图:

在这里插入图片描述

在这里插入图片描述

我们可以发现,对于default的四种情况,四个输入数据线未连接,将其余四种情况的数据线接入LUT,之后将LUT的输出连接到锁存器的数据输入端D,而将sel[2]连接到使能端,因为G为低电平有效,所以只有到sel[2]为0时锁存器才能将输入端的数据送到输出端,而在sel[2]为1时,Q端保持不变,锁存数据。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
casez在Verilog有什么区别和用途? casecasex和casez都是在Verilog用于条件选择的语句。它们的语法和功能基本相同,都用于在多个选项进行条件匹配。但是它们在处理无关项(无关值)的方式上有所不同。 case语句,无关项(x和z)会被综合工具认为是不可达到的状态而被去掉。而casez语句的x和z被认为是“don’t care”的值,表示对这些值不关心。 casex语句使用"x"来表示无关值,而casez语句使用问号"?"来表示无关值。它们在功能上是完全一致的,但是casex和casez一般是用于仿真而不是综合。 在实际使用,一般更常用casez语句,尽量少用casex。同时需要注意,casecasez和casex都是可综合的,在电路可以用问号来表示无关值的z。 需要注意的是,case语句的匹配是从上到下进行的,当出现匹配项时,后面的选项将被忽略。 总结起来,casecasex和casez在Verilog都是用于条件选择的语句,它们具有相同的功能,但在处理无关项的方式上有所差别。case用于综合时会去掉无关项,casez和casex则将无关项视为"don’t care"。一般情况下,推荐使用casez语句,同时需要注意case语句的匹配是从上到下进行的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Verilog语言casecasex、casez的用法和区别](https://blog.csdn.net/qq_33300585/article/details/127866953)[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: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值