verilog always综合出来的信号没有经过触发器
时间:10-02
整理:3721RD
点击:
always @( r_MAS_FSM ) begin
case ( r_MAS_FSM )
P_MAS_IDLE : r_DATA_O <= 1'b0 ;
P_MAS_START : r_DATA_O <= 1'b0 ;
P_MAS_TX : r_DATA_O <= r_WR_SHF[7] ;
P_MAS_TX_ACK : r_DATA_O <= 1'b0 ;
P_MAS_DONE : r_DATA_O <= 1'b1 ;
default : r_DATA_O <= 1'b0 ;
endcase
end
对于这个语句我在实际综合后查看电路发现最终输出的r_DATA_O根本没有经过触发器
也就是说这个语句综合产生的电路和我用assign产生的没有区别,都是组合逻辑,是这样的吗?
对于always语句是不是只有敏感条件是上升沿或者下降沿的时候综合之后才会经过D触发器
否则产生出来的还是组合逻辑电路,是不是这样的情况?
有谁知道的能告诉一下哇,多谢各位了?
case ( r_MAS_FSM )
P_MAS_IDLE : r_DATA_O <= 1'b0 ;
P_MAS_START : r_DATA_O <= 1'b0 ;
P_MAS_TX : r_DATA_O <= r_WR_SHF[7] ;
P_MAS_TX_ACK : r_DATA_O <= 1'b0 ;
P_MAS_DONE : r_DATA_O <= 1'b1 ;
default : r_DATA_O <= 1'b0 ;
endcase
end
对于这个语句我在实际综合后查看电路发现最终输出的r_DATA_O根本没有经过触发器
也就是说这个语句综合产生的电路和我用assign产生的没有区别,都是组合逻辑,是这样的吗?
对于always语句是不是只有敏感条件是上升沿或者下降沿的时候综合之后才会经过D触发器
否则产生出来的还是组合逻辑电路,是不是这样的情况?
有谁知道的能告诉一下哇,多谢各位了?
要有时钟。多看看书。少问低级问题。
一般代码上always用 always @(posedge SYS_CLK or negedge XRST) begin就是组合逻辑加寄存器。我的意思是既然上面定义的r_DATA_O是寄存器信号,那么出来应该是要经过寄存器的,现在出来的是不进过寄存器的,那么就有矛盾了。
名字是死的,人是活的,而且,写组合逻辑用《=也不符合规矩,不过不影响综合工具,因为工具是活的,比你死理解强多了。多看点书。
嗯,只有敏感表里边沿触发的时候才会产生触发器,否则就是组合逻辑
或者if语句条件不完全的时候会产生锁存器
得是跳变沿才行吧,工具也不会看到clk就以为是时钟,得有posedge才行
reg类型的不一定都会生成寄存器,像你写的这种情况就会生成组合逻辑
reg和wire在代码上的区别是wire用assign定义,reg要写在过程块里
verilog语言里并不是定义为reg就综合出触发器的。
但要想综合出触发器必须定义为reg。
连时钟都没有
连时钟还要有沿
