HDL课程笔记

CHAPTER 1

1、PSPICE是针对原理图进行时间序列仿真
2、Verilog(Verifacation Logic)是从C语言改造的,VHDL是和Verilog平行竞争的语言
3、wire变量是无记忆性,have value only by driven,类似于导线
reg变量有记忆,retain previous value until refreshed or updated,类似于寄存器
4、数字电路正确性包括:功能逻辑正确性,时序正确性(延时正确)nand #1表示延时1单位
5、instantiation实例化
6、begin end串行执行 moduel end module并行执行
7、monitor是示波器 dollar符号系统命令
8、verilog程序结束是用分号结束
9、comment注释
10、waveform产生波形
11、#的含义是delay
12、以分号结束的操作是顺序进行
13、dollar monitor一开启就一直执行,直到遇见 dollar finish
14、Verilog的变量有(0,1,x,z)四个值,x是不确定,z是高阻态
15、Verilog把变量的变化称为时间,时间是event driven(事件驱动)
16、Verilog三种port: input、output、inout
17、Verilog是compoment orientation面向组件,组件可以重用
18、testBench测试体= Test Generator and Monitor + System being design
19、design 和verification的代码都要写
20、synthesized聚合的,Verilog的组件要满足synthesize的要求
21、 Top level module
22、不定义是wire
23、structural modeling通过组成描述电路, Behavioral modelling通过电路行为特征描述电路
24、Verilog是事件驱动还是时间驱动?答:事件驱动。由于不是时间驱动,因此Verilog执行速度快
25、Verilog资源不共享,并行工作,稳定性高。
26、conbinational circuit 组合电路,特点:有输入就有输出
27、sequencial circuit顺序电路,依赖于时钟
27、initial只做一遍,always程序永远运行(上电后循环运行)
28、always @(A,B,C,D) begin…end,如果ABCD变化,则运行该段程序。组合电路当中的程序需要先对输出进行初始化。begin…end内的程序顺序执行
29、synthesize自动完成电路设计
30、flip flop触发器
31、posedge上升沿、negedge下降沿
32、Verilog不允许边沿触发和电平触发同时作为条件
32、= blocking assignment <=non-blocking assignment
33、Always @(电平触发/沿触发)
34、任何电路都由组合电路和顺序电路构成,其中顺序电路由flip flop、clock、reset实现
35、如果有多个语句,则用begin end包裹起来
36、 一个module里面如果有在always里面哪儿个先执行不确定,哪个initial先执行不确定。多个always、多个initial,相互并行不阻挡。但是不论顺序如何,initial先执行,always并行执行。
37、rerilog的时间单位是1ns/100ps。时间单位是1ns,分辨率是100ps。
38、concurretn并行的
39、Verilog所有语法在可以用于verification,但是只有一个子集 能用于Design
40、always能用于Design和Verification,initial只能用于Design
41、wait(go);go是一个wire变量,该module等待go信号,当go=1执行下一条程序。
42、the least-significant bit(digit)最高有效位/数字
the most-significant bit(digit)最低有效位/数字

CHAPTER 3
43、behavioral modling是由initial 和always引导的、
vector矢量 scalar标量
44、test bench = design + verification。所有的语法可以用于verification,只有子集可以用于design。其中验证是在仿真器里面运行。
45、如果always后面没有@(),则always里面的内容直接执行。运行到end后直接回到always开头再次运行。但是always里面应该有wait()、延时等语句
46、relational operator == >= <=,
47、forever循环,无条件进入循环体的循环,但是在循环体里面需要有跳出循环的机制。
48、concurrent并发 recurrent递归
49、exception是一种debug的手段,clause子句
50、disable用于程序调试,可以退出任意begin …end
51、register是一维的,memory是二维的;register可以位操作,memory只能对字节进行操作。
52、accumulator累加器
53、指令寄存器里面存入的是正在执行的指令。
54、二进制串的书写格式,4‘b0001,其中4是串长度,’b是二进制,'o八进制,'h十六进制,'d十进制
55、disable是用来调试的
56、multi-way branching多路分叉
57、case之后一定要加上default,否则一旦case不全,就会产生锁存器,记住之前的值。这样浪费电路资源
59、task在同一个always中多次调用不需要automatic,如果在不同的always中调用就需要automatic。因此always是并行的,其中的task需要占用不同的层级
58、function在考试中经常出现,在design时不考虑延时,在synthesize时自动加上延时。function内部的语句不能用#,@,wait()语句来控制时间。
59、function其实就是函数
在这里插入图片描述
60、concatenation串联
61、verilog语句有两大属性:parallel case和full case,也就是并行执行,以及涵盖所有可能。一个case语句必须要带一个default,一般是default : xxxx

62、Task;end task是用来测试的,不用于设计代码,只用于仿真代码。(initial也是)。设计代码用function,(function既可以用于设计也可以用于测试仿真)

63、function没有延时等待,没有#,没有@,没有wait(),仿真结果上看不到延时。用于combinational circuit。

64、concatenate(contatenation)连接

65、有节拍的电路比没有节拍的电路容易做,方便不同电路之间的交流

