搜索
bottom↓
回复: 16

verilog中always 和 if语句中的条件问题兼容的问题?

[复制链接]

出0入0汤圆

发表于 2019-5-8 15:02:24 | 显示全部楼层 |阅读模式
本人刚入手,写一个小的CPLD项目,以前主要是写C程序。CPLD用Verilog写的,但是调试经验比较少,在项目调试中,碰见一个奇怪的问题,请教下论坛里比较有经验的前辈。

测试条件如下:条件:quartus ii 12.0. CPLD/5M570系列,clk时钟40MHz。 count_r为 9位宽。

问题现象如附件图片及描述。

主要是想问,三个图片为什么会出现不同的结果?按逻辑来讲,应该都是一样的呀。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出615入1076汤圆

发表于 2019-5-8 15:19:00 | 显示全部楼层
一个 always@ 不了那么多 posedge 和 negedge, 只能一个时钟,和一个可选的复位。
你写代码的时候,要联想到实际的硬件电路,一开始联想不到,可以多看软件综合之后的电路。

出0入0汤圆

 楼主| 发表于 2019-5-8 15:40:34 | 显示全部楼层
dukelec 发表于 2019-5-8 15:19
一个 always@ 不了那么多 posedge 和 negedge, 只能一个时钟,和一个可选的复位。
你写代码的时候,要联想 ...

非常感谢回答,但是如果@不了那么多条件,为什么编译时,不报错呢? 还是我理解的不对?

出615入1076汤圆

发表于 2019-5-8 15:43:59 | 显示全部楼层
waferhit 发表于 2019-5-8 15:40
非常感谢回答,但是如果@不了那么多条件,为什么编译时,不报错呢? 还是我理解的不对? ...

估計有報警告吧,你對比下。

出200入429汤圆

发表于 2019-5-8 16:21:13 | 显示全部楼层
本帖最后由 谭春林 于 2019-5-8 16:37 编辑

你这么写很奇怪,为何不把另外两个always里的敏感信号作为使能信号呢

出0入0汤圆

 楼主| 发表于 2019-5-8 16:34:36 | 显示全部楼层
谭春林 发表于 2019-5-8 16:21
你这么写很奇怪,为何把另外两个always里的敏感信号作为使能信号呢

我这只是测试用的,后面两个其实是其他模块计算结果(这里为了说明问题,把后两个信号直接拉到一个固定电平)。
本意是 希望在后两个信号下降沿或上升沿的时候,在这里计算其他结果。 但不想再写一个边沿检测语句,直接借用always来检测沿,结果就出现这中现象了!

出0入4汤圆

发表于 2019-5-8 18:17:56 | 显示全部楼层
仔细看看综合报告,看看有没有其他警告提示信息。只有3的写法是对的。个人感受,学习使用hdl,最好是按照所期望电路的标准模版来写,综合工具才能生成期望的逻辑电路。

出0入4汤圆

发表于 2019-5-8 18:21:44 | 显示全部楼层
2的写法,猜测可能会把除复位在,其他三个信号组合逻辑做时钟,组合逻辑输出有毛刺,导致计数频率增加。

出0入4汤圆

发表于 2019-5-8 18:33:58 | 显示全部楼层
1的写法,会不会是因为portBTRIP_r的复位值为1,导致另外3个信号的组合逻辑时钟为常电平了,没有时钟沿,计数器就不会加1。

出0入0汤圆

 楼主| 发表于 2019-5-9 09:15:27 | 显示全部楼层
get500wan 发表于 2019-5-8 18:33
1的写法,会不会是因为portBTRIP_r的复位值为1,导致另外3个信号的组合逻辑时钟为常电平了,没有时钟沿,计 ...

感谢回答,还是似懂非懂!

出0入8汤圆

发表于 2019-5-9 10:38:40 | 显示全部楼层
waferhit 发表于 2019-5-8 15:40
非常感谢回答,但是如果@不了那么多条件,为什么编译时,不报错呢? 还是我理解的不对? ...

因为语法没错,综合的时候估计会有警告,D触发器 本身没有那么触发信号的,想要多个触发信号  只能外部加逻辑运算,这个逻辑运算 最好自己在外部写,反而通俗易懂。(你可以看看你综合后的一个逻辑图,估计好明白点)

出0入0汤圆

发表于 2019-5-9 11:16:40 | 显示全部楼层
本帖最后由 fakeCode 于 2019-5-9 11:19 编辑

你这个学习路数,跟学C着了谭大师的道一样,天天在那里搞优先级,学*p++, *(p++) 的差别,最后一个能用的程序都写不出来.先搞懂FPGA流程,明白各流程在干啥,然后搞懂什么语句会综合出什么电路(同一段代码不同的综合工具综合出来都有差异,综合工具本身也在进化),不要按你自己的想法去猜会综合成什么,而是要按综合工具的规则来,事实上可以说你是先有电路后有代码,只是把电路按综合工具的规则用代码表示出来,所以读一下综合工具的这方面的文档.最后按设计原则来写代码,可以避免无数没有意义的坑.有问题,欢迎到hifpga.com交流.

出0入91汤圆

发表于 2019-5-9 12:53:52 | 显示全部楼层
1-2的写法很可能  触发的条件都进不去

出0入0汤圆

发表于 2019-5-9 13:12:59 | 显示全部楼层
硬件描述不是编程序,这个代码没有考虑实际电路的情况,即使编译通过也不会综合出电路

出0入0汤圆

 楼主| 发表于 2019-5-9 14:25:09 | 显示全部楼层
fakeCode 发表于 2019-5-9 11:16
你这个学习路数,跟学C着了谭大师的道一样,天天在那里搞优先级,学*p++, *(p++) 的差别,最后一个能用的 ...

是的,这个编程和C语言很不一样。 只是像这些现有电路,后有程序的,确实是经验不够,查了很多资料也没有明确。

虽然我也知道这个道理,但是没碰到问题以前,确实也没法预料到。

像这种弯路,也不知道从哪学习,能少走点,书上的例程都不会提到这些点!或者我看得资料都缺乏这方面的阐述。

出0入0汤圆

发表于 2019-5-9 14:41:20 | 显示全部楼层
waferhit 发表于 2019-5-9 14:25
是的,这个编程和C语言很不一样。 只是像这些现有电路,后有程序的,确实是经验不够,查了很多资料也没有 ...

可以看一下這些,你可以用keyword: "Synthesizable RTL" 去找資料。
https://www.xilinx.com/support/d ... ivado-synthesis.pdf
我記得以前xilinx還有一個 coding guide document,裡面講的就要什麼電路就怎麼寫的方式,連 synthesizeable memory rtl 都有。


出0入0汤圆

 楼主| 发表于 2019-5-9 14:54:42 | 显示全部楼层
jarodzz 发表于 2019-5-9 14:41
可以看一下這些,你可以用keyword: "Synthesizable RTL" 去找資料。
https://www.xilinx.com/support/doc ...

非常感谢,回头我去看看去!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 12:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表