您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 可编程ASIC设计作业
《可编程ASIC技术》课程作业20151.请对下列VerilogHDL模块进行仿真和分析,说明其描述方式,画出对应的逻辑图或写出逻辑表达式(组),并概括地说明其逻辑功能。moduleexe1n(out,d3,d2,d1,d0,s1,s0);outputout;inputd3,d2,d1,d0,s1,s0;not(not_s1,s1),(not_s0,s0);and(out0,d0,not_s1,not_s0),(out1,d1,not_s1,s0);and(out2,d2,s1,not_s0),(out3,d3,s1,s0);or(out,out0,out1,out2,out3);endmoduleoutd3d2d1WideAnd0WideAnd3WideOr0WideAnd1d0s0s1WideAnd2将程序进行功能仿真,功能仿真图如下所示:(1)当s1=0,s0=0时(2)当s1=0,s0=1时(3)当s1=1,s0=0时(4)当s1=1,s0=1时由仿真图分析知,根据不同的s1和s0,输出通道进行变化:(1)当s1=0,s0=0时,out=d0;(2)当s1=0,s0=1时,out=d1;(3)当s1=1,s0=0时,out=d2;(4)当s1=1,s0=1时,out=d3。逻辑表达式组:Out=d(s1s2)实现的逻辑功能就是典型的4选1数据选择器2.请对下列VerilogHDL模块进行仿真和分析,用时序波图形或流程框图描述其行为,并概括地说明其逻辑功能。如果要使输出fd_out的占空比为50%,需要对该模块做什么修改?moduleexe2n(fd_out,clk,d,clr);outputfd_out;regfd_out;input[15:0]d;inputclk,clr;reg[15:0]cnt;always@(posedgeclk)beginif(!clr)cnt=4'h0000;elsebegincnt=cnt-1;if(cnt==0)beginfd_out=1;cnt=d;endelsefd_out=0;endendendmodule+A[16..0]B[16..0]ADDERDQPREENACLR=A[31..0]B[31..0]EQUALDENAQPRECLRSELDATAADATABOUT0MUX21SELDATAADATABOUT0MUX21Add01'h1--17'h1FFFD--cnt[15..0]Equal016'h0000--32'h00000000--cnt~[15..0]cnt~[31..16]16'h0000--fd_outclrd[15..0]clkfd_out~reg0(1)将程序进行功能仿真,仿真波形图如图所示:由图知,该程序实现的是可变模的减法计数器,输出的是每当到达设定模值就输出1,相当于对设定模进行检测。(2)若要使输出fd_out占空比为50%,则可以规定模值d=1,如下图:3.请对下列VerilogHDL模块进行仿真和分析,写出对应的逻辑表达式(组)或真值表,并概括地说明其逻辑功能。moduleexe3n(op_result,func_sel,op_a,op_b);output[7:0]op_result;input[2:0]func_sel;input[3:0]op_a,op_b;reg[7:0]op_result;always@(func_selorop_aorop_b)begincase(func_sel)3'b000:op_result=op_a+op_b;3'b001:op_result=op_a-op_b;3'b010:op_result=op_a*op_b;3'b011:op_result=op_a/op_b;3'b100:op_result=op_a&op_b;3'b101:op_result=op_a|op_b;3'b110:op_result=op_a^op_b;3'b111:op_result=op_a~^op_b;endcaseendendmodule+A[4..0]B[4..0]ADDER+A[5..0]B[5..0]ADDERxA[3..0]B[3..0]MULTIPLIER/A[3..0]B[3..0]DIVIDERSEL[2..0]DATA[7..0]OUTMUXSEL[2..0]DATA[7..0]OUTMUXSEL[2..0]DATA[7..0]OUTMUXSEL[2..0]DATA[7..0]OUTMUXSEL[2..0]DATA[7..0]OUTMUXSEL[2..0]DATA[7..0]OUTMUXSEL[2..0]DATA[7..0]OUTMUXSEL[2..0]DATA[7..0]OUTMUXAdd01'h0--1'h0--Add11'h0--1'h1--1'h0--1'h1--Mult0Div0op_result~0op_result~1op_result~2op_result~3op_result~4op_result~5op_result~6op_result~7op_result~8op_result~9op_result~10op_result~11op_result~12op_result~13op_result~14op_result~15Mux05'h10--1'h0--Mux25'h10--1'h0--Mux35'h10--Mux4Mux5Mux6Mux7op_result[7..0]func_sel[2..0]op_a[3..0]op_b[3..0]Mux15'h10--1'h0--将程序进行功能仿真,功能仿真波形如图:(1)当fun_sel=000时,op_result=op_a+op_b(2)当fun_sel=001时,op_result=op_a-op_b;(3)当fun_sel=010时,op_result=op_a*op_b;(4)当fun_sel=011时,op_result=op_a/op_b;(5)当fun_sel=100时,op_result=op_a&op_b;(6)当fun_sel=101时,op_result=op_a|op_b;(7)当fun_sel=110时op_result=op_a^op_b;(8)当fun_sel=111时op_result=op_a~^op_b;由此可知,该段程序实现的功能是:根据不同的输入选择信号(000,001,010,011,100,101,110,111),对于两个四位二进制数进行加、减、乘、除、与、或、异或、同或运算。4.请用持续赋值语句,设计一个可实现带使能端(E=1使能)的双4选1数据选择器的VerilogHDL模块。带使能端的双4选1的数据选择器程序:moduleexe4n(out,in0,in1,in2,in3,in4,in5,in6,in7,sel,en);inputin0,in1,in2,in3,in4,in5,in6,in7;outputout;input[2:0]sel;inputen;regout;always@(in0orin1orin2orin3orin4orin5orin6orin7orsel)beginif(en)out=0;elsebegincase(sel)3'b000:out=in0;3'b001:out=in1;3'b010:out=in2;3'b011:out=in3;3'b100:out=in4;3'b101:out=in5;3'b110:out=in6;3'b111:out=in7;default:out=3'bx;endcaseendendendmoduleSEL[2..0]DATA[7..0]OUTMUX010outin0in1in2in3in4in5in6in7ensel[2..0]out~0Mux0当使能端en=1,无效时,out=0;当使能端en=0,有效时,out根据sel选择输出;5.请用VerilogHDL或VHDL,设计一个功能和引脚与74138类似的译码器,并在Quartus下对其进行仿真验证。译码器程序:moduleexe5n(out,in,en);output[7:0]out;/*定义八位二进制码输出口*/input[2:0]in;/*定义三位二进制码输入口*/input[2:0]en;/*三个使能端*/reg[7:0]out;always@(inoren)beginif(en==3'b100)case(in)3'd0:out=8'b11111110;3'd1:out=8'b11111101;3'd2:out=8'b11111011;3'd3:out=8'b11110111;3'd4:out=8'b11101111;3'd5:out=8'b11011111;3'd6:out=8'b10111111;3'd7:out=8'b01111111;endcaseelseout=8'b11111111;endendmoduleIN[2..0]OUT[7..0]DECODER=A[2..0]B[2..0]EQUALSELDATAADATABOUT0MUX21Decoder0out[7..0]en[2..0]out~[7..0]8'hFF--Equal03'h4--in[2..0]译码器仿真波形6.请用VerilogHDL或VHDL,设计一个可同步预置、异步清零的8位移位寄存器,并在Quartus下对其进行仿真验证。可预置、可清零的移位寄存器程序:moduleexe6n(out,in,reset,set,clk);output[7:0]out;/*定义四位输出端*/inputin,reset,set,clk;/*输入信号、清零端、置数端、时钟信号*/reg[7:0]out;reg[7:0]md;/*置数寄存器*/always@(posedgeclk)beginbeginmd=4'b00001101;end/*这里预置数为00001101,可以根据需要更改*/if(reset)beginout=0;endelsebeginif(set)beginout=md;end/*置数信号为1,置数*/elsebeginout={out,in};endendendendmoduleDENAQPRECLRDENAQPRECLRDENAQPRECLRDENAQPRECLRDENAQPRECLRDENAQPRECLRDENAQPRECLRDENAQPRECLRSELDATAADATABOUT0MUX21SELDATAADATABOUT0MUX21out[1]~reg0out[2]~reg0out[3]~reg0out[4]~reg0out[5]~reg0out[6]~reg0out[7]~reg0inresetsetclkout[7..0]out[0]~reg0out~[7..0]8'h0D--out~[15..8]8'h00--移位寄存器的仿真波形图7.请用VerilogHDL或VHDL,设计一个上升沿触发的可预置、可清零的256进制计数器,并在Quartus下对其进行仿真验证。如果要将其改为60进制计数器,应对该设计做哪些修改?(1)可预置、可清零的256进制计数器程序:moduleexe7n(out,in,reset,set,clk);output[7:0]out;/*计数器的输出端*/input[7:0]in;/*预置初始值的输入段*/inputreset,set,clk;reg[7:0]out;always@(posedgeclk)beginif(!reset)out=8'h00000000;/*清零端,低电平有效*/elseif(set)out=in;/*预置数*/elseout=out+1;endendmodule+A[7..0]B[7..0]ADDERDENAQPRECLRDENAQPRECLRDENAQPRECLRDENAQPRECLRDEN
本文标题:可编程ASIC设计作业
链接地址:https://www.777doc.com/doc-4364237 .html