| 谢谢分享! |
|
回复【楼主位】qianrushistm32:
--------------------------------- 楼主,那么能不能让我请教一下,这个问题搞了我很久了 本人最近在学习verilog,,看《verilog数字设计与综合》第二版的14.7节时,分析代码,觉得有想不通的地方,就来请教一下了。书上代码先贴上: 这是整个问题的网址:http://andrew810810.blog.163.com ... 763992007895125290/ 以下是一部分代码: //用有限状态机的办法,设计报纸售卖机的投币器 module vend(coin,clock,reset,newspaper); //声明输入输出端口 input [1:0] coin; input clock; input reset; output newspaper; wire newspaper; //声明有限状态机的内部状态 wire [1:0] NEXT_STATE; reg [1:0]  RES_STATE;
//状态编码 parameter s0=2'b00; parameter s5=2'b01; parameter s10=2'b10; parameter s15=2'b11; //组合逻辑 function [2:0] fsm; input [1:0] fsm_coin; input [1:0] fsm_PRES_STATE; reg fsm_newspaper; reg [1:0] fsm_NEXT_STATE; begin case (fsm_PRES_STATE) S0: //状态为s0 begin if(fsm_coin==2'b10) begin fsm_newspaper=1'b0; fsm_NEXT_STATE=s10; end else if (fsm_coin==2'b01) begin fsm_newspaper=1'b0; fsm_NEXT_STATE=s5; end else begin fsm_newspaper=1'b0; fsm_NEXT_STATE=s0; end end s5: //状态为s5 begin if(fsm_coin==2'b10) fsm_newspaper=1'b0; fsm_NEXT_STATE=s15; end else if(fsm_coin==2'b01) begin fsm_newspaper=1'b0; fsm_NEXT_STATE=s10; end else begin fsm_newspaper=1'b0; fsm_NEXT_STATE=s5; end end s10: //状态为s10 begin if(fsm_coin==2'b10) begin fsm_newspaper=1'b0; fsm_NEXT_STATE=s15; end else if (fsm_coin==2'b01) begin fsm_newspaper=1'b0; fsm_NEXT_STATE=s15; end else begin fsm_newspaper=1'b0; fsm_NEXT_STATE=s10; end end s15: // 状态为s15 begin fsm_newspaper=1'b1; fsm_NEXT_STATE=s0; end endcase fsm={fsm_newspaper,fsm_NEXT_STATE}; end endfunction //每当硬币放入或当前状态改变时,组合逻辑动作 assign {newspaper,NEXT_STATE}=fsm(coin,PRES_STATE); //用同步复位、时钟正跳变沿触发的状态触发器 always @(posedge clock) begin if(reset==1'b1)   RES_STATE<=S0;
else   RES_STATE<=NEXT_STATE;
end endmodule 我的疑问在于这里: //每当硬币放入或当前状态改变时,组合逻辑动作 assign {newspaper,NEXT_STATE}=fsm(coin,PRES_STATE); 就是上面这一句我感到不理解。结合问题,如果我在时钟第一个下降沿改变coin(例如投个5分的硬币),那么将触发这个assign语句,从而调用函数,使NEXT_STATE变为s5状态;下降沿后是第一个上升沿,又触发语句“PRES_STATE<=NEXT_STATE;”那么PRES_STATE也变为s5状态,那么不是再一次触发了assign语句吗,而且此时coin还是2‘b01(因为题目说coin值保持一个时钟周期)。这么的一个时钟周期内两次触发assgin语句,不是造成错误结果吗? |
| 谢谢分享。 |
| 这里例子也有点太简单了吧,书上一般都会有的 |
| 谢谢分享 |
/1
|手机版|OpenEdv-开源电子网
( 粤ICP备12000418号-1 )
GMT+8, 2026-10-11 01:44
Powered by OpenEdv-开源电子网
© 2001-2030 OpenEdv-开源电子网