本帖最后由 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了。是这样解释的吗?
|