amobbs.com 阿莫电子技术论坛

标题: 问一个verilog基本知识, [打印本页]

作者: jjj    时间: 2012-12-2 14:30
标题: 问一个verilog基本知识,
module sset(clk,indb,outdb);
input clk;
input[15:0] indb;
output[15:0] outdb;

reg[15:0] outdb;
reg[15:0] outtemp;


always @(posedge clk)
begin
outtemp=indb;
outdb=outtemp;

end
endmodule
这样的写法是不是就是已经默认了:
assign outdb=outdb;
assign indb=indb;
还有在这句里面,
这样修改:
always @(posedge clk)
begin
outtemp<=indb;
outdb<=outtemp;
end
是不是和原程序效果一样?如果效果不一样,有什么区别??看书上说always @(posedge clk)语句里面应该用非阻塞赋值,为什么很多程序还用阻塞赋值?
刚学FPGA,有很多为什么!!!
作者: mitchell    时间: 2012-12-2 14:40
always @(posedge clk)
begin
outtemp=indb;
outdb=outtemp;
end

这样的写法,等同于:
always @(posedge clk)
begin
outtemp<=indb;
outdb<=indb;
end

"看书上说always @(posedge clk)语句里面应该用非阻塞赋值,为什么很多程序还用阻塞赋值?"
阻塞赋值可以方便的在时序逻辑中实现复杂的组合逻辑表达式。
作者: chinabn    时间: 2012-12-3 09:28
你然你都说了 : 书上说always @(posedge clk)语句里面应该用非阻塞赋值

书上说的是 : "应该"而不是“必须”
就好比中午应该吃饭,而不是必须吃饭!

仔细看下,转换后的逻辑图
作者: jjj    时间: 2012-12-3 09:33
多谢上面两位的回答,我再好好看看书
作者: 浮云残雪    时间: 2012-12-3 13:19
这是两种赋值的区别。一种用于时序电路,一种用于组合电路




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4