always
区块和always @*
区块之间是否有区别?Verilog:“always”和“always @ *”之间的区别
3
A
回答
3
always @*
是always
块的一种类型。它用于推断组合逻辑。
always @(posedge clock)
用于推断时序逻辑。
有关更多详细信息,请参阅IEEE标准(例如1800-2009)。
0
他们不一样!我曾经认为他们是一样的。但事实并非如此。
总是@(*)意味着任何东西,编译器会自动填充它。如果是组合逻辑,请使用它!所以你不会忘记任何东西,并使功能失效。
总是意味着这句话总是会被执行!如果没有延迟,系统暂停并且当你模拟时没有结果!很烦人。
例如,在FSM的下一个状态逻辑部分中:如果始终使用而不是总是@(*),则不起作用。
以下是我写的一个简单的序列检测器,其中这两个不同。如果需要,你可以编写一个tb来运行它。
`时间刻度为1ns/10马力
模块seq_detect3(//检测序列10110 中,//序列输入 CLK,时钟//正边沿触发 RST,//复位,高电平有效的同步 匹配//匹配,匹配的“1” );
input in, clk, rst;
output match;
wire in, clk, rst;
reg match;
reg [5:0] state, next_state;
parameter IDLE = 6'b000001; //no bit matched
parameter STATE1 = 6'b000010; //first 1 bit matched
parameter STATE2 = 6'b000100; //first 2 bits matched
parameter STATE3 = 6'b001000; //first 3 bits matched
parameter STATE4 = 6'b010000; //first 4 bits matched
parameter STATE5 = 6'b100000; //all 5 bits matched
//-----------S.M. & O.F.L.-----------
always @ (posedge clk) begin
if(rst) begin
state <= IDLE;
match <= #1 0;
end
else begin
state <= next_state;
if(state == STATE5) begin
match <= #1 1;
end
else begin
match <= #1 0;
end
end
end
//-----------next state logic-----------
always @(*) begin //Can not replaced by always here!!
case(state)
IDLE: if(in) next_state = STATE1; //0 keep, 1 next
else next_state = IDLE;
STATE1: if(in) next_state = STATE1; //0 next, 1 keep
else next_state = STATE2;
STATE2: if(in) next_state = STATE3; //0 idle, 1 next
else next_state = IDLE;
STATE3: if(in) next_state = STATE4; //0 s2, 1 next
else next_state = STATE2;
STATE4: if(in) next_state = STATE1; //0 next, 1 s1
else next_state = STATE5;
STATE5: if(in) next_state = STATE3; //0 idle, 1 s3
else next_state = IDLE;
default: next_state = IDLE;
endcase
end
endmodule
相关问题
- 1. Verilog在Always块中递归
- 2. php isUserExist always always
- 3. MKStoreKit -isSubscriptionActive always always False
- 4. always_comb和always @(*)
- 5. visual basic make key always always
- 6. 如何将“Always Always”值添加到CommaDelimitedList
- 7. OnBind()on service always always returns False - Android
- 8. Azure WebSite Always On
- 9. Couchbase rereduce always false
- 10. Cache.Get always returns null
- 11. max_execution_time always 300
- 12. _REQUIREDNAME always nil
- 13. stringFromDate always Nil
- 14. placeholder visible always false
- 15. Sparkle Always Up Date
- 16. DropDownList SelectedIndex always = 1
- 17. tf.train.get_checkpoint_state always None
- 18. IF Statement Always True
- 19. WebAPI [FromBody] always null
- 20. activemq brokerName always localhost?
- 21. cursor.getCount always = 0
- 22. slider AutoToolTip always on
- 23. carrierwave content_type always nil
- 24. SerialPort.Read()always TimeoutException
- 25. browser position.address.postalCode always null
- 26. angularjs routing:param always undefined
- 27. page.Isvalid always return false?
- 28. UITextField always resignFirstResponder
- 29. CGImageSourceCreateWithURL return always nil
- 30. Ajax readyState always 1