_TOP_MENU

Mar 3, 2014

Gate Level Simulation

Below are the basic question which should come in your mind if you are new to gate level simulation.

What is gate level simulation and why do we need to run it ? 

Performing gate-level simulation gives us the opportunity to check that our circuit still works properly after
being Synthesized and Placed and Routed. Additionally, we use the gate-level simulations to obtain switching
activies for each gate in the design. This will allow us to estimate power and energy.

In a broad view, Gate level simulation is required to check all gates are meeting their respective required timing or not , it is dynamic timing analysis. 

There are 2 types of timing analysis, static timing analysis and dynamic timing analysis.

In Static Timing Analysis , we are checking timing on the paths which on in same clock domain , STA Tools are not able to do timing analysis on the path which are having different lunch and capture clocks , as there is no phase relationship and called asynchronous paths.

But those path can be check in Gate Level Simulation

Gate level simulation can be run in two phases , 
1. After synthesis or before place and route 
2. After place and route 


One can reuse the same verification environment as used during functional verification,  in Gate Level simulation, there is no need to run full regression , but one should choose the testcase which cover almost all scenario. 

If GLS (gate level simulation) is running after place and route then one has to annotate SDF (standard delay format) file. There are different ways to annotate SDF file in simulation , one should confirmed in simulation for a successful annotation by looking in waveform. 

Below are the commands to annotate SDF file - 

Using system task -
$sdf_annotate("SDFFILE", "Instance" , , "log_file.log", "minimum or typical or maximum" ); 

For Example - to specify maximum delay values:
$sdf_annotate("myasic.sdf", testbench.u1, , , "maximum");

$sdf_annotate must be in "initial" block.

Above system task can be defined from the top level simulation module (most probably testbech where DUT is instantiated) , and in that case , one should defined the instance in system task where SDF file is made. Be default tool will consider the instance where this system task is called.

There is other way to annotate SDF , which is simulator dependent.

For Modelsim Simulator - 

vlog  <netlist> <tech_lib>
vsim -sdfmax /testbench/u1=myasic.sdf testbench

-sdfmax , -sdfmin , -sdftyp are the corners to check max/min/typ delays in simulation.

For NC-Verilog Simulator -

Compiling the SDF file - 

ncsdfc -messages <file.sdf> -output file_sdf.compiled 

If SDF file size is very large then zip it before compiling and give below command - 
gzip file.sdf 
ncsdfg file.sdf.gz -output file.sdf.compiled 

There are different ways to annotate SDF file , but the simplest one is to use $sdf_annotate task with in a module.
In this task , one can define the configuration file also where specific parameters can be passed to simulation (example - turn off timing on input delays , interconnect delays , etc)

In ncelab, a command file can be passed to simulator to configure the SDF annotation, but this will again a complex job.


Below options can work in both verilog-XL simulator and modelsim.

-l <filename>
By default, the simulation log is written to the file "transcript". The -l option allows you
to specify an alternate file.

+maxdelays
This option selects the maximum value in min:typ:max expressions. The default is the
typical value. This option has no effect if the min:typ:max selection was determined at
compile time.

+mindelays
This option selects the minimum value in min:typ:max expressions. The default is the
typical value. This option has no effect if the min:typ:max selection was determined at
compile time

+typdelays
This option selects the typical value in min:typ:max expressions. This is the default. This
option has no effect if the min:typ:max selection was determined at compile time.

+no_neg_tchk
This option disables negative timing check limits by setting them to zero. By default
negative timing check limits are enabled. This is just the opposite of Verilog-XL, where
negative timing check limits are disabled by default, and they are enabled with the
+neg_tchk option.

+notimingchecks
This option completely disables all timing check system tasks.

+sdf_verbose
This option displays a summary of the design objects annotated for each SDF file.


For small design , it is ok to run simulation again and again , but for large SoC , it is very difficult to run GLS from starting , it will eat a lot of simulation time as well as your time.
There are options where you can reduce the simulation time , for example , keep compiled version of all source file and SDF file , whenever you are running GLS , you can just load the compiled files in simulator.

