我是靠谱客的博主 称心小馒头,最近开发中收集的这篇文章主要介绍实验三 时序电路实验,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、实验步骤与实验结果

第一步:创建一个工程项目。首先实现连续节拍脉冲发生器电路。

电路图如下:

图1.1 连续节拍脉冲发生器电路

仿真图如下:

图1.2  节拍脉冲发生器工作波形

分析此仿真图:当RST复位端给低电平,不论什么时钟信号,T1恒为高电平,T2,T3,T4恒低电平;当RST复位端给高电平,此时T1为高电平,T2,T3,T4低电平,当遇到CLK时钟信号为上升沿的时候,实现节拍的循环。

第二步:接下来实现单步节拍发生电路设计。

电路图如下:

图1.3 单步节拍发生电路

图1.4 单步节拍脉冲发生器工作波形

仿真分析:当SETP置0的时候T1、T2、T3、T4节拍信号恒为0。只有当SETP置1的时候,CLK为上升沿,逐步输出T1=1,T2=1,T3=1,T4=1,最后当T5=1的时候,CLK|T5恒为1,时钟就不起作用了。见下图可以更好的理解。

图1.5 单步节拍发生电路仿真图

第三步:设计单步/连续节拍发生电路。

电路图如下:

图1.6 单步/连续节拍发生器电路

仿真图如下:

图1.7 单步/连续节拍电路运行仿真波形

仿真图分析如下:当RST为0时,T1-T5均输出0,是复位键。当RST为1时,STEP为0和RST的作用是相似的,当STEP和RST均为1的时候开始执行单步或连续节拍发生器,此时H_RUN是选择是单步还是连续节拍的选择位,当H_RUN为0说明是单步节拍发生器,当H_RUN为1说明是连续节拍发生器,当STOP端为1时起到停止电路的作用。

二、实验讨论与总结

1、单步运行与连续运行有何区别,它们各自的使用环境怎样?

解答:区别:单步运行只在复位后T1-T4依次产生一个脉冲,对应与计算机中执行一条指令,而连续运行复位后T1-T4将依次产生脉冲不断循环下去。使用环境:单步运行用于调试器对单步指令运行的控制,连续运行用于程序的正常运行和连续运行控制连续指令执行。

2、如何实现单步/连续运行工作方式的切换?

解答:通过S控制21MUX的2选1控制端。当S为低电平时,Y=A,即实现了连续方式;当S为高电平时,Y=B,即切换到单步方式。

3、用Verilog HDL设计实现节拍控制电路,并通过实验台验证其功能。

解答:代码详见实验报告底部附件一:程序源代码

该程序的电路图如下:

图2.1 verilog实现的单步/连续节拍电路

该程序的仿真图如下:

图2.2 verilog实现的单步/连续节拍电路运行仿真波形

附件一:程序源代码

1、用Verilog HDL设计实现节拍控制电路代码清单如下:
 

module shiyan3_2 ( CLK,RST,STEP,H_RUN,STOP,T);

     input  CLK,RST,STEP,H_RUN,STOP;

     output [4:0]T;

     reg [4:0]T;

      //临时变量

       reg [4:0]t1=5'b00000;

        //reg t[3:0];

always @ (posedge CLK or negedge RST or  negedge STEP )

begin

if(!RST)

begin

T<=5'b0000;

t1<=5'b0000;

end

else if(!STEP)

begin

T<=5'b0000;

t1<=5'b0000;

end

//保持状态不变

else if(STOP)

begin

  T<=T;

  t1<=T;

  end

else

    begin

         if(!H_RUN)

         begin

            //单脉冲

            case(t1)

            5'b00000:begin t1<=5'b00001; T<=5'b00001; end

            5'b00001:begin t1<=5'b00010; T<=5'b00010; end

            5'b00010:begin t1<=5'b00100; T<=5'b00100; end

            5'b00100:begin t1<=5'b01000; T<=5'b01000; end

            5'b01000:begin t1<=5'b10000; T<=5'b10000; end

            //其余输出

            default:begin  t1<=5'b10000; T<=5'b10000; end

           

         endcase

         end

        else

        begin

         //连续脉冲

            case(t1)

           

            5'b00000:begin t1<=5'b00001; T<=5'b00001; end

            5'b00001:begin t1<=5'b00010; T<=5'b00010; end

            5'b00010:begin t1<=5'b00100; T<=5'b00100; end

            5'b00100:begin t1<=5'b01000; T<=5'b01000; end

            5'b01000:begin t1<=5'b10000; T<=5'b10000; end

            5'b10000:begin t1<=5'b00001; T<=5'b00001; end

            //其余输出

            default:begin  t1<=5'b00000; T<=5'b00000 ;end

           

         endcase

         end

    end


end


 endmodule

最后

以上就是称心小馒头为你收集整理的实验三 时序电路实验的全部内容,希望文章能够帮你解决实验三 时序电路实验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部