Verilog HDL 高级数字设计——第6章 组合逻辑与时序逻辑的综合

本章概述

        本章将介绍:

  1. 自动优化多输入—输出逻辑电路布尔方程的方法。
  2. 给出几个例子,说明如何编写组合、时序逻辑的可综合模型(也就是那些:可用综合工具来生成所描述的功能的门级电路所实现的模型)。

6.1  综合简介

        电路模型可根据抽象程度观测级别来分类。有三种常见的抽象级别:架构级、逻辑级、物理级。

架构级:架构级的描述包含了必须由电路执行的、将输入序列转换为特定输出序列的一些操作,但不将操作与时钟关联。使用“架构”这一名词,是因为这些操作基本上可以由那些不同结构的、互连的、同步的功能单元来实现。这里设计的关键在于如何从架构描述中,提取一个能实现所需功能的算法。

逻辑级:逻辑级的模型描述了,能够由电路实现的一组变量和一组布尔函数。逻辑模型的寄存器资源、功能模块架构和时序均是其描述的一部分。这里设计任务就是,将布尔逻辑转换成可以满足功能的组合门电路存储寄存器的最优化的网表

电路设计从高级别的抽象开始,最后结束于物理实现。

6.2  组合逻辑的综合

6.3  带锁存器的时序逻辑的综合

6.4  三态器件和总线接口的综合

6.5  带有触发器的时序逻辑综合

6.6  显示状态机的综合

        显式状态机有一个已经明确定义的寄存器和一个能在输入的作用下控制状态转换的逻辑。显式状态机推荐使用两个行为来描述,一个边沿敏感行为(描述状态的同步转移),另一个电平敏感行为(描述下一个状态和输出的组合逻辑)。

6.6.1  BCD码/余3码转换器的综合

        建议在所有case语句中都包含default语句,否则将会出现锁存器。

        BCD码/余3码转换器的功能可以参照P53页3.6节。之前是利用人工方法进行设计,现在是讨论Verilog描述的编码转换器的建模及其综合过程。

        在描述显式状态机的下一个状态和输出的组合逻辑的电平敏感行为时,要对所有可能的状态译码。

        如果case语句的分支中,没有包含所描述状态机所有的下一状态和输出逻辑,那么下一状态和输出的组合逻辑将被综合成带锁存器的输出。要想避免这一情况,可以在描述下一状态的电平敏感行为一开始的时候就给下一状态赋以默认值。

        同样,给一个状态机的输出赋以默认值也可以避免综合为锁存的输出。

综合工具对状态机的建模附加了一些约束条件:

  1. 显式状态机的状态寄存器必须当作一个整体进行赋值,即不允许综合工具为状态寄存器变量进行位选择和部分选择复制;
  2. 所有寄存器都要赋值;
  3. 异步控制信号(如set和reset)在事件控制表达式中必须为标量;
  4. 赋给状态寄存器的值必须为一个常数(如state_reg=start_state)或者是经静态求值后可得到常数值的一个变量(即状态转移图必须指定确定的关系)。

        显式状态机的描述也包括一个明确声明的类型为reg的状态寄存器变量。只有这样的寄存器才可以用来表示状态机,它意味着状态寄存器的每一个赋值语句必须要给整个寄存器赋值,而不是给某位或某一部分赋值。这种对寄存器过程赋值的约束确保了特定状态转移图与行为的对应。

6.6.2  设计举例:Mealy型NRZ码/Mancherster线性码转换器的综合

module NRZ_2_Mancherster_Mealy
(
    output reg B_out,
    input      B_in ,
    input      clock,
    input      reset_b
)
    reg[1:0] state,neat_state;

    parameter S_0 = 2'd0,
              S_1 = 2'd1,
              S_2 = 2'd2,   //2'd3是未用到的位组合状态
              dont_care_state = 2'bx,
              dont_care_out   = 1'bx;

    always@(negedge clk or negedge reset_b) begin
        if(reset_b == 0) begin
            state <= S_0;
        end else begin
            state <= next_state;
        end
    end

    always@(state,B_in) begin
        B_out = 0;          //默认赋值
        case(state)         //注意:状态寄存器是部分译码的
            S_0 : begin
                      if(B_in == 0) begin
                          next_state = S_1;
                      end else if(B_in == 1) begin
                          next_state = S_2;
                          B_out      = 1  ;
                      end
                  end
            S_1 : begin
                     next_state = S_0;
                     B_out      = 1  ;
                  end
            S_2 : begin
                      next_state = S_0;
                  end
            default : begin
                          next_state = dont_care_state;
                          B_out      = dont_care_out  ;
                      end
        endcase
    end
endmodule

6.6.3  设计举例:Moore型NRZ码/Manchester线性码转换器的综合

module NRZ_2_Mancherster_Mealy
(
    output reg B_out,
    input      B_in ,
    input      clock,
    input      reset_b
)
    reg[1:0] state,neat_state;

    parameter S_0 = 2'd0,
              S_1 = 2'd1,
              S_2 = 2'd2,   
              S_3 = 2'd3;

    always@(negedge clk or negedge reset_b) begin
        if(reset_b == 0) begin
            state <= S_0;
        end else begin
            state <= next_state;
        end
    end

    always@(state,B_in) begin
        B_out = 0;          //默认赋值
        case(state)         //完全译码
            S_0 : begin
                      if(B_in == 0) begin
                          next_state = S_1;
                      end else begin
                          next_state = S_3;
                      end
                  end
            S_1 : begin
                      next_state = S_2;
                  end
            S_2 : begin
                      B_out = 1;
                      if(B_in == 0) begin
                          next_state = S_1;
                      else begin
                          next_state = S_3;
                      end
                  end
            S_3 : begin
                      next_state = S_0;
                      B_out      = 1  ;
                  end
        endcase
    end
endmodule

应该再去看看Moore状态机和Mealy状态机的区别以及状态机的定义

6.6.4  设计举例:序列检测器的综合


6.7  寄存器逻辑

6.8  状态编码

6.9  隐式状态机、寄存器和计数器的综合

7.0  复位

  

暂时先不看了,决定先把数字电子技术基础吃透了再说

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值