第1章习题
1.1 名词解释
PROM  CPLD  FPGA  ASIC
JTAG边界扫描  FPGA/CPLD编程与配置  逻辑综合
PAL  EDA  GAL  IP-CORE  ISP  ASIC  RTL FPGA  SOPC CPLD
IP-CORE  SOC和SOPC  EDA/CAD
1.2 现代EDA技术的特点有哪些?
采用HDL描述、自顶向下、开放标准、具有完备设计库
1.3 什么是Top-down设计方式?(P4)
1.4  数字系统的实现方式有哪些?各有什么优缺点?
74LS系列/4000系列常规逻辑门设计:设计难度大、调试复杂
采用CPLD/FPGA等可编程器件来设计:用HDL描述、设计难度小、
调试仿真方便,开发费用低,
但单位成本较高,适合小批量应用
专用集成电路设计:设计掩模成本高,适合大批量应用
1.5什么是IP复用技术?IP核对EDA技术的应用和发展有什么意义?
(P5)
    IP可重复使用的一种功能设计,可节省设计时间、缩短开发周期,
避免重复劳动为大规模SOC设计提供开发基础、和开发平台。
1.6  用硬件描述语言设计数字电路有什么优势?
优势:可进行行为级、RTL级、门级多层面对电路进行描述、
可功能仿真时序分析,与工艺无关。
1.8  基于FPGA/CPLD的数字系统设计流程包括哪些步骤?
(P8 图1.7)
1.9  什么是综合?常用的综合工具有哪些?
HDL RTL 门级 网表的描述转换过程
ALTERA:MAX-PLUSII,Quartus, Xilinx:ISE , Lattice: ispLERVER
1.10  功能仿真与时序仿真有什么区别?
    功能仿真不考虑器件延时,而时序分析必须考虑在不同器件中的物理信号的延时
1.11 数字逻辑设计描述分哪几个层级,各有什么特点。
1.12、为何任意组合逻辑电路可用通用的与阵列、或阵列组合来实现。
    可表示为布尔代数方程,由乘积项的和表示
1.13 FPGA与CPLD在实现方式或部结构上的主要区别
    查表、与或阵列
1.14 VerilogHDL与计算机程序设计语言主要区别
(描述并行电路行为或结构、描述的串行指令流)
1.15 简述“逻辑综合”功能作用。
1.16 数字系统描述有哪些层级,各有什么特点,用硬件描述语言设计数字电路有什么优势?
第2章习题
2.1  从器件的或阵列编程结构角度看,PROM、PLA、PAL、GAL在结构上有什么区别?
2.2  说明PAL、GAL的输出单元有何特点,它怎样实现可编程组合电路和时序电路?
PAL、GAL输出单元都有一个触发器,
实现组合逻辑时触发器被旁路掉,
实现时序单路是则从触发器输出信号。
2.3  简述基于乘积项的可编程逻辑器件的结构特点?
    PAL、GAL是乘积项可编程,或阵列固定的PLD器件,
送到或门的乘积项是固定的,大大简化了器件设计算法
2.4  基于查表的可编程逻辑结构的原理是什么?
P31
文字解释
2.5  基于乘积项和基于查表的结构各有什么优缺点?
基于乘积项的适合用于设计一些逻辑型电路、电路规模较小
而基于查表结构适合设计数据型电路,电路规模较大,
用于逻辑型电路设计会有延时不确定等问题。
16进制
2.6  CPLD和FPGA在结构上有什么明显的区别,各有什么特点?
  CPLD是基于乘积项可编程的,适合用于设计一些逻辑型电路、电路规模较小
FPGA是基于查表的,适合设计数据型大规模系统
2.7  FPGA器件中的存储器块有何作用?
    FPGA存储器用于存储每种逻辑输入对应的需要输出逻辑真值表。
2.8简要说明JTAG边界扫描概念及作用。
2.9 简述FPGA配置、CPLD编程概念及其异同点。
第3章习题
3-1  基于Quartus II软件,用D触发器设计一个2分频电路,并做波形仿真,在此基础上,设计一个4分频和8分频电路,做波形仿真。
3-2  基于Quartus II软件,用7490设计一个能计时(12小时)、计分(60分)和计秒(60秒)
的简单数字钟电路。设计过程如下:
(1)先用Quartus II的原理图输入方式,用7490连接成包含进位输出的模60的计数器,并进行仿真,如果功能正确,则将其生成一个部件;
(2)将7490连接成模12的计数器,进行仿真,如果功能正确,也将其生成一个部件;
(3)将以上两个部件连接成为简单的数字钟电路,能计时、计分和计秒,计满12小时后系统清0重新开始计时。
(4)在实现上述功能的基础上可以进一步增加其它功能,比如校时功能,能随意调整小时、分钟信号,增加整点报时功能等。
3-3  基于Quartus II软件,用74161设计一个模99的计数器,个位和十位都采用8421BCD码的编码方式设计,分别用置0和置1两种方法实现,完成原理图设计输入、编译、仿真和下载整个过程。
3-4  基于Quartus II软件,用7490设计一个模71计数器,个位和十位都采用8421BCD码的编码方式设计,完成原理图设计输入、编译、仿真和下载整个过程。
3-5  基于Quartus II,用74283(4位二进制全加器)设计实现一个8位全加器,并进行综合和仿真,查看综合结果和仿真结果
3-6  基于Quartus II,用74194(4位双向移位寄存器)设计一个“00011101”序列产生器电路,进行编译和仿真,查看仿真结果。
3-7  基于Quartus II软件,用D触发器和适当的门电路实现一个输出长度为15的m序列产生器,进行编译和仿真,查看仿真结果。
第4章习题
4.1  用Verilog设计一个8位加法器,并进行综合和仿真,查看综合结果和仿真结果。
4.2  用Verilog设计一个8位计数器,并进行综合和仿真,查看综合结果和仿真结果。
第5章习题
5.1 下列标识符哪些是合法的,哪些是错误的?
Cout, 8sum, \a*b, _data, \wait, initial, $latch
5.2 下列数字的表示是否正确?
6'd18, 'Bx0, 5'b0x110, 'da30, 10'd2, 'hzF
5.3 reg型与wire型变量有什么本质区别
5.4 wire型变量没有驱动其值为多少
5.5 reg型初始值一般为多少
5.6  定义如下的变量和常量:
(1)定义一个名为count的整数;            integer count;
(2)定义一个名为ABUS的8位wire总线;  wire[7:0] ABUS;
(3)定义一个名为address的16位reg型变量,并将该变量的值赋为十进制数128;
    reg[15:0] address;    address<=16’d128;
(4)定义参数Delay_time, 参数值为8;
parameter Delay_time =8;
(5)定义一个名为DELAY的时间变量;
    integer DELAY;
(6)定义一个32位的寄存器MYREG;
    reg[31:0] MYREG;
(7)定义一个容量为128,字长为32位的存储器MYMEM;
    reg[32-1:0] MYREG[128];
5.8 .举例列出Verilog整数(Integer)2进制、8进制、16进制常量。
    P123
5.9  net型数据类型有哪些?
    wire  tri
5.10 给出reg型、和integer型变量Variable定义示例程序
(p126)
5.11 Verilog向量与标量的定义
    wire a; wire[3:0] b;
第6章习题
6.1  试编写求补码的Verilog程序,输入是带符号的8位二进制数。
module  negCode(out,in);
output reg[7:0]  out;
reg[7:0] a;
input wire[7:0]  in;
integer i;
always (in[0]or in[1] or in[2]or in[3] or in[4]or in[5] or in[6]or in[7])
begin
if(in[7]) begin 
for(i=0;i<7;i++) a[i]=~in[i];
a[7]=in[7];
out=a+1;
end
    else  out=in;
end 
endmodule
6.2  试编写两个四位二进制数相减的Verilog程序。(参考P175,例7.18)
6.3  有一个比较电路,当输入的一位8421BCD码大于4时,输出为1,否则为0。试编写出Verilog程序。(参考P147,例6.13)
6.4  用CASE语句试编写一个表决电路,同意为输入1,不同意输入0,同意过半数(>=5)表决通过亮绿灯,不通过亮红灯。(P149,例6.16)
6.5简述wire变量基本语法定义及用途(第6章)
6.6 简述阻塞性赋值与非阻塞型赋值的区别(P163、6.8节)
6.7 解释说明下列代码中的always、case语句的语法及所描述行为(P138例6.1)
module  mux4_1(out,in0,in1,in2,in3,sel);
output  out;
input  in0,in1,in2,in3;
input[1:0]  sel;
reg  out;
always (in0 or in1 or in2 or in3 or sel)  //敏感信号列表
case(sel)
  2'b00:    out=in0;
  2'b01:    out=in1;
  2'b10:    out=in2;
  2'b11:    out=in3;
  default: out=2'bx;
endcase
endmodule
6.8 解释说明下列代码中的posedge和negedge关键字的作用和基本功能。
module count(out,data,load,reset,clk); //8位同步置数、同步清零的计数器模块
output[7:0] out;
input[7:0] data;
input load,clk,reset;