verilog语法+:和-:

前言

本文转载自 :Verilog动态截取固定长度语法+:和-:

参考 : Verilog常用语法

1 拼接运算符


{信号1的某几位,信号2的某几位,...,...,信号n的某几位},中间用逗号隔开,最后用大括号括起来表示一个信号整体。
位拼接表达式中不允许出现没有指明位数的信号;
位拼接可以用重复法来简化表达式:{4{w}}等同于{w,w,w,w};
位拼接还可以用嵌套的方式来表达:{b,{3{a,b}}}等同于{b,a,b,a,b,a,b}。
 

2 case语法

reg  [2:0] 	out ; 			// 变量类型定义为reg,实际综合出来不是触发器。

 
 always @ (*) begin
    case(sel)
      2'b00    : out = 2'd1; 		// If sel=0, output is a
      2'b01    : out = 2'd3; 		// If sel=1, output is b
      2'b10    : out = 2'd2; 		// If sel=2, output is c
      default  : out = 2'd0; 		// If sel is anything else, out is always 0
    endcase
end

2.1 信号定义

//端口信号定义方式一:
module fsm(
   rxflr,
   ssi_oe_n
);
  // ------------------------------------------------------
  // -- Port Declaration
  // ------------------------------------------------------
  input [`RX_ABW :0] rxflr       ;//这种wire类型的端口,不需要再下面重复定义。
  output             ssi_oe_n    ;//这种reg类型的端口,需要在下面定义。

  // ----------------------------------------------------------
  // -- local registers and wires
  // ----------------------------------------------------------
  reg                ssi_oe_n;

endmodule

//端口信号定义方式二:这种方式是当前使用较多的方式
module fsm(
  input  wire [`RX_ABW :0]   rxflr,//ASIC常用,定义wire和reg
  output reg                 ssi_oe_n
);
endmodule

//端口信号定义方式三:
module fsm(
  input   [`RX_ABW :0]       rxflr    ,//FPGA中常用,wire不定义
  output                     ssi_oe_n  //该信号也是wire类型
);

reg  r_single;
assign  ssi_oe_n = r_single ;

endmodule





//模块端口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  

例化如下:
ram_1r1w #(
    .width  ( 128     ),//这个端口要是没有的话,就是默认值
    .deepth (  96     ) //这个端口要是没有的话,就是默认值
)u_ram_1r1w_96x128(
    .wclk   ( wclk    ),
    .wdin   ( wdata   ),

    .rclk   ( rclk    ),
    .dout   ( rdata   )
);

//也可以这样例化
ram_1r1w u_ram_1r1w_96x128(
    .wclk   ( wclk    ),
    .wdin   ( wdata   ),

    .rclk   ( rclk    ),
    .dout   ( rdata   )
);



3 动态截取固定长度数据

参考如下:

reg [9:0] data;
reg [2:0] get_dout;
get_dout = data[i+:3]    //表示截取数据data的bit i开始、合计取3bit位宽的数据
                         //i可以是cnt(计数器产生的变量)或者固定值

详细介绍如下所示:

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值