文档库 最新最全的文档下载
当前位置:文档库 › 4选一 (2)

4选一 (2)

四选一多路选择器:
module MUX41a(a,b,c,d,s1,s0,y);
input a,b,c,d,s1,s0;
output y;
reg y;
always(a or b or c or d or s1 or s0)
begin: MUX41
case({s1,s0})
2'b00:y<=a;
2'b01:y<=b;
2'b10:y<=c;
2'b11:y<=d;
default:y<=a;
endcase
end
endmodule







双二选一多路选择器:
module MUX21A(a,b,s,y);
input a,b,s;
output y;
reg y;
always@(a,b,s)
if(s) y=b;
else y=a;
endmodle

module MUXK(a1,a2,a3,s0,s1,outy);
input a1,a2,a3,s0,s1;
output outy;
wire tmp;
MUX21A u1(a2,a3,s0,tmp);
MUX21A u2(a1,tmp,s1,outy);
endmodule








8位加法器:
module h_adder (A,B,SO,CO);
input A,B;
output SO,CO;
assign SO=A^B;
assign CO=A&B;
endmodule

module f_adder(ain,bin,cin,cout,sum);
input ain,bin,cin;
output cout,sum;
wire Net1,Net2,Net3;
h_adder U1(ain,bin,Net1,Net2);
h_adder U2(Net1,sum,cin,Net3);
or U3(cout,Net2,Net3);
endmodule

module ADDER8(a,b,cin,cout,dout);
output[7:0] dout;
output cout;
input[7:0]a,b;
input cin;
wire net1,net2,net3,net4,net5,net6,net7;
f_adder m1(a[0],b[0],cin,net1,dout[0]);
f_adder m2(a[1],b[1],net1,net2,dout[1]);
f_adder m3(a[2],b[2],net2,net3,dout[2]);
f_adder m4(a[3],b[3],net3,net4,dout[3]);
f_adder m5(a[4],b[4],net4,net5,dout[4]);
f_adder m6(a[5],b[5],net5,net6,dout[5]);
f_adder m7(a[6],b[6],net6,net7,dout[6]);
f_adder m8(a[7],b[7],net7,cout,dout[7]);
assign {cout,dout}=a+b+cin;
endmodule



module ADDER8( a1,a2,a3,a4,a5,a6,a7,a0,b1,b2,b3,b4,b5,b6,b7,b0,cin,cout,dout1,dout2,dout3,dout4,dout5,dout6,dout7,dout0);
output dout1,dout2,dout3,dout4,dout5,dout6,dout7,dout0;
output cout;
input a1,a2,a3,a4,a5,a6,a7,a0,b1,b2,b3,b4,b5,b6,b7,b0;
input cin;
wire net1,net2,net3,net4,net5,net6,net7;
f_adder m1(a0,b0,cin,net1,dout0);
f_adder m2(a1,b1,net1,net2,dout1);
f_adder m3(a2,b2,net2,net3,dout2);
f_adder m4(a3,b3,net3,net4,dout3);
f_adder m5(a4,b4,net4,net5,dout4);
f_adder m6(a5,b5,net5,net6,dout5);
f_adder m7(a6,b6,net6,net7,dout6);
f_adder m8(a7,b7,net7,cout,dout7);


endmodule
module SIN_GIN(RST,CLK,EN,Q,AR);
output [7:0] Q;
output [6:0] AR;
input EN,CLK,RST;
wire [6:0] TMP;
reg [6:0] Q1;
always @(posedge CLK or negedge RST)
if (!RST) Q1<=7'B0000000;
else if (EN) Q1<=Q1+1;
else Q1<=Q1;
assign TMP=Q1;
assign AR=TMP;
ROM78 IC1(.address(TMP), .inclock(CLK), .q(Q) );
endmodule



















相关文档
相关文档 最新文档