1、IEEE标准的硬件描述语言是VerilogHDL和VHDL共同点是:能够形式化地抽象表示电路的行为和结构;支持逻辑设计中层次与范围的描述:可借用高级语言的精巧结构来简化电路行为的描述:具有电路仿真与验证机制以保证设计的正确性;支持电路描述由高层到低层的综合转换;硬件描述与实现工艺无关;便于文档管理;易于理解和设计重用。不同点:VerilogHDL是一种非常容易掌握的硬件描述语言,而VHDL掌握起来就比较困难。2、把功能经过验证的、可综合的、实现后电路结构总门数在5000门以上的VerilogHDL模型称之为“软核”。把在某一种现场可编程门阵列(FPGA)器件上实现的、经验证是正确的、总门数在5000门以上电路结构编码文件称为“固核”。把在某一种专用集成电路工艺的(ASIC)器件上实现的、经验证是正确的、总门数在5000门以上电路结构版图掩膜称为“硬核”。3、什么叫综合?通过综合产生的是什么?通过综合工具把行为级描述的模块通过逻辑网表自动转化为门级形式的模块叫综合。综合由EDA工具来完成。产生的是由与门,或门和非门组成的加法器,比较器等组合逻辑。产生的模块很容易与某种工艺的基本元件逐一对应起来,再通过布局布线工具自动地转变为某种工具工艺的电路布线结构。4、仿真可以在几层面上进行?每个层面的仿真有什么意义?分别为:前仿真,逻辑网表仿真,门级仿真和布线后仿真。前仿真,逻辑网表仿真,门级仿真:可以调试和验证逻辑系统的设计和结构准确与否,并发现问题及时修改。布线后仿真:分析设计的电路模块的运行是否正常。5、模块由描述接口和描述逻辑功能两部分组成。6、端口分为三种:输入口、输出口、输入/输出口。7、reg型和wire型变量的差别是什么?reg型变量是寄存器型变量,wire型变量是连线型变量。两者根本性的差别在于reg型变过量有个寄存器来存放变量,这个值只有变量发生改变时才会改变否则保证原来的值不变,wire型变量的值不是确定的值。8、由连续赋值语句assign赋值的变量能否是reg类型的?可以是reg类型的变量。9、在always模块中被赋值的变量能否是wire类型的?如果不能,那么必须是什么类型的?它们表示的一定是实际的寄存器吗?不能。必须是reg类型的变量。他们表示的不一定是实际的寄存器。10、参数类型的变量有什么用处?好处是可以提高程序的可读性和可维护性。11、逻辑运算符与按位逻辑运算符有什么不同?用逻辑运算符时是两个操作数进行逻辑运算,而按位逻辑运算符运算时是两个操作数对应的每一位进行逻辑运算。逻辑运算符多用于条件的判断,按位逻辑运算符用于信号的运算和检测。12、拼接符的作用是什么?为什么说合理地使用拼接符可以提高程序的可读性和可维护性?拼接符的作用是把两个或多个信号的某些位拼接起来进行运算操作。因为借助拼接符可以用一个符号名来表示由多位信号组成的复杂信号。其物理意义是将多个信号结合成一个信号。13、如果都不带时间延迟,阻塞和非阻塞赋值有什么不同?阻塞和非阻塞赋值的区别在阻塞时顺序执行而非阻塞时并行执行。举例:非阻塞赋值:always@(posedgeclk)beginb=a;c=b;end阻塞赋值:always@(posedgeclk)beginb=a;c=b;end两种不同的赋值方式结果是不同的。非阻塞赋值中两条语句同时执行,结果是b=a,c=b。而阻塞赋值两条语句是逐条执行的,先执行b=a后执行c=b,结果是c=b=a。14、不断活动与不断执行有什么不同?不断活动是always语句不断活动检查是否满足条件(如某个信号发生改变),不断执行时always语句引导的过程中的语句不断的执行着。15、简单叙述任务和函数的不同点。(1)函数只能与主模块共用同一个仿真时间单元,而任务可以定义自己的仿真时间单位;(2)函数不能启动任务,而任务能启动其它任务和函数;(3)函数至少要有一个输入变量,而任务可以没有或有多个任何类型的变量;(4)函数返回一个值,而任务则不返回值。16、什么是综合?是否任何符合语法的VerilogHDL程序都可以综合?通过综合器把HDL程序转化成标准的门级结构网表。不是。17、有限状态机分为哪两类?有何区别?分为Moore型和Mealy型两类。Moore型其时序逻辑输出仅与当前状态有关;Mealy型其时序逻辑输出不但取决于状态还取决于输入。18、什么是同步复位,什么是异步复位,两者的区别是什么?同步复位只有在时钟沿到来时复位信号才起作用。异步复位只要有复位信号系统马上复位。同步复位的复位信号持续的时间应该超过一个时钟周期才能保证系统复位。异步复位抗干扰能力差,有些噪声也能使系统复位,因此有时候显得不够稳定,要想设计一个好的复位最好使用异步复位同步释放,而且复位信号低电平有效。1、根据仿真测试文件绘制信号的波形譬如:initialbeginreset=1;clk=0;#3reset=0;#5reset=1;endalways#2clk=~clk;4)程序填空题:1、基本D触发器moduleDFF(Q,D,CLK);outputQ;inputD,CLK;regQ;always@(posedgeCLK)beginQ=D;endendmodule2、8位寄存器modulereg8(qout,in,clk,clear);output[7:0]qout;input[7:0]in;inputclk,clear;reg[7:0]qout;always@(posedgeclkorposedgeclear)beginif(clear)qout=0;//异步清0elseqout=in;endendmodule3、8位并行加法器moduleadd_bx(cout,sum,a,b,cin);output[7:0]sum;outputcout;input[7:0]a,b;inputcin;assign{cout,sum}=a+b+cin;endmodule4、8位并行乘法器modulemult(outcome,a,b);parametersize=8;input[size:1]a,b;//两个操作数output[2*size:1]outcome;//结果assignoutcome=a*b;//乘法运算符endmodule5、多路器①持续赋值方式定义的2选1多路选择器moduleMUX21_1(out,a,b,sel);inputa,b,sel;outputout;assignout=(sel==0)?a:b;//持续赋值,如果sel为0,则out=a;否则out=bendmodule②阻塞赋值方式定义的2选1多路选择器moduleMUX21_2(out,a,b,sel);inputa,b,sel;outputout;regout;always@(aorborsel)beginif(sel==0)out=a;//阻塞赋值elseout=b;endendmodule③modulemux(out,a,b,sel)outputout;inputa,b,sel;assignout=sel?a:b;endmodule④行为级描述的四选一多路选择器modulemux4_to_1(out,i0,i1,i2,i3,s1,s0);inputi0,i1,i2,i3,s1,s0;outputout;regout;always@(s1ors0ori0ori1ori2ori3)begincase({s1,s0})2’b00:out=i0;2’b01:out=i1;2’b10:out=i2;2’b11:out=i3;default:out=1’bx;endcaseendendmodule6、比较器①modulecompare_n(X,Y,XGY,XSY,XEY);input[width-1:0]X,Y;outputXGY,XSY,XEY;regXGY,XSY,XEY;parameterwidth=8;always@(XorY)beginif(X==Y)XEY=1;elseXEY=0;if(XY)XGY=1;elseXGY=0;if(XY)XSY=1;elseXSY=0;endendmodule②modulecompare(equal,a,b);Parametersize=1;outputequal;input[size-1:0]a,b;assignaqual=(a==b)?1:0;endmodule7、3-8译码器①moduledecoder_38(out,in);output[7:0]out;input[2:0]in;reg[7:0]out;always@(in)begincase(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;endcaseendendmodule②moduledecoder(out,in);output[7:0]out;input[2:0]in;assignout=1’b1in;endmodule8、8-3编码器moduleencoder8_3(none_on,outcode,a,b,c,d,e,f,g,h);outputnone_on;output[2:0]outcode;inputa,b,c,d,e,f,g,h;reg[3:0]outtemp;assign{none_on,outcode}=outtemp;always@(aorborcordoreorforgorh)beginif(h)outtemp=4'b0111;elseif(g)outtemp=4'b0110;elseif(f)outtemp=4'b0101;elseif(e)outtemp=4'b0100;elseif(d)outtemp=4'b0011;elseif(c)outtemp=4'b0010;elseif(b)outtemp=4'b0001;elseif(a)outtemp=4'b0000;elseouttemp=4'b1000;endendmodule9、8位数据锁存器modulelatch_8(qout,data,clk);output[7:0]qout;input[7:0]data;inputclk;reg[7:0]qout;always@(clkordata)beginif(clk)qout=data;endendmodule10、奇偶检验位生成器moduleparity(even_bit,odd_bit,input_bus);outputeven_bit,odd_bit;input[7:0]input_bus;assignodd_bit=^input_bus;//产生奇校验位assigneven_bit=~odd_bit;//产生偶校验位endmodule11、三态输出驱动器①moduletrist(out,in,enable);outputout;inputin,enable;assignout=enable?in:’bz;endmodule②moduletrist(out,in,enable);outputout;inputin,enable;bufiflmybufl(out,in,enable);endmodule12、8位移位寄存器moduleshifter(din,clk,clr,dout);inputdin,clk,clr;output[7:0]dout;reg[7:0]dout;always@(posedgeclk)beginif(clr)dout=8'b0;//同步清0,高电平有效elsebegindout=dout1;//输出信号左移一位dout[0]=din;//输入信号补充到输出信号的最低位endendend