Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Synthesis clock speed is very slow #16

Open
kidonglee opened this issue Nov 9, 2020 · 6 comments
Open

Synthesis clock speed is very slow #16

kidonglee opened this issue Nov 9, 2020 · 6 comments

Comments

@kidonglee
Copy link

Hi,

I synthesized SweRV-EL2 and Rocket Chip with default configuration
Rocket Chip can be synthesized up to 500MHz without timing slack.
However, SweRV-EL2 can be synthesized up to 300MHz without timing slack, in the same condition.
SweRV-EL2 is very slower than Rocket Chip.
Is it reasonable results?
Could you please give me a comment on the result.

Thanks.

@Codasip
Copy link

Codasip commented Nov 9, 2020

Can you please share some details:
a) Constraints you have used.
b) Which synthesizer/version have you used ?
c) Which tech node/lib have you used ?

@kidonglee
Copy link
Author

kidonglee commented Nov 10, 2020

Dear Codasip,

The synthesis condition is as follow,

  • dc ver = 2016.03
  • scale factor = 0.563 // margin
  • clk = 400MHz // actual clock period = (1000/400)*0.563 = 1.41 ns
  • jtag_clk = 10MHz // actual clock period = (1000/10)*0.563 = 56.3 ns
  • clock transition value = 0.1

With above condition, the max timing slack is -0.24ns.
FYI, I post the longest delay path, as below.
Please check it.

Thanks

  Startpoint: swerv/ifu/aln/rdpff/dout_reg[1]
              (rising edge-triggered flip-flop clocked by clk)
  Endpoint: mem/iccm.iccm/red_lru/genblock.dffs/dout_reg[0]
            (rising edge-triggered flip-flop clocked by clk)
  Path Group: clk
  Path Type: max

  Point                                                   Incr       Path
  --------------------------------------------------------------------------
  clock clk (rise edge)                                   0.00       0.00
  clock network delay (ideal)                             0.00       0.00
  swerv/ifu/aln/rdpff/dout_reg[1]/CK                      0.00 #     0.00 r
  swerv/ifu/aln/rdpff/dout_reg[1]/Q                       ...        ...
  swerv/ifu/aln/U100/Y                                    ...        ...
  swerv/ifu/aln/U822/Y                                    ...        ...
  swerv/ifu/aln/U55/Y                                     ...        ...
  swerv/ifu/aln/U104/Y                                    ...        ...
  swerv/ifu/aln/U760/Y                                    ...        ...
  swerv/ifu/aln/U82/Y                                     ...        ...
  swerv/ifu/aln/U230/Y                                    ...        ...
  swerv/ifu/aln/U171/Y                                    ...        ...
  swerv/ifu/aln/U32/Y                                     ...        ...
  swerv/ifu/aln/U31/Y                                     ...        ...
  swerv/ifu/aln/U223/Y                                    ...        ...
  swerv/ifu/aln/U17/Y                                     ...        ...
  swerv/ifu/aln/U211/Y                                    ...        ...
  swerv/ifu/aln/U291/Y                                    ...        ...
  swerv/ifu/aln/U680/Y                                    ...        ...
  swerv/dec/instbuff/U59/Y                                ...        ...
  swerv/dec/decode/U1519/Y                                ...        ...
  swerv/dec/decode/U873/Y                                 ...        ...
  swerv/dec/decode/U1023/Y                                ...        ...
  swerv/dec/decode/U1008/Y                                ...        ...
  swerv/dec/decode/U181/Y                                 ...        ...
  swerv/dec/decode/U397/Y                                 ...        ...
  swerv/dec/decode/U182/Y                                 ...        ...
  swerv/dec/decode/U408/Y                                 ...        ...
  swerv/dec/decode/U71/Y                                  ...        ...
  swerv/dec/decode/U248/Y                                 ...        ...
  swerv/dec/decode/U221/Y                                 ...        ...
  swerv/dec/decode/U433/Y                                 ...        ...
  swerv/dec/decode/U419/Y                                 ...        ...
  swerv/exu/U448/Y                                        ...        ...
  swerv/exu/U222/Y                                        ...        ...
  swerv/exu/i_alu/U858/Y                                  ...        ...
  swerv/exu/i_alu/U54/Y                                   ...        ...
  swerv/exu/i_alu/U208/CON                                ...        ...
  swerv/exu/i_alu/U783/Y                                  ...        ...
  swerv/exu/i_alu/U320/Y                                  ...        ...
  swerv/exu/i_alu/U847/Y                                  ...        ...
  swerv/exu/i_alu/U794/Y                                  ...        ...
  swerv/exu/i_alu/U793/Y                                  ...        ...
  swerv/exu/i_alu/U127/Y                                  ...        ...
  swerv/exu/i_alu/U78/Y                                   ...        ...
  swerv/exu/i_alu/U618/Y                                  ...        ...
  swerv/exu/i_alu/U886/Y                                  ...        ...
  swerv/ifu/mem_ctl/U700/Y                                ...        ...
  mem/icache.icm/ic_tag_inst/U22/Y                        ...        ...
  mem/icache.icm/ic_tag_inst/U21/Y                        ...        ...
  swerv/ifu/mem_ctl/U730/Y                                ...        ...
  swerv/ifu/mem_ctl/U670/Y                                ...        ...
  swerv/ifu/mem_ctl/U671/Y                                ...        ...
  swerv/ifu/mem_ctl/U674/Y                                ...        ...
  swerv/ifu/mem_ctl/U673/Y                                ...        ...
  swerv/ifu/mem_ctl/U85/Y                                 ...        ...
  swerv/ifu/mem_ctl/U87/Y                                 ...        ...
  swerv/ifu/mem_ctl/U79/Y                                 ...        ...
  mem/icache.icm/ic_data_inst/U64/Y                       ...        ...
  mem/icache.icm/ic_data_inst/U53/Y                       ...        ...
  swerv/ifu/mem_ctl/U667/Y                                ...        ...
  swerv/ifu/ifc/U261/Y                                    ...        ...
  swerv/ifu/ifc/U259/Y                                    ...        ...
  swerv/ifu/mem_ctl/U90/Y                                 ...        ...
  swerv/ifu/mem_ctl/U89/Y                                 ...        ...
  swerv/dma_ctrl/U10/Y                                    ...        ...
  swerv/dma_ctrl/U660/Y                                   ...        ...
  swerv/ifu/mem_ctl/U88/Y                                 ...        ...
  swerv/ifu/mem_ctl/U64/Y                                 ...        ...
  swerv/ifu/mem_ctl/U70/Y                                 ...        ...
  swerv/ifu/mem_ctl/U128/Y                                ...        ...
  swerv/ifu/mem_ctl/U2031/Y                               ...        ...
  mem/iccm.iccm/U215/Y                                    ...        ...
  mem/iccm.iccm/U200/Y                                    ...        ...
  mem/iccm.iccm/U726/Y                                    ...        ...
  mem/iccm.iccm/U727/Y                                    ...        ...
  mem/iccm.iccm/U83/Y                                     ...        ...
  mem/iccm.iccm/U564/Y                                    ...        ...
  mem/iccm.iccm/U302/Y                                    ...        ...
  mem/iccm.iccm/U662/Y                                    ...        ...
  mem/iccm.iccm/red_lru/U3/Y                              ...        ...
  mem/iccm.iccm/red_lru/genblock.dffs/dout_reg[0]/D       0.00       1.66 r
  data arrival time                                                  1.66

  clock clk (rise edge)                                   1.41       1.41
  clock network delay (ideal)                             0.00       1.41
  mem/iccm.iccm/red_lru/genblock.dffs/dout_reg[0]/CK      0.00     1.41 r
  library setup time                                      0.01       1.42
  data required time                                                 1.42
  --------------------------------------------------------------------------
  data required time                                                 1.42
  data arrival time                                                 -1.66
  --------------------------------------------------------------------------
  slack (VIOLATED)                                                  -0.24

@kidonglee
Copy link
Author

Dear Codasip,

Did you check my comment above ?
Actually, I wonder if the difference in speed between rocket and SweRV-EL2 is reasonable or not.
If you have compared the speed of them, could you please let me know the results ?
I am sorry to bother you but please help.

Thanks

@aprnath
Copy link
Collaborator

aprnath commented Nov 12, 2020

Hi @kidonglee,
We are meeting ~600Mhz for 16nm technology, worst case corner.

Your scale factor seems very large! Based on that, your target frequency > 700Mhz. With the slack you show, the result is closer to 600. Why do you need such a large scale factor, BTW?

@aprnath
Copy link
Collaborator

aprnath commented Nov 12, 2020

Do note that one of the reasons we do not provide synthesis scripts is that there are several key factors, such as technology node, library vendor, memory vendor/type, synthesis methodology, margins, clk skew, configuration, that will have a sizable impact on synthesis results.

@kidonglee
Copy link
Author

Hi @kidonglee,
We are meeting ~600Mhz for 16nm technology, worst case corner.

Your scale factor seems very large! Based on that, your target frequency > 700Mhz. With the slack you show, the result is closer to 600. Why do you need such a large scale factor, BTW?

Dear aprnath,

I understand what you mean.
However, what I want to know is the difference between ocket and SweRV-EL2.
I just wonder if the difference of clock speed between them is reasonable or not.
If you also compared them, please let me know the results.

Than you very much for the kindness.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants