优先级编码器是一种组合电路,当给定输入位矢量时,输出矢量中第一个1位的位置。例如,给定输入 8'b10010000 的 8 位优先级编码器将输出 3'd4,因为 bit[4] 是第一个高位。
构建 4 位优先级编码器。对于此问题,如果没有输入位为高(即输入为零),则输出为零。
注意:题目中的4位优先编码器指的是4位输入,2位输出的4-2优先编码器。其中真值表如下:
输入 | 输出 | ||||
I3 | I2 | I1 | I0 | Y1 | Y0 |
0 | 0 | 0 | 1 | 0 | 0 |
0 | 0 | 1 | x | 0 | 1 |
0 | 1 | x | x | 1 | 0 |
1 | x | x | x | 1 | 1 |
法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实现的逻辑图:
文章来源:https://www.toymoban.com/news/detail-433972.html
采用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]的同样操作。文章来源地址https://www.toymoban.com/news/detail-433972.html
到了这里,关于HDLBITS笔记8:4-2优先编码器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!