欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    FPGA学习系列:5.阻塞赋值与非阻塞赋值.doc

    • 资源ID:3251735       资源大小:22KB        全文页数:4页
    • 资源格式: DOC        下载积分:2
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要2
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    FPGA学习系列:5.阻塞赋值与非阻塞赋值.doc

    FPGA学习系列:5.阻塞赋值与非阻塞赋值设计背景:阻塞(=)和非阻塞( 设计原理: 阻塞:在本语句中“右式计算”和“左式更新”完全完成之后,才开始执行下一条语句;非阻塞:当前语句的执行不会阻塞下一语句的执行。 我们来看一下下面的阻塞的代码0 module study_4 (clk, rst_n, d, q);1  /输入输出端口2  input clk;3  input rst_n;4  input 1:0 d;5  output reg 1:0 q;6 7  reg 1:0 q1;    /定义一个寄存器8 9  always  (posedge clk)10 begin11  if(!rst_n)   /复位时用阻塞给寄存器输出赋初值12   begin13    q1 = 0;14    q = 0;15   end16  else     /阻塞语句进行赋值17   begin18    q1 = d;19    q = q1;20   end21 end2223 endmodule  always语句块对Clk的上升沿敏感,当发生Clk 01的跳变时,执行该always语句。在begin.end语句块中所有语句是顺序执行的,而且最关键的是,阻塞赋值是在本语句中“右式计算”和“左式更新”完全完成之后,才开始执行下一条语句的。在上面的代码中在18行当上升沿来到先执行把d的值给q1,然后下一个上升沿把q1赋值给q。我们的测试文件如下:0 timescale 1ns / 1ps1 2 module tb;3 4  reg clk;5  reg rst_n;6  reg 1:0 d;7  wire 1:0 q;8 9  initial begin10  clk = 1;11  rst_n = 0;12  d = 0;1314 #200.1 rst_n = 1;1516 #100 d = 2;17 #100 d = 0;1819 end2021 always #10 clk = clk;2223 study_4 dut(24  .clk(clk), 25  .rst_n(rst_n),26  .d(d),27  .q(q)28 );2930 endmodule   放真图如下:  我们可以清楚的看到第一个上升沿的时候寄存器q为0,第二个上升沿的时候q为2,接下来,再看看非阻塞赋值的情况。所谓非阻塞赋值,顾名思义,就是指当前语句的执行不会阻塞下一语句的执行。非阻塞代码如下:0 module study_4 (clk, rst_n, d, q);1 2  input clk;3  input rst_n;4  input 1:0 d;5  output reg 1:0 q;6 7  reg 1:0 q1;8 9  always  (posedge clk)10 begin11  if(!rst_n)   /复位时用非阻塞给寄存器输出赋初值12   begin13    q1 <= 0;14    q <= 0;15   end16  else     /非阻塞语句进行赋值17   begin18    q1 <= d;19    q <= q1;20   end21 end2223 endmodule  非阻塞在18行以后是这样执行的,18行的时候d的值给q1,但是不是立马给过去,而是等到上升的时候才给,在上升沿同样执行19行,把q1得值给q,大家要明白的这个时候给值是q1的旧值,然后同样在19行也是在上升沿到来后值才给过去的。我们两个模块用的是一样的仿真文件,我在这里就不给大家展示了,大家可以直接看仿真图,如下:  大家可以清楚的看到,在第一个上升沿的时候d的值为2,执行18行然后不直接赋值,在等到上升沿来的时候值过去,同样的后面的也是这么执行的,那么我们可以看到图中和我们分析的一样。

    注意事项

    本文(FPGA学习系列:5.阻塞赋值与非阻塞赋值.doc)为本站会员(白大夫)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开