数字系统设计复习笔记:第八篇
可综合的Verilog
可综合的HDL的语法只是它们自己语言的一个子集。为什么要这么做?
减少综合的次数或运行时间,最快得到良好的综合结果
采用比较简单的综合约束就可以得到时序和面积的要求
提高综合结果网表的性能,简化静态时序分析的过程
什么是逻辑综合?
逻辑综合是在标准单元库和特定的设计约束的基础上,把设计的高层次描述转换成优化的门级网表的过程。
标准单元库可以包含简单的单元,如:与非门、或非门、与门和或门等基本逻辑门,也可以包含宏单元,如加法器、多路选择器和触发器等。
综合的一般原则
综合之前一定要进行仿真,这是因为仿真会暴露逻辑错误,所以建议大家这样做。如果不做仿真,没有发现的逻辑错误会进入综合器,使综合的结果产生同样的逻辑错误。
每一次布局布线之后都要进行仿真,在器件编程或流片之前要做最后的仿真。
用 VerilogHDL 描述的异步状态机是不能综合的,因此应该避免用综合器来设计;如果一定要设计异步状态机,则可用电路图输入的方法来设计。
如果要为电平敏感的锁存器建模,使用连续赋值语句是最简单的方法。
语言指导原则
组合逻辑使用阻塞赋值语句描述
时序逻辑使用非阻塞赋 ...
数字系统设计复习笔记:第七篇
状态机
必考,不用想了。一般都是手写代码/代码填空。看好一二三段状态机。
关于两段式和三段式的例子,可以看看另外一篇文章:两段式状态机与三段式状态机
概述
什么是有限状态机?
有限状态机是由寄存器组和组合逻辑构成的硬件时序电路;
其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态;
究竟转向哪一状态不但取决于各个输入值,还取决于当前状态。
状态机可产生在时钟跳变沿时刻进行开关的复杂的控制逻辑,是数字逻辑的控制核心。
有限状态机三要素:
状态(当前状态,下一个状态);
输入信号(事件);
输出控制信号(相应操作)。
Mealy
状态是否改变、怎样改变还将取决于产生下一状态的组合逻辑F的输出,F是当前状态和输入信号的函数。
我们把这种时序逻辑的输出不但取决于状态还取决于输入的状态机称为Mealy状态机。
Moore
有些时序逻辑电路的输出只取决于当前状态,即输出信号=G (当前状态),这样的电路就称为Moore状态机。
如何描述下面的状态机?
一段式
顾名思义,全模块只有一个always,在该模块中既描述状态 ...
数字系统设计复习笔记:第六篇
逻辑模块
感觉超前进位加法器和乘法器是难点。不知道考试会怎么考。还是需要理解才行。
全加器
数据流描述
123456789101112module full_adder (a, b, cin, sum, cout); //list all inputs and outputs input a, b, cin; output sum, cout; //define wires wire a, b, cin; wire sum, cout; //continuous assign assign sum = (a ^ b) ^ cin; assign cout = (a&cin)|(b&cin)|(a&b); //assign cout = cin & (a ^ b) | (a & b);endmodule
行为级描述
123456module add_4(A, B, sum, C); input [3 : 0] A, B; output [3 : 0] sum; outp ...
数字系统设计复习笔记:第五篇
门原语
逻辑门
and/nand
or/nor
xor/xnor
以上六个为多输入单输出
buf/not
以上两个为单输入多输出
1234gate_type [instance_name1] (term1, term2, ..., termN), [instance_name2] (term1, term2, ..., termN),...... [instance_nameN] (term1, term2, ..., termN);
多个门同时实例化时,结尾用逗号,最后用分号。第一个端口为输出,其余为输入。
对于多输出门,最后一个为输入。
行为描述建模
你会怎么设计一个二输入与非门?
有些人认为只是一个代表NAND操作者行为的块
还有一些人可能会想到CMOS中的四个门7400芯片中的四个门
在逻辑层面工作的设计者会想到 NAND门的逻辑符号
晶体管级的电路设计者想到的是实现NAND功能的晶体管级电路
在版图设计者的脑海中闪过的是 NAND门的布局
考试要看清书写的层次
可综合的VHDL
Verilog HDL最初的目的不是做电路设计,所以可综合风格的 ...
数字系统设计复习笔记:第四篇
系统任务
$display和$write
$display系统任务输出信息到标准输出设备,并带有行结束字符;$write系统任务输出信息到标准输出设备,不带行结束字符。
可以用类似C语言格式化输出的方式打印文本。
例1
123456module disp; initial begin $display("\\\t%%\n\"\123") ; endendmodule
答案12\ %"S
\123的意思是123代表的八进制数对应的ASCII码代表的字符
例2
123456module disp; initial begin $display("\\%%\123\n\456"); endendmodule
答案12\%S.
$display输出列表中数据的显示宽度是自动按照输出格式进行调整的。总是用表达式的最大可能值所占的位数来显示表达式的当前值。可以通过在%和表示进制的字符中间插入一个0,来自动调整显示输出数据宽度的方式。
冷门点,多看看。 ...
数字系统设计复习笔记:第三篇
结构说明语句
always肯定必考,感觉task和function会二选一。
Verilog 语言中的任何过程模块都从属于以下 4 种结构的说明语句:
initial 说明语句
always 说明语句
task 说明语句
function 说明语句
always
always 语句在仿真过程中是不断活动着的。always语句后跟着的过程块是否执行,则要看它的触发条件是否满足,如满足则运行过程块一次;如不断满足,则不断地循环执行。
12always clk = ~clk; //将无限循环,周期为0,仿真时间无法推进always #5 clk = ~clk; //周期为10的时钟信号
沿触发的always块常描述时序行为,如有限状态机。可将其转换为表示寄存器组和门级组合逻辑的结构,而该结构应具有时序所要求的行为。
电平触发的 always 块常用来描述组合逻辑的行为。可将其转换为表示组合逻辑的门级逻辑结构或带锁存器的组合逻辑结构,而该结构应具有所要求的行为。
一个模块中可以有多个always块,它们都是并行运行的,并没有前后之分。
wait
和always @(...)的敏 ...
数字系统设计复习笔记:第二篇
赋值语句
我说这个必考,因为真会考。
阻塞赋值
使用=进行。
赋值语句执行完后,块才结束;
b 的值在赋值语句执行完后立刻就改变的;
在时序逻辑中使用时,可能会产生意想不到的结果。
123456reg b,c;always @(posedge clk) begin b=a;//不建议使用 c=b;//不建议使用 end
有的仿真器可以综合成D触发器,但是不推荐。
在 三段式状态机 中,描述次态逻辑和输出逻辑的电路必须使用阻塞赋值,表明为组合电路。
状态机
非阻塞赋值
使用<=进行赋值。
在语句块中,上面语句所赋的变量值不能立即就为下面的语句所用;
块结束后才能完成这次赋值操作,而所赋的变量值是上次赋值得到的;
在编写可综合的时序逻辑模块时,这是最常用的赋值方法。
例:下面代码会发生什么?
12345always @(posedge clk) begin b<=a; a<=b; end
答案这俩会交换位置。因为:
在时钟沿到来前,两个表达式并行运算,已经确定好结果;
时钟沿到来 ...
数字系统设计复习笔记:第一篇
常用缩写
我猜必考,你觉得呢?
VHDL: VHSIC Hardware Description Language
VHSIC: Very High-Speed Integrated Circuit
HDL: Hardware Description Language
CAD: Computer-Aided Design
EDA: Electronic Design Automation
LSI: Large Scale Integration
ULSI: Ultra-Large Scale Integration
ASCII: American Standard Code for Information
ISO: International Standards Organization
ASIC: Application-Specific Integrated Circuit
FPGA: Field-Programmable Gate Array
PLA: Programmable Logic Array
PAL: Programmable Array Logic
PLD: Pr ...
数字系统设计复习笔记:序篇
笔记内含大量图片,流量警告
前言
简单整理一下笔记,因为 我实在不知道怎么考
纯写代码?概念?填空?
老师已经声明没有历年试题了。听学长说考概念比较多,纯写代码反而不多。
不管怎么样,整整看吧。
2024.04.20 大致整理完了。最后两个单元实在不想多看,毫无头猪。
2024.04.26 整理了一些简答题
复习资料
所有的PPT
《Verilog数字系统设计教程》第二版
(可选)刷点题!
HDLBits
https://www.fpga4student.com/
https://github.com/
目录
标题后数字为对应PPT章节
目录
第一篇
概念、变量类型、运算符 0-4
第二篇
各种各样的语句:块、赋值、条件、生成 4-5
第三篇
结构说明语句、任务和函数 6
第四篇
非常多的系统任务 6-7
第五篇
门原语、行为建模和UDP 9
第六篇
非常复杂的加法器乘法器、总线和流水线 10
第七篇
状态机:一段式,两段式,还有三段式 12
第八篇
可综合的Verilog与代码风格:好的开始 13
第九篇
阻塞与非阻塞:时序还是组合 14
第十篇
复杂的时序逻辑电路 ...
两段式状态机与三段式状态机
前言
上课时讲了两段式状态机和三段式状态机,不过对于概念依旧有点模糊。自己记了一点,以便期末回顾用。
一般来说,模块内有几个always就是几段式。但是具体情况还需看代码分析。
参考资料
Verilog状态机常见三种写法
状态机的一段式、二段式、三段式的区别-电子发烧友网
Verilog实现二段式和三段式有限状态机-CSDN博客
对于经典三段式状态机的自己之前一些认识的误区-CSDN博客
一段式
顾名思义,全模块只有一个always,在该模块中既描述状态转移,又描述状态的输入和输出。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465module fsm(Clock,Reset,A,K2,K1,state); input Clock, Reset, A; output K2, K1; output [1:0] state; reg K2, K1; reg [1:0] ...