12,FPGA_Verilog基础篇:拼接运算符简介

///

1,FPGA_Verilog基础篇:Verilog发展进程-CSDN博客

2,FPGA_Verilog基础篇:理解Verilog的四值逻辑-CSDN博客

3,FPGA_Verilog基础篇:Verilog中数值的表示-CSDN博客

4,FPGA_Verilog基础篇:信号声明类型-CSDN博客

5,FPGA_Verilog基础篇:模块的端口声明-CSDN博客

6,FPGA_Verilog基础篇:verilog语言的操作符-CSDN博客

7,FPGA_Verilog基础篇:verilog基本逻辑运算-CSDN博客

8,FPGA_Verilog基础篇:verilog关系操作的逻辑运算实现-CSDN博客

9,FPGA_Verilog基础篇:veriolg算术运算-CSDN博客

10,FPGA_Verilog基础篇:verilog移位操作-CSDN博客

11,FPGA_Verilog基础篇:关系操作符简介-CSDN博客

12,FPGA_Verilog基础篇:拼接运算符简介-CSDN博客

13,FPGA_Verilog基础篇:verilog数值的位宽扩展规则-CSDN博客

14,FPGA_Verilog基础篇:verilog移位与拼接实现-CSDN博客

15,FPGA_Verilog基础篇:verilog双向inout接口表示_fpga inout端口-CSDN博客

16,FPGA_Verilog基础篇:verilog之锁存器和触发器-CSDN博客

17,FPGA_Verilog基础篇:verilog之for循环-CSDN博客

18,FPGA_Verilog基础篇:verilog之函数用法-CSDN博客

19,FPGA_Verilog基础篇:verilog之任务用法-CSDN博客

20,FPGA_Verilog基础篇:verilog之任务与函数用法比较-CSDN博客

21,FPGA_Verilog基础篇:verilog之宏define介绍-CSDN博客

22,FPGA_Verilog基础篇:verilog之条件编译指令介绍-CSDN博客

23,FPGA_Verilog基础篇:verilog之参数parameter介绍-CSDN博客

24,FPGA_Verilog基础篇:verilog之本地参数localparam-CSDN博客

25,FPGA_Verilog基础篇:verilog之generate生成块-CSDN博客

26,FPGA_Verilog基础篇:verilog之常数规则-CSDN博客

27,FPGA_Verilog基础篇:verilog中整数运算的位宽和符号规则-CSDN博客

28,FPGA_Verilog基础篇:verilog中的字符串表示-CSDN博客

29,FPGA_Verilog基础篇:verilog中带整数的算术表达式分析-CSDN博客

30(结束篇),FPGA_Verilog基础篇:verilog中的数值运算规则总结-CSDN博客

///

所谓的拼接运算符,其实就是一个大括号“{}”,主要功能是把多个信号按照一定的顺序,合并成一个信号:

{signal_1, signal_2,……}

其中,信号signal既可以是常数也可以是变量,但是位宽必须已知且不可变。下面给出一个简单的例子:

wire [2:0] a;

wire [3:0] b;

assign b = {1’b1,a[2:0]};

假设a的值如下

获得的b的值如下

a=3’b111

B=4’b1111

a=3’b011

B=4’b1011

a=3’b010

B=4’b1010

在verilog语言中,拼接运算符是很好用、很常用的,但是其用法比较苛刻,因此常常遇到编译不过的问题。“位宽必须已知且不可变”这个要求非常重要,实践中无数次拼接运算符的报错就是不满足上面的要求。下面给出一些错误的情况:

错误写法

{1,a[2:0]}

{8’b0000_0010,b}

原因

1没有指定位长

b没有指定位长

正确表达

{32’b1,a[2:0]}

{8’b0000_0010,b[2:0]}

与拼接操作经常一起使用的是复制操作,也用拼接的操作符大括号对“{}”,其一般格式是:

replication_time{signal}

其中信号signal既可以是常数也可以是变量,但位宽必须已知且不可变;复制次数replication_time必须是常数。下面给出例子:

wire [1:0] a;

wire [7:0] b;

假设a的值如下

表达式

获得b的值

a=2’b10

b=8{a[0]}

b=8’b0000_0000

a=2’b10

b=4{a[1:0]}

b=8’b1010_1010

注意:如果把复制操作嵌入拼接操作,需要用大括号把复制操作整体括起来,比如需要表示如下:

{8{a[0]}}

否则会出错!

另外复制次数为常数这个要求也非常重要,其中parameter类型也算常数,例子如下:

重复次数定义

复制操作

合法性

wire [2:0] num_wire;

assign num_wire=4;

{ num_wire {1’b1}}

非法

reg [2:0] num_reg=4;

{ num_reg {1’b1}}

非法

parameter num_par=4;

{ num_par {1’b1}}

合法

 “Verilog语言玩的好不好,看的就是代码里的拼接操作搞的溜不溜”。平时开发逻辑代码的时候要多用拼接操作,有时候会事半功倍。但是,拼接操作在代码中的最大问题就是:代码的可读性会降低。所以使用拼接操作时,请一定要加上注释!

点赞加关注博主(IDFPGA小飞)的博文,咱们一起学习、一起进步吧~

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值