完整word版集成电路CAD复习例题+解析.docx
- 文档编号:23811522
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:45
- 大小:62.78KB
完整word版集成电路CAD复习例题+解析.docx
《完整word版集成电路CAD复习例题+解析.docx》由会员分享,可在线阅读,更多相关《完整word版集成电路CAD复习例题+解析.docx(45页珍藏版)》请在冰豆网上搜索。
完整word版集成电路CAD复习例题+解析
1、3-8译码器
Index方式
moduledecoder_index(in1,out1);
parameterN=8;
parameterlog2N=3;
input[log2N-1:
0]in1;
output[N-1:
0]out1;
reg[N-1:
0]out1;
always@(in1)
begin
out1=0;
out1[in1]=1’b1;
end
Endmodule
LOOP方式
moduledecoder38_loop(in1,out1);
parameterN=8;
parameterlog2N=3;
input[log2N-1:
0]in1;
output[N-1:
0]out1;
reg[N-1:
0]out1;
integeri;
always@(in1)
begin
for(i=0;i out1[i]=(in1==i); end 2、8-3优先编码器 modulepriority_low_high(A,P); parameterN=8; parameterlog2N=3; input[0: N-1]A;//InputVector output[log2N-1: 0]P;//HighPriorityIndex reg[log2N-1: 0]P; function[log2N-1: 0]priority; input[0: N-1]A; integerI; begin priority=3’b0; for(I=0;I if(A[I]) priority=7-I;//Overridepreviousindex end endfunction always@(A) P<=priority(A); endmodule 另一种: modulecode8_3(in,out) input[7: 0]in;output[2: 0]out;wire[7: 0]in;reg[2: 0]out;always@(in)begin if(in[7]==1)out=3’111; elseif(in[6]==1)out=3 ’b110;elseif(in[5]==1)out=3 ’101; elseif(in[4]==1)out=3 ’b100;elseif(in[3]==1)out=3 ’b011; elseif(in[2]==1)out=3 ’b010;elseif(in[1]==1)out=3 ’b001; elseif(in[0]==1)out=3 ’b000; default: out=3’bx;end endmodule 3、奇偶校验位产生器 moduleparity(even_bit,odd_bit,input_bus); outputeven_bit,odd_bit; input[7: 0]input_bus; assigneven_bit=^input_bus; assignodd_bit=~even_bit; //产生偶校验位 //产生奇校验位 endmodule 4、4选1数据选择器 第一种方法 modulemux(d1,d2,d3,d4,se1,se2,dout); inputd1; inputd2; inputd3; inputd4; inputse1; inputse2; outputdout; regdout; always@(d1ord2ord3ord4orse1orse2) case({se1,se2}) 2'b00: dout=d1; 2'b01: dout=d2; 2'b10: dout=d3; 2'b11: dout=d4; endcase endmodule 第二种方法 modulemux(d1,d2,d3,d4,se1,se2,dout); inputd1; inputd2; inputd3; inputd4; inputse1; inputse2; outputdout; regdout; always@(d1ord2ord3ord4orse1orse2) if(! se1) begin if(! se2) dout=d1; else dout=d2; end elsebegin if(! se2) dout=d3; else dout=d4; end endmodule 第三种方法 modulese(d1,d2,d3,d4,se1,se2,dout); inputd1; inputd2; inputd3; inputd4; inputse1; inputse2; outputdout; regdout; always@(d1ord2ord3ord4orse1orse2) assigndout=se1? se2? d4: d3: se2? d2: d1; endmodule 第四种方法 modulemux4_1(out,in0,in1,in2,in3,sel); outputout; inputin0,in1,in2,in3; input[1: 0]sel; regout; always@(in0orin1orin2orin3orsel)//敏感信号列表 case(sel) 2'b00: out=in0; 2'b01: out=in1; 2'b10: out=in2; 2'b11: out=in3; default: out=2'bx; endcase endmodule 5、4 位全加器 及4 位全加器的仿真程序 moduleadder4(cout,sum,ina,inb,cin); output[3: 0]sum; outputcout; input[3: 0]ina,inb; inputcin; assign{cout,sum}=ina+inb+cin; Endmodule 第二种: moduleadder_4bit(s,co,a,b,ci); //4 位全加器 // output[3: 0]s; outputco; input[3: 0]a,b; inputci; f_adderf0(a[0],b[0],ci,s[0],ci1); f_adderf1(a[1],b[1],ci1,s[1],ci2); f_adderf2(a[2],b[2],ci2,s[2],ci3); f_adderf3(a[3],b[3],ci3,s[3],co); endmodule modulef_adder(ain,bin,cin,sum,cout); //1 位全加器 // outputsum,cout; inputain,bin,cin; wired,e,f; h_adder(ain,bin,e,d); h_adder(e,cin,sum,f); or(cout,d,f); endmodule moduleh_adder(a,b,so,co); //半加器 // inputa,b; outputso,co; assignso=a^b; assignco=a&b; Endmodule 4位全加器的仿真程序 `timescale1ns/1ns `include"adder4.v" moduleadder_tp; reg[3: 0]a,b; //测试模块的名字 //测试输入信号定义为 reg型 regcin; wire[3: 0]sum; //测试输出信号定义为 wire 型 wirecout; integeri,j; adder4adder(sum,cout,a,b,cin);//调用测试对象 always# cin=~cin;//设定cin的取值 initial begin a=0;b=0;cin=0; for(i=1;i<16;i=i+1) #10 a=i; //设定 a的取值 end initial begin for(j=1;j<16;j=j+1) #10 b=j; //设定 b 的取值 end initial //定义结果显示格式 begin $monitor($time,,,"%d+%d+%b={%b,%d}",a,b,cin,cout,sum);#160$finish; end endmodule 6、带同步清0、同步置1的D触发器 moduled_ff_1(CLK,RSTn,clr,D,Q,en); inputCLK,RSTn,clr; inputD,en; outputQ; regQ; always@(posedgeCLK)begin if(~RSTn)begin Q<=1'b1; end elsebegin if(clr)beginQ<=1'b1;end elsebegin if(en)begin Q<=D endelse ; begin Q<=Q; end end end endmodule 7、带异步清0、异步置1的JK触发器 moduleJK_FF(CLK,J,K,Q,RS,SET); inputCLK,J,K,SET,RS;outputQ;regQ; always@(posedgeCLKornegedgeRSornegedgeSET) begin if(! RS)Q<=1'b0; elseif(! SET)Q<=1'b1; elsecase({J,K}) 2'b00: Q<=Q; 2'b01: Q<=1'b0; 2'b10: Q<=1'b1; 2'b11: Q<=~Q; default: Q<=1'bx; endcase end endmodule 8、8位数据锁存器 modulelatch_8(qout,data,clk); output[7: 0]qout; input[7: 0]data; inputclk; reg[7: 0]qout; always@(clkordata) begin if(clk)qout<=data; end endmodule 9、同步置数、同步清零的8位二进制计数器 modulecount(out,data,load,reset,clk); output[7: 0]out; input[7: 0]data; inputload,clk,reset; reg[7: 0]out; always@(posedgeclk)//clk begin if(! reset) out=8'h00;//同步清0,低电平有效 elseif(load) out=data;//同步预置 else out=out+1;//计数 上涨沿触发 end endmodule 10、异步清零、同步置数的1位十进制计数器 modulecount10(out,data,load,reset,clk); output[3: 0]out; input[3: 0]data; inputload,clk,reset; reg[3: 0]out; always@(posedgeclkornegedgereset) begin if(! reset) out=8'h00;//同步清0,低电平有效 elseif(load) out=data;//同步预置 elseif(out<9) out=out+1;//计数 else //clk 上涨沿触发 out=0; end endmodule 11、4位串并变换器 modulepal_serial_4( clk,rst,load, din,dout ); //四位并串变换程序 inputclk,rst,load; input[3: 0]din; outputdout; reg[3: 0]databuff; always@(posedgeclkornegedgerstorposedgeload) begin if(! rst)databuff<=4'b0; elseif(load)databuff<=din; else//databuff<={databuff[2: 0],1'b0}; databuff<=databuff<<1;//将存放器内的值左移,挨次读出 end assigndout=databuff[3]; endmodule moduleserial_pal_4( clk,en,rst, //四位串并变换程序 cin,cout ); inputcin,clk,en,rst; output[3: 0]cout; reg[3: 0]cout; always@(posedgeclkornegedgerst) begin if(! rst)cout<=4'b0; elseif(en) cout<={cout[2: 0],cin}; elsecout<=cout; end endmodule 另一种: moduleshift(nreset,clk,en,in,out); inputnreset,clk,en,in; output[3: 0]out; reg[1: 0]count;//移位计数,控制并行数据更新,这里是4bit并行数据 reg[3: 0]data; reg[3: 0]out; always@(posedgeclkornegedgenreset) begin if(~nreset) count<=2'b00; elseif(en) count<=count+2'b01; end always@(posedgeclkornegedgenreset) begin if(~nreset) data<=4'b0000; ealeif(en) data<={data[2: 0],in}; end//并行输出 always@(posedgeclkornegedgenreset) begin if(~nreset) out<=4'b0000; elseif(en&&(count==2'b11)) out<=data; end endmodule 12、模为60的BCD码加法计数器 modulecount60(qout,cout,data,load,cin,reset,clk); output[7: 0]qout; outputcout; input[7: 0]data; inputload,cin,clk,reset; reg[7: 0]qout; endmodule always@(posedgeclk) begin if(reset) qout<=0;//同步复位 //clk 上涨沿时辰计数 else if(load) qout<=data; //同步置数 else if(cin) begin if(qout[3: 0]==9) //低位能否为 9,是则 begin qout[3: 0]<=0; //回 0,并判断高位能否为 5 if(qout[7: 4]==5) qout[7: 4]<=0; else qout[7: 4]<=qout[7: 4]+1; //高位不为 5,则加 1 end else //低位不为 9,则加 1 qout[3: 0]<=qout[3: 0]+1; end end end assigncout=((qout==8 ‘h9)&cin)? 1: 0; //产生进位输出信号 endmodule 13、BCD码—七段数码管显示译码器 moduledecode47(a,b,c,d,e,f,g,D3,D2,D1,D0); outputa,b,c,d,e,f,g; inputD3,D2,D1,D0; //输入的 4位 BCD 码 rega,b,c,d,e,f,g; always@(D3orD2orD1orD0) begin case({D3,D2,D1,D0}) //用 case语句进行译码 4'd0: {a,b,c,d,e,f,g}=7'b1111110; 4'd1: {a,b,c,d,e,f,g}=7'b0110000; 4'd2: {a,b,c,d,e,f,g}=7'b1101101; 4'd3: {a,b,c,d,e,f,g}=7'b1111001; 4'd4: {a,b,c,d,e,f,g}=7'b0110011; 4'd5: {a,b,c,d,e,f,g}=7'b1011011; 4'd6: {a,b,c,d,e,f,g}=7'b1011111; 4'd7: {a,b,c,d,e,f,g}=7'b1110000; 4'd8: {a,b,c,d,e,f,g}=7'b1111111; 4'd9: {a,b,c,d,e,f,g}=7'b1111011; default: {a,b,c,d,e,f,g}=7'bx; endcase end endmodule 14、七人投票表决器,4人赞同即为经过,反之不经过。 modulevoter7(pass,vote); outputpass; input[6: 0]vote; reg[2: 0]sum; integeri; regpass; always@(vote) begin sum=0; for(i=0;i<=6;i=i+1) //for 语句 if(vote[i])sum=sum+1; if(sum[2]) pass=1; //若超出 4人同意,则 pass=1 else pass=0; end endmodule 15、设计一个简单的状态机,功能是检测一个5位二进制序列“10010” moduleVrSMex(CLOCK,X,Z); inputCLOCK,X; outputZ; regZ; reg[2: 0]Sreg,Snext; parameter[2: 0]A=3'b000, B=3'b001, C=3'b010, D=3'b011, E=3'b100, F=3'b101; always@(posedgeCLOCK) Sreg<=Snext; always@(X,Sreg)begin case(Sreg) A: if(X==0)Snext=A; elseSnext=B; B: if(X==0)Snext=C; elseSnext=B; C: if(X==0)Snext=D; elseSnext=B; D: if(X==0)Snext=A; elseSnext=E; E: if(X==0)Snext=F; elseSnext=B; F: if(X==0)Snext=A; elseSnext=B; defaultSnext=A; endcase end always@(Sreg) case(Sreg) A,B,C,D,E: Z=0; F: Z=1; defaultz=0; endcase endmodule 16、分压式共射放大电路以下图。 三极管的模型参数为: IS=1E-16,BF=100,沟通信号,幅值为1。 求电路的静态工作点,电压放大倍数,输入电阻及输出电阻。 RB=100;输入 Amplifyingcircuit VS10AC1 RS12200 C1233.3U RB137100K RB23020K Q1435MQ RC743.3K RE501K CE5050U C2463.3U RL605.1K VCC7012 .MODELMQNPN(IS=1E-16BF=100RB=100) .OP .ACLIN101K10K//设沟通剖析为线性扫描,频次点数10,开端频次1KHZ,停止频次10KHZ .PLOTACV(6)/V (2)V (2)/I(RS)V(6)/I(RL) .END 17、共栅极放大器(Common-GateAmplifier)又称为电流跟从器,以下列图所示,试求其电 压增益、电流增益和频宽。 此中NMOS管的沟道宽为60U,长为2U,电阻RG阻值为100K,RD、RL阻值都为4K,RS为100欧姆,电容CC1、CC2、CG都为100UF,电流源IQ为1mA。 问题or,‘,’ *commongateampilifier .OPTIONSPOST=2LIS .lib '.\Mm0355V.l'tt M1 1 2 3 GND NCHW=60UL=2U RG 2 GND100K
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 集成电路 CAD 复习 例题 解析
![提示](https://static.bdocx.com/images/bang_tan.gif)