组合时序电路及状态机设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7.3.3
有限状态机的设计
有限状态机设计改进(VHDL): //process1 if(rst_n = „0‟) then cstate <= “0000”; elsif (clk „event and clk=„1‟) then cstate <= nstate; endif; //process2 P2:process(cstate) begin case cstate is when “0000” => nstate <= “0001”;cmd <= “001”; when “0001” . . endcase; endprocess;
冒险:逻辑门因输入端的竞争而导致输出产生不应有的尖峰干扰脉冲(又称过渡 干扰脉冲)的现象,称为冒险。
7.1.3
组合逻辑电路竞争冒险
如上述设计的全加器,若Ci 和Si做同或运算时:
=
F
7.1.3
组合逻辑电路竞争冒险
Si
如上述设计的全加器,若Ci 和Si做同或运算时:
Ci
F
理论波形
实际波形
7.1.3
在设计时要分清所设计的电路是否为组合逻辑电路。
7.1.2
组合逻辑电路设计
设计组合电路直就是实现逻辑表达式。要求在满足逻辑功能和技术要求基 础上,力求使电路简单、经济、可靠。其一般设计步骤为:
① 分析设计要求,列真值表; ② 进行逻辑和必要变换。得出所需要的罗最简逻辑表达式; ③ 画逻辑图。
7.1.2
7.2
7.2.1
时序逻辑电路设计
时序逻辑电路定义 7.2.2 时序逻辑电路分析
7.2.3
7.2.4
FPGA设计中应考虑的时序问题
时序电路设计
7.2.1
时序逻辑电路定义
时序电路是一种输出不仅与当前的输入有关,而且与其输出状态的原始状 态有关的逻辑电路。常见的时序逻辑电路有触发器、计数器、寄存器等
时钟信号: 时钟信号是FPGA时序电路系统工作的基础和必须条件。
触发信号可以是时钟信号的上升沿,也可以是下降沿,这由设计决定。
7.2.3

FPGA设计中应考虑的时序问题
清零信号和置位信号:
时序电路的初始状态同清零信号和置位信号来设置,这是时序电路的 基本信号。其中复位电路可分为同步复位和异步复位
组合逻辑电路竞争冒险
组合逻辑电路和其他电路一样,在实际使用中会出现与理论设计分析的差别。其 中“竞争”“冒险”就是可能遇到的问题。 竞争:由于信号通过导线、门电路信号发生变化时,都存在时间延迟,使同一个 门 的一组输入信号,通过不同数目的门,经过不同长度导线的传输,到达门输 入端的时间会有先有后,这种现象称为竞争。
7.2.4
时序电路设计
典型计数器(二进制计数器)设计(VHDL):
IF(RST=„0‟) THEN COUNT <= (OTHERS=> „0‟); ELSIF (CLK „EVENT AND CLK = „1‟) THEN IF (COUNT = “64”) THEN COUNT <= (OTHERS=>‟0‟) ELSIF COUNT <= COUNT + 1; END IF;
讨论:跨时钟域的时序电路设计
直观的初步设计(VHDL): pulse:process(rst_n,pulse) begin if(rst=„0) then counter <= (others=>‟0‟); elsif(pulse „event and pulse = „1‟) counter <= counter + 1; endif; endprocess; cs:process(rst_n,cs_n) begin if(rst=„0‟) then dout <= 0; elsif(cs_n „event and cs_n = „0‟) dout <= counter; endif; endprocss;
7.3.3
有限状态机的设计
典型状态电路框架图 输出逻辑
输入
输出寄存器
输出
次态逻辑 状态寄存器
改进状态电路框架图
7.3.3
有限状态机的设计
有限状态机设计改进: always@(posedge clk or negedge rst_n) if(!rst_n) cstate <= 4‟b0000; else cstate <= nstate; always@(cstate ) begin case(cstate) 4‟b0000:begin nstate =4‟0001; cmd = 0; end 4‟b0001: . . . endcase end
时序电路设计
典型计数器(二进制计数器)设计:
always @(posedge clk or negedge rst_n) if(!rst) counter <= 0; else if(counter ==7‟d64 ) counter <= 0; else counter <= counter + 8‟d1;
组合逻辑电路竞争冒险
消除方法 1.接入滤波电容; 2.引入选通脉冲; 3.修改逻辑设计(在FPGA设计中常用); 4.利用可靠性编码(在FPGA设计中常用); 5.引入封锁脉冲。
7.1.3
组合逻辑电路竞争冒险
消除上述全加器竞争冒险现象:
逻辑函数 Si=Ai⊕Bi⊕Ci-1 将:Ci=AiBi+Ci-1(Ai⊕Bi) 改为Ci=AiBi + BiCi-1 + AiCi-1
异步时序电路:构成电路的每块触发器的时钟脉冲来自不同的脉冲 源,作用在每块触发器上的时间也不一定相同。

一、同步时序逻辑电路的分析步骤 1、写输出方程 5、画状态转换图
2、写驱动方程
3、写状态方程 4、填状态转换表
6、画时序波形图
7、分析其功能 8、检查自启动
7.2.3

ห้องสมุดไป่ตู้
FPGA设计中应考虑的时序问题
7.2.4
时序电路设计
LFSR计数器(VHDL): if(rst = „0‟) then count <= (others => „0‟); elsif(clk „event and clk=„1‟)then count <= LFSR&count(7 downto 1); endif; LFSR <= count[0] xor count[4] xor count[5] xor count[6];
异步复位
同步复位
7.2.3

