1、Verilog 复习题一、填空题1. 用 EDA 技术进行电子系统设计的目标是最终完成 ASIC 的设计与实现。2. 可编程器件分为 CPLD 和 FPGA。3. 随着 EDA 技术的不断完善与成熟,自顶向下的设计方法更多的被应用于 Verilog HDL设计当中。4. 目前国际上较大的 PLD 器件制造公司有 ALtera 和 Xilinx 公司。5. 完整的条件语句将产生组合电路,不完整的条件语句将产生时序电路。6. 阻塞性赋值符号为 = ,非阻塞性赋值符号为 = 。7有限状态机分为 Moore 和 Mealy 两种类型。8、EDA 缩写的含义为 电子设计自动化 (Electronic D
2、esign Automation)9状态机常用状态编码有二进制、格雷码和独热码。10Verilog HDL 中任务可以调用其他任务和函数。11系统函数和任务函数的首字符标志为 $ ,预编译指令首字符标志为 # 。12可编程逻辑器件的优化过程主要是对速度和资源的处理过程。13、大型数字逻辑电路设计采用的 IP 核有软 IP、固 IP 和硬 IP。二、选择题1、已知 “a =1b1; b=3b001;”那么a,b( C )(A) 4b0011 (B) 3b001 (C) 4b1001 (D) 3b101 2、在 verilog 中,下列语句哪个不是分支语句?( D ) (A) if-else (B
3、) case (C) casez (D) repeat 3、Verilog HDL 语言进行电路设计方法有哪几种(8 分) 自上而下的设计方法(Top-Down) 自下而上的设计方法(Bottom-Up)综合设计的方法4、在 verilog 语言中,a=4b1011,那么 2)input P,Q,R3:0;3)input P3:0,Q3:0,R3:0;4)input 3:0 P,3:0Q,0:3R;5)input 3:0 P,Q,R;11、请根据以下两条语句的执行,最后变量 A 中的值是_。reg 7:0 A;A=2hFF; 8b0000_0011 8h03 8b1111_1111 8b111
4、11111三、简答题1、简要说明仿真时阻塞赋值与非阻塞赋值的区别非阻塞(non-blocking)赋值方式 ( b= a):b 的值被赋成新值 a 的操作, 并不是立刻完成的,而是在块结束时才完成;块内的多条赋值语句在块结束时同时赋值;硬件有对应的电路。阻塞(blocking)赋值方式 ( b = a):b的值立刻被赋成新值 a;完成该赋值语句后才能执行下一句的操作;硬件没有对应的电路,因而综合结果未知。阻塞赋值是在该语句结束是立即完成赋值操作;非阻塞赋值是在整个过程块结束是才完成赋值操作。2、简述有限状态机 FSM 分为哪两类?有何区别?有限状态机的状态编码风格主要有哪三种?根据内部结构不同
5、可分为摩尔型状态机和米里型状态机两种。摩尔型状态机的输出只由当前状态决定,而次态由输入和现态共同决定;米里型状态机的输出由输入和现态共同决定,而次态也由输入和现态决定。状态编码主要有三种:连续二进制编码、格雷码和独热码。3、简述基于数字系统设计流程包括哪些步骤?包括五个步骤:、设计输入:将设计的结构和功能通过原理图或硬件描述语言进行设计或编程,进行语法或逻辑检查,通过表示输入完成,否则反复检查直到无任何错误。、逻辑综合:将较高层的设计描述自动转化为较低层次描述的过程,包括行为综合,逻辑综合和版图综合或结构综合,最后生成电路逻辑网表的过程。、布局布线:将综合生成的电路网表映射到具体的目标器件中,
6、并产生最终可下载文件的过程。、仿真:就是按照逻辑功能的算法和仿真库对设计进行模拟,以验证设计并排除错误的过程,包括功能仿真和时序仿真。、编程配置:将适配后生成的编程文件装入到 PLD 器件的过程,根据不同器件实现编程或配置。4、简述 Verilog HDL 编程语言中函数与任务运用有什么特点?函数和任务都能独立完成相应电路功能,通过在同一模块中的调用实现相应逻辑电路功能。但它们又有以下不同:、函数中不能包含时序控制语句,对函数的调用,必须在同一仿真时刻返回。而任务可以包含时序控制语句,任务的返回时间和调用时间可以不同。、在函数中不能调用任务,而任务中可以调用其它任务和函数。但在函数中可以调用其
7、它函数或函数自身。、函数必须包含至少一个端口,且在函数中只能定义 input 端口。任务可以包含 0个或任何多个端口,且可以定义 input、output 和 inout 端口。、函数必须返回一个值,而任务不能返回值,只能通过 output 或 inout 端口来传递执行结果。5、简述 FPGA 与 CPLD 两种器件应用特点。CPLD 与 FPGA 都是通用可编程逻辑器件,均可在 EDA 仿真平台上进行数字逻辑电路设计,它们不同体现在以下几方面:FPGA 集成度和复杂度高于 CPLD,所以 FPGA 可实现复杂逻辑电路设计,而CPLD 适合简单和低成本的逻辑电路设计。、FPGA 内主要由 L
8、UT 和寄存器组成,倾向实现复杂时序逻辑电路设计,而CPLD 内主要由乘积项逻辑组成,倾向实现组合逻辑电路设计。、FPGA 工艺多为 SRAM、flash 等工艺,掉电后内信息消失,所以该类型需外配存储器,而 CPLD 工艺多为 EEPROM 等工艺,掉电后信息不消失,所以不用外配存储器。、FPGA 相对 CPLD 成本高,但都可以在内都镶嵌硬核和软核,实现片上系统功能。四、计算题1、 利用有限状态机,以格雷码编译方式设计一个从输出信号序列中检测出 101 信号的电路图,其方块图、状态图和状态表如图表示。Din=0 Din=1S0=00 SO, O S1, 0S1=01 S2, 0 S1, 0
9、S2=11 S0, 0 S1, 1下 一 状 态 NS和 输 出 Qout目 前 状 态 CSmodule melay(clk,Din,reset,Qout);input clk,reset;input Din;output Qout;reg Qout;parameter1:0 S0=2b00,S1=2b01,S2=2b11;reg1:0 CS;reg1:0 NS;always (posedge clk or posedge reset)begin if(reset=1b01)CS=S0;else CS=NS;endalways (CS or Din)begincase(CS)S0:beign
10、if(Din=1b0)beginNS=S0;Qout=1b0;endelsebeginNS=S1;Qout=1b0;endendS1:beginif(Din=1b0)beginNS=S2;Qout=1b0;endelsebeginNS=S1;Qout=1b0;endendS2:beignif(Din=1b0)beginNS=S0;Qout=1b0;endelsebeginNS=S1;Qout=1b0;endendendcaseendendmodule2、 程序注解,并说明整个程序完成的功能。module AAA ( a ,b ); output a ; input 6:0 b;reg2:0 s
11、um; integer i; reg a ; always (b) begin sum = 0; for(i = 0;i=6;i = i+1) if(bi) sum = sum+1; if(sum2) a = 1; else a = 0; end endmodule 3、设计一个带有异步复位控制端和时钟使能控制端的10进制计数器。 端口设定如下: 输入端口:CLK:时钟,RST:复位端,EN:时钟使能端,LOAD:置位控制端, DIN :置位数据端; 输出端口:COUT :进位输出端,DOUT:计数输出端。module cnt10 (clk,rst,en,loat,cout,dout,data
12、);input clk ;input en ;input rst ;input load ;input 3:0 data ;output 3:0 dout ;output cout ;reg 3:0 q1 ;reg cout ;assign dout = q1;always (posedge clk or negedge rst) beginif (!rst) q1 = 0;else if (en)beginif (!loat) q1 = data;else if (q19) q1 = q1+1;else q1 = 4b0000;endendalways (q1)if (q1=4h9) cou
13、t = 1b1;else cout = 1b0;endmodule4、下面是通过 case 语句实现四选一电路部分程序,将横线上的语句补上,使程序形成完整功能。case(s1,s0)2b00:out=i0;2b01:out=i1;2b10:out=i2;2b11:out=i3;3、标注各语句功能,指出整个程序完成的电路功能。/ 带同步清 0/同步置 1(低电平有效)的 D 触发器.module dff_syn(q,qn,d,clk,set,reset); /定义模块为 diff_syn, 端口为 q,qn,d,clk,set,resetinput d,clk,set,reset; output
14、 reg q,qn; /定义端口 d,clk,set,reset 为输入端口,reg,q,qn 为输出端口always (posedge clk) /对 clk 信号上升沿有效beginif(reset) begin q=1b0;qn=1b1;end /同步清零,低电平有效else if(set) begin q=1b1;qn=1b0;end /同步置位, 低电平有效else begin q=d; qn=d; end /q 输出为 d, qn 输出为非 d;endendmodule /模块结束4、根据图 3 给定的两个 2 位全加器信号关系及实现的 4 位全加器功能部分程序,在下列部分程序中的
15、横线上填入必要语句,实现 4 位全加器的完整功能。5、根据下列给定的仿真输入输出波形图 2,说明完成此功能的电路是什么功能电路?并写出对应的 Verilog HDL 描述程序(图中 clk,clr 为输入,q,c 为输出) 。4 进制加法计数器2 位加法器aibicisumcout2 位加法器aibicisumcoutsum4(3.2)cout4a(1.0)b(1.0)cc0a(3.2)b(3.2)sum4(1.0)图 3/底层 4 位全加器程序module add2(ai,bi,ci,sum,cout);input 1:0ai,bi;input ci;output 1:0sum; reg 1
16、:0sum;output cout;reg cout;always (ai,bi,ci)cout,sum=ai+bi+ci;endmodule/顶层 8 位全加器程序module fadd4(a,b,c,sum4,cout4);input 3:0a,b;input c;output 3:0 sum4output cout4;wire c0;add4 U1( a1:0,b1:0,c,c0,sum41:0);add4 U2( a3:0,b3:0,c0,count4,sum43:0);endmodulemodule counter(clk,clr,q,c)input clk,clr;output r
17、et1:0 q;output c;always(posedge clk or negedge clr)beginif(clr) q=2h0;elsebeginif(2h3=q) q=2h0;else q=q+2h1;endendassign c=(2h3=q)endmodule6、采用结构描述方法设计一个二进制数字半加器,输入数据 ai 与 bi,并将和输出到 so,进位输出到 co,给出详细设计过程。输入 输出ai bi so co0 0 0 00 1 1 01 0 1 01 1 0 1由输入输出逻辑表达式,采用与门 and 和异或门 xor 进行结构描述的程序如下:( 6 分)module
18、 hadd (ai,bi,so,co);input ai,bi;output so,co;xor(so,si,ci); and(co,ai,bi); endmodule6、采用结构描述方法设计一个二进制数字比较器,比较输入数据 a 与 b 的大小,并分别输出到 x,y 和 z,给出详细设计过程。aibcobiaibiiaso ,bazyabx,not(not_a,a);not(not_b,b);and(ab,a,b);and(not_ab,not_a,not_b);or(x,ab,not_ab);and(y,not_a,b);and(z,a,not_b);7、采用结构描述方法设计一个 3 人竞选数字电路,输入数据2:0x,要求 2 人以上为 1 表示通过,且输出为 y 为 1,否则输出相反,给出详细设计过程。module three1(x,y); input 2:0 x; output y; y=awire a,b,c;and(a,x0,x1); and(b,x1,x2); and(c,x1,x0); or(y,a,b,c) ;endmodule