簡體   English   中英

如何在verilog中切換模塊?

[英]How to switch modules in verilog?

我想使用SW[15]在模塊A_7segB_7seg之間切換,但它不起作用。 (2個模塊單獨工作)

module mix(input CLOCK,input [15:0]SW,output reg [15:0] led,output [3:0] an,output reg[7:0] seg);
    generate
    case(SW[15])
        1'b0:A_7seg (.CLOCK(CLOCK),.an(an),.seg(seg));
        1'b1:B_7seg (.CLOCK(CLOCK),.SW(SW),.led(led),.an(an),.seg(seg));
    endcase
    endgenerate
endmodule

由於“2 個模塊單獨工作”,簡單的方法是使用SW[15]在 2 個模塊的輸出之間進行選擇。

module mix(
    input CLOCK,
    input [15:0] SW,
    output reg [15:0] led,
    output reg [3:0] an,
    output reg [7:0] seg
);
    wire [15:0] B_led;
    wire [3:0] A_an, B_an;
    wire [7:0] A_seg, B_seg;

    // if not using 'generate' block, modules are instantiated at
    // the top level, not in other 'if'/'case'/... structures.
    // and name the 2 instantiations
    A_7seg u_A_7seg (.CLOCK(CLOCK), .an(A_an), .seg(A_seg));
    B_7seg u_B_7seg (.CLOCK(CLOCK), .SW(SW), .led(B_led), .an(B_an), .seg(B_seg));

    // this extra circuit is needed to select between the two
    always@(*)begin
        if(SW[15])begin
            led = B_led;
            an  = B_an;
            seg = B_seg;
        end
        else begin
            led = 16'h0;  // <-- I assume the inactive value for 'led' is all-zero
            an  = A_an;
            seg = A_seg;
        end
    end
endmodule

您可能還想使用SW[15]將輸入選通到當前無法降低功耗的輸入。

在了解如何編寫代碼之前,您需要弄清楚原理圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM