已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
:[例]
例6.6  or事件控制(敏感列表)。
//有异步复位的电平敏感锁存器
always @ (reset or clock or d)
begin
  if (reset)
    q = 1'b0 ;
  else if(clock)
    q = d ;
end

例6.7  逗号事件控制(敏感列表)
//有异步复位的电平敏感锁存器
always @ (reset , clock , d)
begin
  if (reset)
    q = 1'b0 ;
  else if(clock)
    q = d ;
end

上面两个能看出,or和逗号一个意思,可替换。

例6.8  @*操作符的使用
//用or操作符的组合逻辑块
//编写敏感列表很繁琐,并且很容易漏掉几个
always @(a or b or c or d or e or f or g or h or p or m)
  begin
    out1 = a? (b + c) : (d + e) ;
    out2 = f? (g + h) : (p + m) ;
  end

//用@*来代替所有输入变量
always @(*)
begin
  out1 = a? (b + c) : (d + e) ;
  out2 = f? (g + h) : (p + m) ;
end

例6.9 描述红绿黄交通灯行为的Verilog模块,学习其中使用的任务。
module traffic_lights;
  reg clock , red , amber , green ;
  parameter on = 1 , off = 0 , red_tics = 350 , amber_tics = 30 , green_tics = 200 ;
  
  //交通灯初始化
  initial red = off ;
  initial amber = off ;
  initial green = off ;

  //交通灯控制时序
  always
    begin
      red = on ;
      light (red , red_tics) ;
      green = on ;
      light (green , green_tics) ;
      amber = on ;
      light (amber , amber_tics) ;
    end

  //定义交通灯开启时间的任务
  task light;
    output color ;
    input [31:0] tics ;
    begin
      repeat(tics)
        @(posedge clock) ;
        //等待tics个时钟的上升沿
      color = off;
    end
  endtask

  //产生时钟脉冲的always块
  always
    begin
      #100 clock = 0 ;
      #100 clock = 1 ;
    end
endmodule

例6.10  阶乘函数的定义和调用。
module tryfact ;
  //函数的定义-------------
  function [31:0] factorial;
    input [3:0] operand ;
    reg [3:0] index ;
    begin
      factorial = 1;
      for (index = 2; index <= operand; index = index + 1)
      factorial = index * factorial ;
    end
  endfunction
  
  //函数的测试---------------
  reg [31:0] result ;
  reg [3:0] n ;
  initial
  begin
    result = 1;
    for(n = 2; n <= 9; n = n + 1)
    begin
      $display ("[s:9]artial result n = %d result = %d",n,result);
      result = n * factorial(n)/((n * 2) + 1) ;
    end
    $display("Finalresult = %d",result);
  end
endmodule

利用上述实例,学习函数的使用方式。

例6.19
module printval;
  reg [11:0] rl ;
  initial
    begin
      rl = 10 ;
      $display ("[s:9]rinting with maximum size = %d = %h",rl,rl) ;
      $display ("[s:9]rinting with minimum size = %0d = %0h",rl,rl) ;
    end
endmodule

输出结果为:
Printing with maximum size = 10 = 00a
Printing with maximum size = 10 = a

上述例子熟悉任务$display的用法。

例6.20  文件描述符
//多通道文件描述符
integer handle1,handle2,handle3 ;
//整型数为32位
initial
  begin
    handle1 = $fopen("file1.out") ;  //handle1 = 32’h0000_0002
  handle2 = $fopen("file2.out") ;  //handle2 = 32’h0000_0004
    handle3 = $fopen("file3.out") ;  //handle3 = 32’h0000_0008
  end

//写文件
//把输出写到文件描述符值为1的所有文件中。
integer desc1,desc2,desc3 ;
initial
  begin
    desc1 = handle1 | 1 ;  //desc1 = 32'h0000_0003
    $fdisplay (desc1,"Display 1") ;  //写文件到file1.out

    desc2 = handle2 | handle1 ;  //desc2 = 32'h0000_0006
    $fdisplay (desc2,"Display 2") ;  //写文件到file2.out

    desc3 = handle3 ;    //desc3 = 32'h0000_0008
    $fdisplay (desc3,"Display 3") ;  //写文件到file3.out
  end

//关闭文件
$fclose(handle1) ;
$fclose(handle2) ;
$fclose(handle3) ;

用以上例子熟悉文件的输出。

例6.23
值变转储文件。
initial
  $dumpfile ("XXXXXXXXXp");
  //仿真信息转储到XXXXXXXXXp文件

initial
  $dumpvars;
//没有指定变量范围,把设计中全部信号都转储

initial
  $dumpvars(1,top);
//转储模块实例top中的信号
//数1表示层次的等级,只转储top下第一层信号。
//即转储top模块中的变量,而不转储在top中调用
//模块中的变量

initial
  $dumpvars (2,XXXXXX);
//转储XXXXXX模块下两层的信号

initial
  $dumpvars (0,XXXXXX);
//数0表示转储XXXXXX模块快下面各个层的所有信号

//启动和停止转储过程
initial
begin
  $dumpon;
  //启动转储过程
  #100000 $dumpoff;
  //过了100000个仿真时间单位后,停止转储过程
end

//生成一个检查点,转储所有VCD变量的先行值
initial
  $dumpall;

通过上面例子熟悉值变转储文件任务,$dumpfile , $dumpvars , $dumpon , $dumpoff , $dumpall
文号 / 534712

十步芳草
名片发私信
学术分 0
总主题 17 帖总回复 140 楼拥有证书:笔友
注册于 2013-06-11 10:39最后登录 2018-01-10 00:58
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步

个人简介

暂未填写
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传,正在处理中
空空如也~
处理中...
处理失败
加载中...
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
插入公式
评论控制
加载中...
文号:{{pid}}
加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
ID: {{user.uid}}