1.1.什么事硬件描述语言?它的主要作用是什么?答:硬件描述语言(HDL)是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言。数字逻辑电路设计者利用它来描述自己的设计思想,然后用EDA工具进行仿真,再自动综合到门级电路,最后用ASIC或FPGA实现其功能。1.2.目前世界上符合IEEE标准的硬件描述语言有哪两种?它们各有什么特点?答:VerilogHDL和VHDL。VerilogHDL:(1)较多的第三方工具支持(2)语法结构比VHDL简单(3)学习起来比VHDL容易(4)仿真工具比较好使(5)测试激励模块容易编写VHDL:(1)比VerilogHDL早几年成为IEEE标准(2)语法/结构比较严格,因而编写出的模块风格比较清晰(3)比较适合由较多的设计人员合作完成的特大型项目(一百万门以上)1.3.简单叙述一下利用EDA工具并采用硬件描述语言(HDL)的设计方法和流程。答:采用自顶向下的设计方法:从系统级开始把系统划分为基本单元,然后再把每个基本单元划分为下一层次的基本单元,一直这样做下去,直到可以直接用EDA元件库中的基本单元来实现为止。流程:(1)设计开发,即从编写设计文件-综合到布局布线-电路生成这样一系列步骤(2)设计验证,即进行各种仿真的一系列步骤,如果在仿真过程中发现问题就返回设计输入进行修改。1.4.采用硬件描述语言设计方法的优点是什么?有什么缺点?答:优点:(1)电路的逻辑功能容易理解(2)便于计算机对逻辑进行分析处理(3)把逻辑设计与具体电路的实现分成两个独立的阶段来操作(4)逻辑设计与实现的工艺无关(5)逻辑设计的资源积累可以重复利用(5)可以由多人共同更好更快地设计非常复杂的逻辑电路(几十万门以上的逻辑系统)1.5.专用集成电路(ASIC)技术:(ApplicationSpecificIntegratedCircuit)在集成电路发展的基础上,结合电路和系统的设计方法,利用ICCAD/EDA/ESDA等计算机辅助技术和设计工具,发展而来的一种把实用电路或电路系统集成化的设计方法。其定义为将某种特定应用电路或电路系统用集成电路的设计方法制作到一片半导体芯片上的技术称为ASIC技术。其特点是体积小,成本低,性能优,可靠性高,保密性强,产品综合性能和竞争力强。1.6.集成电路分类:按结构分类,分为单片IC和混合IC,其中单片IC分为双极型、MOS型和BiMOS型,混合IC分为厚膜混合IC和薄膜混合IC。按规模分类,分为SSI/MSI/LSI/VLSI/ULSI/GSI。按功能分类,分为数字电路,模拟电路和数模混合电路,其中数字电路包括组合逻辑电路和时序逻辑电路,模拟电路包括线性电路和非线性电路。1.7.摩尔定律:①芯片的复杂性(定义为在单块半导体芯片上有源元件的数目)约每18个月增加一倍;②每个新芯片大体上包含其前任两倍的容量,每个芯片的产生都是在前一个芯片产生后的18-24个月内。1.8.集成电路的行业特点:发展十分迅速,投资十分巨大,竞争十分激烈,地位十分重要,前景十分美好。1.9.ASIC设计方法:全定制、半定制和可编程。其中全定制ASIC是利用集成电路最基本设计方法(不使用现用库单元),对集成电路中所有的元器件进行精工细作的设计方法。半定制设计方法又分成基于标准单元的设计方法CBIC(CellBasedIC)和基于门阵列的设计方法.1.10.常用可编程器件类型:可编程只读存储器PROM(ProgramableRead_onlyMemory)、通用阵列逻辑GAL(GenericArrayLogic)、可编程逻辑阵列PLA(ProgramableLogicArray)、可编程阵列逻辑PAL(ProgramableArrayLogic)、可编程逻辑器件PLD(ProgramableLogicDevice)和复杂的可编程逻辑器件CPLD(ComplexProgramableLogicDevice)。1.11.ASIC设计流程:设计输入、逻辑综合、系统划分、布图前仿真、布图规则、布局、布线、提取(确定互连的电阻和电容)、布图后仿真。1.12.Verilog语言的三个主要部分:硬件描述语言VerilogHDL,程序语言接口PLI和标准延时格式SDF。1.14.行为仿真:行为的验证和验证模块分割的合理性;前仿真:即RTL级仿真,检查有关模块逻辑执行步骤是否正确;逻辑综合:把RTL级模块转换成门级;后仿真:用门级模型做验证,检查门级的互连逻辑其功能是否正确;布局布线:在门级的基础上加上了布线延时;布局布线后仿真:与真实电路最接近的验证;2.1.构成模块的关键词是什么?答:module,endmodule。2.2.什么叫综合?通过综合产生的是什么?产生的结果有什么用处?答:综合是通过综合器把行为级描述的模块转换为标准的门级结构网表。通过综合产生的是门级电路模块,这种模块很容易与某种工艺的基本元件逐一对应起来,再通过布局布线工具自动地转变为某种具体工艺的电路布线结构。2.3.仿真是什么?为什么要进行仿真?仿真可以在几个层面上进行?每个层面的仿真有什么意义?答:仿真是对电路模块进行动态的全面测试。进行仿真是为了通过观测被测试模块的的输出信号是否符合要求,可以调试和验证逻辑系统的设计结构准确与否,并发现问题及时修改。仿真可分为前仿真、逻辑网表仿真、门级仿真和布线后仿真。其中前仿真、逻辑网表仿真、门级仿真可以调试和验证逻辑系统的设计和准确与否,并发现问题及时修改;布线后仿真用于分析设计的电路模块的运行是否正常。2.4.模块的端口是如何描述的?答:用“.”表示被引用模块的端口。2.5.在引用实例模块的时候,如何在主模块中连接信号线?答:引用中,“.”表示端口,后面小括号内的信号名为与该端口连接的信号线名,可以用别的名。3.1.模块由几个部分组成?答:模块由接口描述和逻辑功能描述两部分组成。3.2.端口分为几种?答:端口分为输入端口、输出端口和输入/输出端口三种。3.3.模块的功能描述可以由哪几类语句或语句块组成?它们的出现的顺序会不会影响功能的描述?答:assign语句(即连续赋值语句)、实例引用和always语句(即过程赋值语句);它们的出现顺序不会影响功能的描述。3.4.最基本的Verilog变量有几种类型?答:wire、reg、memory。3.5.在always块中被赋值的变量必须是什么类型的?答:reg型。3.6.逻辑运算符与按位逻辑运算符有什么不同,各用在什么场合?答:逻辑运算符是对两个操作数进行逻辑运算,它多用于条件的判断;按位逻辑运算符是对两个操作数对应的每一位进行逻辑运算,它多用于信号的运算和检测。3.7.如果都不带时间延迟,阻塞和非阻塞赋值有什么不同?举例说明。答:阻塞赋值是顺序执行而非阻塞赋值是并行执行。举例:阻塞赋值always@(posedgeclk)beginb=a;c=b;end非阻塞赋值always@(posedgeclk)beginb=a;c=b;end阻塞赋值中,两条语句顺序执行(综合成一个触发器);而非阻塞赋值中,两条语句同时执行(综合成两个触发器)。3.8.举例说明顺序块和并行块的不同。答:顺序块:begin#50r=‘h35;#50r=‘hE2;#50r=‘h00;#50r=‘hF7;#50-end_waveend并行块:fork#50r=‘h35;#100r=‘hE2;#150r=‘h00;#200r=‘hF7;#250-end_wavejoin上面两个块的执行效果一样。顺序块中,语句按顺序执行;并行块中,语句同时执行。3.9.简述连续赋值(assign语句)与阻塞赋值、非阻塞赋值(always语句)之间的区别。答:(1)assign语句描述组合逻辑,而always语句既可以描述组合逻辑,又可以描述时序逻辑;(2)assign语句只使用“=”,而always语句可使用“=”或“=”;(3)assign语句中,等号右端的操作数发生变化时就执行一次(上电时便执行一次),而always语句中,每满足一次条件就执行一次;(4)assign语句用于驱动线网类型变量,而always语句用于驱动寄存器类型变量。3.10.利用连续赋值和阻塞赋值方式实现2选1多路选择器。答:连续赋值:modulemuxtwo(out,ain,bin,sel);outputout;inputain,bin,sel;assignout=(sel==0)?=a:b;endmodule阻塞赋值:modulemuxtwo(out,ain,bin,sel);outputout;inputain,bin,sel;regout;always@(ainorbinorsel)if(sel==0)out=ain;elseout=bin;endmodule3.11.如何用阻塞赋值方式来实现两个触发器电路?答:moduleDFF_2_Blocking(c,a,b,clk);outputregc,b;inputwirea,clk;always@(posedgeclk)beginb=a;endalways@(posedgeclk)beginc=b;endendmodule3.12.利用begin-end与fork-join语句编译得到一段周期为10个时间单位的信号波形。答:begin-end:`timescale1ns/1nsmodulewave_10(wave);outputregwave;parametercycle=10;initialbeginwave=1'b0;#(cycle/2)wave=1'b1;#(cycle/2)wave=1'b0;#(cycle/2)wave=1'b1;#(cycle/2)wave=1'b0;#(cycle/2)wave=1'b1;#(cycle/2)wave=1'b0;endendmodulefork-join:`timescale1ns/1nsmodulewave_10(wave);outputregwave;parameterCYCLE=10;initialforkwave=1'b0;#(1*(CYCLE/2))wave=1'b1;#(2*(CYCLE/2))wave=1'b0;#(3*(CYCLE/2))wave=1'b1;#(4*(CYCLE/2))wave=1'b0;#(5*(CYCLE/2))wave=1'b1;#(6*(CYCLE/2))wave=1'b0;joinendmodule;3.13.VerilogHDL的模型共有几种类型?答:系统级、算法级、RTL级、门级和开关级。3.14.什么是综合?综合后还可以进行仿真吗?答:综合是通过综合器把行为级描述的模块转换为标准的门级结构网表。综合后还可以用Verilog进行仿真。3.15.什么是Top_Down设计方法?通过什么手段来验证系统分块的合理性?答:从系统设计入手,从顶层进行功能划分和结构设计,通过行为建模把一个复杂的系统分解成可操作的若干个模块,每个模块之间的逻辑关系通过行为建模的仿真加以验证。3.16.设计一个4位移位寄存器。答:sourcecode:moduleshift_reg_4(out,clk,rst);outputreg[3:0]out;inputwireclk,rst;always@(posedgeclk)beginif(!rst)out=4'b1001;elseout={out[0],out[3:1]};endendmoduletestbench:`timescale1ns/1nsmoduletb_shift_reg_4;wire[3:0]out;regclk,rst;initialbeginclk=1'b0;rst=1'b1;#10rst=1'b0;#20rst=1'b1;endshift_reg_4M(out,clk,rst);always#10clk=~clk;endmodule3.17.for循环是否可以表示综合的组合逻辑?举例说明。答:for循环可以表示可综合的组合逻辑,比如说