FPGA设计中应考虑的时序问题
建立时间: 指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间。如果
建立时间不够,数据将不能正确输入触发器。

保持时间: 指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间。如果
保持时间不够,数据同样不能正确输入触发器。
7.2.4
7.3.1
状态机定义
由图11-3可见,摩尔机的下一状态取决于当前状态和当前输入,但输出结果仅取决于当前状态
7.3.2
有限状态机的编码
顺序编码: 顺序编码就是用二进制来表示所有状态,这种编码最为简单。如000,001,010, 011,100,101,110,111。 独热编码: 独热编码方式就是用N个触发器来实现具有N个状态的状态机,状态机的每一个 状态都由相对应的一个触发器的状态表示。如000,001,010,100。
7.3
有限状态机设计
状态机定义 7.3.2 有限状态机的编码
7.3.1 7.3.3
有限状态机的设计
7.3.1
状态机定义
状态机是由状态寄存器和组合逻辑电路构成的,能根 据控制信号按照预先设定的状态进行状态转移,是 协调相关信号动作、完成特定操作的控制中心, 属于一种逻辑电路。一般讨论的状态机为有限状 态机。分为摩尔(Moore)型和米利(Mealy)型
7.3.3
有限状态机的设计
状态机的传统设计方法十分繁杂,而在FPGA设计状态机,不需要进行繁琐的状 态化简,状态分配,状态编码等等,只需直接利用状态转移图进行设计。 如典型的设计方法(VHDL): if(rst = „0) then state <= “0000”; elsif(clk „event and clk =„1‟) then case state is when “0000” => state<=“0001”; cmd=“001”; when “0001” => . . . endcase; endif;
组合逻辑电路设计
例1、全加器设计(FPGA) 逻辑函数: Si=Ai⊕Bi⊕Ci-1 Ci=AiBi+Ci-1(Ai⊕Bi)
Verilog代码: tmp = Ai xor Bi ; Si = tmp xor Ci-1 ; Ci = (Ai and Bi) or (Ci-1 and tmp) ;
7.1.3
习题
设计一个脉冲计数器,在脉冲上升沿触发计数,上位机MCU在片选的下降沿 到来时读取一个计数值,用Verilog设计:
脉冲信号
Pulse
CS_N Dout[15:0]
MCU
CLK
RST_N
Counter[15:0]
讨论:跨时钟域的时序电路设计
直观的初步设计: input CLK,RST_N; input pulse; input CS_N; output reg [15:0] Dout; reg [15:0]counter; always @(posedge pulse or negedge RST_N) if(!RST_N) counter <= 15‟d0; else if(pulse) counter <= counter + 1‟b1; always @(negedge CS_N or negedge RST_N) if(!RST_N) Dout <= 15‟d0; else Dout <= counter;
7
组合逻辑、时序逻辑 电路及状态机设计
7.1
组合逻辑电路设计
组合逻辑电路定义
7.1.1 7.1.2
组合逻辑电路设计 7.1.3 组合逻辑电路竞争冒险
7.1.1
组合逻辑电路定义
组合逻辑电路是指由与、或、非三种基本逻辑运算组合成的逻辑电路, 在任何时刻,输出状态只决定于同一时刻各输入状态的组合,而与电路以 前状态无关,而与其他时间的状态无关。 组合逻辑电路有许多常用的模块,包括编码器、译码器、奇偶电路、比 较器、一般运算器等。
7.3.3
有限状态机的设计
状态机的传统设计方法十分繁杂,而在FPGA设计状态机,不需要进行繁琐的状 态化简,状态分配,状态编码等等,只需直接利用状态转移图进行设计。 如典型的设计方法: always@(posedge clk or negedge rst_n) if(!rst_n) state <= 4‟b0000; else begin case(state) 4‟b0000:begin state <=4‟0001; cmd <= 0; end 4‟b0001: . . . endcase end
7.2.4
时序电路设计
典型计数器(二进制计数器)的弊端: 二进制计数器在翻转时会产生毛刺,如果这个时候计数器的值被直 接作为其他信号的输入,那么结果将是错误的。 典型计数器的改进: 设计为LFSR计数器,每次只有一个位改变。或设计为格雷码计数 器,每次只有相邻位改变。 如:LFSR计数器: always@(posedge clk or negedge rst_n) if(!rst_n) count <= 0; else count <= LFSR_high & count; assign LFSR = count[0] xor count[4] xor count[5] xor count[6];
其相当于在组合逻辑的输入端加上了一个反馈输入,在其电路中有一个存 储电路,其可以将输出的状态保持住,我们可以用下图的框图来描述时序电 路的构成。
7.2.2

时序逻辑电路分析
重点讲同步时序逻辑电路的分析方法。
同步时序电路:构成电路的每块触发器的时钟脉冲来自同 一个脉冲源,同时作用在每块触发器上 。
Verilog代码 Si = Ai xor Bi xor Ci-1; Ci = (Ai and Bi)or(Bi and Ci-1)or(Ai and Ci-1);
7.1.3
组合逻辑电路竞争冒险
掌握消除竞争冒险方法在FPGA设计中的意义:
在一般的FPGA设计中,我们常用行为级的描述方式设计,在综合时综合工 具会自动优化电路。但在特定电路的设计中,需要做门级设计时,就要注意消除 电路的竞争冒险,来提高电路工作的可靠性。特别是在高速电路设计中尤为重要。
相关文档
最新文档