笔记(研究生期间)

示例
Linux中杀掉不用的端口spin:方法在putty里 登入自己的账号,然后输入vncserver -list 看看自己多余的端口
然后 vncserver -kill 把自己多余端口杀掉
跑前仿真:
ADE L: 若不跑结果,在最后添加 veriloga
图1
添加使用的器件库: modelXXX/source.scs
图2
图3

或者 exit
快捷方式./Runsetup.cmos…
cadence跑仿真出现问题:Netlist generation failed because of the errors reported above. The netlist might not have been generated at all, or the generated netlist could be corrupt. Fix the reported errors and regenerate the netlist.
解决办法:本层电路以及子电路出现的warning太多,其中子cell 出现的warning超过5个就会失败。
在这里插入图片描述在3ns的时候去跑蒙卡测试该器件的电阻值
在这里插入图片描述不想测某点的值,可以加basic-noConm
在这里插入图片描述
几个信号对应几个noComn

Cadence MC仿真一样的电路,一样的仿真状态.头天晚上做了一次仿真,结果正常,第二天再来仿真的时候结果就大不一样了
cadence问题,将之前的仿真数据全部删除,重启virtuoso,确认source/corner文件正确,跟你用的器件能对的上

ADE l跑不成功的原因:保存模块时有很多warning,要解决warning(其中之一原因:symbol的PIN角和schematic的对不上,不能删PIN角)
加快蒙卡仿真的速度:
在这里插入图片描述在这里插入图片描述Modelsim学习
入门教程:https://www.bilibili.com/video/BV1Eg4y1z7Hf/?spm_id_from=333.337.search-card.all.click&vd_source=6c4da5c2ec0e45cc09115e3a159dd6d5
.v文件+testbench文件才是完整的跑仿真波形

在这里插入图片描述

命令:
查看仿真时间: g sim.log
查看波形文件: dve &
File -open database -选择.vpd类型文件(vcdplus.vpd)-内含很多激励文件,CTRL A 将variable全BU Add to waves–New wave view
命令:make clean 清掉过程文件
执行脚本:dc_shell -f XXX.tcl//调用design complifier去做逻辑综合
design_version & //适应于一个电路一个电路的做优化
linux 命令:acroread xxx.pdf
工作目录结构: doc/ 设计文档
rtl/ Verilog代码
icc/ ic compeiler 自动布局布线
VNC
设置密码命令:vncpasswd
关闭vnc server: vncserver -kill :#(#号代表端口号)
申请指定的端口:
vncserver -geometry 1920x1080 :69
配置文件: .vcn/xstartup 可进行一些配置
window通过vnc和linux进行复制:
vncconfig -nowin &
显示目前终端使用的shell: echo $SHELL
简单命令:
clear:清屏命令
w: 显示当前有哪些用户在线,同时显示当前用户工作
1.写文档design spec
1)IO post list
2)feature list
3)逻辑框图
2.状态机的分类
Moore型状态机:状态机的输出只与当前状态有关。在时钟脉冲的有限个门延时之后,输出达到稳定;输出会在一个完整的时钟周期内保持稳定值,即使在该时钟内输入信号变化了,输出信号也不会变化;输入对输出的影响要到下一个时钟周期才能反映出来;把输入和输出分开,是Moore状态机的重要特征。
Mealy型状态机:状态机的输出不仅与当前的状态有关,还与当前的输入有关。由于输出直接受输入影响,而输入可以在时钟周期的任一时刻变化,这就使得输出状态比Moore状态机的输出状态提前一个周期到达。输入信号的噪声可能会出现在输出信号上。
注:对同一电路,使用Moore状态机设计可能会比使用mealy状态机多出一些状态
3.避免电路中产生锁存器:latch不能过滤毛刺(Latch 锁存器不能过滤毛刺,会有异步Timing问题),边沿触发会过滤毛刺
边沿触发常用-Edge
捕捉毛刺-Glitch(短时脉冲波干扰)触发
捕捉宽度异常信号-Width触发
检查信号边沿跳变速度是否够快-Slew Rate触发
保持电平时间超限触发-Timeout
状态触发-State
出现latch的情况:1.敏感列表不完整;2.用组合逻辑时,if else要写全,每个分支条件下赋值语句要完整;3.case要加上default关键字

