作为我在verilog中的第一个程序,我写了一个4位比较器,由1位比特组成。我无法弄清楚当Eo = 1时,Lo = 1的原因。我已经在modelsim中编写了这个,并且是调试工具的新手。
我编写的代码基于http://www.onsemi.com/pub_link/Collateral/MC14585B-D.PDF
上的逻辑图// 1 Bit comparator
module comparator_1(A, B, L, E, G);
input A, B; // 2 bits to be compared
output L, E, G; // 3 possible outputs
wire s1, s2; // connecting wires for inverters
not X1 (s1, A); // create inverter
not X2 (s2, B);
nand X3 (L, s1, B);
nand X4 (G, s2, A);
nand X5 (E, L, G);
endmodule
//4 bit comparator
module comparator_4(Lo, Eo, Go, A, B, Li, Ei, Gi);
input [3:0] A; input [3:0] B; //4 bit inputs
input Li, Gi, Ei; //A<B, A=B, A>B inputs
output Lo, Go, Eo; //A<B, A=B, A>B outputs from chip
wire [3:0]L; wire [3:0]E; wire [3:0]G; //A<B, A=B, A>B outputs from individual comparators
wire s0, s1, s2, s3, s4, s5, s6, s7, s8;
// Set up individual 1 bit converters
comparator_1 comp0(A[0], B[0], L[0], E[0], G[0]);
comparator_1 comp1(A[1], B[1], L[1], E[1], G[1]);
comparator_1 comp2(A[2], B[2], L[2], E[2], G[2]);
comparator_1 comp3(A[3], B[3], L[3], E[3], G[3]);
// Gate logic from schematic
or X1(s3, E[3], L[2]);
or X2(s2, E[3], E[2], L[1]);
or X3(s1, E[3], E[2], E[1], L[0]);
or X4(s0, E[3], E[2], E[1], E[0], Li);
nor X5(s4, E[3], E[2], E[1], E[0], Ei);
nand X6(s5, L[3], s0, s1, s2, s3);
nor X7(Go, s5, s4);
assign Eo = s4;
assign Lo = s5;
endmodule
由于
答案 0 :(得分:0)
根据真值表,我会将你的Eo条件描述为
AND(s4,E[3], E[2], E[1], E[0], Ei);
assign E0 = s4;
在我看来,我确定为什么真值表会分配A&lt;的可能输出。对于级联输入,B == 1且A = B == 1。这说它既小又平等。 Bogus逻辑恕我直言,但也许有一些我不知道的用途。但是上面的Eo语句将在两种情况下都覆盖你,其中所有的等号都被断言,并且级联输入也被断言。
我可以问你是否试图在更高级别写这个?我对所有的NOR和OR感到困惑。
module comparator_4(Lo, Eo, Go, A, B, Li, Ei, Gi);
input [3:0] A; input [3:0] B; //4 bit inputs
input Li, Gi, Ei; //A<B, A=B, A>B inputs
output Lo, Go, Eo; //A<B, A=B, A>B outputs from chip
begin
Eo = A==B & Ei;
Lo = A<B & Li;
Go = (A>B & Gi) || (A==B & ~Li & ~Ei); // Last term covers weird case
end
end module
我没有时间查看它,但我认为这样做会有效。
答案 1 :(得分:0)
所以,我解决了这个问题。数据表说输入E门应默认为高电平,然后切换
or X4(s0, E[3], E[2], E[1], E[0], Li);
nor X5(s4, E[3], E[2], E[1], E[0], Ei);
回到
or X4(s0, E[3], E[2], E[1], E[0], ~Li);
nor X5(s4, E[3], E[2], E[1], E[0], ~Ei);