从verilog仿真原理看阻塞与非阻塞赋值

从verilog仿真原理看阻塞与非阻塞赋值

ID:19874598

大小:167.50 KB

页数:29页

时间:2018-10-07

从verilog仿真原理看阻塞与非阻塞赋值_第1页
从verilog仿真原理看阻塞与非阻塞赋值_第2页
从verilog仿真原理看阻塞与非阻塞赋值_第3页
从verilog仿真原理看阻塞与非阻塞赋值_第4页
从verilog仿真原理看阻塞与非阻塞赋值_第5页
资源描述:

《从verilog仿真原理看阻塞与非阻塞赋值》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、从Verilog仿真原理看阻塞和非阻塞赋值(续:例子)上一篇/下一篇 2006-09-1200:21:49/天气:晴朗/心情:高兴查看(577)/评论(6)/评分(4/0)  按照hwei的指示,我现在举一个例子再深入探讨一下Verilog的阻塞和非阻塞赋值,希望对大家有益,哈哈。EDA中国门户网站5ai}o  我看过很多文章都说,阻塞赋值适合组合逻辑建模,而非阻塞赋值适合时序逻辑建模。事实上,在大多数情况下,这样做是正确的。但是,在某些情况下,不能片面地这样理解。zA*egm:D&x0  下面是我以前编的一个匹配滤波器的例子,为了方便理解我截取了其中一段程序:EDA中国门

2、户网站px-{ue.P

3、  reg signed [5:0] corr_reg;EDA中国门户网站?!Hz]]1[}QzK  always@(posedgeclk,negedgeSysRst_n)beginEDA中国门户网站@@:Rc3{*^7PooI        if(!SysRst_n)beginEDA中国门户网站bNE%?(v           ......EDA中国门户网站r*O5@~0~(?5o~        end*VG+c4x5Y%Or"i0        elsebeginX0r[3E#?@9e0               co

4、rr_reg=0;//寄存器清零3tX[,p~&v0           for(i=0;i<=10;i=i+1)beginEDA中国门户网站(

5、mi$ox+xg               if(barker_code[i]==1)VlK/s(hZ-`0                   corr_reg=corr_reg+funcmapping(datain_mem[i]);E_x(Y/p2`1B@$r0                   //funcmapping为自定义函数,目的就是将1bit的数据映射成3位有符号数,以方便求相关值.!B{Tx$T

6、,PC-k!d2E0               n1b)bG'N&O-m0               elseif(barker_code[i]==0)EDA中国门户网站A1k.K^3PNh                   corr_reg=corr_reg-funcmapping(datain_mem[i]);&C3t1iW+pu6v0           end2vkM@Q"_L@AC0           .....+n,IE9b(@bz'sn0        end&]5[P?M(gZ`f6x0   end]J&@C(

7、zF4T"Z/b@!q[0   我的意图就是,通过匹配滤波的方式并行捕获扩频数据流中的隐含11位barker码,从而完成解扩中的码同步。datain_mem是11位宽的寄存器,用于存储输入数据(即barker码的扩频数据)的镜像延时。在捕获的过程中,根据本地barker码的值,来决定corr_reg是加上funcmapping(datain_mem[i])的值,还是减去,从而得到相关值。根据barker的性质可知,在理想情况下,就能够在至多11个时钟周期内,从corr_reg中得到相关峰值(因为Barker码的码长为11位),从而达到捕获barker的目的。EDA中国门户网站dN

8、O&e*bU   若采用非阻塞赋值方式,这非常符合时序建模的通用建议。但是,却发现仿真结果根本不对,现象如下:EDA中国门户网站3f+q4s(Nf9_,sQ}i   1、corr_reg无法清零,从而导致连续累加,直至溢出为止,此后往复循环重复这个过程。EDA中国门户网站D~NuBw   2、观察最初几个周期的计算结果,发现corr_reg只加了其中一部分值,而没有加完就结束了。EDA中国门户网站d9L6x-tHN"?   下面我们分析一下原因:EDA中国门户网站8U_'Rc   根据Verilog语言非阻塞赋值的特点:RHS的表达式计算和LHS的赋值更新,

9、是分两拍进行的。也就是在for循环中,只要条件成立,corr_reg就立刻进行+/—计算,但是并不马上赋值,而是将其放在等待序列事件中,等到所有的活动事件和非活动事件执行完毕后,才调出运行。这样做的结果就是:在“非阻塞赋值更新事件区域”就堆积了一系列同类型事件,按照仿真器的仿真原理,这些事件的执行顺序就和一个FIFO一样,先入先出。这里需要注意两点:1、在RHS表达式计算的过程中,corr_reg的值始终没有得到更新,这

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。