EDA复习 比较完整的.doc_第1页
EDA复习 比较完整的.doc_第2页
EDA复习 比较完整的.doc_第3页
EDA复习 比较完整的.doc_第4页
EDA复习 比较完整的.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

“比较完整了”EDA复习简答1. EDA的设计流程方案设计,系统规划,代码输入,编译器,功能仿真,综合器,时序仿真,适配器,编程文件,硬件测试2. 竞争与冒险产生、判断及如何处理产生:由于延迟时间的存在,当一个输入信号经过多条路径传送后又重新会合到某个门上,由于不同路径上门的级数不同,或者门电路延迟时间的差异,导致到达会合点的时间有先有后,从而产生瞬间的错误输出。判断:1)代数法:逻辑函数表达式中,若某个变量同时以原变量和反变量两种形式出现,就具备了竞争条件。2)卡诺图法:只要在卡诺图中存在两个相切但不相交的圈(“0”冒险是1构成的圈,“1”冒险是0构成的圈),就会产生冒险。处理方法:1)修改设计法: a、代数法,在产生冒险现象的逻辑表达式上,加上冗余项或乘上冗余因子;b、卡诺图法,将卡诺图中相切的圈用一个多余的圈连接起来。2)选通法: 在电路中加入选通信号,在输出信号稳定后,选通允许输出,从而产生正确输出;3)滤出法: 由于冒险脉冲是一个非常窄的脉冲,一二可以在输出端接一个几百微法的电容,将其滤出掉。3、TTL与CMOS兼容问题由于电路相互之间的电源电压和输入、输出电平及负载能力等参数不同,因此他们之间的连接必须通过电平转换或电流转换电路,使前级器件的输出的逻辑电平满足后级器件对输入电平的要求,并不得对器件造成损坏。逻辑器件的接口电路主要应注意电平匹配和输出能力两个问题,并与器件的电源电压结合起来考虑。1)到的连接需要进行电流匹配。2)到的连接需要进行电压匹配。4、EDA的烧写方式1)按计算机接口:串口下载,并口下载,USB口下载等方式2)按器件:CPLD编程,FPGA下载,存储器编程EPC1、EPC2等。5、同步电路与异步电路的判断1)同步电路是说电路里的时钟相互之间是同步的。2)异步电路主要是组合逻辑电路,没有统一的时钟。所以只要判断时钟是否同步,就可分辨同步或者异步。6、EDA的一些专业名称:如FPGA、ASIC等EDA: Electronic Design Automation电子设计自动化FPGA:FieldProgrammable Gate Array现场可编程门阵列ASIC:Application Specific Integrated Circuit专用集成电路CPLD: Complex Programmable Logic Device复杂可编程逻辑器件7. Verilog 与VHDL的区别和使用的范围区别:1)Verilog拥有更广泛的设计群体,成熟的资源也比VHDL丰富;2)与VHDL相比,Verilog HDL容易掌握,与C语言类似。3)2005年以前,Verilog在系统级抽象方面比VHDL略差一些,而在门级开关电路描述方面比VHDL强的多。2005年后,系统抽象能力得到彻底改变。使用范围:进行各种级别的逻辑设计,可用它进行数字逻辑系统的仿真验证、时序分析、逻辑综合。8. 组合电路与时序电路的表达组合电路:这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign结构。注意equal=(a=b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。模块源代码:/- compare.v -module compare(equal,a,b);input a,b;output equal; assign equal=(a=b)?1:0; /a等于b时,equal输出为1;a不等于b时, /equal输出为0。endmodule时序电路: 在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。在可综合的Verilog HDL模型,我们通常使用always块和 (posedge clk)或 (negedge clk)的结构来表述时序逻辑。下面是一个1/2分频器的可综合模型。 / half_clk.v:module half_clk(reset,clk_in,clk_out);input clk_in,reset;output clk_out;reg clk_out;always (posedge clk_in) begin if(!reset) clk_out=0; else clk_out=clk_out; endendmodule9. 同步复位与异步复位的表达同步复位:同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用Verilog描述如下: always (posedge clk) begin if (!Rst_n) . end 异步复位:它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。用Verilog描述如下: always (posedge clk or negedge Rst_n) begin if (!Rst_n) end10. 时间尺度timescale的用法用timescale编译器指令将时间单位与实际时间相关联。该指令用于定义时延的单位和时延精度。Eg:timescale 1ns/1ps;在这个命令之后,模块中所有的时间值都表示是1ns的整数倍。这是因为在timescale命令中,定义了时间单位为1ns模块中的延迟时间可表示为带3位小数的实型数,因为timescale命令定义时间精度为1ps。11. verilog几种数据类型数据类型是用来表示数字电路硬件中的数据储存和传送元素的Verilog HDL中总共有19种数据类型常用类型有4种:Wire 线网型变量Reg 寄存器型变量,据有记忆性。Integer 32位有符号整型变量Parameter 在Verilog HDL中为了提高程序的可读性和维护性,用Parameter来定义一个标识符代表一个常量,称为符号常量。12. initial与always的区别1)initial语句指定的内容只执行一次,initial语句主要用于仿真测试,不能进行逻辑综合。而always语句则是不断地重复执行着的,直到仿真过程结束,在仿真和逻辑综合中均可使用。2)无条件的always语句是不允许的。13. verilog语言的一些语法(看课件吧)14、阻塞与非阻塞(课件)1)非阻塞(non_blocking)赋值方式“”: (1)在语句块中,上面语句所赋的变量值不能立即就为下面的语句所用; (2)块结束后才完成赋值操作,块结束前被赋值的变量保持上一次所赋的值; (3)在编写可综合的时序逻辑模块时,这是最常用的赋值方法。意即,在always块中经常使用。2)阻塞(blocking)赋值方式“”:(1)赋值语句执行完后,块才结束;(2)b的值在赋值语句执行完后立刻就改变;(3)在时序逻辑中使用时(在沿触发的always块中使用时),综合后可能会产生意想不到的结果。14、阻塞与非阻塞(课本)1)阻塞赋值在该语句结束时就立即完成赋值操作,如果在一个块语句中有多条阻塞赋值语句,那么写在前面的赋值语句没有完成之前,后面的语句就不能被执行,仿佛被阻塞了一样,因而被称为阻塞赋值。连续的阻塞赋值操作时顺序完成的。2)非阻塞赋值在整个过程块结束后才完成赋值操作。这是一种比较接近真实的电路赋值和输出,以为它从综合的角度考虑到了延时和并行性。如果在一个块语句中有多条非阻塞赋值语句,在过程块被启动后,当执行某条非阻塞赋值语句是,仅仅计算“=”右侧的表达式的值,但并不马上执行赋值,然后继续执行后面的操作,这个过程好像没有阻断侧程序的运行,因而被称为非阻塞赋值,连续的非阻塞赋值操作是同时完成的,即在同一个顺序块中,非阻塞赋值表达式的书写顺序,不影响赋值结果。编程1. 分频器编程1)偶数分频,更改n的值(问题:输出存在延时,望求解)module clk_div(clk, reset, clk_out);input clk;input reset;output clk_out;reg clk_out;reg 3:0 count;parameter n=6;always (posedge clk)begin if (!reset) begincount=0; end else begin if (count=(n/2)-1) begincount=0;clk_out=clk_out; endelse begincount=count+1b1; end end endendmodule2)奇数分频,更改n 的值module clk_div(clkout,inclk,reset);output clkout;input inclk;input reset;parameter n=5;wire clkout;reg clk_p,clk_n;reg 3:0count_p,count_n;always(posedge inclk )beginif(!reset)beginclk_p=0;count_p=0; endelsebegin if(count_p=n-1)count_p=0; elsecount_p=count_p+1b1;if(count_p(n-1)/2)clk_p=1;else clk_p=0;endendalways(negedge inclk )beginif(!reset)beginclk_n=0;count_n=0; endelsebegin if(count_n=n-1)count_n=0; elsecount_n=count_n+1b1;if(count_n(n-1)/2)clk_n=1;else clk_n=0;endend assign clkout=clk_n|clk_p;endmodule2. 状态机编程(同时区分moore与mealy型)moore状态机的输出只和当前状态有关,不与当前输入有关,也就是说当前状态的次态唯一,实现了输入与输出的分离,在一个时钟周期内,无论输入变化几次,输出之变化一次;mealy状态机的输出不仅和当前状态有关,还和当前的输入状态有关,当前状态会根据不同输入而有不同输出,次态不唯一。(课件中的例子)module fsm (Clock, Reset, A, K2, K1);input Clock, Reset, A;output K2, K1;reg K2, K1;reg 1:0 state, nextstate ;parameter Idle = 2b00, Start = 2b01, Stop = 2b10, Clear = 2b11;/- 每一个时钟沿产生一次可能的状态变化- always (posedge Clock) begin if (!Reset) state = Idle; else state = nextstate; end/- 产生下一状态的组合逻辑 - always (state or A) case (state) Idle: if (A) nextstate = Start; else nextstate = Idle; Start: if (!A) nextstate = Stop; else nextstate = Start; Stop: if (A) nextstate = Clear; else nextstate = Stop; Clear: if (!A) nextstate = Idle; else nextstate = Clear; default: nextstate =2bxx; endcase/- 产生输出K1的组合逻辑 -always (state or Reset or A) if (!Reset) K1=0; else if (state = Clear & !A) /从Clear转向 Idle K1=1; else K1= 0; /- 产生输出K2的组合逻辑 -always (state or Reset or A ) if (!Reset) K2 = 0; else if (state = Stop & A) / 从Stop转向 Clear K2 = 1; else K2 = 0; endmodule3. 关于数字锁存器与触发器的编程(百度的)1)用Verilog HDL描述一个简单的锁存器。该锁存器在控制信号i_en为高电平时开启,为低电平时锁存当前值。module latch ( input i_en, input i_din, output reg o_dout ); / 敏感列表中没有边沿触发的信号always (i_din or i_en)if (i_en) o_dout = i_din; / 没有与if语句对应的else语句,生成锁存器,否则生成组合逻辑。Endmodule2)/基本D触发器module D_EF(Q,D,CLK)input D,CLK;output Q;reg Q; /在always语句中被赋值的信号要声明为reg类型 寄存器定义always (posedge CLK) /上升沿,下降沿用negedge表示,_ 需要记忆 begin Q = D; endendmodulejk触发器moduleJ_K1(clk,j,k,Q);inputclk;inputj,k;outputQ;regQ;always(posedgeclk)Q=j&(Q)|(k)&Q;endmodule实验程序偶数分频:module clk_oushu(reset,clk_in,clk_out);input clk_in,reset;output clk_out;reg clk_out;reg 3:0 count;parameter n=6; 设置n为偶数为n分频always (posedge clk_in)begin if(!reset)count=1b0;else if(count=n/2-1) beginclk_out=clk_out;count=1b0; end else count=count+1b1;endendmodule奇数分频:(未设置占空比)module clk_js(reset,clk_in,clk_out);input reset,clk_in;output clk_out;reg clk_out;reg 7:0 count;parameter n=15; 设置n为奇数为n分频always (posedge clk_in)begin if(!reset)begin clk_out=1b0; count=1b0;end else begin if(count=n-1)begincount=1b0;clk_out=1b0;endelsebegin count=count+1b1; if(count=(n-1)/2) clk_out=1b1; end endendendmodule奇数分频(占空比为50%):module clk_jishu(reset,clk_in,clk_out);input reset,clk_in;output clk_out;wire clk_out;reg clk_out1,clk_out2;reg 7:0 count1,count2;parameter n=7; 设置n为奇数为n分频always (posedge clk_in)begin if(!reset)begincount1=1b0;clk_out1=1b0;end else begin if(count1=n-1) begincount1=1b0;clk_out1=1b0; endelse begin count1=count1+1b1; if(count1=0)clk_out1=1b1;if(count1=(n-1)/2) clk_out1=1b0;end endendalways (negedge clk_in)begin if(!reset)begincount2=1b0;clk_out2=1b0;end else begin if(count2=n-1) begincount2=1b0;clk_out2=1b0; endelse begin count2=count2+1b1; if(count2=0)clk_out2=1b1;if(count2=(n-1)/2) clk_out2=1b0;end endendassign clk_out=clk_out1|clk_out2;endmodule计数器:module count_n(clr,en,clk_in,count,c);input clr,en,clk_in;output c;output 7:0 count;reg c;reg 7:0 count;parameter n=60; 设置n为模60的计数器always (posedge clk_in)beginif(clr)begincount=1b0;c=0;endelse beginif(en)begincount=n-1)begincount=1b0;c=1b1;endelsec=1b0;endendendendmodule状态机(moore型即输出只与现态有关,而状态的改变(次态)跟现态和输入条件有关): 串行数据1101检测module moore_fsm(data_in,reset,data_out,clk_in);input data_in,reset,clk_in;output data_out; data_in为输入条件reg data_out; data_out为输出reg 4:0 prse_state,next_state; prse_state为现态,parameter next_state为下一个状态s0=5b00001,s1=5b00010,s2=5b00100,s3=5b01000,s4=5b10000;always (posedge clk_in) 用于复位begin if(!reset) prse_state=s0; else prse_state=next_state;endalways (prse_state or data_in)次态的产生跟现态和输入有关begin case(prse_state) s0:if(data_in) next_state=s1; else next_state=s0; s1:if(data_in) next_state=s2; else next_state=s0; s2:if(!data_in) next_state=s3; else next_state=s2; s3:if(data_in) next_state=s4; else next_state=s0; s4:if(data_in) next_state=s2; else next_state=s0; default: next_state=5bxxxxx; endcaseendalways (prse_state) 产生输出:输出只与现态有关begin case(prse_state) s0: data_out=1b0; s1: data_out=1b0; s2: data_out=1b0; s3: data_out=1b0; s4: data_out=1b1; default: data_out=1b0; endcaseendendmodule状态机(mealy型即输出与现态和输入都有关,而状态的改变(次态)跟现态和输入条件也有关):module mealy_fsm(reset,A,clk_in,k2,k1); input reset,A,clk_in;output k2,k1;reg k2,k1; k2,k1为输出reg 1:0 prse_state,next_state; prse_state为现态,parameter next_state为下一个状态Idle=2b00,start=2b01,stop=2b10,clear=2b11;always (posedge clk_in) 用于复位begin if(!reset) prse_state=Idle; else prse_state=next_state;endalways (prse_state or A) 次态的产生跟现态和输入有关begin case(prse_state) Idle:if(A) next_state=start; else next_state=Idle; start:if(!A) next_state=stop; else next_state=start; st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论