首页 面试的资料

面试的资料

举报
开通vip

面试的资料面试的资料1什么是Setup和Holdup时间?建立时间(SetupTime)和保持时间(Holdtime)。建立时间是指在时钟边沿前,数据信号需要保持不变的时间。保持时间是指时钟跳变边沿后数据信号需要保持不变的时间。见图1。如果不满足建立和保持时间的话,那么DFF将不能正确地采样到数据,将会出现metastability的情况。如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那么超过量就分别被称为建立时间裕量和保持时间裕量。图1建立时间和保持时间示意图什么是竞争与冒险现象?怎样判断?如何消除?在组合逻...

面试的资料
面试的资料1什么是Setup和Holdup时间?建立时间(SetupTime)和保持时间(Holdtime)。建立时间是指在时钟边沿前,数据信号需要保持不变的时间。保持时间是指时钟跳变边沿后数据信号需要保持不变的时间。见图1。如果不满足建立和保持时间的话,那么DFF将不能正确地采样到数据,将会出现metastability的情况。如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那么超过量就分别被称为建立时间裕量和保持时间裕量。图1建立时间和保持时间示意图什么是竞争与冒险现象?怎样判断?如何消除?在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。产生毛刺叫冒险。如果布尔式中有相反的信号则可能产生竞争和冒险现象。解决方法:一是添加布尔式的消去项,二是在芯片外部加电容。用D触发器实现2倍分频的逻辑电路?Verilog描述:moduledivide2(clk,clk_o,reset);inputclk,reset;outputclk_o;wirein;regout;always@(posedgeclkorposedgereset)if(reset)out<=0;elseout<=in;assignin=~out;assignclk_o=out;endmodule图形描述:什么是"线与"逻辑,要实现它,在硬件特性上有什么具体要求?线与逻辑是两个输出信号相连可以实现与的功能。在硬件上,要用oc门来实现,由于不用oc门可能使灌电流过大,而烧坏逻辑门。同时在输出端口应加一个上拉电阻。什么是同步逻辑和异步逻辑?同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。请画出微机接口电路中,典型的输入设备与微机接口逻辑示意图(数据接口、控制接口、所存器/缓冲器)。7你知道那些常用逻辑电平?TTL与COMS电平可以直接互连吗?12,5,3.3TTL和CMOS不可以直接互连,由于TTL是在0.3-3.6V之间,而CMOS则是有在12V的有在5V的。CMOS输出接到TTL是可以直接互连。TTL接到CMOS需要在输出端口加一上拉电阻接到5V或者12V。可编程逻辑器件在现代电子设计中越来越重要,请问:你所知道的可编程逻辑器件有哪些?PAL,PLD,CPLD,FPGA。9试用VHDL或VERILOG、ABLE描述8位D触发器逻辑。moduledff8(clk,reset,d,q);inputclk;inputreset;input[7:0]d;output[7:0]q;reg[7:0]q;always@(posedgeclkorposedgereset)if(reset)q<=0;elseq<=d;endmodule10设想你将设计完成一个电子电路 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 。请简述用EDA软件(如PROTEL)进行设计(包括原理图和PCB图)到调试出样机的整个过程。在各环节应注意哪些问题?电源的稳定上,电容的选取上,以及布局的大小。11用逻辑门和cmos电路实现ab+cd12用一个二选一mux和一个inv实现异或13给了reg的setup,hold时间,求中间组合逻辑的delay范围。Delay和=有什么区别?4.画一个D触发器的原理图(门级),并且用veriloggatelevel表示出来;用最少的Mos管画出一个与非门;6.写一段finitestatemachine(主要考察codingstyle);如果触发器的setuptime/holdtime不满足,这个数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿到来时,数据才能被打入触发器。在同步系统中,如果触发器的setuptime/holdtime不满足,就可能产生亚稳态(Metastability),导致采样错误。此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端毛刺、振荡、固定的某一电压值,而不是等于数据输入端D的值。这段之间成为决断时间(resolutiontime)。经过resolutiontime之后Q端将稳定到0或1上,但是究竟是0还是1,这是随机的,与输入没有必然的关系。只要系统中有异步元件,亚稳态就是无法避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使系统对产生的错误不敏感。前者需要同步来实现,而后者根据不同的设计应用有不同的处理办法题目是都用英文写的,我用汉字来表达1,a为输入端,b为输出端,如果a连续输入为1101则b输出为1,否则为0例如a:0001100110110100100110b:0000000000100100000000请画出statemachine2,请用RTL描述上题statemachine3,libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitycheck1101isPort(a:instd_logic;clk:instd_logic;b:outstd_logic);endcheck1101;architectureBehavioralofcheck1101issignalp:std_logic_vector(0to3);beginserial2parallel:process(clk)beginifclk'eventandclk='1'thenp<=a&p(0to2);endif;endprocess;check:process(clk,p)beginifclk'eventandclk='1'thenifp="1101"thenb<='1';elseb<='0';endif;endif;endprocess;endBehavioral;我的一个同事说的。你的p其实就是一个状态,应该是设两个状态就足够了:1101和OTHERS这只是一个典型的设计题目,而且用状态机做并没有使设计复杂化你下面的设计会实现有两个延时,不过我相信出题的人不会在意这个的。还有就是,状态机设计一般都有reset的,你要加上这个端口才比较好,当然不加也不算不完整吧此题scholes描述的,只有一个延时。修改如下:libraryieee;useieee.std_logic_1164.all;useieee.STD_LOGIC_ARITH.all;useieee.STD_LOGIC_UNSIGNED.all;entitytestisport(rst:instd_logic;clk:instd_logic;a:instd_logic;b:outstd_logic);endtest;architecturetestoftestissignalp:std_logic_vector(3downto0);beginStart:process(rst,clk,p,a)begin--processifrst='1'thenifclk'eventandclk='1'thenp<=p(2downto0)&a;endif;elsep<="0000";endif;endprocess;Start1:process(rst,clk,p)begin--processifrst='1'thenifclk'eventandclk='1'thenifp="1101"thenb<='1';elseb<='0';endif;endif;elseb<='0';endif;endprocess;endtest;本题考察利用有限状态机进行时序逻辑的设计下面用verilog进行描述:(有限状态机提供6个状态)modulesequence_detect(in,out,clk,rst,state);outputout;output[2:0]state;inputclk;inputrst;inputin;reg[2:0]state;wireout;parameterIDLE='d0,A='d1,B='d2,C='d3,D='d4,E='d5;assignout=((state==D)&&(in==1))?1:0;always@(posedgeclk)beginif(!rst)beginstate<=IDLE;endelsecase(state)IDLE:if(in==1)//thefirstcodeisright,storingthestateA//beginstate<=A;endA:if(in==1)//thesecondcodeisright,storingthestateB//beginstate<=B;endelsebeginstate<=IDLE;endB:if(in==0)//thethirdcodeisright,storingthestateC//beginstate<=C;endelsebeginstate<=E;endC:if(in==1)//thefourthcodeisright,storingthestateD//beginstate<=D;out<=1;endelsebeginstate<=IDLE;out<=0;endD:if(in==1)//connectingthefrontinputtedsequence,againintroducingone,storingstateB//beginstate<=B;endelsebeginstate<=IDLE;endE:if(in==0)beginstate<=C;endelsebeginstate<=B;enddefault:state=IDLE;endcaseendendmodulelibraryieee;useieee.std_logic_1164.all;useieee.STD_LOGIC_ARITH.all;useieee.STD_LOGIC_UNSIGNED.all;entitytestisport(rst:instd_logic;clk:instd_logic;a:instd_logic;b:outstd_logic);endtest;architecturetestoftestissignalp:std_logic_vector(2downto0);beginStart:process(rst,clk)beginifrst='1'thenp<="000";ifclk'eventandclk='1'thenp<=p(1downto0)&a;endif;endif;endprocess;Start1:process(rst,clk)begin--processifrst='1'thenb<='0';ifclk'eventandclk='1'thenifp="110"anda='1'thenb<='1';elseb<='0';endif;endif;endif;endprocess;endtest;有两段代码1。proceee(a,b,c,sel,y)beginif(sel)y=a+b;elsey=a+c;end2.y=sel?a+b:a+c;面试官说第一中表达方法是先选后加,所以电路实现是一个选择器和一个加法器第二种方法是先加后选,用到两个加法器和一个选择器,所以他说第一种表达方式要好一些。查了一下书,发现面试官说的并不全对,一般来说,综合工具会自动的优化,一般只会综合出一个加法器和一个选择器先选后加是加法器共用,节省面积先加后选是用面积换时间,电路的工作速度更快些。为了实现逻辑(AXORB)OR(CANDD),请选用以下逻辑中的一种,并说明为什么?1)INV2)AND3)OR4)NAND5)NOR6)XOR我没有做出来,请大家帮忙看看我想了一下,用与非是肯定可以实现的1。与非门的两个输入连在一起就成了非门2。或门可以用与非和非门搭建或非其实也可以1。或非的两个输入PAD连在一起成非门2。与门可以用或非门和非门搭建奇数分频(6或者3)modules1(//{{ALTERA_ARGS_BEGIN}}DONOTREMOVETHISLINE!clkin,clkout,s1,s2//{{ALTERA_ARGS_END}}DONOTREMOVETHISLINE!);//PortDeclaration{{ALTERA_IO_BEGIN}}DONOTREMOVETHISLINE!inputclkin;outputclkout,s1,s2;{{ALTERA_IO_END}}DONOTREMOVETHISLINE!wires1,s2;reg[1:0]step1,step2;always@(posedgeclkin)begincase(step1)2'b00:step1<=2'b01;2'b01:step1<=2'b10;2'b10:step1<=2'b00;default:step1<=2'b00;endcaseendalways@(negedgeclkin)begincase(step2)2'b00:step2<=2'b01;2'b01:step2<=2'b10;2'b10:step2<=2'b00;default:step2<=2'b00;endcaseendassignclkout=step1[1]|step2[1];assigns1=step1[1];assigns2=step2[1];endmoduletestbench:`timescale1ns/1nsmodules1_tb;regclk_in;wireclk_out,s1,s2;always#50clk_in=~clk_in;initialbeginclk_in=0;#1000$stop;ends1s10(.clkin(clk_in),.clkout(clk_out),.s1(s1),.s2(s2));endmodule独立晶振一个10m一个15m,10m向15m的传输数据问怎么实现我说小数分频成10m内部时钟,再采样求正解数据量少用握手信号,数据量多用FIFO,如果有很高的时钟资源可以考虑用高时钟采样,但是不是很好的方法,分频成5M是肯定不行的,分成相同频率也是异步信号1.setup和holdup时间,区别.多时域设计中,如何处理信号跨时域3.latch与register的区别,为什么现在多用register.行为级描述中latch如何产生的4.BLOCKINGNONBLOCKING赋值的区别5.MOORE与MEELEY状态机的特征6.IC设计中同步复位与异步复位的区别实现N位JohnsonCounter,N=用FSM实现101101的序列检测模块多时域设计中,如何处理信号跨时域:情况比较多,如果简单回答的话就是:跨时域的信号要经过同步器同步,防止亚稳态传播。例如:时钟域1中的一个信号,要送到时钟域2,那么在这个信号送到时钟域2之前,要先经过时钟域2的同步器同步后,才能进入时钟域2。这个同步器就是两级d触发器,其时钟为时钟域2的时钟。这样做是怕时钟域1中的这个信号,可能不满足时钟域2中触发器的建立保持时间,而产生亚稳态,因为它们之间没有必然关系,是异步的。这样做只能防止亚稳态传播,但不能保证采进来的数据的正确性。所以通常只同步很少位数的信号。比如控制信号,或地址。当同步的是地址时,一般该地址应采用格雷码,因为格雷码每次只变一位,相当于每次只有一个同步器在起作用,这样可以降低出错概率,象异步FIFO的设计中,比较读写地址的大小时,就是用这种方法。如果两个时钟域之间传送大量的数据,可以用异步FIFO来解决问题。6.IC设计中同步复位与异步复位的区别如果光说概念的话:同步复位在时钟沿采复位信号,完成复位动作。异步复位不管时钟,只要复位信号满足条件,就完成复位动作。象芯片的上电复位就是异步复位,因为这时时钟振荡器不一定起振了,可能还没有时钟脉冲。异步复位很容易受到复位端信号毛刺的影响,比如复位端信号由组合逻辑组成,那组合逻辑输出产生的冒险,就会使触发器错误的复位。4.BLOCKINGNONBLOCKING赋值的区别这个问题可参考的资料很多,讲的都很透彻,可以找一下。基本用法就是常说的“组合逻辑用BLOCKING,时序逻辑用NONBLOCKING”。3.latch与register的区别,为什么现在多用register.行为级描述中latch如何产生的区别不多说。为什么避免使用latch,因为设计中用latch会使设计后期的静态时序分析变的困难(必须用的地方当然另当别论)。行为级描述中latch产生的原因:多由于构造组合逻辑电路时,使用if或case语句,没有把所有的条件给足,导致没有提到的条件,其输出未知。或者是每个条件分支中,没有给出所有输出的值,这就会产生latch。所以构造组合逻辑电路时,其always语句中的敏感信号必须包括所有的输入端,每个条件分支必须把所有的输出端的值都给出来。1.setup和holdup时间,区别.建立时间:触发器在时钟沿来到前,其数据输入端的数据必须保持不变的时间保持时间:触发器在时钟沿来到后,其数据输入端的数据必须保持不变的时间模拟电路设计基础知识(笔试时候容易遇到的题目)最基本的如三极管曲线特性(太低极了点)基本放大电路,种类,优缺点,特别是广泛采用差分结构的原因反馈之类,如:负反馈的优点(带宽变大)频率响应,如:怎么才算是稳定的,如何改变频响曲线的几个方法锁相环电路组成,振荡器(比如用D触发器如何搭)6.A/D电路组成,工作原理如果公司做高频电子的,可能还要RF知识,调频,鉴频鉴相之类,不一一列举太底层的MOS管物理特性感觉一般不大会作为笔试面试题,因为全是微电子物理,公式推导太罗索,除非面试出题的是个老学究ic设计的话需要熟悉的软件adence,Synopsys,Advant,UNIX当然也要大概会操作实际工作所需要的一些技术知识(面试容易问到)如电路的低功耗,稳定,高速如何做到,调运放,布版图注意的地方等等,一般会针对简历上你所写做过的东西具体问,肯定会问得很细(所以别把什么都写上,精通之类的词也别用太多了),这个东西各个人就不一样了,不好说什么了。数字电路设计当然必问Verilog/VHDL,如设计计数器逻辑方面数字电路的卡诺图化简,时序(同步异步差异),触发器有几种(区别,优点),全加器等等比如:设计一个自动售货机系统,卖soda水的,只能投进三种硬币,要正确的找回钱数画出fsm(有限状态机)用verilog编程,语法要符合fpga设计的要求系统方面:如果简历上还说做过cpu之类,就会问到诸如cpu如何工作,流水线之类的问题单片机、DSP、FPGA、嵌入式方面(从没碰过,就大概知道几个名字胡扯几句,欢迎拍砖,也欢迎牛人帮忙补充)如单片机中断几个/类型,编中断程序注意什么问题DSP的结构(冯.诺伊曼结构吗?)嵌入式处理器类型(如ARM),操作系统种类Vxworks,ucos,winCE,linux),操作系统方面偏CS方向了,在CS篇里面讲了4.信号系统基础拉氏变换与Z变换公式等类似东西,随便翻翻书把如.h(n)=-a*h(n-1)+b*δ(n)a.求h(n)的z变换b.问该系统是否为稳定系统c.写出FIR数字滤波器的差分方程以往各种笔试题举例利用4选1实现F(x,y,z)=xz+yz'用mos管搭出一个二输入与非门。用传输门和倒向器搭一个边沿触发器用运算放大器组成一个10倍的放大器微波电路的匹配电阻。名词解释,无聊的外文缩写罢了,比如PCI、ECC、DDR、interrupt、pipelineIRQ,BIOS,USB,VHDL,VLSIVCO(压控振荡器)RAM(动态随机存储器),FIRIIRDFT(离散傅立叶变换)或者是中文的,比如a量化误差b.直方图c.白平衡共同的注意点1.一般情况下,面试官主要根据你的简历提问,所以一定要对自己负责,把简历上的东西搞明白;2.个别招聘针对性特别强,就招目前他们确的方向的人,这种情况下,就要投其所好,尽量介绍其所关心的东西。其实技术面试并不难,但是由于很多东西都忘掉了,才觉得有些难。所以最好在面试前把该看的书看看。虽然说技术面试是实力的较量与体现,但是不可否认,由于不用面试官/公司所专领域及爱好不同,也有面试也有很大的偶然性,需要冷静对待。不能因为被拒,就否认自己或责骂公司。面试时要takeiteasy,对越是自己钟情的公司越要这样。1.集成电路设计前端流程及工具。2。FPGA和ASIC的概念,他们的区别3。LATCH和DFF的概念和区别4。用DFF实现二分频。5。用VERILOG或VHDL写一段代码,实现消除一个glitch6。给一个表达式f=xxxx+xxxx+xxxxx+xxxx用最少数量的与非门实现(实际上就是化简)7。用VERILOG或VHDL写一段代码,实现10进制计数器。8。给出一个门级的图,又给了各个门的传输延时,问关键路径是什么,还问给出输入,使得输出依赖于关键路径。9。A,B,C,D,E进行投票,多数服从少数,输出是F(也就是如果A,B,C,D,E中1的个数比0多,那么F输出为1,否则F为0),用与非门实现,输入数目没有限1.可参考各EDA厂商的开发工具FPGA与ASIC的可参阅各种EDA相关书籍。LATC是H锁存器,DFF是触发器,其电路形式完全不同。always@(posedgeclk)if(reset)beginsel<=1;clk1<=1;clk2<=1;endelsebeginsel<=~sel;if(sel)clk1<=~clk1;elseclk2<=~clk2;end5.glitch主要发生在组合逻辑电路输出,可以加DFF输出稳定信号6,7,8,9:。。。制。2.负数与正数相乘的问题3.1010(-6)*0010(2)用补码相乘时应该进行相应的符号扩展,比如上面是4bit相乘,结果应该为8bit。这样符号扩展后分别为11111010和00000010,然后再用这两个数直接相乘,结果为111110100,取其低8位11110100,作为-6*2的结果。这也是个补码形式,再判断一下高位恢复为原码,得到结果。以前讨论过相关问题,可以翻出来看看检测信号的上升沿LIBRARYieee;USEieee.std_logic_1164.all;ENTITYsyncISPORT(clk:INSTD_LOGIC;rst:INSTD_LOGIC;sync_in:INSTD_LOGIC;sync_out:OUTSTD_LOGIC);ENDsync;ARCHITECTUREarchOFsyncISSIGNALsync_int1,sync_int2:STD_LOGIC;BEGIN---------------------------------------------------------PROCESS(clk,rst,sync_in)BEGINIFrst='0'THENsync_out<='0';ELSIFrising_edge(clk)THENsync_int1<=sync_in;sync_int2<=sync_int1;IF(sync_int1='1'ANDsync_int2='0')THENsync_out<='1';ELSEsync_out<='0';ENDIF;ENDIF;ENDPROCESS;ENDarch;并入串出?libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitypisoisport(datain:instd_logic_vector(39downto0);clk:instd_logic;nLoad:instd_logic;data_out:outstd_logic);endpiso;architectureBehavioralofpisoissignalq:std_logic_vector(39downto0);beginprocess(nLoad,clk)beginifnLoad='0'thenq<=datain;elsifclk'eventandclk='1'thenq(1)<=q(0);foriin1to39loopq(i)<=q(i-1);endloop;endif;endprocess;process(nLoad,clk)beginifnLoad='0'thendata_out<='0';elsifclk'eventandclk='1'thendata_out<=q(39);endif;endprocess;endBehavioral;把所有的39改成15就可以了有一些基本概念我可能还不太清楚,说错的地方,请大家批评指教。我要设计的是is-95cdma系统的48阶fir滤波器。输入串行数据(每个clk输入1位)输入数据宽度为1位,系数h[0]=-0.025288315(十进制)111111_1111100111(16位二进制,_为小数点位置,_前面是符号扩展),-h[0]=+0.025288315(十进制)000000_0000011001(16位二进制)。其他系数略。我用的是映射的方法,即不用乘法,只对应由查找表查出的结果,输入1时,映射为+1,查表输出h[0],输入0时,映射为-1,查表输出-h[0]。再送入加法器求48个系数的和。系数宽度16位,输出宽度22位(防溢出)datain=1,dataout=16116a(十六进制)=0101100001000101101010(22位二进制)这是48个正系数的和(这里的正系数不一定全是正数,而只是标准,所以把它看作“正数”)datain=0,dataout=19ee96(十六进制)=0110011110111010010110(22位二进制)这是48个负系数的和。这个结果我对照十进制的数运算结果验证了一下,是对的,但是只能取22位的后16位来计算,因为高位的都是加法的进位溢出。我主要由两个问题:这种映射法,恕我愚钝,根本没明白(我也是看的论文,但没有明白其真正含义),因为它和普通的比如m位输入和n位的系数相乘得到m+n位的结果,思路完全不一样。这个1,0映射为+1,-1,和普通的输入(m位二进制数代表一个x(n))有何关系?我的到16116a,19ee96这些结果还要累加吗?(此问题可能比较愚蠢,欢迎扔鸡蛋)2)我运算的是有符号数,那溢出的这些多出的位怎么处理?因为下一步这些数据还要送到下一个模块处理。保留的话,多出的哪些位显然没用。扔掉的话,行吗?学了FORLOOP的用法以后,有点想法那么在此基础上怎么实现并口的输出呢?如:Q(0)<=DIN;FORIIN1DOWNTO7LOOPQ(I)<=Q(I-1);ENDLOOP;OP<=Q;OP定义为STD_LOGIC_vector(7downto0)我总感觉每次触发输出的都是在Q(7)口,而且该值就是DIN在8个周期前的值那么要是想实现DIN8个连续数据的同时输出,应该怎么做?感觉每次触发输出的都是在Q(7)口这句话不是很明白。反正这样的转换很快的,只要有触发,马上可以完成分析如下:q(0)->q(1),然后q(1)->q(2),然后q(2)->q(3)........q(6)->q(7)实际上只是延迟了几个周期,也就是q(7)<=din,并没有实现串行向并行的转换不大理解用这个forloop语句如何实现串并转换的望告知把Q(0)<=DIN;FORIIN1DOWNTO7LOOPQ(I)<=Q(I-1);ENDLOOP;放在进程里面就可以。同志,做cpld/fpga设计的时候需要记住一点,verilog是硬件设计而不是软件编程,所以,做好不要使用for循环这样的语句,太浪费资源了!思考的时候要学会使用DFF这应该是个移位寄存的电路,也是DIN8个连续数据的同时输出,只不过是移位1次,就并处一次。其实隔8个周期看一下输出,就是你要的结果了。真要串入8位,并出1次,要一个计数器或状态机也行啊去构建自己想要的电路!这是我写的,5分频的,改变计数器,可以是别的奇数分频libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitydiv3isPort(clk:instd_logic;rst:instd_logic;clk3:outstd_logic);enddiv3;architectureBehavioralofdiv3issignalc0:std_logic;signalc1:std_logic;signalcnt:std_logic_vector(2downto0);begincnt_gen:process(clk,rst)beginifrst='1'thencnt<="100";c0<='0';c1<='0';elsifclk'eventandclk='1'thenifcnt/=4thencnt<=cnt+1;elsifcnt=4thencnt<=(others=>'0');endif;ifcnt=4thenc0<='1';elsifcnt=2thenc0<='0';endif;endif;endprocess;process(clk,rst)beginifrst='1'thenc1<='0';elsifclk'eventandclk='0'thenifcnt=4thenc1<='1';elsifcnt=2thenc1<='0';endif;endif;endprocess;clk3<=c0andc1;endBehavioral;c0,c1一个在时钟的上升沿变化,一个在下降沿变化,所以两个会有半个周期的差,and以后就可以得到想要得分频了。你可以仿真波形看看两个时钟,一个为64K的时钟,一个为2.048M时钟,怎样检测64K时钟的上升沿?既检测到64K的时钟的上升沿就产生一个控制信号。怎样做?做出来你也能进UT.......这跟检测信号的变化有什么区别吗?设64K时钟为信号,速率X2=128K采样时钟128K*4=512K(有2.048M更好了)加1状态机就可以了!如果要求产生的控制信号与64K时钟上升沿对齐的话,就有点麻烦了!Thereisrisingedgeofclk64kdetectedwhenCtrlsignalishigh.libraryIEEE;useIEEE.std_logic_1164.all;entitydetisport(rst:instd_logic;clk64k:instd_logic;clk2m:instd_logic;ctrl:outstd_logic);enddet;architecturebehvofdetissignalclk64k_q1:std_logic;signalclk64k_q2:std_logic;beginprocess(rst,clk2m)beginif(rst='0')thenclk64k_q1<='0';clk64k_q2<='0';elsif(clk2m'eventandclk2m='1')thenclk64k_q1<=clk64k;clk64k_q2<=clk64k_q1;endif;endprocess;ctrl<='1'whenclk64k_q1='1'andclk64k_q2='0'else'0';endbehv;2.048MHz/64K=32其实就是检测64KHz信号上升沿位于上述32象限的哪个,当然也就是可以用状态机(2MHz)实现;当然也不是需要32个测过程中只有16个连续的register才能实现的,因为在320或1,那么也只需2个register次检保存状态就可以了。既然能检测到64KHz信号的变化,那么剩下的事情就不难了,无非就是对该状态信号作一定处理,如要2M脉宽,上面便是,如要与64K上升沿同步,那就将2M脉宽同64K信号作些处理。建议用状态机FSM来实现,这是由于一旦检测到符号要求的信号,那么剩下的处理就会比较简单,都是利用该信号作进一步的处理--至少前面的FSM将这个变化(我认为变化比边沿合适)是确定的。---扯远了!呵呵,刚在别的版块发了个关于按键去抖动的帖子是VHDL的可以参考下signala0,a1;process(clk)beginif(clk'eventandclk='1')thena1<=a0;a0<=key;---key为按键信号endif;endprocess;process(a0,a1)beginkeyout<=keyanda0and(nota1);--keyout即为所要得到的单脉冲endprocess;******************************************************************分频技术几点******************************************************************10.1分频9次10分频和1次11分频因为(9×10+1×11)/(9+1)=10.1******************************************************************实例:用于实现N-0.5分频******************************************************************begin-------异或门clk<=inclkxordivide2;--------inclk(输入时钟)-------模N减法计数器process(clk)if(clk'eventandclk='1')thenif(count="0000")thencount<=present-1;--------outclk(输出时钟),present预置分频值,即N值outclk<='1';elsecount<=count-1;outclk<='0';endif;endif;endprocess;------2分频器process(outclk)beginif(outclk'eventandoutclk='1')thendivide2<=notdivide2;endif;endprocess;******************************************************************3分频实例:******************************************************************LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_unsigned.all;ENTITYdiv3ISPORT(clk_in:instd_logic;clk_out:outstd_logic);ENDdiv3;ARCHITECTUREbehavOFdiv3ISSIGNALclk1,clk2:std_logic_vector(1DOWNTO0);BEGINPROCESS1:PROCESS(clk_in)BEGINIFclk_in'eventANDclk_in='1'THENCASEclk1isWHEN"00"=>clk1<="01";WHEN"01"=>clk1<="11";WHEN"11"=>clk1<="00";WHENOTHERS=>clk1<="00";ENDCASE;ENDIF;ENDPROCESSPROCESS1;PROCESS2:PROCESS(clk_in)BEGINIFclk_in'eventANDclk_in='0'THENCASEclk2ISWHEN"00"=>clk2<="01";WHEN"01"=>clk2<="11";WHEN"11"=>clk2<="00";WHENOTHERS=>clk2<="00";ENDCASE;ENDIF;ENDPROCESSPROCESS2;clk_out<='1'WHEN(clk1ANDclk2)=0ELSE'0';ENDbehav1。集成电路设计前端流程及工具。2。FPGA和ASIC的概念,他们的区别3。LATCH和DFF的概念和区别4。用DFF实现二分频。5。用VERILOG或VHDL写一段代码,实现消除一个glitch6。给一个表达式f=xxxx+xxxx+xxxxx+xxxx用最少数量的与非门实现(实际上就是化简)7。用VERILOG或VHDL写一段代码,实现10进制计数器。8。给出一个门级的图,又给了各个门的传输延时,问关键路径是什么,还问给出输入,使得输出依赖于关键路径。9。A,B,C,D,E进行投票,多数服从少数,输出是F(也就是如果A,B,C,D,E中1的个数比0多,那么F输出为1,否则F为0),用与非门实现,输入数目没有限制。
本文档为【面试的资料】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
is_916680
暂无简介~
格式:doc
大小:361KB
软件:Word
页数:0
分类:
上传时间:2021-09-18
浏览量:1