jjj 发表于 2012-12-2 14:30:27

问一个verilog基本知识,

module sset(clk,indb,outdb);
input clk;
input indb;
output outdb;

reg outdb;
reg 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:21

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:20

你然你都说了 : 书上说always @(posedge clk)语句里面应该用非阻塞赋值

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

仔细看下,转换后的逻辑图

jjj 发表于 2012-12-3 09:33:41

多谢上面两位的回答,我再好好看看书

浮云残雪 发表于 2012-12-3 13:19:38

这是两种赋值的区别。一种用于时序电路,一种用于组合电路
页: [1]
查看完整版本: 问一个verilog基本知识,