多位逻辑门

时间:2017-11-14 20:14:38

标签: verilog

我遇到了这段代码的麻烦。我知道问题在于我的NAND和AND门的7位输出,但我不知道如何简化它而不为每个位创建一个单独的门。我也不确定阳极_1是用于什么,或者是buf语句。我被告知要包括它们。

module seven_segment_top(sw, btnc, btnl, btnr, segment, anode, anode_1_7);
    input [3:0] sw;
    input btnc, btnl, btnr, anode_1_7;
    output [7:0] segment, anode;
    wire lnot;

    seven_segment S0(sw[3:0], segment[6:0]);
    not(segment[7], btnc);

    nor(anode[0], btnl, btnr);
    nand(anode[7:1], btnl, 1'b1);
    not(lnot, btnl);
    and(anode[7:1], btnr, lnot);

    buf(anode[1],anode_1_7);
    buf(anode[2],anode_1_7);
    buf(anode[3],anode_1_7);
    buf(anode[4],anode_1_7);
    buf(anode[5],anode_1_7);
    buf(anode[6],anode_1_7);
    buf(anode[7],anode_1_7);
endmodule

1 个答案:

答案 0 :(得分:1)

两个选项:

  1. 阵列模块实例。不常用但是IEEE1364-1995的一部分。这种方法适用于简单的迭代。

    nand nd[7:1] (anode[7:1], btnl, 1'b1);
    
  2. 生成循环。在IEEE1364-2001中添加并常用。这种方法更灵活,可用于更好的编译/精化代码扩展/选择。

    genvar gidx;
    generate
      for (gidx=1; gidx<8; gidx=gidx+1) begin : assign_anode
        nand(anode[gidx], btnl, 1'b1);
      end
    endgenerate