• 使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器


    描述

            ②请使用2片该优先编码器Ⅰ及必要的逻辑电路实现16线-4线优先编码器。优先编码器Ⅰ的真值表和代码已给出。

            可将优先编码器Ⅰ的代码添加到本题答案中,并例化。

    优先编码器Ⅰ的代码如下:

    1. module encoder_83(
    2. input [7:0] I ,
    3. input EI ,
    4. output wire [2:0] Y ,
    5. output wire GS ,
    6. output wire EO
    7. );
    8. assign Y[2] = EI & (I[7] | I[6] | I[5] | I[4]);
    9. assign Y[1] = EI & (I[7] | I[6] | ~I[5]&~I[4]&I[3] | ~I[5]&~I[4]&I[2]);
    10. assign Y[0] = EI & (I[7] | ~I[6]&I[5] | ~I[6]&~I[4]&I[3] | ~I[6]&~I[4]&~I[2]&I[1]);
    11. assign EO = EI&~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&~I[2]&~I[1]&~I[0];
    12. assign GS = EI&(I[7] | I[6] | I[5] | I[4] | I[3] | I[2] | I[1] | I[0]);
    13. //assign GS = EI&(| I);
    14. endmodule

    下表是8线-3线优先编码器Ⅰ的功能表:

    输入描述

    1.    input      [15:0]      A   ,
    2.    input                  EI  

    输出描述:

    1.    output wire [3:0]      L   ,
    2.    output wire            GS  ,
    3.    output wire            EO  

    解题分析

    ②使用2片编码器Ⅰ实现16线-4线优先编码器,要注意EI和EO端口的连接。

    ②16线-4线优先编码器

            根据功能表,可画出两片编码器Ⅰ的电路连接图如下:

            当EI1=0时、U1禁止编码,其输出端Y为000,GS1、EO1均为0。同时EO1使EI0=0,U0也禁止编码,其输出端及GS0、EO0均为0。由电路图可知GS=GS1+GS0=0,表示此时电路输出端的代码L=0000是非编码输出。

            当E=1时,U1允许编码,若A[15:8]均无有效电平输人,则EO1=1,使EI0=1,从而允许U0编码,因此U1的优先级高于U0。

            此时A[15:8]没有有效电平输入,U1的输出均为0。使4个或门都打开,L[2:0]取决于U0的输出,而L[3]=GS1总是等于0,所以输出代码在0000-0111之间变化。若只有A[0]有高电平输入,输出为0000,若A[7]及其他输入同时有高电平输人,则输出为0111。A[0]的优先级别最低。

            当EI1=1且A[15:8]中至少有一个为高电平输人时,EO1=0,使EI0=0,U0禁止编码,此时L[3]=GS1=1,L[2:0]取决于U1的输出,输出代码在1000~1111之间变化,并且A的优先级别最高。

    根据电路图和分析思路,将电路转换成Verilog代码描述如下

    1. wire EO1 ;
    2. wire [2:0] Y0 ;
    3. wire [2:0] Y1 ;
    4. wire GS0 ;
    5. encoder_83 U0(
    6. .I (A[7:0]),
    7. .EI (EO1 ),
    8. .Y (Y0 ),
    9. .GS (GS0 ),
    10. .EO (EO )
    11. );
    12. encoder_83 U1(
    13. .I (A[15:8]),
    14. .EI (EI ),
    15. .Y (Y1 ),
    16. .GS (GS1 ),
    17. .EO (EO1 )
    18. );
    19. assign L[3] = GS1;
    20. assign L[2] = Y1[2] | Y0[2];
    21. assign L[1] = Y1[1] | Y0[1];
    22. assign L[0] = Y1[0] | Y0[0];
    23. assign GS = GS1 | GS0;

    参考代码

    方法一:

    1. `timescale 1ns/1ns
    2. module encoder_83(
    3. input [7:0] I ,
    4. input EI ,
    5. output wire [2:0] Y ,
    6. output wire GS ,
    7. output wire EO
    8. );
    9. assign Y[2] = EI & (I[7] | I[6] | I[5] | I[4]);
    10. assign Y[1] = EI & (I[7] | I[6] | ~I[5]&~I[4]&I[3] | ~I[5]&~I[4]&I[2]);
    11. assign Y[0] = EI & (I[7] | ~I[6]&I[5] | ~I[6]&~I[4]&I[3] | ~I[6]&~I[4]&~I[2]&I[1]);
    12. assign EO = EI&~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&~I[2]&~I[1]&~I[0];
    13. assign GS = EI&(I[7] | I[6] | I[5] | I[4] | I[3] | I[2] | I[1] | I[0]);
    14. //assign GS = EI&(| I);
    15. endmodule
    16. module encoder_164(
    17. input [15:0] A ,
    18. input EI ,
    19. output wire [3:0] L ,
    20. output wire GS ,
    21. output wire EO
    22. );
    23. wire EO1 ;
    24. wire [2:0] Y0 ;
    25. wire [2:0] Y1 ;
    26. wire GS0 ;
    27. encoder_83 U0(
    28. .I (A[7:0]),
    29. .EI (EO1 ),
    30. .Y (Y0 ),
    31. .GS (GS0 ),
    32. .EO (EO )
    33. );
    34. encoder_83 U1(
    35. .I (A[15:8]),
    36. .EI (EI ),
    37. .Y (Y1 ),
    38. .GS (GS1 ),
    39. .EO (EO1 )
    40. );
    41. assign L[3] = GS1;
    42. assign L[2] = Y1[2] | Y0[2];
    43. assign L[1] = Y1[1] | Y0[1];
    44. assign L[0] = Y1[0] | Y0[0];
    45. assign GS = GS1 | GS0;
    46. endmodule

    注:解题分析来源于网友,如有侵权,请告删之。

  • 相关阅读:
    C++ 的int*p[]和int(*p)[]的区别
    文件上传及CSRF+Selfxss
    Linux 下进程间通讯之管道
    第八章《Java高级语法》第2节:补码
    Spring官网下载各版本jar包
    18.Redis系列之AOF方式持久化
    弹性数据库连接池探活策略调研(二)——Druid
    云原生技术-微服务SpringCloud(1)
    你知道用Woof创建的Linux吗?
    CFdiv2-Chip Move-(线性dp+状态枚举方式)
  • 原文地址:https://blog.csdn.net/jk_101/article/details/132454049