zxq6 发表于 2017-3-31 15:22:39

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

always @ (posedge a2 or posedge b2 or negedge reset_n)
begin
        if(reset_n==1'b0)
                pos_idx2<=80000;
        else begin
                if(dir_idx2==1'b1)begin
                        pos_idx2<=pos_idx2+1'b1;
                end
                else begin
                        pos_idx2<=pos_idx2-1'b1;
                end
        end
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

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

zjykwym 发表于 2017-3-31 16:21:34

改成单边沿的吧,语法没问题,但是。。。

GunGun 发表于 2017-3-31 20:00:15

谷歌翻译如下:

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

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

asma 发表于 2017-3-31 20:37:46

always @ 里面是时钟和复位,你这个a2 B2咋实现

jarodzz 发表于 2017-3-31 20:45:38

建議先看看"Recommended HDL Coding Styles", altera handbook裡面的某章。
要先有基本數位電路元件的觀念再去寫verilog code合成出來。

wang110 发表于 2017-3-31 20:56:09

为啥要两个时钟,去掉posedge a2或posedge b2应该就可以了。

zxq6 发表于 2017-3-31 21:14:46

wang110 发表于 2017-3-31 20:56
为啥要两个时钟,去掉posedge a2或posedge b2应该就可以了。

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

gwj221 发表于 2017-3-31 21:24:45

实现不了 用高速时钟扫上升沿

zxq6 发表于 2017-3-31 22:02:12

zjykwym 发表于 2017-3-31 16:21
改成单边沿的吧,语法没问题,但是。。。

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

zxq6 发表于 2017-3-31 22:03:21

asma 发表于 2017-3-31 20:37
always @ 里面是时钟和复位,你这个a2 B2咋实现

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

putty 发表于 2017-3-31 22:28:02

你先想象一下, 你能用门电路搭这个功能么? 如果想不出来, 那么你这个写法就不行.

redroof 发表于 2017-3-31 22:50:25

zxq6 发表于 2017-3-31 21:14
我想实现的是,其中两个输入信号的任意一个上升沿,同一个reg实现计数,有没有建议的写法? ...

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

sme 发表于 2017-4-1 09:24:32

posedge a2 posedge b2两个去掉一个就行了

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

raymon 发表于 2017-4-13 10:29:41

利用边沿检测,生成使能信号,做下一单元的使能信号
页: [1]
查看完整版本: 有如下verilog代码编译出错,如何改?谢谢!