《Verilog数字系统设计教程》夏宇闻 第四版思考题答案(第5章)

这篇具有很好参考价值的文章主要介绍了《Verilog数字系统设计教程》夏宇闻 第四版思考题答案(第5章)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.为什么建议在编写Verilog模块程序时,如果用到 if 语句建议大家把配套的else情况也考虑在内?

  因为如果没有配套的else语句,在不满足if条件语句时,将会保持原来的状态不变,从而在综合时会产生一个锁存器,而这是设计不想要的结果。

2.用 if(条件1) 语句;elseif (条件2) 语句;elseif (条件3) 语句;… else 语句 和 用case_endcase 表示不同条件下的多个分支是完全相同的,还是有什么不同?

  不是完全相同。

   (1)与casc 语句中的控制表达式和多分支表达式这种比较相比,if_else_if 结构中条件表达式更为直观些。

   (2)对于那些分支表达式中存在不定值,x和高阻值z的位时case语句提供了处理这种情况的手段。

3.如果case 语句的分支条件没有覆盖所有可能的组合条件,定义了default项和没有定义default项有什么不同?

  定义了default项则会使电路描述的更加的清楚,综合的时候不会产生不想要的结果,没用定义default 则会使在综合时产生一个锁存器。

4.仔细阐述case , casex和 casez之间的不同。

《Verilog数字系统设计教程》夏宇闻 第四版思考题答案(第5章)

  case、casex,casez对应的真值表如上,可以看出 case无论是0,1,还是x高阻都能够比较,而casez不将高阻进行比较,在其它情况都进行比较:而casex不将高阻和x进行比较,在其它情况进行比较。

5. forever语句如果运行了,在它下面的语句能否还能运行?它位于 begin_end块和位于fork_join块有什么不同?

  不能运行。位于 begin_end,由于begin_end是顺序块,所以只要执行到 forever则将不能运行下面的程序;而位于fork_ join,它是并行块,执行了forever还是能够执行forever下面的语句。

6. forever 语句 和 repeat语句 能否独立于过程块而存在,即能否不在initial或 always块中使用?

  forever不能独立于过程块中,而 repeat能够独立于过程块中。

7.用for循环为存储器许多单元赋值时是否需要时间?为什么如果不定义时间延迟,它可以不需要时间就把不管多大的储存器赋值完毕?

  如果定义了时间延迟则需要时间,否则不需要时间。因为循环的边界是确定的,那么在综合时该循环语句被认为是重复的硬件结构。

8.for循环是否可以表示可以综合的组合逻辑?请举例说明。

  可以表示综合的组合逻辑。例如用for循环实现的乘法器

9.在编写测试模块时用什么方法可以使for循环按照时钟的节拍运行?请比较图5.3所示程序段。

《Verilog数字系统设计教程》夏宇闻 第四版思考题答案(第5章)

10.声明一个名为oscillate的寄存器变量并将它初始化为0,使其每30个时间单位进行一次取反操作。不要使用always语句(提示;使用forever循环)。

答案:
reg oscillate;
initial
    begin
        oscillate = 0 ;
        forever
        #30 oscillate =! oscillate
    end

11.设计一个周期为40个时间单位的时钟信号,其占空比为25%。使用always和initial块进行设计,将其在仿真0时刻的值初始化为0。

答案:
initial
    begin
        clock = 0 ;
        always
            begin
                #30 clock = 0 ;
                #10 clock = 1 ;
            end
    end

12.给定下面含有阻塞过程赋值语句的initial块,每条语句在什么仿真时刻开始执行? a、b、c和 d在仿真过程中的中间值和仿真结束时的值是什么?

initial
    begin
        a = 1'b0 ;
        b = #10 1'b0 ;
        c = #5 1'b0 ;
        d = #20 {a , b , c} ;
    end