4.Modelsim操作:https://blog.csdn.net/zyp626/article/details/128886803
升级版QuestaSim 在Linux下开启命令为vsim&
移位寄存器
有符号数,符号位为1,使用**>>>,高位补1;
有符号数,符号位为0,使用
>>>,高位补0(和>>相同);
无符号数,无论最高位是什么,使用
>>>**,高位补0;
①算数移位寄存器
算术左移:和逻辑左移一样,空出来的补0
算术右移:算术移位,就是包含符号位的移位,对于正数来说,最高位为0,负数最高位为1;so 左移不用管符号位的事情,右移要将符号位补在最高位,比如8位数字10001100算术右移3为11110001
②LFSR(linear feedback shift register)线性反馈移位寄存器。最大周期LFSR可用于生成伪随机数,它循环通过重复前2n-1个状态,不出现全0。(右移)
a.伽罗瓦LFSR(Galois LFSR)
伽罗瓦LFSR是一到多型的LFSR,即最后一个触发器的输出 与抽头序列对应位置触发器前一级触发器的输出相异或逻辑来驱动多个抽头序列对应位置触发器的输入,如下图所示。
在这里插入图片描述

Galois LFSR:其中抽头的位置与输出位异或,以产生其下一个值。如果仔细选择抽头位置,则LFSR可以设置为“最大长度”。n位的最大长度LFSR有2^(n-1)个状态(永远不会达到全零状态)。
b.斐波那契LFSR
斐波那契LFSR也可以称为多到一型LFSR,即抽头序列对应bit位置的多个触发器的输出通过异或逻辑来驱动一个触发器的输入。如下图所示
在这里插入图片描述

5.LUT(look-up-table)
6.函数只能调用函数,不能调用任务,但任务可以调用函数 是对的
任务不能出现 always 语句,但可以包含其他时序控制,如延时语句
7.$time用来查看当前仿真时刻,返回一个64bit的整数来表示的当前仿真时刻;
r e a l t i m e 和 realtime和 realtimetime的作用相同,$realtime但是返回的时间数字是一个实型数;
r e a d m e m b ,用来从文件中读取数据到存储器中; 8. readmemb,用来从文件中读取数据到存储器中; 8. readmemb,用来从文件中读取数据到存储器中;8.display命令的执行是安排在活动事件队列中,但排在非阻赋值赋值数据更新事件之前;打印执行该函数时参数值;自动换行 write 与display相同,不自动换行strobe等所有赋值结束后打印monitor监控参数变化
s t r o b e 命令的执行是排在非阻塞赋值数据更新事件之后;系统任务来显示非阻塞赋值的变量值 9. r e g [ 15 : 0 ] q 2 d [ 15 : 0 ] ; / / 前一个 [ 15 : 0 ] 表示数据长度 16 位,后一个则表示共有 16 个这样的数据 10. g e n e r a t e − f o r 用于有着模块复用需求 11. 同步:敏感列表只有 c l k ;异步:敏感列表除了 c l k 还有复位信号 12. M o d e l s i m i l l e g a l r e f e r e n c e t o n e t “ ∗ ∗ ∗ ∗ ∗ ∗ ”报错解决办法: a l w a y s 语句块变量的声明要用 r e g 而不能用 w i r e , 组合逻辑电路可以用 w i r e a t y p e r e g c a n n o t b e a s s i g n e d i n a n a s s i g n s t a t e m e n t ; a t y p e w i r e c a n n o t b e a s s i g n e d i n a n a l w a y s s t a t e m e n t . 13. strobe命令的执行是排在非阻塞赋值数据更新事件之后;系统任务来显示非阻塞赋值的变量值 9. reg [15:0] q_2d [15:0]; //前一个[15:0]表示数据长度16位,后一个则表示共有16个这样的数据 10.generate-for用于有着模块复用需求 11.同步:敏感列表只有clk; 异步:敏感列表除了clk还有复位信号 12.Modelsim illegal reference to net “******”报错解决办法:always语句块变量的声明要用reg而不能用wire,组合逻辑电路可以用wire a type reg cannot be assigned in an assign statement; a type wire cannot be assigned in an always statement. 13. strobe命令的执行是排在非阻塞赋值数据更新事件之后;系统任务来显示非阻塞赋值的变量值9.reg[15:0]q2d[15:0];//前一个[15:0]表示数据长度16位,后一个则表示共有16个这样的数据10.generatefor用于有着模块复用需求11.同步:敏感列表只有clk;异步:敏感列表除了clk还有复位信号12.Modelsimillegalreferencetonet报错解决办法:always语句块变量的声明要用reg而不能用wire,组合逻辑电路可以用wireatyperegcannotbeassignedinanassignstatement;atypewirecannotbeassignedinanalwaysstatement.13.display命令的执行是安排在活动时间队列中,但排在非阻塞赋值数据更新事件之前。用来显示阻塞语句的赋值。显示当前变量的值
$strobe命令的执行是排在非阻塞赋值数据更新事件之后。用来显示非阻塞语句的变量值。
$monitor 用来监视参数的变化,如果参数一旦发生变化就会打印。
w r i t e 同 d i s p l a y 一样,但不会自动换行 h t t p s : / / b l o g . c s d n . n e t / b l e a u c h a t / a r t i c l e / d e t a i l s / 121717656 h t t p s : / / b l o g . c s d n . n e t / a 389085918 / a r t i c l e / d e t a i l s / 7992456414. write 同display一样,但不会自动换行 https://blog.csdn.net/bleauchat/article/details/121717656 https://blog.csdn.net/a389085918/article/details/79924564 14. writedisplay一样,但不会自动换行https://blog.csdn.net/bleauchat/article/details/121717656https://blog.csdn.net/a389085918/article/details/7992456414.dumpfile和$dumpvar是verilog语言中的两个系统任务,可以调用这两个系统任务来创建和将指定信息导入VCD。[VCD文件是在对设计进行的仿真过程中,记录各种信号取值变化情况的信息记录文件。EDA工具通过读取VCD格式的文件,显示图形化的仿真波形,所以,可以把VCD文件简单地视为波形记录文件.]
$dumpfile系统任务:为所要创建的VCD文件指定文件名。
eg:initial
$dumpfile (“myfile.dump”); //指定VCD文件的名字为myfile.dump,仿真信息将记录到此文件
d u m p v a r 系统任务:指定需要记录到 V C D 文件中的信号,可以指定某一模块层次上的所有信号,也可以单独指定某一个信号。典型语法为 dumpvar系统任务:指定需要记录到VCD文件中的信号,可以指定某一模块层次上的所有信号,也可以单独指定 某一个信号。 典型语法为 dumpvar系统任务:指定需要记录到VCD文件中的信号,可以指定某一模块层次上的所有信号,也可以单独指定某一个信号。典型语法为dumpvar(level, module_name); 参数level为一个整数,用于指定层次数,参数module则指定要记录
的模块。整句的意思就是,对于指定的模块,包括其下各个层次(层次数由level指定)的信号,都需要记录到VCD文件中去。
15.
在这里插入图片描述

16.检偶电路:1的个数是偶数个。用于检查在信号传输过程中是否发生了错误。
Y=AB+(A非)·(B非)
在这里插入图片描述

在这里插入图片描述

检奇电路:1的个数是奇数个
Y=((A非)⋅B)+(A⋅(B非))
17.打包/未打包
reg [7:0] mem [255:0]; // 256 unpacked elements, each of which is a 8-bot packed vector of reg
reg mem2 [28:0]; // 29 unpacked elements, each od which is a 1-bit reg
18.bit 数第一位为符号位

19.关于case、casex、casez的区别

首先看一下case、casex、casez对应的真值表
在这里插入图片描述

21.1说明:
在case语句中,敏感表达式中与各项值之间的比较是一种全等比较,每一位都相同才认为匹配。
在casez语句中,如果分支表达式某些位的值为高阻z,那么对这些位的比较就会忽略,不予考虑,而只关注其他位的比较结果。
在casex语句中,则把这种处理方式进一步扩展到对x的处理,即如果比较双方有一方的某些位的值是z或x,那么这些位的比较就不予考虑。

21.2注意事项
一般经常使用到的是casez语句,最好少用casex
case/casez/casex其实都是可综合的
在电路中,可以用?来表示无关值的z
case的描述,匹配都是从上到下进行的

