数字集成电路设计
- 格式:pdf
- 大小:2.34 MB
- 文档页数:48
课程介绍1RTL及电路设计原则2信号同步处理电路3三态电路的使用4状态机的设计及描述课程介绍1RTL及电路设计原则2信号同步处理电路3三态电路的使用4状态机的设计及描述RTLRTL是指Register Transfer Level,即寄存器传输级,代码显式定义每一个DFF,组合电路描述每个DFF之间的信号传输过程。
当前的主流工具对RTL级的综合、优化及仿真非常成熟。
不建议采用行为级甚至更高级的语言来描述硬件,代码的可控性,可跟踪性及可移植性难以保证。
比较常用的RTL硬件描述语言包括VHDL(欧洲、研究所、学校)、Verilog HDL(美国、国内大部分企业)。
本讲义设计方法只适用于同步电路设计。
RTL设计原则时序逻辑与组合逻辑分开设计和描述 数据路径和控制路径分开设计和描述 先画电路,后写代码RTL 设计原则—时序逻辑与组合逻辑分开不选用既有Set ,又有Reset 的DFF不选用既没有Set ,又没有Reset 的DFFSet 或Reset 信号原则上选用低有效的DFFClock 信号原则上选用上升沿时序逻辑的使用及硬件描述有效的DFF原则上不要使用Latch 来实现电路所有常量都要有位宽描述,如:1’b0,3’h1等。
always@(posedge Clk or negedge Rst_n)if(!Rst_n)Q<=1’b0; //Or Q<=1’b1; if use asyn set DFFelseQ<=D;RTL设计原则—时序逻辑与组合逻辑分开所有器件的输入端必须有且仅有一个驱动或者是模块的一个输入(AviodDFF设计后,设计组合逻辑Undriver andMulti-Driver)assign D = (~S0) ? InA :S1 ? 1’b0 :S2 ? Q :(InB & InC);RTL设计原则—数据路径与控制路径分开 问题?S0/S1/S2如何设计?RTL设计原则—先电路后代码系统设计三要素:结构框图及各模块连接关系(原则上每个模块只有一个时钟信号以及复位信号)IO信号功能描述以及时序描述各模块连线功能描述与时序描述先电路后代码的优点:逻辑清晰,便于表达及传递思路电路直观,便于Debug以及修改信号定义明确,Coding只需照抄一个小练习设计一个4bit计数器:从0到15循环计数加电平输入信号P_M,P_M为1则往上加,P_M为0则往下减加脉冲输入信号Clr,Clr脉冲(高有效)来到,则计数器输出为0加脉冲输入信号Load,电平输入信号DIN[3:0],Load 脉冲(高有效)来到则计数器输出加载为DIN[3:0]的值增加一个电平输入信号Hold,当Hold为高电平时,计数器保持当前值,不做增减。
课程介绍1RTL及电路设计原则2信号同步处理电路3三态电路的使用4状态机的设计及描述DFF及亚稳态建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,D端数据在时钟触发沿到来前的建立时间内以及触发沿到来后的保持时间内必须保持稳定,否则输出端可能会输出一个不稳定的电压信号,且该信号可能因为外界环境影响,逐步向逻辑0或逻辑1靠近。
这就是亚稳态。
什么是信号同步电路?在数字电路设计当中,常常会碰到信号需要在不同的时钟域之间进行传递的情况,我们需要特定的电路来作为不同时钟域之间的接口,使信号能够准确和稳定地进行传递。
这样的电路我们简称为信号同步电路信号同步电路的分类目前将信号同步电路分成3类处理电平信号的同步电路处理脉冲信号的同步电路处理多比特数据信号的同步电路问题:什么是电平信号,什么是脉冲信号?处理电平信号的同步电路 输出信号为电平–电路图处理电平信号的同步电路 输出信号为电平–时序图处理电平信号的同步电路 输出信号为上升沿脉冲–电路图处理电平信号的同步电路 输出信号为上升沿脉冲–时序图处理电平信号的同步电路 输出信号为下降沿脉冲–电路图处理电平信号的同步电路 输出信号为下降沿脉冲–时序图处理脉冲信号的同步电路慢到快时钟,输出信号为电平–电路图处理脉冲信号的同步电路慢到快时钟,输出信号为电平–时序图处理脉冲信号的同步电路慢到快时钟,输出信号为上升或下降沿脉冲,思考一下输出信号为脉冲的电路图怎么画?时序图是怎样的?处理脉冲信号的同步电路时钟关系不定,输出信号为上升沿脉冲-电路图处理脉冲信号的同步电路时钟关系不定,输出信号为上升沿脉冲-时序图处理脉冲信号的同步电路时钟关系不定,输出信号为上升沿脉冲,思考一下输出信号为下降沿脉冲或者电平的电路图怎么画?时序图是怎样的?对于这种同步电路的输入信号在时序上有什么要求?exp_clr信号为什么不用脉冲而使用电平?处理多比特数据信号的同步电路 8位数据握手传输-电路图处理多比特数据信号的同步电路8位数据握手传输,思考一下为什么不直接用8位的同步电路来同步数据?这个电路在性能上有什么缺点?处理多比特数据信号的同步电路异步FIFO -概念所谓FIFO是First In First Out,实际上指的是对储存体(RAM, 寄存器组)的一种访问方式。
我们通常理解为具备这种访问方式的储存体异步FIFO指的是FIFO的读时钟和写时钟的频率和相位是不相同的异步FIFO通常被用作数据缓存,让数据可以较连续地从一个时钟域传送到令一个时钟域处理多比特数据信号的同步电路 异步FIFO -电路图处理多比特数据信号的同步电路异步FIFO -常见用法1用较简单的控制,就可以让多比特数据从源时钟域较连贯地传送到目的时钟域处理多比特数据信号的同步电路异步FIFO -常见用法2与乒乓方法结合,可以保证OUT数据在一定长度(FIFO深度)内是不间断地输出的处理多比特数据信号的同步电路 异步FIFO -指针产生电路Binary指针用作访问RAM的读写地址Gray指针用作指针比较产生空满信号处理多比特数据信号的同步电路异步FIFO -格雷码(Gray Code)的好处 在格雷码指针不断以1为单位进行递增或者递减的过程中,每次指针的值都只会改变其中的一位这样保证了指针在同步过程中,不会因为毛刺而发生同步错误处理多比特数据信号的同步电路异步FIFO -值得思考的地方在FIFO结构图中,指针同步电路只用了简单的2级电平同步电路。
而FIFO读写双方的时钟在原则上可以是任意关系,为什么这样简单的同步电路不会造成任何问题提示:从同步指针的用途来思考这个问题同步电路里的异步复位系统级的复位信号同步电路原则上每个模块内所有寄存器都使用同一个时钟和同一个复位复位信号原则上需要在该模块时钟域同步后使用。
异步复位信号的同步释放课程介绍1RTL及电路设计原则2信号同步处理电路3三态电路的使用4状态机的设计及描述三态电路使用的原则芯片内部逻辑不允许出现三态电路,主要是避免出现Undriver的器件思考:早期存储IP输出,在读使能无效时,有高阻态输出,如何处理?Bus-Holder/Bus-Keeper 思考:三态IO是个什么结构?ionout Vout;assign Vout = Enable ? A : 1’bz;assign Vin = Vout;注意:只适用于FPGA,在UCF里设置PULLUP或PULLDOWN可配置上拉或下拉。
练习VOL,输出低电平的电压最高值VOH,输出高电平的电压最低值VIH,输入高电平的电压最低值VIL,输入低电平的电压最高值U1 PIN1的VOH=3.3V,可配置为输出或输入状态 U2 PIN2的VIH=3.6V,为输入管脚问题1:设计方案,使得U1 PIN1输出信号可以稳定驱动U2 PIN2?问题2:如果U1重新设计,PIN1的输出Buffer如何调整可以直接驱动U2 PIN2?课程介绍1RTL及电路设计原则2信号同步处理电路3三态电路的使用4状态机的设计及描述三段式状态机描述—设计状态机状态机本身利用电路表示并不利于描述,可用状态转移图来描述。
三段式状态机描述—状态寄存器描述状态寄存器描述:时序电路描述(遵循时序逻辑与组合逻辑分离原则,只描述寄存器)always@(posedge clk or negedge rst_n)if(!rst_n)currentstate <= S0;elsecurrentstate <= nextstate;三段式状态机描述—状态跳转描述always@(currentstate or a)case({currentstate, a}){S0,1’b1}: nextstate = S1;{S1,1’b0}: nextstate = S2;{S2,1’b0}: nextstate = S3;{S2,1’b1}: nextstate = S1;{S3,1’b0}: nextstate = S0;状态机跳转描述:数据路径设计(遵循数据路径与控制路径设计分离,只状态跳转的过程)。
简化跳转条件,可以用case 替换assign 。
跳转条件有时候比较复杂,可根据{S3,1’b1}: nextstate = S4;{S4,1’b0}: nextstate = S5;{S4,1’b1}: nextstate = S1;{S5,1’b0}: nextstate = S3;{S5,1’b1}: nextstate = S1;default: nextstate = currentstate;endcase 问题:如果用assign 描述怎么写?与case 有什么不同?数据路径与控制路径设计分离的原则单独设计。
三段式状态机描述—条件/控制信号描述 条件信号即状态跳转条件信号控制信号是状态机处于某种状态下,对外控制assign a = ????assign Z = (currentstate ==S5) ? 1’b1 : 1’b0;的信号遵循数据路径与控制路径设计分离的原则。