HDLBITS笔记8:4 | 您所在的位置:网站首页 › 仿真编码器 › HDLBITS笔记8:4 |
优先级编码器是一种组合电路,当给定输入位矢量时,输出矢量中第一个1位的位置。例如,给定输入 8'b10010000 的 8 位优先级编码器将输出 3'd4,因为 bit[4] 是第一个高位。 构建 4 位优先级编码器。对于此问题,如果没有输入位为高(即输入为零),则输出为零。 注意:题目中的4位优先编码器指的是4位输入,2位输出的4-2优先编码器。其中真值表如下: 输入输出I3I2I1I0Y1Y0000100001x0101xx101xxx11法1:采用真值表的方式实现4-2优先编码器: 使用casex语句块实现: module top_module ( input [3:0] in, output reg [1:0] pos ); always@(*) begin casex(in[3:0]) 4'bxxx1: pos = 0; 4'bxx1x: pos = 1; 4'bx1xx: pos = 2; 4'b1xxx: pos = 3; default: pos = 0; endcase end endmodule使用quartus ii实现的逻辑图:
采用casez语句块实现:只需要把上面代码中的x全换成z即可。 法2: 采用case(1’b1)语句实现: // synthesis verilog_input_version verilog_2001 module top_module ( input [3:0] in, output reg [1:0] pos ); always@(*) begin case(1'b1) in[0]: pos = 0; in[1]: pos = 1; in[2]: pos = 2; in[3]: pos = 3; default: pos = 0; endcase end endmodule使用quartus ii实现的逻辑图:
理解case(1'b1)语句:如图中代码所示:case(1’b1)可以理解为“在case语句中从上到下执行过程中只要有真,则立即执行且结束case。”即:当输入in[0]为1时,输出pos等于0;若in[0]等于0,则语句执行到in[1],若in[1]为真(1),则pos等于1,若in[1]等于0(为假),则继续执行到in[2]语句,执行和上述in[1]的同样操作。 |
CopyRight 2018-2019 实验室设备网 版权所有 |