我遇到了这段代码的麻烦。我知道问题在于我的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
答案 0 :(得分:1)
两个选项:
阵列模块实例。不常用但是IEEE1364-1995的一部分。这种方法适用于简单的迭代。
nand nd[7:1] (anode[7:1], btnl, 1'b1);
生成循环。在IEEE1364-2001中添加并常用。这种方法更灵活,可用于更好的编译/精化代码扩展/选择。
genvar gidx;
generate
for (gidx=1; gidx<8; gidx=gidx+1) begin : assign_anode
nand(anode[gidx], btnl, 1'b1);
end
endgenerate