本帖最后由 hmf1235789 于 2018-2-24 11:11 编辑
非常感谢提供的另一种方法,你的方法如下:
- module blank(
- input clk,
- input up_in, dw_in,
- output up_out, dw_out
- );
- reg upIn,dwIn,pwm_up, pwm_dw, u_d;
- wire[1:0] updw = {upIn, dwIn};
- always @(posedge clk)
- begin
- upIn <= up_in; //保存输入状态
- dwIn <= dw_in;
- if(updw===2'b10)
- u_d <= 1; //up_in=1 优先级=1
- else if(updw===2'b01)
- u_d <= 0; //dw_in=1 优先级=0
- pwm_up <= upIn; //输入状态
- pwm_dw <= dwIn;
- end
- //输出=
- assign up_out = pwm_up & ~(~u_d & pwm_dw);
- assign dw_out = pwm_dw & ~(u_d & pwm_up);
- endmodule
其中没有rst,优先级u_d没有一个初始值。如果外部的up_in,dw_in输入时刻同时为1,那u_d没有做处理,应该默认为0?如果u_d=0,up_in,dw_in同时为1,根据up_out = pwm_up & ~(~u_d & pwm_dw)得出up_out=0,dw_out = pwm_dw & ~(u_d & pwm_up)得出1;也就是说如果输入时刻同时为1,那么up_out就要强制为0了。是这样解释的吗?
|