always 语句中巧用阻塞语句

   在FPGA设计中,我们习惯了在always语句中使用非阻塞语句来实现时序逻辑或者组合逻辑。但是在实际工程中,有一类设计与众不同,必须要用阻塞语句来实现某种功能。大家可能好奇,请带着疑问向下看。
   在算法中,大家听说过并且实践过一种常见算法,冒泡排序法,下面打算用这个冒泡排序法来颠覆大家的认知。假定有5个输入的数据,在工作时钟为10ns的频率下,要找出最小的一个并输出,这就是我们要实现的功能。先看部分代码截图如下:先看图1激励文件         

在这里插入图片描述
图1:激励文件
第1种实现方式:参看代码截图2a
在这里插入图片描述
图2a:第1种实现方式的代码截图
对应图2a的代码仿真结果参见截图2b
在这里插入图片描述
图2b: 对应截图2a代码的仿真结果

第2种实现方式:参看代码截图3a
在这里插入图片描述
图3a:第2种实现方式的代码截图

对应图3a的代码仿真结果参见截图3b 在这里插入图片描述
图3b: 对应截图3a代码的仿真结果

结果分析:仔细对比两种实现方式的截图和仿真结果,可以发现第2种实现方式是对的。为什么呢?
我们分析一下,冒泡排序的核心思想是,先找到第一个数据和默认的一个数据比较,如果该数据比默认的小,那么最小数据指向该数据,这里要求数据立即更新,同理,第二个数据和第一次找到的最小数据比较,找到后,也要求立即更新这个最小数据,依次类推。我们发现,用FPGA来实现这个冒泡排序,要求变量具有立即更新,而且有保存的功能,结合这两点我们不难发现在always语句必须使用阻塞语句的原因了。
还有的同事认为第二种实现方式也不对,语句除了第一个if不用else后,后面的if前都要加esle,大家可以自己仿真一下,能否加这个else?
本仿真实例虽然简单,仔细阅读可以加深对阻塞和非阻塞语句的理解。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值