完整word版集成电路CAD复习例题 +解析.docx
- 文档编号:18956521
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:18
- 大小:57.17KB
完整word版集成电路CAD复习例题 +解析.docx
《完整word版集成电路CAD复习例题 +解析.docx》由会员分享,可在线阅读,更多相关《完整word版集成电路CAD复习例题 +解析.docx(18页珍藏版)》请在冰豆网上搜索。
完整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) #10a=i;//设定a的取值 end initial begin for(j=1;j<16;j=j+1) #10b=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; endelsebegin 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)//clk上升沿触发 begin if(! reset) out=8'h00;//同步清0,低电平有效 elseif(load) out=data;//同步预置 elseif(out<9) out=out+1;//计数 else 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)//clk上升沿时刻计数 begin if(reset) qout<=0;//同步复位 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,RB=100;输入交流信号,幅值为1。 求电路的静态工作点,电压放大倍数,输入电阻及输出电阻。 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 M1123GNDNCHW=60UL=2U RG2GND100K RDVDD14K RS4VI100 RLVO04K CC134100U CC21VO100U CG
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整word版集成电路CAD复习例题 +解析 完整 word 集成电路 CAD 复习 例题 解析