完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
新手 如图是代码和时序图。程序功能 是每个clk上升沿时检测a值(并存入ar,再将ar的存入b),在clk的上升沿同时执行if语句,使每当if(b)为真时,cr翻转,否则不变。 疑问 但我时序仿真时不理解一个地方(即问题1)。 推测 然后我认为是if(b)进行判断的同时,ar在对b进行赋值。由于只有当赋值结束,b才为1,因此,判断时if(b)不为真,维持原输出。 但好像不对,因为dr的输出立刻翻转了。 还是说由always驱动的/reg赋值/和/if语句块/有先后?时钟上升沿时,先if,再赋值? 问题1.我想不明白当b在上升沿时,为什么cr的输出没有立刻翻转,而是延时一个clk周期后翻转? 问题2.另一个dr的输出只是改变了敏感值里的上升沿触发为b的边沿触发,dr的输出就在b上升沿时立刻翻转了,这和cr的区别在哪? 还请各位帮忙解答一下,非常感谢! |
|
相关推荐
5个回答
|
|
这个就是时序逻辑和组合逻辑的区别了,也就是为什么我们在很多时候在时序逻辑赋值的时候会加一个延时,仅仅就是为了让仿真看上去更舒服。实际上如下所示,b是会在时钟的上升沿的之后一点点的位置才有效的,而仿真工具因为是理想状态,所以所有的delay都是按照0来计算的所以这个延时无限小,但是也还是在时钟延后面才有效的,所以cr在这拍时钟延的位置必然无效,只有下一拍才能触发到b的变化。而你这边的dr是组合逻辑,组合逻辑不需要时钟关系,只要条件有效,结果马上翻转。
clk --------- ---------- ---------- ------------ | | | | | | | ------------ ---------- ---------- ------------ b -------------------------------------------------------------- | ------------------------ cr --------------------- | | --------------------------------------------- -------------------
最佳答案
评分 |
|
|
|
建议先看下Verilog里面几个幅值语句的先后吧
|
|
|
|
always敏感信号不可以同时包括同一个信号的上升沿和下降沿
|
|
|
|
b 的上升沿触发又有下降沿的触发这是不对的
|
|
|
|
always语句里面不允许有同一个信号的上升沿和下降沿,你括号里的b信号即有上升沿也有下降沿,就会出现时序错误。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求FPGA 驱动控制ltc2271 或者 ltc2180 或者 ltc2190或者 ltc2202 的代码
1320 浏览 0 评论
417 浏览 0 评论
求助:遇见诡异问题,FPGA模块A输出端口连接模块B输入后,模块A不能正常工作的
1473 浏览 1 评论
475 浏览 0 评论
1431 浏览 1 评论
4293 浏览 95 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-17 05:58 , Processed in 0.646914 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191