close

階層式設計


        將模組的埠與外部訊號連接的方法有兩種,分別是:依照定義模組時埠列的「順序」(in order)來連接,以及依「指定名稱」(by name)的方法來連接。這兩種方法必須分開使用,不可以同時在相同模組中使用。


        依照定義模組時埠列的「順序」(in order)來連接 :


        這個方法對於初學Verilog的人來說是最直覺的方法,將外部訊號依照定義這個模組時的埠列順序街道引用這個模組的別名。


        依照「指定名稱」(by name)的方法來連接 :


        對於一個較大的設計而言,ㄧ個模組擁有50個不是很正常的事,這個時候若要記得每個埠的順序是相當困難且容易犯錯。Verilog為此藉由指定埠的名稱,將外界訊號連接到埠的方法,使用這個方法就不需要考慮到輸入訊號需要對應埠列順序的問題。


 


Exp:


        首先定義較小的模組 : Mux, Register8Rotate_Data之後再去引用它們。


        // 小模組 1


        Module Mux(sel, a, b, out);


                Input sel;


                Input [7:0]a,b;


                Output [7:0]out;


                Wire [7:0]out;


               


                Assign out=sel?a:b;


        Endmodule


        // 小模組 2


        Module Register8(clock, reset, data, q);


                Input clock, reset;


                Input [7:0]data;


                Output [7:0]q;


                Reg [7:0]q;


                        always@(posedge clock)


                                begin


                                        if(reset)


                                                q=0;


                                        else


                                                q=data;


                                end


        endmodule


        // 小模組 3


        Module Rotate_Data(clock, reset, left_rotate, data, q);


                Input clock, reset, left_retate;


                        .


                        .


                        .


Endmodule


// 依順序(by order)


// 依照定義模組時的埠列順序來連接


Module exp_byorder(clock, reset, sel, left_rotate, a, b, out);


        Input clock, reset, sel, left_rotate;


        Input [7:0]a,b;


        Output [7:0]out;


        Wire [7:0]mux_out,reg_out;


        Mux                                Mux_1(sel,a,b,mux_out);


        Register8         Register8(clock,reset,mux_out,reg_out);


Rotate_Data           Rotate_Data1(clock,reset,left_rotate, reg_out, out);


endmodule


// 依名稱(by name)


// 依此方法來連接,Port的順序就無所謂了


Module exp_byorder(clock, reset, sel, left_rotate, a, b, out);


        Input clock, reset, sel, left_rotate;


        Input [7:0]a,b;


        Output [7:0]out;


        Wire [7:0]mux_out,reg_out;


        Mux                        Mux_1(.sel(sel),.a(a),.b(b),.out(mux_out));


        Register8         Register8(.clock(clock),.reset(reset),


.data(mux_out),.q(reg_out));


Rotate_Data           Rotate_Data1(.clock(clock),.reset(reset),


.left_rotate(left_rotate),.data(reg_out),.q(out));


endmodule


 


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 jk3527101 的頭像
    jk3527101

    簡單也是另一種快樂

    jk3527101 發表在 痞客邦 留言(1) 人氣()