verilog_数字系统设计教程_夏宇闻第二版答案
- 格式:pdf
- 大小:7.14 MB
- 文档页数:43
verilog 数字系统设计教程习题答案第二章HDL 既是一种行为描述语言,也是一种结构描述语言。
如果按照一定的规则和风格编写代码,就可以将功能行为模块通过工具自动转化为门级互联的结构模块。
这意味着利用Verilog 语言所提供的功能,就可以构造一个模块间的清晰结构来描述复杂的大型设计,并对所需的逻辑电路进行严格的设计。
2.模块的基本结构由关键词module和endmodule构成。
3.一个复杂电路系统的完整Verilog HDL 模型是由若干个VerilogHDL模块构成的,每一个模块又可以由若干个子模块构成。
其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或激励信号源。
利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计,并对所作设计的逻辑电路进行严格的验证。
HDL和VHDL乍为描述硬件电路设计的语言,其共同的特点在于:能形式化地抽象表示电路的结构和行为、支持逻辑设计中层次与领域的描述、可借用高级语言的精巧结构来简化电路的描述、具有电路仿真与验证机制以保证设计的正确性、支持电路描述由高层到低层的综合转换、硬件描述与实现工艺无关(有关工艺参数可通过语言提供的属性包括进去)、便于文档管理、易于理解和设计重用。
5.不是6.将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
7.综合工具可以把HDL变成门级网表。
这方面Synopsys工具占有较大的优势,它的Design Compile 是作为一个综合的工业标准,它还有另外一个产品叫Behavior Compiler ,可以提供更高级的综合。
另外最近美国又出了一个软件叫Ambit ,据说比Synopsys 的软件更有效,可以综合50万门的电路,速度更快。
今年初Ambit 被Cadence 公司收购,为此Cade nee放弃了它原来的综合软件Syn ergy。
verilog数字系统设计教程习题答案第二章1.Verilog HDL 既是一种行为描述语言,也是一种结构描述语言。
如果按照一定的规则和风格编写代码,就可以将功能行为模块通过工具自动转化为门级互联的结构模块。
这意味着利用Verilog语言所提供的功能,就可以构造一个模块间的清晰结构来描述复杂的大型设计,并对所需的逻辑电路进行严格的设计。
2.模块的基本结构由关键词module和endmodule构成。
3.一个复杂电路系统的完整Verilog HDL模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。
其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或激励信号源。
利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计,并对所作设计的逻辑电路进行严格的验证。
4.Verilog HDL和VHDL作为描述硬件电路设计的语言,其共同的特点在于:能形式化地抽象表示电路的结构和行为、支持逻辑设计中层次与领域的描述、可借用高级语言的精巧结构来简化电路的描述、具有电路仿真与验证机制以保证设计的正确性、支持电路描述由高层到低层的综合转换、硬件描述与实现工艺无关(有关工艺参数可通过语言提供的属性包括进去)、便于文档管理、易于理解和设计重用。
5.不是6.将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
7.综合工具可以把HDL变成门级网表。
这方面Synopsys工具占有较大的优势,它的Design Compile是作为一个综合的工业标准,它还有另外一个产品叫Behavior Compiler,可以提供更高级的综合。
另外最近美国又出了一个软件叫Ambit,据说比Synopsys的软件更有效,可以综合50万门的电路,速度更快。
今年初Ambit被Cadence公司收购,为此Cadence 放弃了它原来的综合软件Synergy。
1.使用assign和deassign语句,设计一个带异步clear (q = 0)和preset (q = 1)端口的由上升沿触发的D触发器。
答:代码如下:module my_dff(q,d,clock,clear,preset);output q;input d,clock,clear,preset;reg q;always @(posedge clock)beginq=d;endalways @(clear or preset)if(clear)assign q=1'b0;else if (preset)assign q=1'b1;elsedeassign q;endmodule仿真输出如下:2.使用基本逻辑门设计一个一位全加器FA。
在激励模块中调用这个全加器。
在15至35个时间单位之间强迫输出值sum为a & b & c_in。
答:代码及激励模块见chapter9.v。
仿真输出如下,在15ns时,输出变化,在35ns时,由于和值与强迫输出值相同,故没有变化。
Verilog HDL 数字设计与综合(第二版)126 3.由逻辑门定义的带延迟参数的一位全加器FA ,如下面的模块所示:定义一个如例5.8所示的四位全加器fulladd4,使用本书中讨论的两种方法,传送下表所示的参数值给所引用的实例:实 例 延 迟 值 fa0 d_sum = 1, d_cout = 1 fa1 d_sum = 2, d_cout = 2 fa2 d_sum = 3, d_cout = 3 fa3d_sum = 4, d_cout = 4a .编写fulladd4模块,用defparam 语句改变实例参数的值。
使用例5.9中的激励文件对这个四位全加器进行仿真。
解释全加器的结果延迟,什么时候出现加法器的输出(在该激励文件中使用20作为延迟值,而不是用5)。
b .编写fulladd4模块,把延迟值传送到调用的实例fa0,fa1,fa2和fa3中。
绪论1.什么是信号处理电路?它通常由哪两大部分组成?信号处理电路是进行一些复杂的数字运算和数据处理,并且又有实时响应要求的电路。
它通常有高速数据通道接口和高速算法电路两大部分组成。
2.为什么要设计专用的信号处理电路?因为有的数字信号处理对时间的要求非常苛刻,以至于用高速的通用处理器也无法在规定的时间内完成必要的运算。
通用微处理器芯片是为一般目的而设计的,运算的步骤必须通过程序编译后生成的机器码指令加载到存储器中,然后在微处理器芯片控制下,按时钟的节拍,逐条取出指令分析指令和执行指令,直到程序的结束。
微处理器芯片中的内部总线和运算部件也是为通用目的而设计,即使是专为信号处理而设计的通用微处理器,因为它的通用性也不可能为某一特殊的算法来设计一系列的专用的运算电路而且其内部总线的宽度也不能随便的改变,只有通过改变程序,才能实现这个特殊的算法,因而其算法速度也受到限制所以要设计专用的信号处理电路。
3.什么是实时处理系统?实时处理系统是具有实时响应的处理系统。
4.为什么要用硬件描述语言来设计复杂的算法逻辑电路?因为现代复杂数字逻辑系统的设计都是借助于EDA工具完成的,无论电路系统的仿真和综合都需要掌握硬件描述语言。
5.能不能完全用C语言来代替硬件描述语言进行算法逻辑电路的设计?不能,因为基础算法的描述和验证通常用C语言来做。
如果要设计一个专用的电路来进行这种对速度有要求的实时数据处理,除了以上C语言外,还须编写硬件描述语言程序进行仿真以便从电路结构上保证算法能在规定的时间内完成,并能通过与前端和后端的设备接口正确无误地交换数据。
6.为什么在算法逻辑电路的设计中需要用C语言和硬件描述语言配合使用来提高设计效率?首先C语言很灵活,查错功能强,还可以通过PLI编写自己的系统任务,并直接与硬件仿真器结合使用。
C语言是目前世界上应用最为广泛的一种编程语言,因而C程序的设计环境比Verilog HDL更完整,此外,C语言有可靠地编译环境,语法完备,缺陷缺少,应用于许多的领域。
1.声明一个名为oscillate 的寄存器变量并将它初始化为0。
使其每30 个时间单位进行一次取反操作。
不要使用always 语句。
提示:使用forever 循环。
答:代码如下:reg oscillate;initialbeginoscillate<=0;forever #30 oscillate<=~oscillate;end2.设计一个周期为40 个时间单位的时钟信号,其占空比为25%。
使用always 和initial 块进行设计。
将其在仿真0 时刻的值初始化为0。
答:代码如下:reg clock;initialclock<=0;alwaysbegin#30 clock<=1;#10 clock<=0;end3.给定下面含有阻塞过程赋值语句的initial 块。
每条语句在什么仿真时刻开始执行?a,b,c和d 在仿真过程中的中间值和仿真结束时的值是什么?答:仿真输出结果:4.在第3 题中,如果initial 块中包括的是非阻塞过程赋值语句,那么各个问题的答案是什么?答:7第7 章行为级建模9最终d 没有输出,因为d<= #20 {a,b,c};语句执行的是先将a,b,c 取值存储,在20 个时间单位后将存储的值赋给d,因为b,c 在初始时刻没有值,所以d 值也是不确定的。
5.指出在下面的Verilog 代码中各条语句的执行顺序。
其中是否含有不确定的执行顺序?a,b,c和d 的最终值是什么?答:先执行a=1’b0,b=1’b1,然后执行#0 c=b,#0 d=a,执行顺序不确定,最终输出结果a=0,b=1,c=1,d=0.6.在下面的例子中,d 的最终值是什么?答:仿真输出波形如下,最终输出结果d=1。
0 时刻b|c 的值是1,在25 个时间刻度后赋给d。
7.使用带有同步清零端的D 触发器(清零端高电平有效,在时钟下降沿执行清零操作)设计一个下降沿触发的D 触发器,只能使用行为语句。
VerilogHDL数字设计与综合(第⼆版)第七章课后习题答案1.声明⼀个名为oscillate的寄存器变量并将它初始化为0。
使其每30个时间单位进⾏⼀次取反操作。
不要使⽤always语句。
提⽰:使⽤forever循环。
答:代码如下:reg oscillate;initialbeginoscillate<=0;forever #30 oscillate<=~oscillate;end2.设计⼀个周期为40个时间单位的时钟信号,其占空⽐为25%。
使⽤always和initial块进⾏设计。
将其在仿真0时刻的值初始化为0。
答:代码如下:reg clock;initialclock<=0;alwaysbegin#30 clock<=1;#10 clock<=0;end3.给定下⾯含有阻塞过程赋值语句的initial块。
每条语句在什么仿真时刻开始执⾏?a,b,c 和d在仿真过程中的中间值和仿真结束时的值是什么?答:仿真输出结果:4.在第3题中,如果initial块中包括的是⾮阻塞过程赋值语句,那么各个问题的答案是什么?答:第7章⾏为级建模79最终d没有输出,因为d<= #20 {a,b,c};语句执⾏的是先将a,b,c取值存储,在20个时间单位后将存储的值赋给d,因为b,c在初始时刻没有值,所以d值也是不确定的。
5.指出在下⾯的Verilog代码中各条语句的执⾏顺序。
其中是否含有不确定的执⾏顺序?a,b,c和d的最终值是什么?答:先执⾏a=1’b0,b=1’b1,然后执⾏#0 c=b,#0 d=a,执⾏顺序不确定,最终输出结果a=0,b=1,c=1,d=0. 6.在下⾯的例⼦中,d的最终值是什么?答:仿真输出波形如下,最终输出结果d=1。
0时刻b|c的值是1,在25个时间刻度后赋给d。
7.使⽤带有同步清零端的D触发器(清零端⾼电平有效,在时钟下降沿执⾏清零操作)设计⼀个下降沿触发的D触发器,只能使⽤⾏为语句。
1.声明一个名为oscillate 的寄存器变量并将它初始化为0。
使其每30 个时间单位进行一次取反操作。
不要使用always 语句。
提示:使用forever 循环。
答:代码如下:reg oscillate;initialbeginoscillate<=0;forever #30 oscillate<=~oscillate;end2.设计一个周期为40 个时间单位的时钟信号,其占空比为25%。
使用always 和initial 块进行设计。
将其在仿真0 时刻的值初始化为0。
答:代码如下:reg clock;initialclock<=0;alwaysbegin#30 clock<=1;#10 clock<=0;end3.给定下面含有阻塞过程赋值语句的initial 块。
每条语句在什么仿真时刻开始执行?a,b,c和d 在仿真过程中的中间值和仿真结束时的值是什么?答:仿真输出结果:4.在第3 题中,如果initial 块中包括的是非阻塞过程赋值语句,那么各个问题的答案是什么?答:7第7 章行为级建模9最终d 没有输出,因为d<= #20 {a,b,c};语句执行的是先将a,b,c 取值存储,在20 个时间单位后将存储的值赋给d,因为b,c 在初始时刻没有值,所以d 值也是不确定的。
5.指出在下面的Verilog 代码中各条语句的执行顺序。
其中是否含有不确定的执行顺序?a,b,c和d 的最终值是什么?答:先执行a=1’b0,b=1’b1,然后执行#0 c=b,#0 d=a,执行顺序不确定,最终输出结果a=0,b=1,c=1,d=0.6.在下面的例子中,d 的最终值是什么?答:仿真输出波形如下,最终输出结果d=1。
0 时刻b|c 的值是1,在25 个时间刻度后赋给d。
7.使用带有同步清零端的D 触发器(清零端高电平有效,在时钟下降沿执行清零操作)设计一个下降沿触发的D 触发器,只能使用行为语句。
设计示范和上机习题练习一.简单的组合逻辑设计//(方法一)://---------------文件名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//(方法二):module compare(equal,a,b);input a,b;output equal;reg equal;always @(a or b)if(a==b) //a等于b时,equal输出为1;equal =1;else //a不等于b时,equal输出为0。
equal = 0; //思考:如果不写else 部分会产生什么逻辑?endmodule//-------------------------------------------------------------//----------测试模块源代码(方法之一):`timescale 1ns/1ns // 定义时间单位。
`include "./compare.v" //包含模块文件。
在有的仿真调试环境中并不需要此语句。
//而需要从调试环境的菜单中键入有关模块文件的路径和名称module t;reg a,b;wire equal;initial // initial常用于仿真时信号的给出。
begina=0;b=0;#100 a=0; b=1;#100 a=1; b=1;#100 a=1; b=0;#100 a=0; b=0;#100 $stop; //系统任务,暂停仿真以便观察仿真波形。
endcompare m(.equal(equal),.a(a),.b(b)); //调用被测试模块t.mendmodule//---------- 测试模块源代码(方法之二):-------------------------`timescale 1ns/1ns // 定义时间单位。
10.6 习题1.在下列电路中用到了哪种类型的延迟模型?给模块Y 写Verilog 描述。
答:用到了分布延迟。
V erilog 描述如下:module Y(out,m,n,p,q); output out; input m,n,p,q;wire e,f;or #11 a1(e,m,n); and #8 a2(f,p,q); or #4 a3(out,e,f);endmodule2.在模块中用最大延迟把电路转换成集总延迟模型。
用集总延迟模型重写模块Y 的Verilog描述。
答:代码如下:module Y(out,m,n,p,q);output out; input m,n,p,q;wire e,f;or a1(e,m,n); and a2(f,p,q); or #15 a3(out,e,f);endmodule3.计算习题1中的电路的每条输入到输出路径的延迟。
使用路径延迟模型写V erilog 描述。
使用outY第10章时序和延迟145答:代码如下:module Y(out,m,n,p,q);output out;input m,n,p,q;wire e,f;specify(m=>out) =15;(n=>out) =15;(p=>out) =12;(q=>out) =12;endspecifyor a1(e,m,n);and a2(f,p,q);or a3(out,e,f);endmodule4.考虑下图所示的负边沿触发的异步复位D触发器。
写模块D_FF的V erilog描述,只给出输入/输出端口和路径延迟说明。
使用并行连接描述路径延迟。
V erilog HDL 数字设计与综合(第二版)146答:代码如下module D_FF(q,qbar,d,clock,reset); output q,qbar; input d,clock,reset; reg q,qbar;//bit to bit specify(d=>q) =5; (clock=>q) =6; (reset=>q) =2; (d=>qbar) =5; (clock=>qbar) =7; (reset=>qbar) =3; endspecifyendmodule5.假设所有路径延迟是5个单位时间,修改习题4中的D 触发器。