66、if-else的比较是0-1比较,2-valued-comparison;
case的比较是0-1-x-z比较,4-values-comparison。前者只要出现了x或者z就判定错。

67、function :expression, function是有返回值的且只有一个
task:statement,task是没有返回值的。
68、task/function不形成边界,是一种soft的程序划分方法
module形成边界,是一种hard的程序划分方法,是真是存在的电路
69、register ->cache->memory->storage->network

70、parameter是常量,reg和wire是变量
在这里插入图片描述
71、写HDL一般不用hierarchy,因为一旦增加、删减了变量,就要修改hierarchy。

72、在always里面可以使用r和w,但是在top里面不能使用q
在这里插入图片描述

73、硬边界:module;软边界:function,task

CHARTER 4
1、同步电路抗干扰能力强,容易设计。异步电路设计复杂

2、抽象级别:
(1)晶体管级
(2)门级
(3)结构化级(除门之外还多了module)
(3)寄存器传输级
(4)行为级
(5)数据流级(assign)

3、综合:将HDL语言转化成netlist和逻辑电路的过程。
综合器:实现综合作用的工具。综合器相当于编译器

4、同步电路既可以握手(访问存储器)也可以约定(访问总线或者I/O,也叫flow control)

5、level sensitive 电平触发 edge sensitive

6、verikog仿真时首先将HDL转换为netlist

7、时序图,虚线是有效沿
在这里插入图片描述

8、电路普遍写比读要快,读比较慢。称写快读慢。写一个周期,读两个周期。如果要连续读狠多个数,通常会切换成对方的写操作。

9、没有约定的情况下要有握手信号(如ready-acknowledge)

9、clock信号的上升下降沿是垂直的,AB/DB的上升下降沿总是在有效沿之后,表示上一件事情完成后,要延时后才能进行下一件任务。

10、采样窗口内的值必须valid,稳定有效

11、disable用于debug

12、第一个时钟信号从复位之后开始计算

13、$表示系统任务及函数

14、wire的默认值是Z,reg的默认值是X

15、在这里插入图片描述

16、wire只能用于组合逻辑。组合逻辑的输出只决定于当下的输入,可以理解为一旦输入变了输出就会变。但是实际上有延时的,组合逻辑的延时在一个特殊文件中设置。

17、1Z,结果为X;1X,结果为X;1=Z结果为0,1=X,结果为0。一般情况下用==就够了

18、条件语句if-else和case只能在always和initial引导的begin…end之间运行。

19、wire #(3,5) x2; 组合电路wire延时,由于cmos管从低到高和从高到低是不对称的,所以wire上升沿延时3,下降沿延时5

20、initial不可综合

21、initial和always都不能前嵌套

22、组合逻辑的语法:continuous assign + function。注意function是没有延时的

23、task没有返回值,function有返回值

CHAPTER 5
1、完整的条件语句产生组合电路,不完整的条件语句产生时序电路
2、FPGA优化主要指速度优化和资源优化
3、case/casez/casex
case语句的表达式的值有4中情况:0、1、z、x。4种是不同的,故表达式要严格的相等才可以操作分支语句。
casez语句中的表达式情况有三种:0、1、x。不用关心z,z可以和任何数值相等,即z =0.z= 1,z=x;
casex语句的表达式情况有二种:0、1.不用关心x和z。即x=z=0,x=z=1.

4、verilog进行电路设计的方法:
(1)自顶向下 top-down
(2)自底向上 bottom-up
(3)综合法

5、blocking和non-blocking的区别
(1)non-blocking并不是立即执行的,而是在块结束的时候执行,有对应的硬件电路;
(2)blocking立即执行,只有执行完后才能进行下一个语句。没有对应的硬件电路,综合的结果不确定。

6、function的返回是一瞬间的,因此也要求function内部不能有延时

7、moore状态机输出只与输入有关;mealy状态机输出与输出和当前的状态有关。

8、顶层module一般指将design代码和testbench连接在一起的代码

9、综合是将系统级转化成行为级的过程,RTL是reg transport level,寄存器级
在这里插入图片描述

10、#(3,4,5)
在这里插入图片描述

11、
(1)valid clk edge一个周期内有一个或者两个。
(2)采样窗口=setup time + hold time
(3)T - setuptime(worst case) > =time to output >= hold time (best case)
(4)clock to output是输出延时
(5)P(process考虑电路一致性)V(voltage)T(temperature)里面,温度的影响是最大的。温度大,功耗也大,延时也大。

12、采样窗口不满足绝大多数是因为setup time不满足引起,hold time不满足情况较少。setup time与时钟周期有关,hold time与时钟周期无关

13、data path 和FSM是显示设计

14、逻辑综合 RTL综合(RTL综合是目前最最最为主要的综合方式)
RTL:存-转换-存-转换…在这里插入图片描述
15、上升延时,下降延时,三态延时。bestcase ,worstcase,typecase是电路速度的高低,不是实际上的效果好坏。有时候worstcase反而比bestcase好因为bestcase的holdtime不满足

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章