数字芯片:若干问题记录
问题
好久没有更新博客了,最近有些忙。上次的FPGA系列先暂停。记录一下最近的问题。
从前在我身边的人大多是按照C 语言风格编写verilog,忽略基本电路的重要性。在这里,我着重强调一下电路设计基本功扎实的重要性。按照C的风格去写电路的时候很爽,他们的“开发”流程是“预实现功能–>划分模块–>c语言编写–>行为级仿真–>烧录实现”。这种方法设计出来的电路往往会存在很多缺陷,特别在工作的时钟频率比较高的时候,会出现“前仿真正确但板子情况不对。”
这时候,上述的这种人儿可能会手足无措。其实EDA帮他们综合出来的电路在较高的时钟频率时,不满足时序约束。对应这种情况,后仿真是很重要的。
为了避免这个问题,我们要从根本上减轻这种状况的发生。设计流程:“预实现功能–>划分模块–>RTL级原理图–>HDL 描述–>行为级仿真–>烧录实现”。在这个过程中,设计一些简单的组合&时序电路,掌握一些电路设计的技巧(这个过程很重要)。在这过程中,用HDL来描述出自己设计的电路,养成代码对应电路的好习惯,要知道verilog,VHDL等语言只是硬件描述语言。
当要设计的模块很庞大时,在写代码的过程中,要想到
(1)代码所对应的电路;
(2)代码在综合器综合后的大概电路(如Vivado环境下的综合工具);
(3)电路在FPGA上的资源占用估计;
在综合之后还不能实现功能的情况下,暂时分析一种情况:哪一个时序电路之前的组合逻辑电路不满足时序约束(setup time && hold time)。
记录
- verilog 语法
- 时序逻辑和组合逻辑
- 亚稳态以及处理方法
- 代码是否可以综合
- DFF 和 LATCH的组成
- setup time 和 hold time
- 毛刺消除
- 竞争冒险以及消除
- FSM (MOORE MEALY)
- 串并转化
- 分频电路
- FPGA 内部结构
- 检测边沿电路
- 提高电路工作频率的方法
- 兵乓buffer
- FIFO 异步同步
- 最小深度计算
- 跨时钟域信号处理
这次纯属笔记记录。