搜索
bottom↓
回复: 13

有如下verilog代码编译出错,如何改?谢谢!

[复制链接]

出0入22汤圆

发表于 2017-3-31 15:22:39 | 显示全部楼层 |阅读模式
  1. always @ (posedge a2 or posedge b2 or negedge reset_n)
  2. begin
  3.         if(reset_n==1'b0)
  4.                 pos_idx2<=80000;
  5.         else begin
  6.                 if(dir_idx2==1'b1)begin
  7.                         pos_idx2<=pos_idx2+1'b1;
  8.                 end
  9.                 else begin
  10.                         pos_idx2<=pos_idx2-1'b1;
  11.                 end
  12.         end
  13. end
复制代码


quartus 12.1,显示出错在else begin这一行。错误提示如下:

Error (10200): Verilog HDL Conditional Statement error at cpld.v(78): cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always construct

网上没查到多少有用的资料,总感觉这么写代码不应该有语法错误,请有经验的大虾解解惑,谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入17汤圆

发表于 2017-3-31 16:21:34 | 显示全部楼层
改成单边沿的吧,语法没问题,但是。。。

出0入0汤圆

发表于 2017-3-31 20:00:15 | 显示全部楼层
谷歌翻译如下:

cpld.v(78)中的Verilog HDL条件语句错误:不能将条件中的操作数与总体构造的包围事件控件中的相应边匹配。

你将“posedge a2 or posedge b2 or”删掉即可编译,应该没有错误。

出420入0汤圆

发表于 2017-3-31 20:37:46 | 显示全部楼层
always @ 里面是时钟和复位,你这个a2 B2咋实现

出0入0汤圆

发表于 2017-3-31 20:45:38 | 显示全部楼层
建議先看看"Recommended HDL Coding Styles", altera handbook裡面的某章。
要先有基本數位電路元件的觀念再去寫verilog code合成出來。

出0入0汤圆

发表于 2017-3-31 20:56:09 | 显示全部楼层
为啥要两个时钟,去掉posedge a2或posedge b2应该就可以了。

出0入22汤圆

 楼主| 发表于 2017-3-31 21:14:46 来自手机 | 显示全部楼层
wang110 发表于 2017-3-31 20:56
为啥要两个时钟,去掉posedge a2或posedge b2应该就可以了。

我想实现的是,其中两个输入信号的任意一个上升沿,同一个reg实现计数,有没有建议的写法?

出0入4汤圆

发表于 2017-3-31 21:24:45 来自手机 | 显示全部楼层
实现不了 用高速时钟扫上升沿

出0入22汤圆

 楼主| 发表于 2017-3-31 22:02:12 来自手机 | 显示全部楼层
zjykwym 发表于 2017-3-31 16:21
改成单边沿的吧,语法没问题,但是。。。

单边沿,是不是需要把reset改为高电平复位?

出0入22汤圆

 楼主| 发表于 2017-3-31 22:03:21 来自手机 | 显示全部楼层
asma 发表于 2017-3-31 20:37
always @ 里面是时钟和复位,你这个a2 B2咋实现

就是把a2 b2当时钟,实现任意一个信号的上升沿,对同一个reg实现计数

出0入0汤圆

发表于 2017-3-31 22:28:02 | 显示全部楼层
你先想象一下, 你能用门电路搭这个功能么? 如果想不出来, 那么你这个写法就不行.

出300入477汤圆

发表于 2017-3-31 22:50:25 来自手机 | 显示全部楼层
zxq6 发表于 2017-3-31 21:14
我想实现的是,其中两个输入信号的任意一个上升沿,同一个reg实现计数,有没有建议的写法? ...

不存在这样的门电路。
FPGA里面限制一个地方只能用一个时钟。
就算你造asic也不行,你想想怎么搭个这种电路岀来?

出0入0汤圆

发表于 2017-4-1 09:24:32 | 显示全部楼层
posedge a2 posedge b2两个去掉一个就行了

要想上升/下降沿都计数,就是采用一个更高的频率,对a2/b2采样并检测出边沿后将其输出作为计数使能,高频时钟作为计数时钟。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-3-28 20:56

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

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