20.flip-flop 触发器
21.Verilog中标识符(identifier)可以是任意一组字母、数字、$和 _的组合,但标识符的第一个字符必须是字母或者下划线,不能以数字或者美元符开始。
在Verilog语言中,所有的关键字(又叫保留字)都为小写,完整的Verilog关键字在编辑器会以高亮的形式突出出来。Verilog的内部信号名(又称标识符)使用大写和小写都可以,标识符可以是字母、数字、 $(美元符号)和下划线的任意组合,只要第一个字符是字母或者下划线即可。
22.判断data含有1的个数是奇数个还是偶数个
always @(posedge clk)
if (reset)
odd <= 0;
else
if (in)
odd <= ~odd;
23.流水线设计是verilog设计中基本功之一,是对组合逻辑系统的分割,并在各个部分之间插入寄存器,并暂存中间数据的方法.
(1)流水线是面积换时间的操作.插入了寄存器,增大了面积,是使用面积换速度,而由于增加了寄存器保存中间计算状态、多条指令并行执行会导致功耗增加,硬件复杂度增加。
24.TTL或非门的逻辑功能是有1出0,全0出1;多余输入端的处理:A.与有用输入端并联;B.接低电平;C.接地(或非门接低或与其他一起接是不会影响结果的 )。接高电平锁死到0.
在这里插入图片描述

TTL与非门逻辑功能是全1出0,
25.计算施密特触发器的阈值电压,采用电位触发方式,其状态由输入信号电位维持;有正向递增和负向递减俩种方式,对应VT+/VT-在输入信号从低电平上升到高电平的过程中使电路状态发生变化的输入电压称为正向阈值电压,在输入信号从高电平下降到低电平的过程中使电路状态发生变化的输入电压称为负向阈值电压。正向阈值电压与负向阈值电压之差称为回差电压。
是包含正反馈的比较器电路。是一种阈值开关电路,具有突变输入——输出特性的门电路。这种电路被设计成阻止输入电压出现微小变化(低于某一阈值)而引起的输出电压的改变。
利用施密特触发器状态转换过程中的正反馈作用,可以把边沿变化缓慢的周期性信号变换为边沿很陡的矩形脉冲信号。输入的信号只要幅度大于vt+,即可在施密特触发器的输出端得到同等频率的矩形脉冲信号。
当输入电压由低向高增加,到达V+时,输出电压发生突变,而输入电压Vi由高变低,到达V-,输出电压发生突变,因而出现输出电压变化滞后的现象,可以看出对于要求一定延迟启动的电路,它是特别适用的.

在这里插入图片描述
在这里插入图片描述

26.74LS163是(模16)四位二进制同步计数器。该计数器能同步并行预置数据,同步清零,具有清零、置数、计数和保持四种功能,并且具有进位信号输出,可串接计数使用。
在这里插入图片描述

在这里插入图片描述

