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
