Verilog 硬件描述语言自学——重温数电之时序逻辑电路

想深耕嵌入式?这个专辑值得收藏

MCU、FPGA、工控、传感器一站式学习,实战项目直接抄

目录

1)时序逻辑电路的基本概念

        a. 时序逻辑电路的基本结构与分类

        b. 时序逻辑电路功能的表达

2)时序逻辑电路的分析

        a. 分析同步时序逻辑电路的一般步骤

        b. 同步时序逻辑电路分析举例

3)同步时序逻辑电路的设计

        a. 设计同步时序逻辑电路的一般步骤

        b. 同步时序逻辑电路设计举例

 4)异步时序逻辑电路的分析

        a. 异步时序逻辑电路分析方法

        b. 异步时序逻辑电路的分析举例

5)若干典型的时序逻辑集成电路

        a. 寄存器和移位寄存器

        b. 计数器

6)用Verilog HDL描述时序逻辑电路

        a. 移位寄存器的Verilog建模

        b. 计数器的Verilog建模

        c. 状态图的Verilog建模  

        d. 数字钟的Verilog建模   ???

7)总结

                            


1)时序逻辑电路的基本概念

        a. 时序逻辑电路的基本结构与分类

        时序电路的基本结构:

        

        结构特征:电路由组合电路存储电路组成。且电路存在反馈。     

        输出方程:O=f1(I,S) ——表达输出信号与输入信号、状态变量的关系式

        激励方程:E=f2(I,S) ——表达了激励信号与输入信号、状态变量的关系式

        状态方程:Sn+1=f3(E,Sn) ——表达存储电路从现态到次态的转换关系式

        异步时序电路与同步时序电路:

        同步时序电路——存储电路里所有触发器有一个统一的时钟源,它们的状态在同一时刻更新。

        异步时序电路——没有统一的时钟脉冲或没有时钟脉冲,电路的状态更新不是同时发生的。

        

        米利型和穆尔型时序电路:

        米利型电路:

        电路的输出是输入变量A及触发器输出Q1、Q0的函数,这类时序电路亦称为米利型电路 。       

        穆尔型电路:

        电路输出仅仅取决于各触发器的状态,而不受电路当时的输入信号影响或没有输入变量,这类电路称为穆尔型电路。   

    


        b. 时序逻辑电路功能的表达

注意:时序逻辑电路的五种描述方式是可以相互转换的


2)时序逻辑电路的分析

        时序逻辑电路的分析任务:分析时序逻辑电路在输入信号的作用下,其状态和输出信号变化的规律,进而确定电路的逻辑功能。

        分析过程主要的表现形式:时序电路的逻辑功能是由其状态和输出信号的变化规律呈现出来的。所以,分析过程主要是列出电路状态表或画出状态图、工作波形图

        a. 分析同步时序逻辑电路的一般步骤

        1、了解电路的组成:电路的输入、输出信号、触发器的类型等。

        2、根据给定的时序电路图,写出各逻辑方程式:输出方程、各触发器的激励方程、状态方程(将每个触发器的驱动方程代入其特性方程得状态方程)

        3、列出状态转换表或画出状态图和波形图

        4、确定电路的逻辑功能

        b. 同步时序逻辑电路分析举例

                

                

                        

                        

                        

                                

                                

                                

                                

                                

                                

                                        

                                        

                                        

                                        

                                        


3)同步时序逻辑电路的设计

                同步时序逻辑电路其实式分析的逆过程,其任务是根据实际逻辑问题的要求,设计出能实现给定逻辑功能的电路。

        a. 设计同步时序逻辑电路的一般步骤

                同步时序逻辑电路的设计过程

                

                (1)根据给定的逻辑功能建立原始状态图和原始状态表                       

                        ①明确电路的输入条件和输出要求,分别确定输入变量和输出变量的数目和符号。

                        ②找出所有可能的状态和状态转换之间的关系。

                        ③根据原始状态图建立原始状态表。

                (2)状态化简-----求出最简状态图 ;

                        合并等价状态,消去多余状态的过程称为状态化简

                        等价状态:在相同的输入下有相同的输出,并转换到同一个次态去的两个状态。

                (3)状态编码(状态分配);

                        给每个状态赋以二进制代码的过程。

                        根据状态数确定触发器的个数:

                        2^(n-1)< ≤ 2^n (M:状态数;n:触发器的个数)

                (4)选择触发器的类型

                (5)求出电路的激励方程和输出方程 ;

                (6)画出逻辑图并检查自启动能力。


        b. 同步时序逻辑电路设计举例

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

                   

        

        


 4)异步时序逻辑电路的分析

        a. 异步时序逻辑电路分析方法

        

        分析步骤:

                1. 写出各逻辑方程式:时钟方程、触发器的激励方程、输出方程、状态方程

                2. 列出状态转换表或画出状态图和波形图

                3. 确定电路的逻辑功能

        注意点:

                1. 分析状态转换时必须考虑各触发器的时钟信号作用情况

                        有作用,则令CPn=1;否则CPn=0;

                        根据激励信号确定CPn=1的触发器的次态,CPn=0的触发器则保持原有状态不变

                2. 每一次状态转换必须从输入信号所能触发的第一个触发器开始逐级确定

                3. 每一次状态转换都有一定的延迟

                        同步时序电路的所有触发器是同时转换状态的,与之不同,异步时序电路各个触发器之间的状态转换存在一定的延迟,也就是说,从现态Sn到次态Sn+1的转换过程中有一段“不稳定”的时间。在此期间,电路的状态是不确定的只有当全部触发器状态转换完毕,电路才进入新的“稳定”状态,即次态Sn+1

        b. 异步时序逻辑电路的分析举例

                

             

                   

                

                

                

                

5)若干典型的时序逻辑集成电路

        a. 寄存器和移位寄存器

        寄存器:数字系统中用来存储代码或数据的逻辑部件,它的主要组成部分是触发器

        一个触发器能存储1位二进制代码,存储n位二进制代码的寄存器需要用n个触发器组成,寄存器实际上是若干触发器的集合

        

                

        移位寄存器

        移位寄存器的逻辑功能:既能寄存数码,又能在时钟脉冲的作用下使数码向高位或向低位移动的逻辑功能部件。

        移位寄存器逻辑功能分类:

        

        基本移位寄存器:

        (a)电路

                

         (b)工作原理

                

                

                

        多功能双向移位寄存器

        (a)工作原理

                

                

                典型集成电路

                       

                                                                        

        b. 计数器

                计数器的逻辑功:对输入时钟脉冲进行计数,也可用于分频、定时、产生节拍脉冲和脉冲序列及进行数字运算等。

                计数器的分类:

                        按脉冲输入方式:分为同步异步计数器

                        按进位体制:分为二进制十进制、和任意进制计数器

                        按逻辑功能:分为加法减法可逆计数器

                        

                二进制计数器

                (1)异步二进制计数器---4位异步二进制加法计数器

                        工作原理:

                        

                        

                        结论:计数器的功能为不仅可以计数也可以作为分频器

                        

                        

                        

                        

                        

                        

                        

                        

                        

                        

                        

                        

                        

                        

                        

                        

                        

                小结:用集成计数器构成任意进制计数器的一般方法

                     

                        

                        

                异步二-十进制计数器

                        

                                

                环形计数器:

                                

                                

                                


6)用Verilog HDL描述时序逻辑电路

        a. 移位寄存器的Verilog建模

                用行为级描述always描述一个4位双向移位寄存器,有异步清零、同步置数、左移、右移和保持。功能同74xx194

module shift74x194 (S1, S0, D, Dsl, Dsr, Q, CP, CR);
    input S1, S0;            //控制输入
    input Dsl, Dsr;          //串行输入      
    input CP, CR;            //时钟及清零
    input [3:0] D;           //并行输入
    output [3:0] Q;          //寄存器输出
    reg [3:0] Q;    
    always @ (posedge CP or negedge CR)
       if (~CR) Q <= 4'b0000;
       else
          case ({S1,S0})
            2‘b00: Q <= Q;              	//保持
            2‘b01: Q <= {Q[2:0],Dsr}; 	//右移                                                                                                                                                                                                                                                                       
            2‘b10: Q <= {Dsl,Q[3:1]}; 	//左移 
            2‘b11: Q <= D;              	//并行输入
          endcase
endmodule   

        b. 计数器的Verilog建模

                Verilog描述具有使能端、异步置零、同步置数、计数、保持的10进制计数器。

module counter74x161_beh (     //Verilog 2001, 2005 syntax
  input CEP, CET, PE, CP, CR,  //输入端口声明
  input [3:0] D,  	           //并行数据输入
  output TC,	               //进位输出
  output reg [3:0] Q           //数据输出端口及变量的数据类型声明
  );
  wire CE;                           //中间变量声明
  assign CE=CEP&CET;                 //CE=1时,计数器计数 
  assign TC=CET&PE&(Q == 4'b1111);   //产生进位输出信号
  always @(posedge CP, negedge CR)   //Verilog 2001, 2005 syntax
      if (~CR) Q<=4'b0000;           //实现异步清零功能
      else if (~PE) Q<=D;	         //PE=0, 同步装入输入数据
      else if (CE) Q<=Q+1'b1;        //加1计数
       else Q<=Q;                    //输出保持不变
endmodule 

        c. 状态图的Verilog建模  

                 Verilog描述状态图非常方便,常用alwayscase语句。                      

module  Mealy_sequence_detector (A, CP, CR, Y);
     input A, CP, CR;
     output Y;
     reg Y;		
     reg [1:0] current_state, next_state;
     parameter  S0=2’b00, S1=2’b01, S2=2’b11;
     always @( negedge CP or negedge CR)
     begin
         if (~CR)  current_state <=S0;  //在CR下降沿设s0为初态
         else          current_state <= next_state;
     end

                第二个always是将current_state和输入A作为敏感变量。

always @(current_state or A)
  begin	
    case(current_state)
       S0: begin Y<=0; next_state=(A==1)? S1: S0; end
          S1: begin Y<=0; next_state=(A==1)? S2: S0; end
          S2: if (A==1)
                    begin Y<=0; next_state<=S2; end
	    else
	        begin Y=1; next_state<=S0; end	  
          default: begin Y<=0; next_state<=S0; end
    endcase
  end	
endmodule 

        d. 数字钟的Verilog建模   ???

7)总结

       学麻了学麻了,最近不想学了,好累,先过一遍再说。

                        

                

                            

        

        

        

       

想深耕嵌入式?这个专辑值得收藏

MCU、FPGA、工控、传感器一站式学习,实战项目直接抄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值