Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

false path and multi cycle path example codes

Status
Not open for further replies.

u24c02

Advanced Member level 1
Advanced Member level 1
Joined
May 8, 2012
Messages
404
Helped
2
Reputation
4
Reaction score
2
Trophy points
1,298
Visit site
Activity points
4,101
Hi.

I'm trying to implement including false path and multi cycle path RTL code for test design compiler.
So does anyone know where some example codes are ?
 

http://www.sunburst-design.com/ has good papers on multi-cycle paths.
Moreover Synopsys documentation is also a good source to learn about multi-cycle paths.

"So does anyone know where some example codes are ?" - shouldn't that be specific to your design? I would learn the concept and then try to implement as per use case.
 

http://www.sunburst-design.com/ has good papers on multi-cycle paths.
Moreover Synopsys documentation is also a good source to learn about multi-cycle paths.

"So does anyone know where some example codes are ?" - shouldn't that be specific to your design? I would learn the concept and then try to implement as per use case.

Thanks Sir,
I just have a query bout as following sentence.

"So does anyone know where some example codes are ?" - shouldn't that be specific to your design? I would learn the concept and then try to implement as per use case.

I don't know why you do this. Did you just rephrase from original question?
 

Multi-cycle path:

Code Verilog - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
`timescale 1ps/1ps
module mc_test;
 
  reg       clk;
  reg       rst;
 
  initial begin
    clk = 0;
    forever #5000 clk = ~clk;
  end
  initial begin
    rst = 1;
    #20000;
    rst = 0;
  end
 
  reg [1:0] cntr;
  reg [8:1] lfsr;
  reg [3:0] ff_1 = 0, ff_2 = 0;
 
  always @ (posedge clk) begin
    if (rst) begin
      cntr <= 0;
    end else begin
      cntr <= cntr +1;
    end
 
    if (rst) begin
      lfsr <= 1;
    end else begin
      lfsr <= {lfsr[1], lfsr[8], lfsr[7]^lfsr[1], lfsr[6]^lfsr[1], lfsr[5]^lfsr[1], lfsr[4:2]};
    end
 
    $display ("%t - lfsr: %h, ff_1: %h, ff_2 %h", $time, lfsr, ff_1, ff_2);
  end
 
  // multicycle registers
  always @ (posedge clk) begin
    if (cntr == 2'd3) begin
      ff_1 <= lfsr[4:1];
      ff_2 <= ff_1;
    end
  end
 
endmodule



Observe the display output and see that both ff_1 and ff_2 only update every four clock cycles. Even though lfsr updates every clock cycle the value loaded into ff_1 only updates every four clocks and the transfer between ff_1 and ff_2 only updates every four clocks. Both ff_1 and ff_2 have a multi-cycle path of 4.
 
I think the logic that use ff_1 or ff_2 have a multi-cycle path. Because ff_1 and ff_2 's feed in logic change every cycle.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top