Think carefully if planning to run simulation again for large SoC.


Upcoming topics -
Standard delay format 
Different types of delays in design 

Hope this will clear some of doubts , if there are anything I can help you, please leave in comments , I will try my best level to put some specific information here.

Thanks for your valuable time.

Rahul Jain






233 comments:

  1. Hi Rahul,

    I have doubts like
    In no-timing simulation ,we will be setting up the environment free my x's.So the main issue i'm facing is getting X from memory initialization.
    Actually in verification environment where we will initilise this memories?
    2)We need to force some flops with 0 or 1 na ,could you please tell me at what point of time we need to force it and where ?

    ReplyDelete
  2. Hi K SRINIVASULU,
    If I understand correctly, you must be initialize the memory at the beginning of functional simulation (not gate level simulation), your gate level simulation with no-timing , should be same as functional simulation, the only difference will be , instead of RTL , you are picking up netlist and technology verilog file which required during compilation.

    this way , you are just ensuring there are no issue in gate level simulation setup or in netlist, basically you will be expecting the same result as in functional simulation.

    As a verification engineer, you shouldn't force any flop 0 or 1 , this is temp solution where you want to verify that the flop you found having timing violation , is the one only or are there any other flops ... at the end timing violation should be fix on those flop or flop should be added in waiver list where you are turning off the timing checks as you are sure those flop are sync flops or static is nature.


    Let me know if this help you to understand or not ..

    ReplyDelete
  3. Thank you very much for your Quick response.Please dont hesitate on my questions ,basically i have few doubts .
    I have one more doubt like ,
    In no-timing,we will check mainly on resetless flops?.My doubt is if there is an issue occuring with resetless means ,why we are using this reset less flops or during any optimization whether this reset less are created?

    Like in no-timing what we need to consider more ?

    ReplyDelete
  4. Hi ..
    You can ask anything anytime .. No issue :)

    there might not be any reset for flops but those flops are library specific and having a deterministic value initially which keep design in known state. At the end , you need to make sure that when you release reset , design should be in known state.

    In GLS, if you run with no timing , means you are not annotating the SDF but there are internal gate delay specific to library and you may end up simulation with 'X' ... if you run GLS ,with SDF , then it will be difficult to find the source of 'X' .. but once you know GLS flow is ok and then after SDF annotation , if there in contention in design which mean some flops get the timing violation and it is easy to find the source of 'X'.

    ReplyDelete
  5. Thanks for your Reply...
    If possible could you please share your email id?
    I have few more doubts on GLS .So you mean we should not deposit any flop to either 0 or 1 in no-timing?
    But, when i read some materials available in Google ,there they have mentioned like in no-timing we should either deposit or force with 0 or 1 .Is it true?
    In deposit ,if we deposit 0/1 for one flop ,mean time if it gets any data from the previous path this deposit will loose.But in force mechansim ,even it gets any data its will not consider this data and untill release of this value .
    So my doubt is in deposit ,i deposit 0 for flop A ,after some time i will get x as an input then 0 will be lost and it will start driving x na then here what is the use of depositing .

    ReplyDelete
  6. Very good post. I absolutely appreciate this site.
    Continue the good work!

    ReplyDelete
  7. Your style is really unique in comparison to other people I've read stuff
    from. Thank you for posting when you have the opportunity, Guess I'll just book mark this web site.

    ReplyDelete
  8. This site was... how do I say it? Relevant!! Finally I've found something that helped me.
    Thank you!

    ReplyDelete
  9. I couldn’t refrain from commenting. Well written!

    ReplyDelete
  10. This comment has been removed by a blog administrator.

    ReplyDelete
  11. This comment has been removed by a blog administrator.

    ReplyDelete
  12. This comment has been removed by a blog administrator.

    ReplyDelete
  13. This comment has been removed by a blog administrator.

    ReplyDelete
  14. This comment has been removed by a blog administrator.

    ReplyDelete
  15. This comment has been removed by a blog administrator.

    ReplyDelete
  16. This comment has been removed by a blog administrator.

    ReplyDelete
  17. This comment has been removed by a blog administrator.

    ReplyDelete
  18. This comment has been removed by a blog administrator.

    ReplyDelete
  19. This comment has been removed by a blog administrator.

    ReplyDelete
  20. This comment has been removed by a blog administrator.

    ReplyDelete
  21. This comment has been removed by a blog administrator.

    ReplyDelete
  22. This comment has been removed by a blog administrator.

    ReplyDelete
  23. This comment has been removed by a blog administrator.

    ReplyDelete
  24. This comment has been removed by a blog administrator.

    ReplyDelete
  25. This comment has been removed by a blog administrator.

    ReplyDelete
  26. This comment has been removed by a blog administrator.

    ReplyDelete
  27. This comment has been removed by a blog administrator.

    ReplyDelete
  28. This comment has been removed by a blog administrator.

    ReplyDelete
  29. This comment has been removed by a blog administrator.

    ReplyDelete
  30. This comment has been removed by a blog administrator.

    ReplyDelete
  31. This comment has been removed by a blog administrator.

    ReplyDelete
  32. This comment has been removed by a blog administrator.

    ReplyDelete
  33. This comment has been removed by a blog administrator.

    ReplyDelete
  34. This comment has been removed by a blog administrator.

    ReplyDelete
  35. This comment has been removed by a blog administrator.

    ReplyDelete
  36. This comment has been removed by a blog administrator.

    ReplyDelete
  37. This comment has been removed by a blog administrator.

    ReplyDelete
  38. This comment has been removed by a blog administrator.

    ReplyDelete
  39. This comment has been removed by a blog administrator.

    ReplyDelete
  40. This comment has been removed by a blog administrator.

    ReplyDelete
  41. This comment has been removed by a blog administrator.

    ReplyDelete
  42. This comment has been removed by a blog administrator.

    ReplyDelete
  43. This comment has been removed by a blog administrator.

    ReplyDelete
  44. This comment has been removed by a blog administrator.

    ReplyDelete
  45. This comment has been removed by a blog administrator.

    ReplyDelete
  46. This comment has been removed by a blog administrator.

    ReplyDelete
  47. This comment has been removed by a blog administrator.

    ReplyDelete
  48. This comment has been removed by a blog administrator.

    ReplyDelete
  49. This comment has been removed by a blog administrator.

    ReplyDelete
  50. This comment has been removed by a blog administrator.

    ReplyDelete
  51. This comment has been removed by a blog administrator.

    ReplyDelete
  52. This comment has been removed by a blog administrator.

    ReplyDelete
  53. This comment has been removed by a blog administrator.

    ReplyDelete
  54. This comment has been removed by a blog administrator.

    ReplyDelete
  55. This comment has been removed by a blog administrator.

    ReplyDelete
  56. This comment has been removed by a blog administrator.

    ReplyDelete
  57. This comment has been removed by a blog administrator.

    ReplyDelete
  58. This comment has been removed by a blog administrator.

    ReplyDelete
  59. This comment has been removed by a blog administrator.

    ReplyDelete
  60. This comment has been removed by a blog administrator.

    ReplyDelete
  61. This comment has been removed by a blog administrator.

    ReplyDelete
  62. This comment has been removed by a blog administrator.

    ReplyDelete
  63. This comment has been removed by a blog administrator.

    ReplyDelete
  64. This comment has been removed by a blog administrator.

    ReplyDelete
  65. This comment has been removed by a blog administrator.

    ReplyDelete
  66. This comment has been removed by a blog administrator.

    ReplyDelete
  67. This comment has been removed by a blog administrator.

    ReplyDelete
  68. This comment has been removed by a blog administrator.

    ReplyDelete
  69. This comment has been removed by a blog administrator.

    ReplyDelete
  70. This comment has been removed by a blog administrator.

    ReplyDelete
  71. This comment has been removed by a blog administrator.

    ReplyDelete
  72. This comment has been removed by a blog administrator.

    ReplyDelete
  73. This comment has been removed by a blog administrator.

    ReplyDelete
  74. This comment has been removed by a blog administrator.

    ReplyDelete
  75. This comment has been removed by a blog administrator.

    ReplyDelete
  76. This comment has been removed by a blog administrator.

    ReplyDelete
  77. This comment has been removed by a blog administrator.

    ReplyDelete
  78. This comment has been removed by a blog administrator.

    ReplyDelete
  79. This comment has been removed by a blog administrator.

    ReplyDelete
  80. This comment has been removed by a blog administrator.

    ReplyDelete
  81. This comment has been removed by a blog administrator.

    ReplyDelete
  82. This comment has been removed by a blog administrator.

    ReplyDelete
  83. This comment has been removed by a blog administrator.

    ReplyDelete
  84. This comment has been removed by a blog administrator.

    ReplyDelete
  85. This comment has been removed by a blog administrator.

    ReplyDelete
  86. This comment has been removed by a blog administrator.

    ReplyDelete
  87. This comment has been removed by a blog administrator.

    ReplyDelete
  88. This comment has been removed by a blog administrator.

    ReplyDelete
  89. This comment has been removed by a blog administrator.

    ReplyDelete
  90. Great information. Lucky me I recently found your site by accident
    (stumbleupon). I've saved as a favorite for later!

    ReplyDelete
  91. Aw, this was a really nice post. Spending some time and actual effort to generate a superb article… but what can I say… I hesitate a whole lot and never seem to get nearly
    anything done.

    ReplyDelete
  92. I could not refrain from commenting. Very well written!

    ReplyDelete
  93. This comment has been removed by a blog administrator.

    ReplyDelete
  94. This comment has been removed by a blog administrator.

    ReplyDelete
  95. This comment has been removed by a blog administrator.

    ReplyDelete
  96. This comment has been removed by a blog administrator.

    ReplyDelete
  97. This comment has been removed by a blog administrator.

    ReplyDelete
  98. This comment has been removed by a blog administrator.

    ReplyDelete
  99. This comment has been removed by a blog administrator.

    ReplyDelete
  100. This comment has been removed by a blog administrator.

    ReplyDelete
  101. This comment has been removed by a blog administrator.

    ReplyDelete
  102. This comment has been removed by a blog administrator.

    ReplyDelete
  103. This comment has been removed by a blog administrator.

    ReplyDelete
  104. This comment has been removed by a blog administrator.

    ReplyDelete
  105. This comment has been removed by a blog administrator.

    ReplyDelete
  106. This comment has been removed by a blog administrator.

    ReplyDelete
  107. This comment has been removed by a blog administrator.

    ReplyDelete
  108. This comment has been removed by a blog administrator.

    ReplyDelete
  109. This comment has been removed by a blog administrator.

    ReplyDelete
  110. This comment has been removed by a blog administrator.

    ReplyDelete
  111. This comment has been removed by a blog administrator.

    ReplyDelete
  112. This comment has been removed by a blog administrator.

    ReplyDelete
  113. This comment has been removed by a blog administrator.

    ReplyDelete
  114. This comment has been removed by a blog administrator.

    ReplyDelete
  115. This comment has been removed by a blog administrator.

    ReplyDelete
  116. This comment has been removed by a blog administrator.

    ReplyDelete
  117. This comment has been removed by a blog administrator.

    ReplyDelete
  118. This comment has been removed by a blog administrator.

    ReplyDelete
  119. This comment has been removed by a blog administrator.

    ReplyDelete
  120. This comment has been removed by a blog administrator.

    ReplyDelete
  121. This comment has been removed by a blog administrator.

    ReplyDelete
  122. This comment has been removed by a blog administrator.

    ReplyDelete
  123. This comment has been removed by a blog administrator.

    ReplyDelete
  124. This comment has been removed by a blog administrator.

    ReplyDelete
  125. This comment has been removed by a blog administrator.

    ReplyDelete
  126. This comment has been removed by a blog administrator.

    ReplyDelete
  127. This comment has been removed by a blog administrator.

    ReplyDelete
  128. This comment has been removed by a blog administrator.

    ReplyDelete
  129. This comment has been removed by a blog administrator.

    ReplyDelete
  130. This comment has been removed by a blog administrator.

    ReplyDelete
  131. This comment has been removed by a blog administrator.

    ReplyDelete
  132. This comment has been removed by a blog administrator.

    ReplyDelete
  133. This comment has been removed by a blog administrator.

    ReplyDelete
  134. This comment has been removed by a blog administrator.

    ReplyDelete
  135. This comment has been removed by a blog administrator.

    ReplyDelete
  136. This comment has been removed by a blog administrator.

    ReplyDelete
  137. This comment has been removed by a blog administrator.

    ReplyDelete
  138. This comment has been removed by a blog administrator.

    ReplyDelete
  139. This comment has been removed by a blog administrator.

    ReplyDelete
  140. May I just say what a relief to uncover somebody who really knows what they are talking about
    on the web. You actually understand how to bring an issue to light and make
    it important. A lot more people must read this and understand this side of your story.
    I was surprised you aren't more popular since you most certainly have the gift.

    ReplyDelete
  141. I really love your website.. Pleasant colors &
    theme. Did you create this amazing site yourself?

    Please reply back as I’m wanting to create my very own site and want
    to know where you got this from or what the theme is named.
    Kudos!

    ReplyDelete
  142. I'm excited to find this great site. I need to to
    thank you for ones time just for this fantastic read!!
    I definitely liked every part of it and I have you saved as
    a favorite to check out new information on your blog.

    ReplyDelete
  143. Hi, I do believe this is an excellent blog.
    I stumbledupon it ;) I am going to revisit once again since I book-marked it.
    Money and freedom is the greatest way to change,
    may you be rich and continue to help other people.

    ReplyDelete
  144. After I initially left a comment I appear to have clicked the
    -Notify me when new comments are added- checkbox and now
    whenever a comment is added I receive 4 emails with the same
    comment. There has to be a way you are able to remove me from that service?
    Thank you!

    ReplyDelete
  145. Spot on with this write-up, I actually believe this
    website needs a lot more attention. I’ll probably be returning to see more, thanks for the information!

    ReplyDelete
  146. Aw, this was a really nice post. Finding
    the time and actual effort to create a superb article… but what can I say… I
    hesitate a lot and don't manage to get anything done.

    ReplyDelete
  147. I have to thank you for the efforts you've
    put in penning this site. I really hope to check out the same high-grade blog posts by you in the future as well.
    In fact, your creative writing abilities has inspired me to get my very
    own site now ;)

    ReplyDelete
  148. Howdy! This article could not be written much better!
    Reading through this post reminds me of my previous
    roommate! He constantly kept preaching about this. I most certainly will forward this
    article to him. Fairly certain he'll have a very good read.
    Thank you for sharing!

    ReplyDelete
  149. Pretty! This was an extremely wonderful article.
    Thanks for supplying this information.

    ReplyDelete
  150. There's definately a great deal to find out about this issue.
    I like all of the points you have made.

    ReplyDelete
  151. bookmarked!!, I love your website!

    ReplyDelete
  152. After checking out a number of the blog articles on your blog, I truly appreciate
    your way of blogging. I added it to my bookmark website list and will
    be checking back soon. Take a look at my web site as well
    and let me know how you feel.

    ReplyDelete
  153. This web site certainly has all the information and facts I needed
    concerning this subject and didn’t know who to ask.

    ReplyDelete
  154. An intriguing discussion is worth comment. I think that you need to publish more about this issue,
    it might not be a taboo matter but generally folks don't
    speak about such topics. To the next! Best wishes!!

    ReplyDelete
  155. You're so cool! I don't suppose I have read through anything like that before.

    So great to discover someone with a few genuine thoughts on this issue.
    Seriously.. many thanks for starting this up. This
    website is one thing that is required on the internet, someone with some originality!

    ReplyDelete
  156. Right here is the perfect webpage for anyone who hopes
    to understand this topic. You understand a whole
    lot its almost hard to argue with you (not that I actually will need to…HaHa).
    You certainly put a fresh spin on a subject that has been written about for ages.

    Wonderful stuff, just wonderful!

    ReplyDelete
  157. May I just say what a comfort to uncover someone that really
    knows what they are discussing online. You definitely understand how
    to bring an issue to light and make it important.

    More and more people ought to check this out and understand this side of your story.
    I can't believe you are not more popular because you certainly possess the
    gift.

    ReplyDelete
  158. This site definitely has all the information and facts I needed concerning this subject and didn’t know who to ask.

    ReplyDelete
  159. Great web site you have got here.. It’s difficult to
    find quality writing like yours these days. I honestly appreciate individuals like you!
    Take care!!

    ReplyDelete
  160. Greetings! Very helpful advice within this post! It's the little changes that
    make the biggest changes. Thanks a lot for sharing!

    ReplyDelete
  161. Greetings, There's no doubt that your website might be having internet browser compatibility issues.

    When I take a look at your site in Safari, it looks fine
    however, when opening in IE, it's got some overlapping issues.
    I just wanted to give you a quick heads up! Apart from that, excellent site!

    ReplyDelete
  162. An impressive share! I have just forwarded this onto a coworker who was doing a
    little research on this. And he actually ordered me breakfast simply
    because I discovered it for him... lol. So let me reword this....

    Thank YOU for the meal!! But yeah, thanx for spending time to discuss this subject here on your blog.

    ReplyDelete
  163. This is the perfect webpage for anyone who wants to
    find out about this topic. You realize a whole lot its almost tough to argue with you (not that I personally would want to…HaHa).

    You certainly put a fresh spin on a topic that's been written about for a long time.

    Wonderful stuff, just wonderful!

    ReplyDelete
  164. I blog frequently and I truly thank you for your information.
    This article has really peaked my interest. I'm going to book mark your blog and keep checking for new
    details about once a week. I opted in for your Feed too.

    ReplyDelete
  165. You have made some really good points there. I checked on the
    web for more info about the issue and found
    most people will go along with your views on this web site.

    ReplyDelete
  166. Oh my goodness! Impressive article dude! Thanks, However
    I am experiencing troubles with your RSS. I don’t understand the
    reason why I cannot join it. Is there anybody else having similar RSS issues?
    Anyone that knows the solution can you kindly respond?
    Thanks!!

    ReplyDelete
  167. You're so interesting! I do not suppose I have read through anything
    like this before. So wonderful to find somebody with some genuine thoughts on this topic.

    Really.. thanks for starting this up. This site is something that's needed on the internet, someone with a bit of originality!

    ReplyDelete
  168. You are so interesting! I do not believe I've truly read anything
    like that before. So wonderful to find someone with original thoughts on this subject
    matter. Seriously.. thanks for starting this up. This web site is
    one thing that is needed on the internet, someone with
    a little originality!

    ReplyDelete
  169. Your style is unique compared to other people I've read stuff from.
    Many thanks for posting when you have the opportunity, Guess I'll just bookmark this blog.

    ReplyDelete
  170. Spot on with this write-up, I truly believe this amazing site needs
    far more attention. I’ll probably be back again to read through more, thanks
    for the info!

    ReplyDelete
  171. This site really has all of the info I wanted about
    this subject and didn’t know who to ask.

    ReplyDelete
  172. Hi there! This article couldn’t be written any better!
    Looking at this article reminds me of my previous roommate!
    He always kept talking about this. I most certainly will forward this article to him.
    Pretty sure he'll have a very good read. Thank you for sharing!

    ReplyDelete
  173. I quite like looking through an article that will make men and
    women think. Also, thank you for allowing me to comment!

    ReplyDelete
  174. Way cool! Some extremely valid points! I appreciate
    you writing this post and the rest of the site is really
    good.

    ReplyDelete
  175. You have made some good points there. I looked on the web for more info about the issue and found
    most individuals will go along with your views on this website.

    ReplyDelete
  176. Having read this I thought it was extremely enlightening.
    I appreciate you spending some time and energy to put this informative article together.
    I once again find myself spending way too much time both reading and commenting.

    But so what, it was still worthwhile!

    ReplyDelete
  177. I wanted to thank you for this good read!! I definitely loved every bit of
    it. I've got you book-marked to look at new things you post…

    ReplyDelete
  178. Everything is very open with a very clear explanation of
    the issues. It was definitely informative. Your site is
    very useful. Many thanks for sharing!

    ReplyDelete
  179. Very good post. I definitely love this site. Continue the good work!

    ReplyDelete
  180. I need to to thank you for this excellent read!!
    I definitely enjoyed every little bit of it. I have you book-marked to look at new
    things you post…

    ReplyDelete
  181. Excellent post. I will be facing some of these issues as well..

    ReplyDelete
  182. bookmarked!!, I like your web site!

    ReplyDelete
  183. This page certainly has all the info I wanted about
    this subject and didn’t know who to ask.

    ReplyDelete
  184. Having read this I believed it was extremely informative. I appreciate you spending some time and effort to put this information together.
    I once again find myself personally spending a lot of time both reading
    and posting comments. But so what, it was still worth it!

    ReplyDelete
  185. An interesting discussion is worth comment. I do believe that
    you should publish more about this subject, it might not be
    a taboo subject but generally folks don't talk about these subjects.
    To the next! Many thanks!!

    ReplyDelete
  186. Howdy! I could have sworn I’ve been to this website before but after
    going through a few of the posts I realized it’s new to me.
    Regardless, I’m certainly happy I stumbled upon it and I’ll be
    book-marking it and checking back regularly!

    ReplyDelete
  187. Everything is very open with a clear description of the challenges.
    It was truly informative. Your site is useful. Many thanks for sharing!

    ReplyDelete
  188. Everything is very open with a clear explanation of
    the challenges. It was truly informative. Your website is very useful.
    Many thanks for sharing!

    ReplyDelete
  189. I’m amazed, I must say. Rarely do I encounter a blog that’s equally educative and
    amusing, and let me tell you, you have hit the nail on the head.
    The problem is something which too few folks are speaking intelligently about.

    I'm very happy I stumbled across this in my search for something regarding this.

    ReplyDelete
  190. After I initially left a comment I appear to have clicked the
    -Notify me when new comments are added- checkbox and from now on every time a comment is added I recieve
    4 emails with the same comment. Is there a way you are able
    to remove me from that service? Many thanks!

    ReplyDelete
  191. Can I simply say what a relief to uncover somebody who
    genuinely knows what they are talking about on the internet.

    You certainly realize how to bring an issue to light and make it important.

    More people ought to read this and understand this side of the story.
    I can't believe you're not more popular because you definitely have the gift.

    ReplyDelete
  192. Saved as a favorite, I like your web site!

    ReplyDelete
  193. Howdy! This post couldn’t be written any better!
    Looking through this article reminds me of my previous
    roommate! He always kept talking about this. I'll send this article to him.
    Fairly certain he's going to have a great read. Many thanks for sharing!

    ReplyDelete
  194. I could not resist commenting. Very well written!

    ReplyDelete
  195. Great site you have got here.. It’s difficult to find high quality writing like yours
    nowadays. I honestly appreciate people like you! Take care!!

    ReplyDelete
  196. This blog was... how do I say it? Relevant!! Finally I've found something
    that helped me. Thanks a lot!

    ReplyDelete
  197. I like reading through an article that will make men and
    women think. Also, thanks for permitting me to comment!

    ReplyDelete
  198. Saved as a favorite, I love your web site!

    ReplyDelete
  199. This website truly has all the information I needed concerning this subject and didn’t know who to ask.

    ReplyDelete
  200. An interesting discussion is definitely worth comment.
    I do think that you should publish more about this
    subject, it might not be a taboo matter but usually people do not speak about such issues.
    To the next! Kind regards!!

    ReplyDelete