首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

数字电路设计之同步电路的一些经验

数字电路设计之同步电路的一些经验

在设计的过程中,异步复位电路对硬件要求更低,更容易实现,但是使用同步复位电路却有着诸多优点,使得在实际的工业设计中更多使用的是同步复位电路。使用同步电路一般有以下好处:第一个就是避免毛刺,使用逻辑电路就一定会有毛刺。使用同步电路就有效避免毛刺。第二个就是简化了时序分析,不然有多个时钟,那么时序上就很难分析了。第三个就是减少环境对设计的影响。异步电路易受工作温度,电压的影响,器件延时变化很大。最终可能芯片无法使用。说了同步电路的优点,那么就说一下怎么设计。设计的时候使用单时钟策略(全局时钟网络)。这里对于全局时钟怎么做,以后会说到PLL。尽量不要用混合时钟。举个栗子,比如你使用以下方法进行采样,结果发现结果颠倒。
module hunhe_clock( clk,din,d_temp,dout );
    input wire clk;
    input wire [7:0]din;
    output reg [7:0]d_temp;
    output reg [7:0]dout;

    always@(negedge clk)begin
        d_temp <= din;
    end

    always@(posedge clk)begin
        dout <= d_temp;
    end  

endmodule

仿真文件:(这里的仿真结果看出仿真还是对的,那是因为此时仿真没有计算建立保持时间等等)
module hunhe_test;

// Inputs
reg clk;
reg [7:0] din;
// Outputs
wire [7:0] d_temp;
wire [7:0] dout;
// Instantiate the Unit Under Test (UUT)
hunhe_clock uut (
.clk(clk),
.din(din),
.d_temp(d_temp),
.dout(dout)
);
always #50 clk = !clk;
integer i;
initial begin
// Initialize Inputs
clk = 0;
din = 15;

// Wait 100 ns for global reset to finish
   #100;
      for( i = 0;i <= 10;i=i+1) begin
           din = din + 1;
   #100;
end                     
// Add stimulus here
end      
endmodule
还有一个需要注意的是不要在模块内部使用计数器分频产生所需要的时钟,这样会导致时钟漂移,降低了设计的可靠性,可以使用对时钟信号进行使能实现所需电路。
返回列表