Verilog中generate及prameter語法的使用


一:generate 的作用

  1)構造循環結構,用來多次實例化某個模塊

  2)構造條件generate結構,用來在多個塊之間最多選擇一個代碼塊,條件generate結構包含if--generate結構和case--generate形式。

  3)  斷言

  generate 循環結構

  generate循環的語法與for循環語句的語法很相似。但是在使用時必須先在genvar聲明中聲明循環中使用的索引變量名,然后才能使用它。genvar聲明的索引變量被用作整數用來判斷generate循環。genvar聲明可以是generate結構的內部或外部區域,並且相同的循環索引變量可以在多個generate循環中,只要這些環不嵌套。genvar只有在建模的時候才會出現,在仿真時就已經消失了。

  在“展開”生成循環的每個實例中,將創建一個隱式localparam,其名稱和類型與循環索引變量相同。它的值是“展開”循環的特定實例的“索引”。可以從RTL引用此localparam以控制生成的代碼,甚至可以由分層引用來引用。Verilog中generate循環中的generate塊可以命名也可以不命名。如果已命名,則會創建一個generate塊實例數組。如果未命名,則有些仿真工具會出現警告,因此,最好始終對它們進行命名。

module alu(
    input a,b,
    output sum,count);

assign sum = a + b ;
assign cout = a & b ;

endmodule

module my_design
    #(parameter N=4)
    (input [N-1:0] a,b,
     output [N-1:0] sum,cout);

    genvar i ;
    
    generate (optional)
        for( i = 0 ; i < N ; i++) begin: gen
            alu alu_inst (a[i] , b[i] , sum[i] , cout[i] );
        end
    endgenerate
endmodule

 

二、prameter 作用

 Verilog中通過使用parameter可以在調用模塊時修改模塊里面的常數參數,提高模塊的復用性,在模塊調用時將參數傳入模塊。

以一個二選一MUX(選擇器)為例

module Mux2_1 
#(parameter WIDTH=2)
(in1,in2,sel,out);
//parameter WIDTH=2;
input[WIDTH-1:0] in1;
input[WIDTH-1:0] in2;
input          sel;
output[WIDTH-1:0] out;

assign out=sel?in1:in2;
endmodule

頂層模塊在調用Mux2_1時,可以在外部修改參數

module ParaDemo(in1,in2,sel,out);
parameter WIDTH=4;
input[WIDTH-1:0] in1;
input[WIDTH-1:0] in2;
input          sel;
output  [WIDTH-1:0] out;

Mux2_1 #(WIDTH) //此時Mux2_1中WIDTH值=4
u_mux2_1(
  .in1(in1),
  .in2(in2),
  .sel(sel),
  .out(out));
endmodule

如果是一個計數器模塊,要對參數化的信號count進行復位和+1的賦值操作,位寬聲明如下:

module counter
#(parameter WIDTH=16)
( clk,rst_n,count)
input clk;
input rst_n;
output[WIDTH-1:0] count;

always@(posedge clk or negedge rst_n)begin
    if(!rst_n)
        count<= 0;  //賦0語句  或count<=‘b0  ‘之前不需要帶位寬;       如果要賦全1:  count <= -1;
    else
        count <= count + {(WIDTH-1){1'b0},{1'b1}};
end

endmodule

 

 

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM