用一片CD4532构成8

您所在的位置:网站首页 编码器cd4532 用一片CD4532构成8

用一片CD4532构成8

2023-08-20 13:42| 来源: 网络整理| 查看: 265

VerilogHDL程序设计与仿真作业1: ——用一片CD4532构成8-3线编码器与用两片CD4532构成16线-4线优先编码器

文章目录 VerilogHDL程序设计与仿真作业1: ——用一片CD4532构成8-3线编码器与用两片CD4532构成16线-4线优先编码器 一、实验目的 二、一片CD4532构成8-3线编码器 1、设计思路 2、实现代码 3、测试代码 4、仿真 三、用两片CD4532构成16线-4线优先编码器 1、设计思路 2、实现代码 3、测试代码 4、仿真

一、实验目的 一片CD4532构成8-3线编码器 两片CD4532串行构成16-4线译码器 二、一片CD4532构成8-3线编码器 1、设计思路

采用逻辑电路的行为级建模,参考CD4532的功能表,运用always,casex,else if语句实现CD4532的功能。

逻辑符号与引脚图在这里插入图片描述

CD4532的功能表在这里插入图片描述

附加输出信号的状态与含义在这里插入图片描述

2、实现代码 //文件名称:CD4532.v //fuchaoxinHUST11052020 module CD4532(EI,I,Y,GS,EO); input EI; input [7:0] I; output reg [2:0] Y; output reg GS,EO; /*说明: 输入端:EI使能信号,I7到I0代表输入的数,且I7的优先级别最高,I0的优先级别最低; 输出端:GS、EO用于级联,Y则代表编码后的二进制数; EI=0 GS=0 EO=0,不工作; EI=1 GS=0 EO=1,工作,但输入无效; EI=1 GS=1 EO=0,工作,输入有效; EI=1 GS=1 EO=1,不可能出现。 */ always @(*)//全信号敏感 if(EI==0) begin GS=0; EO=0; Y[2:0]=3'b000; end else begin//EI=1 GS=1; EO=0; casex(I[7:0])//x为任意项 输入有效情况 8'b1xxxxxxx: Y[2:0]=3'b111; 8'b01xxxxxx: Y[2:0]=3'b110; 8'b001xxxxx: Y[2:0]=3'b101; 8'b0001xxxx: Y[2:0]=3'b100; 8'b00001xxx: Y[2:0]=3'b011; 8'b000001xx: Y[2:0]=3'b010; 8'b0000001x: Y[2:0]=3'b001; 8'b00000001: Y[2:0]=3'b000; default begin//EI=1 GS=0; EO=0; Y[2:0]=3'b000;// I[7:0]=8'b0000000 输入无效情况 end endcase end endmodule 3、测试代码 //文件名称:Test_CD4532.v //fuchaoxinHUST20201105 `timescale 10ns/1ns module Test_CD4532; reg EI; reg [7:0] I; wire [2:0] Y; wire GS,EO; CD4532 U0(EI,I,Y,GS,EO);//实例化元件 initial $monitor($time,":\t I=%b, EI=%b, EO=%b, GS=%b, Y=%b \n", I, EI, EO, GS, Y); //监视器的显示内容 initial begin //使能信号为0时 EI=0; I=8'b1111_1111; #1 EI=0; I=8'b0111_1111; #1 EI=0; I=8'b0011_1111; #1 //使能信号为1时 EI=1; I=8'b1111_1111; #1 EI=1; I=8'b0111_1111; #1 EI=1; I=8'b0011_1111; #1 $stop;//停止模拟仿真 end endmodule 4、仿真

波形在这里插入图片描述

监控器在这里插入图片描述

三、用两片CD4532构成16线-4线优先编码器 1、设计思路

(1)当 E I 2 EI_2 EI2​=0时, E O 2 EO_2 EO2​= E I 1 EI_1 EI1​= E O 1 EO_1 EO1​=0, G S 2 = G S 1 = G S = 0 GS_2=GS_1=GS=0 GS2​=GS1​=GS=0,两个芯片都被禁止编码,无编码输出;

(2)当 E I 2 EI_2 EI2​=1时,且当左边 I I II II号芯片有任何一个输入信号有效时,则使 E O 2 = E I 1 = E O 1 = 0 EO_2=EI_1=EO_1=0 EO2​=EI1​=EO1​=0, I I I号芯片被禁止编码,所有输出均为0, G S 2 = G S = 1 GS_2=GS=1 GS2​=GS=1, G S 1 = 0 GS_1=0 GS1​=0, L 3 = 1 L_3=1 L3​=1,信号 L L L输出8到15。

​ 而当左边 I I II II号芯片无有效输入信号时(例如8‘b00000000),则使 E O 2 = E I 1 = 1 EO_2=EI_1=1 EO2​=EI1​=1, I I II II号芯片所有输出均为0(除了 E O 2 EO_2 EO2​), I I I号芯片才被允许编码(一片CD4532编码过程参考前文),这说明左边的 I I II II号芯片优先级比右边的 I I I号芯片要高,而对于每片芯片来说,优先级: I 7 > I 1 I_7>I_1 I7​>I1​,则对于这种两片CD4532级联的解法,优先级: A 15 > A 0 A_{15}>A_0 A15​>A0​。

