嵌入式技术
verilog语法 - 参数例化
1、参数定义parameter
module ram_1r1w #( parameter width=128, parameter deepth=32 ) ( input wclk, input [width-1:0] wdin, ..................................... input rclk, output [width-1:0] dout, ................................... ); .................... .................... ..................... endmodule
可传递的参数例化建议放在module名的后面,如上所示,采用#( parameter xxx=xxx, parameter xxx=xxx, ....)的格式,方便查看和修改。
2、参数例化
ram_1r1w #( .width(128), .deepth(96) ) ram_1r1w_96x128 ( .wclk(wclk), .wen(write_en), .waddr(waddr), .wdin(wdata), .rclk(rclk), .ren(read_en), .raddr(raddr), .dout(rdata) );
在模块例化时可使用参数传递,格式如上所示
module_name #(.parameter1(xxx1),.paramter2(xxx2))
module_name_u0 ( .signal1(s1), .signal2(s2),.............);
参数例化括号内也可以使新的参数,如下所示
module mactx_32x128_fifo #( parameter WIDTH=128, parameter DEEPTH=32 ) ( input wclk, ...................... input rclk, ................... ) ................ ................ ram_1r1w #( .width(WIDTH), .deepth(DEEPTH) ) ram_1r1w_u0 ( .wclk(wclk), .wen(write_en), .waddr(waddr), .wdin(wdata), .rclk(rclk), .ren(read_en), .raddr(raddr), .dout(rdata) );
verilog语法 - 用‘b,‘h,‘d赋值
1、几种不同的赋值方式
在Verilog编码过程中,经常会给信号赋值,赋值有时候需要指定信号位宽,如下所示。Verilog 2005 版本支持使用省略位宽的方式赋值。
//采用常数位宽直接赋值 wire [512-1:0] func_id; assign func_id = 512'b0 ; //采用宏定义 指定位宽 // `define PCIE_FUNC_ID 512 ; wire [512-1:0] func_id; assign func_id = {(`PCIE_FUNC_ID){1’b0}}; //省略写法,省略位宽512bit wire [512-1:0] func_id; assign func_id = ’b0 ;
2、采用省略位宽的方式赋值
Verilog 2005 版本支持使用省略位宽的方式赋值,’b,’d,’h,采用省略位宽的方式可以向左主动补齐,如果省略了进制符合b/d/h/o,则默认是十进制。
Example 4—Automatic left padding reg [11:0] a, b, c, d; initial begin a = 'h x; // yields xxx b = 'h 3x; // yields 03x c = 'h z3; // yields zz3 d = 'h 0z3; // yields 0z3 end reg [84:0] e, f, g,j; e = 'h5; // yields {82{1'b0},3'b101} f = 'hx; // yields {85{1'hx}} g = 'hz; // yields {85{1'hz}} j = ‘5 ; // yields {82{1'b0},3'b101} //新增
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !