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

上传人:白大夫 文档编号:3251735 上传时间:2019-08-06 格式:DOC 页数:4 大小:22KB
返回 下载 相关 举报
FPGA学习系列:5.阻塞赋值与非阻塞赋值.doc_第1页
第1页 / 共4页
亲,该文档总共4页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《FPGA学习系列:5.阻塞赋值与非阻塞赋值.doc》由会员分享,可在线阅读,更多相关《FPGA学习系列:5.阻塞赋值与非阻塞赋值.doc(4页珍藏版)》请在三一文库上搜索。

1、FPGA学习系列:5.阻塞赋值与非阻塞赋值设计背景:阻塞(=)和非阻塞(设计原理:阻塞:在本语句中“右式计算”和“左式更新”完全完成之后,才开始执行下一条语句;非阻塞:当前语句的执行不会阻塞下一语句的执行。我们来看一下下面的阻塞的代码0modulestudy_4 (clk,rst_n,d,q);1 /输入输出端口2 inputclk;3 inputrst_n;4 input1:0d;5 outputreg1:0q;67 reg1:0q1;/定义一个寄存器89 always(posedgeclk)10 begin11 if(!rst_n) /复位时用阻塞给寄存器输出赋初值12 begin13 q

2、1 =0;14 q =0;15 end16 else /阻塞语句进行赋值17 begin18 q1 =d;19 q =q1;20 end21 end2223endmodulealways语句块对Clk的上升沿敏感,当发生Clk 01的跳变时,执行该always语句。在begin.end语句块中所有语句是顺序执行的,而且最关键的是,阻塞赋值是在本语句中“右式计算”和“左式更新”完全完成之后,才开始执行下一条语句的。在上面的代码中在18行当上升沿来到先执行把d的值给q1,然后下一个上升沿把q1赋值给q。我们的测试文件如下:0timescale1ns/1ps12moduletb;34 regclk;

3、5 regrst_n;6 reg1:0d;7 wire1:0q;89 initialbegin10 clk =1;11 rst_n =0;12 d =0;1314 #200.1rst_n =1;1516 #100d =2;17 #100d =0;1819 end2021 always#10clk =clk;2223 study_4 dut(24 .clk(clk),25 .rst_n(rst_n),26 .d(d),27 .q(q)28 );2930endmodule放真图如下:我们可以清楚的看到第一个上升沿的时候寄存器q为0,第二个上升沿的时候q为2,接下来,再看看非阻塞赋值的情况。所谓非阻

4、塞赋值,顾名思义,就是指当前语句的执行不会阻塞下一语句的执行。非阻塞代码如下:0modulestudy_4 (clk,rst_n,d,q);12 inputclk;3 inputrst_n;4 input1:0d;5 outputreg1:0q;67 reg1:0q1;89 always(posedgeclk)10 begin11 if(!rst_n) /复位时用非阻塞给寄存器输出赋初值12 begin13 q1 =0;14 q =0;15 end16 else /非阻塞语句进行赋值17 begin18 q1 =d;19 q =q1;20 end21 end2223endmodule非阻塞在18行以后是这样执行的,18行的时候d的值给q1,但是不是立马给过去,而是等到上升的时候才给,在上升沿同样执行19行,把q1得值给q,大家要明白的这个时候给值是q1的旧值,然后同样在19行也是在上升沿到来后值才给过去的。我们两个模块用的是一样的仿真文件,我在这里就不给大家展示了,大家可以直接看仿真图,如下:大家可以清楚的看到,在第一个上升沿的时候d的值为2,执行18行然后不直接赋值,在等到上升沿来的时候值过去,同样的后面的也是这么执行的,那么我们可以看到图中和我们分析的一样。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


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