关于Verilog的问题
我想写一个模块,有三个输入,分别是Din,A,B,一个输出为Dout。当检测到A的上升沿时,不论B处于什么状态,输出Dout=Din。当检测到B的下降沿时,不论A处于什么状态,输出Dout=0。A的上升沿和B的下降沿不会同时到达。请问这个模块该怎么写??? always@ (posedge A or negedge B)if (!B)
Dout<=0;
else
Dout<=Din;
陈飞龙 发表于 2016-2-13 14:36
always@ (posedge A or negedge B)
if (!B)
Dout
感谢回复!
但这样写是有问题的,如果在A上升沿到达时B的值为0,那输出岂不是成了0,而不是要求中的Din。 zhsj 发表于 2016-2-17 18:56
感谢回复!
但这样写是有问题的,如果在A上升沿到达时B的值为0,那输出岂不是成了0,而不是要求中的Din ...
你不是说A的上升沿和B的下降沿不会同时到达吗? 陈飞龙 发表于 2016-2-17 21:36
你不是说A的上升沿和B的下降沿不会同时到达吗?
A的上升沿和下降沿是不会同时到达,但还是有可能在A上升沿到达的时候B已经变成0了呀!如图:
检测A的上升沿,B的下降沿
always @(posedge sclk) begin
A_1 <= A;
A_2 <= A_1;
end
assign A_P = A_1 && ~A_2;
always @(posedge sclk) begin
B_1 <= B;
B_2 <= B_1;
end
assign B_N = ~B_1 && B_2;
always @(posedge sclk) begin
if(A_P)
Dout <= Din;
if(B_N)
Dout <= 'b0;
end
进来看看学习一下
重生误入豪门 wap.xs7788.co/kanshu41/110771/ 6666666666666
页:
[1]