하나의 간단한 비동기 시퀀스 검출기를 쓰고 있지만 한 번에 비정상적인 결과가 나타납니다. 코드 "assign a8 = ((y2&&inp1&&~inp2)||(y1&&inp1));
"잘 작동하지만 위의 줄 내 코드에서 다음 줄을 바꿀 경우 올바른 결과를 제공하지 않습니다.Verilog 코드의 비정상적인 동작
assign a6 = (y2&&inp1&&~inp2);
assign a5 = (y1&&inp1);
assign a8 = a6||a5;
두 가지 모두 기술적으로 동일하지만 위의 코드 줄을 사용할 때 출력이 올바르지 않은 이유를 이해할 수 없습니다.
module Async_Design(inp1,inp2,outp);
input inp1,inp2;
output outp;
wire y1 ,y2;
/*assign a6 = (y2&&inp1&&~inp2);
assign a5 = (y1&&inp1);
assign a8 = (a6||a5);*/
/*Uncommenting the above section and commenting below
line is not giving correct result*/
assign a8 = ((y2&&inp1&&~inp2)||(y1&&inp1));
Delay D1(y1,a8);
nand(a1,y1,1'b1);
nand(a2,a1,inp1);
nand(a3,a2,1'b1);
nand(a4,a3,inp2);
nand(a5,a4,1'b1);
Delay D2(y2,a5);
assign outp = y1;
endmodule
module Delay(q,inp);
output q;
input inp;
reg q;
initial
begin
q=1'b0;
end
always @(*)
begin
q=((inp&&1'b1)||(inp&&1'b1));
end
endmodule
/***********************************************/
TEST BENCH
/***********************************************/
module Async_Design_Test;
reg inp1,inp2;
wire outp;
reg[15:0] sequence1;
reg[15:0] sequence2;
integer i;
Async_Design Async(inp1,inp2, outp);
initial
begin
sequence1 = 16'b 0101_1111_0111_1111;
sequence2 = 16'b 1010_1010_1110_1111;
for(i = 0; i <= 15; i = i+1)
begin
inp1 = sequence1[i];
inp2 = sequence2[i];
#6
$display(" Input1 = ", inp1, " Input2 = ", inp2, " Output = ", outp,);
end
end
endmodule
사람은 변화가 유효 아니다 후 내가
[EDA Playground] (http://www.edaplayground.com/x/6Vg)에서 나란히 비교해보십시오. – Morgan