集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: 小舍YZ

FPGA开发 实用内容

[复制链接]
 楼主| 小舍YZ 发表于 2017-4-7 14:40:29 | 显示全部楼层
在ModelSim 6.2b中完成仿真,其结果如图2-9所示。

图2-9 同步JK触发器的仿真结果示意图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-4-7 14:41:10 | 显示全部楼层
2.三态缓冲器的Verilog实现

三态缓冲器也称三态门,其典型应用是双向端口,常用于双向数据总线的构建。在数字电路中,逻辑输出有两个正常态:低电平状态(对应逻辑0)和高电平状态(对应逻辑1);此外,电路还有不属于0和1状态的高组态(对应于逻辑Z)。所谓高阻,即输出端属于浮空状态,只有很小的漏电流流动,其电平随外部电平高低而定,门电平放弃对输出电路的控制。或者可以理解为输出与电路是断开的。最基本的三态缓冲器的逻辑符号如图2-10所示。

图2-10 三态缓冲器的逻辑符号图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-4-7 14:42:06 | 显示全部楼层
当OE为高电平时,Dataout与Datain相连;而OE为低时,Dataout为高阻态,相当于和Datain之间的连线断开。

例2-19 使用Verilog实现三态缓冲器

inout a;
wire z, b;
//当控制信号z为1时,开通三态门,b为输入端口;当z为0时,三态门为高阻,
//a为输出端口
assign a = (z) ? b : 8'bz;

3.38译码器的Verilog实现

38译码器是通过3条线来达到控制8条线的状态,就是通过3条控制线不同的高低电平组合, 一共可以组合出23=8种状态。在电路中主要起到扩展IO资源的作用。当然,可根据实际需求将38译码器扩展到更高级数上。

例2-20 使用Verilog实现38译码器

module decoder3to8(din, reset, dout);
    input [2:0] din;
    input reset;
    output [7:0] dout;

    reg [7:0] dout;
    always @(din or reset) begin
           if(!reset)
           dout = 8'b0000_0000;
    else
           case(din)
                      3'b000: dout = 8'b0000_0001;
                      3'b001: dout = 8'b0000_0010;
                      3'b010: dout = 8'b0000_0100;
                      3'b011: dout = 8'b0000_1000;
                      3'b100: dout = 8'b0001_0000;
                      3'b101: dout = 8'b0010_0000;
                      3'b110: dout = 8'b0100_0000;
                      3'b111: dout = 8'b1000_0000;
           endcase
    end
endmodule

上述程序经过综合Synplify Pro后,其RTL级结构如图2-11所示。

图2-11 38译码器的RTL结构图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-4-7 14:42:50 | 显示全部楼层
在ModelSim 6.2b中完成仿真,其结果如图2-12所示。

图2-12 38译码器的仿真结果示意图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-4-7 14:49:09 | 显示全部楼层
2.6.2 基本时序处理模块

1.奇、偶数分频电路

在数字逻辑电路设计中,分频器是一种基本电路。通常用来对某个给定频率进行分频,以得到所需的频率。
•        偶数分频电路
偶数倍分频是最简单的一种分频模式,完全可通过计数器计数实现。如要进行N倍偶数分频,那么可由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数,以此循环下去。这种方法可以实现任意的偶数分频。例2-21给出的是一个16分频电路,其它倍数的分频电路可通过修改计数器的上限值得到。

例2-21 用Verilog实现一个16分频电路。

module clk_div16(clk_in, reset, clk_out);
        input clk_in;
        input reset;
        output clk_out;

        reg clk_out;
        reg [2:0] cnt;
        always @(posedge clk_in) begin
                 if(!reset) begin
                 cnt <= 0;
                 clk_out <= 0;
         end
         else
             if(cnt == 7) begin
                   cnt <= 0;
                   clk_out <= !clk_out;
             end
             else begin
                     cnt <= cnt + 1;
                           clk_out <= clk_out;
              end
          end

endmodule

上述程序经过综合Synplify Pro后,其RTL级结构如图2-13所示。

图2-13 16分频电路的RTL结构图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-4-7 14:49:52 | 显示全部楼层
在ModelSim 6.2b中完成仿真,其结果如图2-14所示,从中可以看出例2-21成功实现了输入时钟的16分频。

图2-14 16分频电路的仿真结果示意图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-4-7 14:50:53 | 显示全部楼层
&#8226;        奇数分频电路
奇数倍分频有多种实现方法,下面介绍常用的错位“异或”法的原理。如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转。比如在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转,即在邻近的1和2时刻进行两次翻转。这样实现的三分频占空比为1/3或者2/3。如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后将下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。
        
这种错位“异或”法可以推广实现任意的奇数分频:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发的模N计数,计数到某一选定值时进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数N分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数N分频时钟。两个占空比非50%的N分频时钟相或运算,得到占空比为50%的奇数N分频时钟。

例2-22 使用Verilog实现3分频电路。

module clk_div3(clk_in, reset, clk_out);
     input clk_in;
     input reset;
     output clk_out;

     reg [1:0] cnt, cnt1;
     reg clk_1to3p, clk_1to3n;
     always @(posedge clk_in) begin
            if(!reset) begin
                   cnt <= 0;
                   clk_1to3p <= 0;
            end
            else begin
                   if(cnt == 2'b10) begin
                        cnt <= 0;
                              clk_1to3p <= clk_1to3p;
            end
            else begin
                  cnt <= cnt + 1;
                        clk_1to3p <= !clk_1to3p;
                  end
            end      
     end

     always @(negedge clk_in) begin
          if(!reset) begin
                 cnt1 <= 0;
                      clk_1to3n <= 0;
           end
           else begin
                     if(cnt1 == 2'b10) begin
                          cnt1 <= 0;
                                  clk_1to3n <= clk_1to3n;
                      end
                      else begin
                            cnt1 <= cnt1 + 1;
                          clk_1to3n <= !clk_1to3n;
                      end
            end
        end

        assign clk_out = clk_1to3p | clk_1to3n;

endmodule

上述程序经过综合Synplify Pro后,其RTL级结构如图2-15所示。

图2-15 3分频电路的RTL结构图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-4-7 14:51:51 | 显示全部楼层
在ModelSim 6.2b中完成仿真,其结果如图2-16所示,可以看到输出时钟为占空比为50%的3分频时钟。

图2-16 3分频电路的仿真结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-4-7 14:52:31 | 显示全部楼层
2.同步采样模块

在实际应用中,外部输入的异步信号需要经过系统时钟的同步化,且将输入的异步信号整形成一个时钟长的脉冲信号,如图2-17所示。这里以例2-23来说明实现的方法。

图2-17 异步信号的同步采样示意图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-4-7 14:53:12 | 显示全部楼层
例2-23 使用Verilog将外部异步信号进行同步整形。

module clk_syn(clk, reset, s_in, s_out);
      input clk;
      input reset;
      input s_in;
      output s_out;

      reg s_t1, s_t2;
      always @(posedge clk) begin
             if(!reset) begin
                    s_t1 <= 0;
                    s_t2 <= 0;
             end
             else begin
                   s_t1 <= s_in;
                   s_t2 <= s_t1;
             end
       end

       assign s_out = s_t1 & (!s_t2);

endmodule

上述程序经过综合Synplify Pro后,其RTL级结构如图2-18所示。从结果上看,该电路非常简单,但需要一定的时序逻辑能力才能真正理解该段程序。

图2-18 同步电路的RTL结构示意图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-10 13:46 , Processed in 0.068287 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表