答案:阻塞赋值是立即执行。第一条语句在仿真开始时就执行,第二句在仿真10个时钟单元后执行,第三句在仿真15个时钟信号单元后执行,第四句在仿真35个时钟单元后执行。在中间仿真过程中a=0,b、c、d为不确定值,结束时abcd的值是a=1’b0,b=1’0,c=1’0,d=3’b000。

13.在第12题中,如果 initial块中包括的是非阻塞过程赋值语句,那么各个问题的答案是什么?

非阻塞赋值是在块结束后才能完成这次赋值操作。如果是非阻塞过程赋值则答案是;第一条语句在仿真开始时就执行,第二句在仿真10个时钟单元后执行,第三句在仿真5个时钟信号单元后执行,第四句在仿真20个时钟单元后执行。在中间仿真过程a=0,b,c,d 为不确定值结束时abcd的值是a=1b0,b=1’0,c=1’0,d=3’b000。

14.下面例子中d的最终值是什么?

initial
begin
    b = 1'b1 ;
    c = 1'b0 ;
    #10 b = 1'b0 ;
end

initial
begin
    d = #25 (b|c);
end

答案:d的最终值是0。

15.使用带有同步清零端的D触发器(清零端高电平有效,在时钟下降沿执行清零操作)设计一个下降沿触发的D触发器,只能使用行为语句(提示:D触发器的输出q应当声明为寄存器变量)。使用设计出的D触发器输出一个周期为10个时间单位的时钟信号。

答案:
module D_FF(CLR,CLK,D,Q) ;
    input CLR,CLK,D ;
    output Q ;
    reg Q ;

  always @(posedge CLR or negedge CLK) //清零端是高电平有效
  //上升沿检测(posedge) ; 下降沿检测(negedge) ;双边沿检测(double edge)
      begin
          if (CLR) 
                    Q = 0 ;
          else 
                    #10 Q <= D ;
      end
endmodule

16.使用带有异步清零端的D触发器设计第15题中要求的D触发器(在清零端变为高电平后立即执行清零操作,无须等待下一个时钟下降沿),并对这个D触发器进行测试。

module D_ FF (CLR,CLK,D,Q);
    input CLR,CLK,D;
    output Q;
    reg Q;

    always @(posedge CLR ) 
    begin
        Q <= 0;
    end

    always @(negedge CLK)
     begin
        #10 Q <= D;
    end
endmodule

17.使用wait语句设计一个电平敏感的锁存器,该锁存器的输入信号为d和 clock,输出为q,其功能是当clock=1时q=d。

答案:
module L_FF (d,clock,q);
    input d,clk;
    output q;
    reg q;
    
always 
begin
    wait (clock==1)
    q=d;
end
endmodule

18.使用条件语句设计[例5.18]中的四选一多路选择器,外部端口必须保持不变。

//四选一多路器,其端口列表完全根据输入/输出图编写
module mux4to1(out, i0, i1, i2, i3, s1, s0);
    //根据输入/输出图的端口声明
    output out;
    input i0, i1, i2, i3;
    input s1, s0;
    //输出端口被声明为寄存器类型变量
    reg out;

//若输入信号改变,则重新计算输出信号out
//造成输出信号 out重新计算的所有输入信号必须写入always @(...)的电平敏感列表
always @ (*) 
    begin
        case ({s1,s0})
        2'b00 : out = i0;
        2'b01 : out = i1;
        2'b10 : out = i2;
        2'b11 : out = i3;
        default : out = 1'bx;
        endcase
    end
endmodule
答案:
module mux4to1 (out, i0, i1, i2, i3, s1, s0);
    output out;
    input i0, i1, i2, i3;
    input s1, s0;
    
    reg out;

