VL114位数值比较器电路
根据题目真值表把情况全部列出来 ,纯体力活 。
VL124bit超前进位加法器电路
最直接的方法:把题目给的公式直接翻译成Verilog 。
`timescale 1ns/1ns
module lca_4(
input [3:0] A_in ,
input [3:0] B_in ,
input C_1 ,
output wire CO ,
output wire [3:0] S
);
wire [3:0]G;
wire [3:0]P;
wire [2:0]C;
assign G = A_in & B_in;
assign P = A_in ^ B_in;
assign S = P ^ {C,C_1};
assign {CO,C} = G | (P&{C,C_1});
endmodule
VL13优先编码器电路①
注意I1~I9的顺序 。
`timescale 1ns/1ns
module encoder_0(
input [8:0] I_n ,
output reg [3:0] Y_n
);
always@(*)
begin
casex(I_n)
9b111_111_111:Y_n=4b1111;
9b0xx_xxx_xxx:Y_n=4b0110;
9b10x_xxx_xxx:Y_n=4b0111;
9b110_xxx_xxx:Y_n=4b1000;
9b111_0xx_xxx:Y_n=4b1001;
9b111_10x_xxx:Y_n=4b1010;
9b111_110_xxx:Y_n=4b1011;
9b111_111_0xx:Y_n=4b1100;
9b111_111_10x:Y_n=4b1101;
9b111_111_110:Y_n=4b1110;
default:Y_n=0;
endcase
end
endmodule
VL14用优先编码器①实现键盘编码电路
将9-4编码器拓展成10-4编码器 。因为高位优先级更高 ,所以高9位直接输入优先编码器 ,最低位等于0且其余位全部为1时 ,输出为0 。
`timescale 1ns/1ns
module encoder_0(
input [8:0] I_n ,
output reg [3:0] Y_n
);
always @(*)begin
casex(I_n)
9b111111111 : Y_n = 4b1111;
9b0xxxxxxxx : Y_n = 4b0110;
9b10xxxxxxx : Y_n = 4b0111;
9b110xxxxxx : Y_n = 4b1000;
9b1110xxxxx : Y_n = 4b1001;
9b11110xxxx : Y_n = 4b1010;
9b111110xxx : Y_n = 4b1011;
9b1111110xx : Y_n = 4b1100;
9b11111110x : Y_n = 4b1101;
9b111111110 : Y_n = 4b1110;
default : Y_n = 4b1111;
endcase
end
endmodule
module key_encoder(
input [9:0] S_n ,
output wire[3:0] L ,
output wire GS
);
wire [3:0]Y;
encoder_0 u0(
.I_n(S_n[9:1]),
.Y_n(Y)
);
assign GS = !(Y==4b1111&&S_n[0]);
assign L = (~S_n[0]&&Y==4b1111)?0:~Y;
endmodule
VL15优先编码器Ⅰ
也是纯体力活 。 。 。
`timescale 1ns/1ns
module encoder_83(
input [7:0] I ,
input EI ,
output wire [2:0] Y ,
output wire GS ,
output wire EO
);
assign Y[2] = EI & (I[7] | I[6] | I[5] | I[4]);
assign Y[1] = EI & (I[7] | I[6] | (~I[7]&~I[6]&~I[5]&~I[4]&I[3])|(~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&I[2]));
assign Y[0] = EI & (I[7] |(~I[7]&~I[6]&I[5])|(~I[7]&~I[6]&~I[5]&~I[4]&I[3])|(~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&~I[2]&I[1]));
assign GS = ~((~EI)|(I==0));
assign EO = (I==0);
endmodule
VL16使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器
这题有点意思 ,数电里其实学过 ,但是有点不太记得了 。
分析可知:高位优先级更高 ,所以当高位有效时 ,低位肯定是全0 ,所以此时需要关断低位使能,也就是把高位编码器的EO接到低位编码器的EI。
不难看出GS代表编码器正常工作 ,所以可以把两个编码器的GS相或输出 。
高位正常工作时 ,最高位为1,与此编码器输出一致 ,所以可以把高位编码器的GS作为最高位 。
低位时两个编码器输出相或 ,因为两个都是8位编码器,高八位有效时也只是最高位为1 ,其他位行为与低位一致。
`timescale 1ns/1ns
module encoder_83(
input [7:0] I ,
input EI ,
output wire [2:0] Y ,
output wire GS ,
output wire EO
);
assign Y[2] = EI & (I[7] | I[6] | I[5] | I[4]);
assign Y[1] = EI & (I[7] | I[6] | ~I[5]&~I[4]&I[3] | ~I[5]&~I[4]&I[2]);
assign Y[0] = EI & (I[7] | ~I[6]&I[5] | ~I[6]&~I[4]&I[3] | ~I[6]&~I[4]&~I[2]&I[1]);
assign EO = EI&~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&~I[2]&~I[1]&~I[0];
assign GS = EI&(I[7] | I[6] | I[5] | I[4] | I[3] | I[2] | I[1] | I[0]);
//assign GS = EI&(| I);
endmodule
module encoder_164(
input [15:0] A ,
input EI ,
output wire [3:0] L ,
output wire GS ,
output wire EO
);
wire E;
wire GS0,GS1;
wire [2:0]Y0,Y1;
encoder_83 u0(
.I(A[15:8]),
.EI(EI),
.Y(Y0),
.GS(GS0),
.EO(E)
);
encoder_83 u1(
.I(A[7:0]),
.EI(E),
.Y(Y1),
.GS(GS1),
.EO(EO)
);
assign L={GS0,Y0|Y1};
assign GS=GS1|GS0;
endmodule
VL17用3-8译码器实现全减器
这题不难 ,只需要通过3-8译码器便可以实现任何三输入的组合逻辑 。
`timescale 1ns/1ns
module decoder_38(
input E ,
input A0 ,
input A1 ,
input A2 ,
output reg Y0n ,
output reg Y1n ,
output reg Y2n ,
output reg Y3n ,
output reg Y4n ,
output reg Y5n ,
output reg Y6n ,
output reg Y7n
);
always @(*)begin
if(!E)begin
Y0n = 1b1;
Y1n = 1b1;
Y2n = 1b1;
Y3n = 1b1;
Y4n = 1b1;
Y5n = 1b1;
Y6n = 1b1;
Y7n = 1b1;
end
else begin
case({A2,A1,A0})
3b000 : begin
Y0n = 1b0; Y1n = 1b1; Y2n = 1b1; Y3n = 1b1;
Y4n = 1b1; Y5n = 1b1; Y6n = 1b1; Y7n = 1b1;
end
3b001 : begin
Y0n = 1b1; Y1n = 1b0; Y2n = 1b1; Y3n = 1b1;
Y4n = 1b1; Y5n = 1b1; Y6n = 1b1; Y7n = 1b1;
end
3b010 : begin
Y0n = 1b1; Y1n = 1b1; Y2n = 1b0; Y3n = 1b1;
Y4n = 1b1; Y5n = 1b1; Y6n = 1b1; Y7n = 1b1;
end
3b011 : begin
Y0n = 1b1; Y1n = 1b1; Y2n = 1b1; Y3n = 1b0;
Y4n = 1b1; Y5n = 1b1; Y6n = 1b1; Y7n = 1b1;
end
3b100 : begin
Y0n = 1b1; Y1n = 1b1; Y2n = 1b1; Y3n = 1b1;
Y4n = 1b0; Y5n = 1b1; Y6n = 1b1; Y7n = 1b1;
end
3b101 : begin
Y0n = 1b1; Y1n = 1b1; Y2n = 1b1; Y3n = 1b1;
Y4n = 1b1; Y5n = 1b0; Y6n = 1b1; Y7n = 1b1;
end
3b110 : begin
Y0n = 1b1; Y1n = 1b1; Y2n = 1b1; Y3n = 1b1;
Y4n = 1b1; Y5n = 1b1; Y6n = 1b0; Y7n = 1b1;
end
3b111 : begin
Y0n = 1b1; Y1n = 1b1; Y2n = 1b1; Y3n = 1b1;
Y4n = 1b1; Y5n = 1b1; Y6n = 1b1; Y7n = 1b0;
end
default: begin
Y0n = 1b1; Y1n = 1b1; Y2n = 1b1; Y3n = 1b1;
Y4n = 1b1; Y5n = 1b1; Y6n = 1b1; Y7n = 1b1;
end
endcase
end
end
endmodule
module decoder1(
input A ,
input B ,
input Ci ,
output wire D ,
output wire Co
);
wire Y0n,Y1n,Y2n,Y3n,Y4n,Y5n,Y6n,Y7n;
decoder_38 u0(
.E(1),
.A0(Ci),
.A1(B),
.A2(A),
.Y0n(Y0n),
.Y1n(Y1n),
.Y2n(Y2n),
.Y3n(Y3n),
.Y4n(Y4n),
.Y5n(Y5n),
.Y6n(Y6n),
.Y7n(Y7n)
);
assign D = ~Y4n||~Y7n||~Y1n||~Y2n;
assign Co = ~Y1n||~Y2n||~Y3n||~Y7n;
endmodule
VL18实现3-8译码器①
`timescale 1ns/1ns
module decoder_38(
input E1_n ,
input E2_n ,
input E3 ,
input A0 ,
input A1 ,
input A2 ,
output wire Y0_n ,
output wire Y1_n ,
output wire Y2_n ,
output wire Y3_n ,
output wire Y4_n ,
output wire Y5_n ,
output wire Y6_n ,
output wire Y7_n
);
assign Y0_n = (~E3||E2_n||E1_n)?1:~(~A2&&~A1&&~A0);
assign Y1_n = (~E3||E2_n||E1_n)?1:~(~A2&&~A1&&A0);
assign Y2_n = (~E3||E2_n||E1_n)?1:~(~A2&&A1&&~A0);
assign Y3_n = (~E3||E2_n||E1_n)?1:~(~A2&&A1&&A0);
assign Y4_n = (~E3||E2_n||E1_n)?1:~(A2&&~A1&&~A0);
assign Y5_n = (~E3||E2_n||E1_n)?1:~(A2&&~A1&&A0);
assign Y6_n = (~E3||E2_n||E1_n)?1:~(A2&&A1&&~A0);
assign Y7_n = (~E3||E2_n||E1_n)?1:~(A2&&A1&&A0);
endmodule
VL19使用3-8译码器①实现逻辑函数
和VL17类似 。注意高低位。
`timescale 1ns/1ns
module decoder_38(
input E1_n ,
input E2_n ,
input E3 ,
input A0 ,
input A1 ,
input A2 ,
output wire Y0_n ,
output wire Y1_n ,
output wire Y2_n ,
output wire Y3_n ,
output wire Y4_n ,
output wire Y5_n ,
output wire Y6_n ,
output wire Y7_n
);
wire E ;
assign E = E3 & ~E2_n & ~E1_n;
assign Y0_n = ~(E & ~A2 & ~A1 & ~A0);
assign Y1_n = ~(E & ~A2 & ~A1 & A0);
assign Y2_n = ~(E & ~A2 & A1 & ~A0);
assign Y3_n = ~(E & ~A2 & A1 & A0);
assign Y4_n = ~(E & A2 & ~A1 & ~A0);
assign Y5_n = ~(E & A2 & ~A1 & A0);
assign Y6_n = ~(E & A2 & A1 & ~A0);
assign Y7_n = ~(E & A2 & A1 & A0);
endmodule
module decoder0(
input A ,
input B ,
input C ,
output wire L
);
wire Y0_n,Y1_n,Y2_n,Y3_n,Y4_n,Y5_n,Y6_n,Y7_n;
decoder_38 u0(
.E1_n(0),
.E2_n(0),
.E3(1),
.A0(C),
.A1(B),
.A2(A),
.Y0_n(Y0_n),
.Y1_n(Y1_n),
.Y2_n(Y2_n),
.Y3_n(Y3_n),
.Y4_n(Y4_n),
.Y5_n(Y5_n),
.Y6_n(Y6_n),
.Y7_n(Y7_n)
);
assign L = (~Y3_n||~Y1_n)||(~Y6_n||~Y7_n);
endmodule
VL20数据选择器实现逻辑电路
这题可以画一个卡诺图 。
用AB做数据选择 ,C的各种逻辑为要选择的数据 。
同样注意高低位 。
`timescale 1ns/1ns
module data_sel(
input S0 ,
input S1 ,
input D0 ,
input D1 ,
input D2 ,
input D3 ,
output wire Y
);
assign Y = ~S1 & (~S0&D0 | S0&D1) | S1&(~S0&D2 | S0&D3);
endmodule
module sel_exp(
input A ,
input B ,
input C ,
output wire L
);
wire S0,S1,D0,D1,D2,D3;
data_sel u0(
.S0(B) ,
.S1(A) ,
.D0(0) ,
.D1(C) ,
.D2(~C) ,
.D3(1) ,
.Y(L)
);
endmodule
声明:本站所有文章 ,如无特殊说明或标注 ,均为本站原创发布 。任何个人或组织 ,在未征得本站同意时 ,禁止复制 、盗用 、采集 、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理 。