27.共阳极LED数码管:当输入为0时点亮,输入为1时灭
28.N级触发器构成的环形计数器的计数模值为N;N级触发器构成的扭环形计数器的计数模值为2N.
29.two’s 二级制补码(按位取反再加1)
30.Mealy与Moore相比:Moore少一个状态就是mealy
31.使用状态机实现2进制补码器
mealy型是与输入有关,输出立即改变。这一点用assign直接赋值没有问题。
而moore型是与输入无关,只与当前状态有关,输出在下一拍改变。
[https://blog.csdn.net/weixin_38197667/article/details/104653819]
Moore 型状态机
在这里插入图片描述

Mealy型状态机
在这里插入图片描述

32.在设计电路时,always时序逻辑块中多用非阻塞赋值,always组合逻辑块中多用阻塞赋值;在仿真电路时,initial块中一般多用阻塞赋值。
阻塞是 顺序 执行,即下一条语句执行前,当前语句一定会执行完毕。
非阻塞是 并行 执行,即下一条语句的执行和当前语句的执行是同时进行的
33.(1)发送端的信源编码器,它将信源的模拟信号变换为数字信号,即完成模拟/数字(A/D)变换。
步骤:采样:在时间上对话音信号进行离散化处理;
量化:对幅值进行舍零取整的处理;
编码:将抽样、量化后的信号转换成数字编码脉冲。
(2)接收端的译码器,它将数字信号恢复成模拟信号,即完成数字/模拟(D/A)变换,将模拟信号发送至信宿。
步骤:首先经过解码过程,所收到的信息重新组成原来的样值,再经过低通滤波器恢复成原来的模拟信号。
34.instantitation 实例化 可综合的Verilog语句
以#开头的延时不可综合成硬件电路延时,综合工具会忽略所有延时代码,但不会报错。
event在同步testbench时更有用,不能综合。
不支持force和release的综合。
所有综合工具都支持的结构 always,assign,begin,end,case,wire,tri,supply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter, generate
所有综合工具都不支持的结构 time,defparam,$finish,fork,join,initial,delays,UDP,wait
有些工具支持有些工具不支持的结构 casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while
35.Verilog关键词
在这里插入图片描述

在这里插入图片描述

36.74HC151为8选1数据选择器
在这里插入图片描述

在这里插入图片描述

D为输入,8选1的输入CBA为011,代表D3被选中,输出Z=Y=D3=0
(1)位的扩展
如需要选择多位数据时,可由几个一位数据选择器并联组成,即将它们的使能端连在一起,相应的选择输入端连在一起
在这里插入图片描述

(2)字的扩展
把数据选择器的使能端作为地址选择输入,将两片74LS151连接成一个16选1的数据选择器,其连接方式如图4.4.30所示。

37.case“z”是无视“z”的位
case“x”是无视“z”和“x”的位
37.函数只能与主模块共用同一个仿真时间单位,而任务可以定义自己的仿真时间单位。
38.独热码:使用较多的触发器,状态译码简单,可减少组合逻辑且速度较快,编码密度低,这种编码方式还易于修改,因为任何状态只有1bit,所以在增加状态或改变状态转换条件都可以在不影响状态机的其它部分的情况下很方便地实现。
格雷码:其循环和单步特性消除了随机取数时出现重大错误的可能,是一种可靠性编码,是一种错误最小化的编码方式;使用格雷编码,则相邻状态转换时只有一个状态位发生翻转,这样不仅消除状态转移时由多条状态信号线的传输延迟所造成的毛刺。
39.分支预测器(英语:Branch predictor)是一种数字电路,在分支指令执行结束之前猜测哪一路分支将会被执行,以提高处理器的指令流水线的性能。
条件分支指令通常具有两路后续执行分支。即不采取(not taken)跳转,顺序执行后面紧挨JMP的指令;以及采取(taken)跳转到另一块程序内存去执行那里的指令。
是否条件跳转,只有在该分支指令在指令流水线中通过了执行阶段(execution stage)才能确定下来。
如果没有分支预测器,处理器将会等待分支指令通过了指令流水线的执行阶段,才把下一条指令送入流水线的第一个阶段—取指令阶段(fetch stage)。这种技术叫做流水线停顿(pipeline stalled)或者流水线冒泡(pipeline bubbling)或者分支延迟间隙。这是早期的RISC体系结构处理器采用的应对分支指令的流水线执行的办法。
分支预测器猜测条件表达式两路分支中哪一路最可能发生,然后推测执行这一路的指令,来避免流水线停顿造成的时间浪费。如果后来发现分支预测错误,那么流水线中推测执行的那些中间结果全部放弃,重新获取正确的分支路线上的指令开始执行,这招致了程序执行的延迟。
在分支预测失败时浪费的时间是从取指令到执行完指令(但还没有写回结果)的流水线的级数。现代微处理器趋向采用非常长的流水线,因此分支预测失败可能会损失10-20个时钟周期。越长的流水线就需要越好的分支预测。
一条条件跳转指令第一次遇到,还没有任何信息可以去预测分支。此后保持这条指令是采取还是不采取跳转的历史记录,就可以作为再遇到这条指令时猜测最可能的分支。
饱和计数器(saturating counter)或者称双模态预测器(bimodal predictor)是一种有4个状态的状态机:
强不选择(Strongly not taken)
弱不选择(Weakly not taken)
弱选择(Weakly taken)
强选择(Strongly taken)
当一个分支命令被求值,对应的状态机被修改。分支不采纳,则向“强不选择”方向降低状态值;如果分支被采纳,则向“强选择”方向提高状态值。这种方法的优点是,该条件分支指令必须连续选择某条分支两次,才能从强状态翻转,从而改变了预测的分支。
在这里插入图片描述

2位饱和计数器
全局分支预测器(global branch predictor)并不为每条条件跳转指令保持专用的历史记录。相反,它保持一份所有条件跳转指令的共享的历史记录。优点是能识别出不同的跳转指令之间的相关性。缺点是历史记录被不相关的不同的条件跳转指令的执行情况稀释了(diluted);甚至历史记录没有一位是来自同一个分支指令,如果有太多的不同的分支指令。
这种方法只有在历史缓冲区足够长,才能发挥出性能。但是模式历史表的条目数是历史缓冲区位数的指数量级。因此只能是在所有的条件跳转指令间共享这个大的模式历史表。
作者:僚机Wingplane https://www.bilibili.com/read/cv17796361 出处:bilibili

需要重修习题:Exams/2014 q3fsm Exams/2013 q2bfsm

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值