always @ (s1 or s0 or i0 or i1 or i2 or i3) 
        begin
        if ({s1,s0} == 2'b00) 
            out = i0;
        else if ({s1,s0} == 2'b01) 
            out = i1;
        else if ({s1,s0} == 2'b10) 
            out = i2;
        else if ({s1,s0} == 2'b11) 
            out = i3;
        else 
            out = 1'bx;
    end
endmodule

19.使用case语句设计八功能的算术运算单元(ALU),其输入信号a和 b均为4位,还有功能选择信号select为3位,输出信号为out(5位)。算术运算单元ALU所执行的操作与Select信号有关,具体关系如表5.1所列(忽略输出结果中的上溢和下溢的位)。

《Verilog数字系统设计教程》夏宇闻 第四版思考题答案(第5章)
答案:

module mux8to1(out, a, b, select);
    //根据输入/输出图的端口声明
    output [4:0] out ;
    input [3:0] a, b ;
    input [2:0] select ;
    //输出端口被声明为寄存器类型变量
    reg out;

//若输入信号改变,则重新计算输出信号out
//造成输出信号 out重新计算的所有输入信号必须写入always @(...)的电平敏感列表
always @ (select) 
    begin
        case (select)
            3'b000 : out = a;
            3'b001 : out = a+b;
            3'b010 : out = a-b;
            3'b011 : out = a/b;
            3'b100 : out = a%b;
            3'b101 : out = a<<1;
            3'b110 : out = a>>b;
            3'b111 : out = a>b;
            default : out = 5'bx;
        endcase
    end
endmodule

20.使用while循环设计一个时钟信号发生器。其时钟信号的初值为0,周期为10个时间单位

答案:

initial 
begin
    clk=0;
    while (1) //表达式为真运行,"1"一直运行
    #10 clk = !clk;
end

21.使用for循环对一个长度为1024(地址从0~1 023),位宽为4的寄存器类型数组cache_var 进行初始化,把所有单元都设置为0。

答案:

begin
    reg [3:0] cache_ var[1023:0];
    intiger i;
    
    for(i=0;i<1024;i++)
        cache_ var[i]=0;
end

22.使用forever循环设计一个时钟信号,周期为10,占空比为40%,初值为0。

答案:

initial 
    begin
        clk=0;
        
        forever 
            begin
                #6 clk=0;
                #4 clk=1;
            end
    end

23.使用repeat将语句a=a+1延迟20个时钟上升沿之后再执行。

答案:

parameter delay= 20;
    intiger i;
    reg a;
    
begin
    repeat (delay)
    always @(posedge clk) 
        begin
            i++;
            if (i== 20) 
                a=a+1;
        end
end

24.下面是一个内嵌顺序块和并行块的块语句。该块的执行结束时间是多少?事件的顺序是怎样的?每条语句的仿真结束时间是多少?

initial
begin
    x = 1'b0 ; //0
    #5 y = 1'b1 ; //5

    fork  
        #20 a = x ;//25
        #20 b = y ;//25
    join

    #40 x = 1'b1 ; //65

    fork
        #10 p = x ; //75
        begin 
            #10 a = y ;//75
            #30 b = x ;//105
        end
        #5 m =y ; //70
    join
end

答案:该块的执行结束时间是5+20+40+40= 105个时钟单位。每条语句执行时间如上所标。

25.用forever循环语句,命名块( named block)和禁用(disabling of)命名块来设计一个八位计数器。这个计数器从count =5开始计数,到count =67结束计数。每个时钟正跳变沿计数器加一,时钟的周期为10。计数器的计数只用了一次循环,然后就被禁用了(提示:使用disable语句)。文章来源地址https://www.toymoban.com/news/detail-481751.html

答案:

reg [7:0] count;
initial
begin
    count = 5;
end

begin:name block
    forever
        begin:disabling of
            always @ (posedge clk)
            begin
                if (count<67)
                    #10 count = count + 1;
                    disable:disabling of;
            end
        end
end

到了这里,关于《Verilog数字系统设计教程》夏宇闻 第四版思考题答案(第5章)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Verilog 教程】7.3 Verilog 串行 FIR 滤波器设计

    串行 FIR 滤波器设计 设计说明 设计参数不变,与并行 FIR 滤波器参数一致。即,输入频率为 7.5 MHz 和 250 KHz 的正弦波混合信号,经过 FIR 滤波器后,高频信号 7.5MHz 被滤除,只保留 250KMHz 的信号。 串行设计,就是在 16 个时钟周期内对 16 个延时数据分时依次进行乘法、加法运算

    2024年02月06日
    浏览(50)
  • AD936x Evaluation Software生成的脚本转换成Verilog语言/AD9361配置寄存器/AD9361纯硬件设计/AD9361手把手教程/纯Verilog配置AD9361(二)

    因最近公司需要,借此机会和大家一起学习AD9361 制作不易,记得三连哦,给我动力,持续更新! 纯Verilog配置AD9361工程文件下载:纯Verilog配置AD9361工程         提取码:g9jy    ---------------------------------------------------------------------------------------- 因为ADI官方,只提供了利用软件

    2024年02月04日
    浏览(56)
  • 系统架构设计师教程(十五)面向服务架构设计理论与实践

    面向服务的体系结构 (Service-Oriented Architecture, SOA) 是一种应用框架,它将业务应用划分为独立的业务功能和流程(服务),并通过定义良好的接口和契约将这些服务联系起来。SOA 提供了业务流程的灵活性,使企业能够更快速地发展、降低总体拥有成本,并改善对准确信息的访

    2024年01月25日
    浏览(59)
  • 【新版系统架构】系统架构设计师教程全篇知识点提炼

    1、 架构 体现在组件中的一个系统的基本组织、彼此的关系和环境的关系及指导它的设计和发展的原则 2、 系统 是组织起来完成某一特定功能或一组功能的组件集 3、 环境或者上下文 决定了对这个系统的开发、运作、政策以及会对系统造成其他影响的环境和设置 4、 任务 是

    2024年02月16日
    浏览(54)
  • 《系统架构设计师教程》重点章节思维导图

    内容来自《系统架构设计师教程》,筛选系统架构设计师考试中分值重点分布的章节,根据章节的内容整理出相关思维导图。

    2024年02月12日
    浏览(95)
  • 《嵌入式系统设计师教程 (第2版)》学习笔记

    《嵌入式系统设计师教程 (第2版).pdf》链接:https://download.csdn.net/download/AnChenliang_1002/87864728 该资源在上传时涉及到版权问题无法上传,所以保留该资源仅为了日后查看时博主自己可以下载; 本文用来记录在学习《嵌入式系统设计师教程 (第2版)》过程中的个人笔记。 图书简介

    2024年02月09日
    浏览(77)
  • 系统架构设计师教程(十)软件可靠性基础知识

    软件架构的演化是为了适应用户需求、业务环境和运行环境的变化,它涵盖了软件架构的全生命周期,包括需求获取、建模、文档、实现和维护等阶段。软件架构的演化的重要性体现在以下几个方面: 保障软件系统质量:软件架构支撑整个软件系统,决定其性能、可靠性、安

    2024年01月18日
    浏览(63)
  • Verilog数字系统设计——4 选1 多路选择器

    试分别使用assign、门级原语和always 语句设计4 选1 多路选择器,并写出测试代码进行测试。要求编制测试模块对实现的逻辑功能进行完整的测试; 实验提交Verilog设计文件(.v文件)和仿真波形截图,文件打包,压缩包以自己的学号+姓名命名; 仿真截图 下面展示一些 内联代码

    2024年02月08日
    浏览(45)
  • 基于Python+djangoAI 农作物病虫害预警系统智能识别系统设计与实现(源码&教程)

        随着科技的发展,机器学习技术在各个领域中的应用越来越广泛。在农业领域,机器学习技术的应用有助于提高农作物的产量和质量,降低农业生产的成本。本文针对农作物健康识别问题,提出一种基于机器学习方法的农作健康识别系统,以实现对农作物生长状况的监测

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包