1

我想设计一个 4 位比较器作为使用 2 位比较器的结构模型。

如附图所示,给Gt_I、Eq_I、Lt_I每一个赋予初始值后,需要设计一个4位比较器作为2位比较器的结构模型。

我试过的代码是在分配Gt_I、Eq_I和Lt_I的初始值时出现语法错误。我想知道一个解决方案。

<2位>

module Comparator_new(a, b, Gt_I, Eq_I, Lt_I, Gt_O, Eq_O, Lt_O);

input [1:0] a;
input [1:0] b;
input Gt_I, Eq_I, Lt_I;
output Gt_O, Eq_O, Lt_O;

assign Gt_O = ~(a[1] & ~b[1] | ~a[1] & b[1]) & a[0] & ~b[0] | a[1] & ~b[1];
assign Eq_O = ~(a[0] & ~b[0] | ~a[0] & b[0]) & ~(a[1] & ~b[1] | ~a[1] & b[1]);
assign Lt_O = ~(a[1] & ~b[1] | ~a[1] & b[1]) & ~a[0] & b[0] | ~a[1] & b[1];
endmodule

<4位>

module Comparator_stru(a, b, Gt_I, Eq_I, Lt_I, Gt, Eq, Lt);

input [3:0] a;
input [3:0] b;
input Gt_I = 2'b00;
input Eq_I = 2'b01;
input Lt_I = 2'b00;
output Gt, Eq, Lt;

wire x, y, z;

Comparator_new c0(.a(a), .b(b), .Gt_I(Gt_I), .Eq_I(Eq_I), .Lt_I(Lt_I), .Gt_O(x), .Eq_O(y), .Lt_O(z));
Comparator_new c1(.a(a), .b(b), .Gt_I(x), .Eq_I(y), .Lt_I(z), .Gt_O(Gt), .Eq_O(Eq), .Lt_O(Lt));

assign Gt_O = ~(a[3] & ~b[3] | ~a[3] & b[3]) & a[2] & ~b[2] | a[3] & ~b[3];
assign Eq_O = ~(a[2] & ~b[2] | ~a[2] & b[2]) & ~(a[3] & ~b[3] | ~a[3] & b[3]);
assign Lt_O = ~(a[3] & ~b[3] | ~a[3] & b[3]) & ~a[2] & b[2] | ~a[3] & b[3];
endmodule
`timescale 1ns/10ps

module tb_Comparator_stru;
reg a, b;
wire Gt, Eq, Lt;

Comparator_stru tb(.a(a), .b(b), .Gt(Gt), .Eq(Eq), .Lt(Lt));

initial
begin
    $dumpfile("test_Comparator_stru_out.vcd");
    $dumpvars(-1, tb);
    $monitor("%b", Gt);
    $monitor("%b", Eq);
    $monitor("%b", Lt);
end

initial
    begin
        a = 2'b00; b = 2'b00;
    #50 a = 2'b01; b = 2'b00;
    #50 a = 2'b01; b = 2'b01;
    #50 a = 2'b01; b = 2'b10;
    #50 a = 2'b10; b = 2'b10;
    #50 a = 2'b11; b = 2'b10;
    #50 a = 2'b11; b = 2'b11;
    #50;
    end
endmodule

图表

4

2 回答 2

0

Gt_I, Eq_I, 和Lt_I是模块的输入端口Comparator_stru。他们被他们的司机驱动,并从他们的司机那里获得价值。

在您的情况下,如果要为它们分配初始值,则需要使用initial块,并在测试台中进行。

<4位>

module Comparator_stru(a, b, Gt_I, Eq_I, Lt_I, Gt, Eq, Lt);

input [3:0] a;
input [3:0] b;
input Gt_I;  // = 2'b00;
input Eq_I;  // = 2'b01;
input Lt_I;  // = 2'b00;

试验台

Comparator_stru tb(.a(a), .b(b), .Gt_I(Gt_I), .Eq_I(Eq_I), .Lt_I(Lt_I), .Gt(Gt), .Eq(Eq), .Lt(Lt));

initial begin
    Gt_I = 1'b0;
    Eq_I = 1'b1;
    Lt_I = 1'b0;
end
于 2020-10-12T06:03:53.117 回答
-1

模块 Comparator_stru() 将分配变量为 Gt、Lt、Eq 而不是 Gt_O、Lt_O、Eq_O,因为该模块没有 Gt_O、Lt_O、Eq_O 作为输出。

于 2021-10-26T21:36:44.907 回答