有如下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
网上没查到多少有用的资料,总感觉这么写代码不应该有语法错误,请有经验的大虾解解惑,谢谢! 改成单边沿的吧,语法没问题,但是。。。 谷歌翻译如下:
cpld.v(78)中的Verilog HDL条件语句错误:不能将条件中的操作数与总体构造的包围事件控件中的相应边匹配。
你将“posedge a2 or posedge b2 or”删掉即可编译,应该没有错误。 always @ 里面是时钟和复位,你这个a2 B2咋实现 建議先看看"Recommended HDL Coding Styles", altera handbook裡面的某章。
要先有基本數位電路元件的觀念再去寫verilog code合成出來。 为啥要两个时钟,去掉posedge a2或posedge b2应该就可以了。 wang110 发表于 2017-3-31 20:56
为啥要两个时钟,去掉posedge a2或posedge b2应该就可以了。
我想实现的是,其中两个输入信号的任意一个上升沿,同一个reg实现计数,有没有建议的写法? 实现不了 用高速时钟扫上升沿 zjykwym 发表于 2017-3-31 16:21
改成单边沿的吧,语法没问题,但是。。。
单边沿,是不是需要把reset改为高电平复位? asma 发表于 2017-3-31 20:37
always @ 里面是时钟和复位,你这个a2 B2咋实现
就是把a2 b2当时钟,实现任意一个信号的上升沿,对同一个reg实现计数 你先想象一下, 你能用门电路搭这个功能么? 如果想不出来, 那么你这个写法就不行. zxq6 发表于 2017-3-31 21:14
我想实现的是,其中两个输入信号的任意一个上升沿,同一个reg实现计数,有没有建议的写法? ...
不存在这样的门电路。
FPGA里面限制一个地方只能用一个时钟。
就算你造asic也不行,你想想怎么搭个这种电路岀来? posedge a2 posedge b2两个去掉一个就行了
要想上升/下降沿都计数,就是采用一个更高的频率,对a2/b2采样并检测出边沿后将其输出作为计数使能,高频时钟作为计数时钟。 利用边沿检测,生成使能信号,做下一单元的使能信号
页:
[1]