采用自顶向下的方式,综合行为级建模,门级描述和数据流建模实现用两片CD4532构成16线-4线优先编码器。

原理图 在这里插入图片描述

2、实现代码 //文件名称:CD4532.v //文件名称:CD4532_2.v //fuchaoxinHUST11052020 module CD4532(EI,I,Y,GS,EO); input EI; input [7:0] I; output reg [2:0] Y; output reg GS, EO; /*说明: 输入端:EI使能信号,I7到I0代表输入的数,且I7的优先级别最高,I0的优先级别最低; 输出端:GS、EO用于级联,Y则代表处理后的二进制数; EI=0 GS=0 EO=0,不工作; EI=1 GS=0 EO=1,工作,但输入无效; EI=1 GS=1 EO=0,工作,输入有效; EI=1 GS=1 EO=1,不可能出现。 */ always @(*)//全信号敏感 if(EI==0) begin GS=0; EO=0; Y[2:0]=3'b000; end else begin//EI=1 GS=1; EO=0; casex(I[7:0])//x为任意项 输入有效情况 8'b1xxxxxxx: Y[2:0]=3'b111; 8'b01xxxxxx: Y[2:0]=3'b110; 8'b001xxxxx: Y[2:0]=3'b101; 8'b0001xxxx: Y[2:0]=3'b100; 8'b00001xxx: Y[2:0]=3'b011; 8'b000001xx: Y[2:0]=3'b010; 8'b0000001x: Y[2:0]=3'b001; 8'b00000001: Y[2:0]=3'b000; default begin//EI=1 GS=0; EO=0; Y[2:0]=3'b000;// I[7:0]=8'b0000000 输入无效情况 end endcase end endmodule //单片CD4532 module CD4532_2(EI,A,L,GS,EO); input EI; input [15:0] A; //[15:0] A对应的是II号芯片的[7:0] I号芯片到I的[7:0] I output [3:0] L; //L[3]=GS_2 L[2]=Y_2[2]||Y_1[2] L[1]=Y_2[1]||Y_1[1] L[0]=Y_2[0]||Y_1[0] output GS, EO; //GS=GS_1||GS_2 EO=EO_1 //逻辑或 || 全部使用 or(output,input,···)进行处理 /*说明: 输入端:EI使能信号,A15到A0代表输入的数,且A15的优先级别最高,A0的优先级别最低; 输出端:GS、EO用于级联,L则代表处理后的四位二进制数; 将两片连接后看成一片: EI=0 GS=0 EO=0,不工作; EI=1 GS=0 EO=1,工作,但输入无效; EI=1 GS=1 EO=0,工作,输入有效; EI=1 GS=1 EO=1,不可能出现。 */ //中间变量定义 wire [7:0] I_1,I_2; wire [2:0] Y_1,Y_2; wire GS_1,GS_2,EO_2;//EI_1=EO_2 两者共用一个变量 已有EI=EI_2 EO=EO_1 //输入部分 genvar i; for(i=7;i>=0;i=i-1) assign I_1[i] = A[i]; for(i=15;i>=8;i=i-1) assign I_2[i-8] = A[i]; //先后执行两片CD4532 得到输出量EO 中间变量GS_1 GS_2 EO_2 Y[] CD4532 C2(EI,I_2,Y_2,GS_2,EO_2);//2片 EI_2=EI EI是input CD4532 C1(EO_2,I_1,Y_1,GS_1,EO);//1片 EI_1=EO_2 EO_2由第2片得到 EO=EO_1 EO是output //输出部分 or G0(L[0],Y_1[0],Y_2[0]); or G1(L[1],Y_1[1],Y_2[1]); or G2(L[2],Y_1[2],Y_2[2]); assign L[3] = GS_2; //L[3]直接由GS_2决定 or G3(GS,GS_1,GS_2);//G3门输出GS //先输入,经过CD4532处理后得到第一次输出,再次用OR门处理得到输出值 endmodule //用两片CD4532构成16线-4线优先编码器 3、测试代码 //文件名称:Test_CD4532_2.v //fuchaoxinHUST20201105 `timescale 10ns/1ns module Test_CD4532_2; reg EI; reg [15:0] A; wire [3:0] L; wire GS,EO; CD4532 U1(EI,A,L,GS,EO);//实例化元件 initial $monitor($time,":\t A=%b, EI=%b, EO=%b, GS=%b, L=%b \n", A, EI, EO, GS, L); //监视器的显示内容 initial begin //使能信号为0 EI=0;A=16'b0000_0000_0000_0000; #5 EI=0;A=16'b0000_0000_0000_0000; #5 EI=0;A=16'b0000_0000_0000_0000; #5 //使能信号为1 EI=1;A=16'b1111_0000_0000_0000; #5 EI=1;A=16'b0001_0000_0000_0000; #5 EI=1;A=16'b0000_0001_0000_0000; #5 $stop;//停止测试 end endmodule 4、仿真

波形在这里插入图片描述

监视器在这里插入图片描述

部分图源来自华科数电mooc ︎



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3