Verilog书写逻辑过程中“沿”与“电平”何时点将

  1. 最近在用FPGA作一个项目时,需要将串口接收的数据进行处理解析。刚开始时直接移植教程里的串口接收部分,具体逻辑如下:例化串口接收模块,当串口接收标志位拉高之后,根据计数将接收到的数据缓存。
  2. 刚开始自信满满,没经过过多思考就直接撸代码,撸完直接烧录板子测试,未经过仿真。发现数据一直不对,用串口打印出接收的数据一直是同一个数据。查看代码也没看出大问题,就老老实实地仿真,仿真结果如图1所示:仿真中为了方便观察,将波特率提高了系统时钟的1/4。

图1:仿真结果图

  1. 从仿真结果图中可以看出,在数据分配结束后,缓存区均是接收的最后一个数据,问题出现如下:移植的串口模块在接收到停止位后将接收完成标志位拉高,直到接收停止位所需时钟个数的1/2时才将接收完成标志位拉低。而在数据分配缓存逻辑中,直接根据接收完成标志位为高就成了“电平触发”逻辑。在这个“长电平”时间,就造成计数器循环执行,最终造成根据计数器将接收的最后一个byte数据赋值给整个缓存区。
  2. 解决方法如下:将“电平触发”更改成“沿触发”即可解决问题,这样即使是“长电平”期间,也仅有一个上升沿或者下降沿,这样就达到接收完成后,计数器计数一次,然后根据计数器数值缓存一次。仿真结果如图2所示。
    图2 沿触发仿真结果图

从图2中可以看出,更改为沿触发后,数据分配逻辑正确。
总结:在进行逻辑书写时,对于某个过程触发后只执行一次的情况用沿触发,对于某个过程出发后需要一直执行的情况用电平触发,例如报警信号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dog345

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值