微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > FPGA的语句请教

FPGA的语句请教

时间:10-02 整理:3721RD 点击:
FPGA中的两种语句
A <= sel ? B : C;
和语句
if(sel)
A <= B;
else
A <= C;
两种语句有区别么?

前者完整是
assign A = sel ? B : C;
A 为wire型
后者是在
always @ ( * )
if(sel)
A = B;
else
A = C;
A为REG型,但并不综合成寄存器,
在功能与综合结果上,没有区别
还注意下 <=与<的区别

楼上正解,一般情况组合逻辑都使用=,而时序逻辑才使用<=

前者A wire 型,后者A 是寄存器型,同时后者需要在一定的触发条件下才能执行

我可以在一个 always 里面写
always @(posedge clk)
if(rst)
A <= 0;
else
A <= sel ? B : C;

这样的话两个有区别么

可以把你自己写的代码拿到synplify中综合看一下就知道,不复杂的

d上去!

去试试就知道了呗

挣钱好辛苦啊

你试一下把他们分别综合看一下RTL图就很明白有什么不同啦。
assign a= sel?b:c; 综合出的是组合逻辑。
而在always @ (posedge clk) 块中的综合出来是时序逻辑。在这里用运算符形式和用if语句来实现其综合结果是一致的。
最好自己动手试一下。看过结果马上就理解了。
顺便说一句。注意区分<=和=的不同,还有复位电路是同步还是异步的。

等高手解答

没区别,Altera的工程师也这样写!
而且个人觉得这样写的代码更简洁易读。

拜读了。

不知道 顶顶

综合的结果应该是一样的,建议看一些synopsys的SOLD文档,里面有专门讲Verilog综合后结果的例子,还讲了大概综合的方法,应该会有帮助的

功能差不多,资源和逻辑结构有差异吧。

受教了

过来学习学习

组合逻辑和时序逻辑的区别

把综合后的原理图比较一下,就明白了啊

5# MrJiang
同问,VHDL里是没有WIRE和REGISTER的说法吧,一律用<=。
应该加上时钟沿判断之后,就是一个寄存器加组合逻辑的功能块了,不知对否

楼上正解,一般情况组合逻辑都使用=,而时序逻辑才使用<=

学习了

顶一下

这个都是CPLD的吧
初学看VHDL

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top