verilog时钟问题

1.时钟IP核分频也有精度,当输入时钟和输出时钟频率不是整数倍的时候,可能会有误差 。如:用时钟IP核,输入时钟是50MHz,输出时钟是25.6MHz,输出频率的周期会有0.001ns的误差,但是误差极小,不影响使用
2.仿真精度最大到0.001ns
3.时钟IP核可以分出MHz的信号,小频率的用计数器分,当不是整数倍的时候会有误差
4.ROM IP核给的时钟是系统时钟,IP核把这个当作基准时钟,换其他时钟也可以
5.一个工程里的块尽量用同一个时钟来驱动,一个系统里基本保持一个统一的系统时钟 这样不会跨时钟域,否则可能出现时序问题 。其他地方可以用使能时钟触发
6.不能使用同一个时钟的上升沿和下降沿同时驱动块,如:@(or )

verilog时钟问题

文章插图
7.禁止用计数器分频后的信号做其它模块的时钟,而要用改成时钟使能的方式,否则这种时钟满天飞的方式对设计的可靠性极为不利,也大大增加了静态时序分析的复杂性
时钟使能
【verilog时钟问题】`timescale 1ns / 1psmodule bit(inputrst,inputrc_clk,output bit);reg [6:0] cnt;always@(posedge rc_clk)beginif(rst)cnt<=7'b0;else if(cnt==7'd126)cnt<=7'b0;elsecnt<=cnt+1'b1;endalways@(posedge rc_clk)beginif(rst)bit_clk<=0;else if(cnt==0)bit_clk<=1'b1;else if(cnt==7'd1)bit_clk<=1'b0;elsebit_clk<=bit_clk;endbit_rom u_bit_rom(.clka(bit_clk), // input wire clka.ena(1'b1),// input wire ena.addra(addra),// input wire [7 : 0] addra.douta(bit)// output wire [0 : 0] douta);reg[7:0] addra;always@(posedge rc_clk)beginif(rst)addra<=8'b0;else if(bit_clk)addra<=addra+1'b1;else addra<=addra;endreg [7:0] addra1;always@(posedge bit_clk)beginif(rst)addra1<=0;elseaddra1<=addra1+1'b1;endendmodule