芯动力——硬件加速设计方法学习笔记(第二章)高质量VerilogHDL描述方法(1)(常见语法对应硬件结构)


前言

一鼓作气,今天继续学习第二章,这一章将的是如何用verilog去描述可综合的电路。


一、Verilog和C语言概述

1、两者区别

C语言:软件语言
Verilog:硬件描述语言,具有硬件设计的基本概念
(1)互连connectivity:wire 型变量描述各个模块之间的端口与网线连接关系
(2)并发concurrency: 可以有效地描述并行的硬件系统
(3)时间time:定义了绝对和相对的时间度量,可综合操作符具有物理延迟

2、硬件描述语言描述的电路,最终将通过逻辑综合工具、布局布线工具将其实现为芯片

3、可综合关键词:always、if-else、case、assign(“四大法宝”)

4、不可综合关键词:for、function、fork-join、while

(用来书写testbench,就是用来仿真)

二、高性能编写方法

1、if-else——综合成多路选择器,设计时选择先加后选,还是先选后加。

在这里插入图片描述

#第一种电路,两个加法器,一个选择器
if(Aflag == 1'b1)
	OutData <= A + B;
else
	OutData <= C + D;
	
#第二种电路,两个选择器,一个加法器
if(Aflag == 1'b1)begin
	Op1 <= A;
	Op2 <= B;
end
else begin
	Op1 <= C;
	Op2 <= D;
end
OutData <= Op1 + Op2;	

分析:
(1)通常加法器结构更加复杂,晶体管数量较多,因此从面积上分析,后者面积更小
(2)前者数据通道延时是一个加法器和选择器,控制通道的延时是一个选择器。后者数据通道延时是一个加法器和选择器,控制通道延时也是一个加法器和选择器。从时延上分析,后者控制通道延时更大。第二种电路的性能比第一种更差。
总结:前者面积大,时延小;后者面积小,时延大。

(1)对于单 if 语句,逻辑综合工具会将其映射为无优先级的判断结构。

推荐初学者尽量使用单 if 语句(if…else if… .else if…) 描述多条件判断结构。
在这里插入图片描述

(2)多 if 语句,逻辑综合工具会将其映射为有优先级的判断结构。

最后一级选择信号具有最高优先级。具有优先级的多选结构会消耗组合逻辑。不推荐这种写法,有点乱。
在这里插入图片描述
有些信号要求先到达(如关键便能信号、选择信号等),而有些信号需要后到达(如慢速信号、有效时间较长的信号等),此时则需要使用 if…if…结构。

2、case语句:条件互斥,多用于指令译码电路

在这里插入图片描述

3、latch:避免使用latch(异步电路和门控时钟中使用)

在这里插入图片描述

(1)触发器和锁存器区别(重点!!!!)

触发器: 有时钟;边沿触发器,同步控制,数据先有效,控制信号后有效
锁存器: 无时钟;电平触发,非同步控制,控制信号先有效,数据后有效;由于不锁存数据的时候输出随输入变化而变化,输出有毛刺(glitch),对后面电路产生影响,应该尽量避免使用。同时使得静态时序分析变得复杂

寄存器: 触发器是计算机记忆装置的基本单元,一个触发器能储存一位二进制代码。寄存器是由触发器组成的。一个触发器可以组成一个一位的寄存器,多个触发器可以组成一个多位的寄存器。存储器是由大量寄存器组成的,其中每一个寄存器就称为一个存储单元。它可以存放一个有独立意义的二进制代码。

控制信号/时钟信号先来,数据后来,用锁存器;
控制信号/时钟信号后来,数据先来,用寄存器。

(2)容易引入latch的途径:不完整的条件语句

在这里插入图片描述
综合器生成的报告(原语):
synopsys full_case:告诉综合器,当前条件已经完备
synopsys parallel_case:所以条件互斥、并行、无优先级

4、逻辑复制,减小负载,降低延时

在这里插入图片描述

5、资源共享,减小面积

有公共单元时可以进行共享,但是共享会使得性能下降,需要平衡面积和性能
在这里插入图片描述

6、资源顺序重排,降低传播延时

假如A的信号延时比较长,就放到最后
在这里插入图片描述

7、尽量用always来描述电路,assign仅用于连线

在这里插入图片描述

三、可综合风格

1、所有的组合逻辑或锁存的 always 结构必须有敏感信号列表
2、每个 Verilog always 块敏感信号列表只能对应一个时钟
3、不允许 Wait 声明和# delay 声明
4、在时序电路中必须使用非阻塞赋值(<=),组合逻辑电路必须使用阻塞赋值(=)
5、分开异步逻辑与同步逻辑
6、分开控制逻辑和存储器,建议控制逻辑和存储器逻辑分成独立的模块
存储器的综合方式与rtl代码不同,最好不要混合在一起

四、简答题

1、C语言和Verilog的区别

C语言是一种软件描述语言,顺序执行,没有具体的实现方式,只关心功能是否可以实现,与硬件无关;
Verilog语言是硬件描述语言,具有并行执行的特点,最后会综合成具体的硬件电路,我们不仅需要关心使用Verilog写出来的语言是否可以无误的实现功能,还需要关心硬件电路的实现是否符合要求,比如面积、性能等。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值