hdlbits系列verilog解答(always块casez语句)-35

文章目录

    • 一、问题描述
    • 二、verilog源码
    • 三、仿真结果


一、问题描述

为 8 位输入构建优先级编码器。给定一个 8 位向量,输出应报告向量中的第一个(最低有效)位,即 1 。如果输入向量没有高位,则报告零。例如,输入 8’b10010000 应输出 3’d4 ,因为 bit[4] 是第一个高电平的位。

从上一次工作(always_case2)来看,案件陈述中将有256个案例。如果 case 语句中的 case 项支持 don’t care 位,我们可以将其减少(减少到 9 个案例)。这就是 casez 它的用途:它将具有该值 z 的位视为在比较中不关心的位。

例如,这将实现上一个练习中的 4 输入优先级编码器:
always @(*) begin
casez (in[3:0])
4’bzzz1: out = 0; // in[3:1] can be anything
4’bzz1z: out = 1;
4’bz1zz: out = 2;
4’b1zzz: out = 3;
default: out = 0;
endcase
end

case 语句的行为就像是按顺序检查每个项目一样(实际上,这是一个很大的组合逻辑函数)。请注意,某些输入(例如,

你可能感兴趣的:(verilog语言,fpga开发)