man [Women's Outdoor Track & Field] Freshman Talisa Budder Qualifies for Track Nationals By www.haskellathletics.com Published On :: Sun, 04 Dec 2011 19:10:00 -0600 In November 2011, Talisa Budder from Kenwood, OK qualified for the 2011 NAIA Women's Cross Country National Championships. Upon her return to the Haskell campus she began training for the track program. Full Article
man Maldivian Rufiyaa(MVR)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:59 UTC 1 Maldivian Rufiyaa = 0.2872 Romanian Leu Full Article Maldivian Rufiyaa
man Maldivian Rufiyaa(MVR)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:59 UTC 1 Maldivian Rufiyaa = 0.0247 Omani Rial Full Article Maldivian Rufiyaa
man Maldivian Rufiyaa(MVR)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:59 UTC 1 Maldivian Rufiyaa = 0.0538 Cayman Islands Dollar Full Article Maldivian Rufiyaa
man Malaysian Ringgit(MYR)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:54 UTC 1 Malaysian Ringgit = 1.0275 Romanian Leu Full Article Malaysian Ringgit
man Malaysian Ringgit(MYR)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:54 UTC 1 Malaysian Ringgit = 0.0885 Omani Rial Full Article Malaysian Ringgit
man Malaysian Ringgit(MYR)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:54 UTC 1 Malaysian Ringgit = 0.1923 Cayman Islands Dollar Full Article Malaysian Ringgit
man Nicaraguan Cordoba Oro(NIO)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:53 UTC 1 Nicaraguan Cordoba Oro = 0.1294 Romanian Leu Full Article Nicaraguan Cordoba Oro
man Nicaraguan Cordoba Oro(NIO)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:53 UTC 1 Nicaraguan Cordoba Oro = 0.0111 Omani Rial Full Article Nicaraguan Cordoba Oro
man Nicaraguan Cordoba Oro(NIO)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:53 UTC 1 Nicaraguan Cordoba Oro = 0.0242 Cayman Islands Dollar Full Article Nicaraguan Cordoba Oro
man Netherlands Antillean Guilder(ANG)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:53 UTC 1 Netherlands Antillean Guilder = 2.4807 Romanian Leu Full Article Netherlands Antillean Guilder
man Netherlands Antillean Guilder(ANG)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:53 UTC 1 Netherlands Antillean Guilder = 0.2136 Omani Rial Full Article Netherlands Antillean Guilder
man Netherlands Antillean Guilder(ANG)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:53 UTC 1 Netherlands Antillean Guilder = 0.4643 Cayman Islands Dollar Full Article Netherlands Antillean Guilder
man Estonian Kroon(EEK)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:52 UTC 1 Estonian Kroon = 0.3122 Romanian Leu Full Article Estonian Kroon
man Estonian Kroon(EEK)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:52 UTC 1 Estonian Kroon = 0.0269 Omani Rial Full Article Estonian Kroon
man Estonian Kroon(EEK)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:52 UTC 1 Estonian Kroon = 0.0584 Cayman Islands Dollar Full Article Estonian Kroon
man Danish Krone(DKK)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:52 UTC 1 Danish Krone = 0.6472 Romanian Leu Full Article Danish Krone
man Danish Krone(DKK)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:52 UTC 1 Danish Krone = 0.0557 Omani Rial Full Article Danish Krone
man Danish Krone(DKK)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:52 UTC 1 Danish Krone = 0.1211 Cayman Islands Dollar Full Article Danish Krone
man Fiji Dollar(FJD)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:51 UTC 1 Fiji Dollar = 1.9766 Romanian Leu Full Article Fiji Dollar
man Fiji Dollar(FJD)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:51 UTC 1 Fiji Dollar = 0.1702 Omani Rial Full Article Fiji Dollar
man Fiji Dollar(FJD)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:51 UTC 1 Fiji Dollar = 0.37 Cayman Islands Dollar Full Article Fiji Dollar
man New Zealand Dollar(NZD)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:51 UTC 1 New Zealand Dollar = 2.7335 Romanian Leu Full Article New Zealand Dollar
man New Zealand Dollar(NZD)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:51 UTC 1 New Zealand Dollar = 0.2354 Omani Rial Full Article New Zealand Dollar
man New Zealand Dollar(NZD)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:51 UTC 1 New Zealand Dollar = 0.5116 Cayman Islands Dollar Full Article New Zealand Dollar
man Croatian Kuna(HRK)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:50 UTC 1 Croatian Kuna = 0.6418 Romanian Leu Full Article Croatian Kuna
man Croatian Kuna(HRK)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:50 UTC 1 Croatian Kuna = 0.0553 Omani Rial Full Article Croatian Kuna
man Croatian Kuna(HRK)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:50 UTC 1 Croatian Kuna = 0.1201 Cayman Islands Dollar Full Article Croatian Kuna
man Peruvian Nuevo Sol(PEN)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 7:57:03 UTC 1 Peruvian Nuevo Sol = 1.3102 Romanian Leu Full Article Peruvian Nuevo Sol
man Peruvian Nuevo Sol(PEN)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 7:57:03 UTC 1 Peruvian Nuevo Sol = 0.1128 Omani Rial Full Article Peruvian Nuevo Sol
man Peruvian Nuevo Sol(PEN)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 7:57:03 UTC 1 Peruvian Nuevo Sol = 0.2452 Cayman Islands Dollar Full Article Peruvian Nuevo Sol
man Dominican Peso(DOP)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:46 UTC 1 Dominican Peso = 0.0809 Romanian Leu Full Article Dominican Peso
man Dominican Peso(DOP)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:46 UTC 1 Dominican Peso = 0.007 Omani Rial Full Article Dominican Peso
man Dominican Peso(DOP)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:46 UTC 1 Dominican Peso = 0.0151 Cayman Islands Dollar Full Article Dominican Peso
man Papua New Guinean Kina(PGK)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:46 UTC 1 Papua New Guinean Kina = 1.2982 Romanian Leu Full Article Papua New Guinean Kina
man Papua New Guinean Kina(PGK)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:46 UTC 1 Papua New Guinean Kina = 0.1118 Omani Rial Full Article Papua New Guinean Kina
man Papua New Guinean Kina(PGK)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:46 UTC 1 Papua New Guinean Kina = 0.243 Cayman Islands Dollar Full Article Papua New Guinean Kina
man Brunei Dollar(BND)/Romanian Leu(RON) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:45 UTC 1 Brunei Dollar = 3.1512 Romanian Leu Full Article Brunei Dollar
man Brunei Dollar(BND)/Omani Rial(OMR) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:45 UTC 1 Brunei Dollar = 0.2713 Omani Rial Full Article Brunei Dollar
man Brunei Dollar(BND)/Cayman Islands Dollar(KYD) By www.fx-exchange.com Published On :: Sat May 9 2020 16:21:45 UTC 1 Brunei Dollar = 0.5898 Cayman Islands Dollar Full Article Brunei Dollar
man How to Verify Performance of Complex Interconnect-Based Designs? By feedproxy.google.com Published On :: Sun, 14 Jul 2019 15:43:00 GMT With more and more SoCs employing sophisticated interconnect IP to link multiple processor cores, caches, memories, and dozens of other IP functions, the designs are enabling a new generation of low-power servers and high-performance mobile devices. The complexity of the interconnects and their advanced configurability contributes to already formidable design and verification challenges which lead to the following questions: While your interconnect subsystem might have a correct functionality, are you starving your IP functions of the bandwidth they need? Are requests from latency-critical initiators processed on time? How can you ensure that all applications will receive the desired bandwidth in steady-state and corner use-cases? To answer these questions, Cadence recommends the Performance Verification Methodology to ensure that the system performance meets requirements at the different levels: Performance characterization: The first level of verification aims to verify the path-to-path traffic measuring the performance envelope. It targets integration bugs like clock frequency, buffer sizes, and bridge configuration. It requires to analyze the latency and bandwidth of design’s critical paths. Steady state workloads: The second level of verification aims to verify the master-by-master defined loads using traffic profiles. It identifies the impact on bandwidth when running multi-master traffic with various Quality-of-Service (QoS) settings. It analyzes the DDR sub-system’s efficiency, measures bandwidth and checks whether masters’ QoS requirements are met. Application specific use cases: The last level of verification simulates the use-cases and reaches the application performance corner cases. It analyzes the master-requested bandwidth as well as the DDR sub-system’s efficiency and bandwidth. Cadence has developed a set of tools to assist customers in performance validation of their SoCs. Cadence Interconnect Workbench simplifies the setup and measurement of performance and verification testbenches and makes debugging of complex system behaviors a snap. The solution works with Cadence Verification IPs and executes on the Cadence Xcelium® Enterprise Simulator or Cadence Palladium® Accellerator/Emulator, with coverage results collected and analyzed in the Cadence vManager Metric-Driven Signoff Platform. To verify the performance of the Steady State Workloads, Arm has just released a new AMBA Adaptive Traffic Profile (ATP) specification which describes AMBA abstract traffic attributes and defines the behavior of the different traffic profiles in the system. With the availability of Cadence Interconnect Workbench and AMBA VIP support of ATP, early adopters of the AMBA ATP specification can begin working immediately, ensuring compliance with the standard, and achieving the fastest path to SoC performance verification closure. For more information on the AMBA Adaptive Traffic Profile, you can visit Dimitry's blog on AMBA Adaptive Traffic Profiles: Addressing The Challenge. More information on Cadence Interconnect Workbench solution is available at Cadence Interconnect Solution webpage. Thierry Full Article Verification IP Interconnect Workbench Interconnect Validator SoC Performance modeling AMBA ATP ARM System Verification
man How to write Innovus Gui command to a cmd/log file? By feedproxy.google.com Published On :: Tue, 07 Apr 2020 03:07:13 GMT HI, I have been using the Innovus GUI commands for several things and wonder if those command can be written to a log or cmd file so I can use it in my flow script? Is there such options that we can set? Thanks Full Article
man Multiple commands using ipcBeginProcess By feedproxy.google.com Published On :: Mon, 27 Apr 2020 14:37:17 GMT Hi, I am trying to use "sed -e 's " from SKILL code to edit unix file "FileA", to replace 3 words in the 2nd line. How to run below multiple commands using ipcBeginProcess, Should I use ipcWait or ipcCloseProcess ? Using && to combine , will that work as I have to work serially on each command. ? With below code only the first command gets executed. Please advise. FileA="/user/tmp/text1.txt" sprintf(Command1 "sed -e '2s/%s/%s/g' %s > %s" comment1 get(form concat("dComment" RDWn))->value FileA FileA) cid = ipcBeginProcess(Command1) sprintf(Command2 "sed -e '2s/%s/%s/g' %s > %s" Time getCurrentTime() FileA FileA) cid1 = ipcBeginProcess(Command2) sprintf(Command3 "sed -e '2s/%s/%s/g' %s > %s" comment2 get(form concat("Duser" RDWn))->value FileA FileA) cid2 = ipcBeginProcess(Command3) Thanks, Ajay Full Article
man Celebrating Five Years of Performance-Optimized Arm-Based SoCs: Now including AMBA5 By feedproxy.google.com Published On :: Thu, 12 Oct 2017 22:05:00 GMT It’s been quite a long 5-year journey building and deploying Performance Analysis, Verification, and Debug capabilities for Arm-based SoCs. We worked with some of the smartest engineers on the planet. First with the engineers at Arm, with whom we...(read more) Full Article iwb interconnect amba5 Interconnect Workbench Palladium Performance Analysis AMBA CoreLink xcelium ARM
man Mediatek Deploys Perspec for SoC Verification of Low Power Management (part 3 of 3) By feedproxy.google.com Published On :: Mon, 16 Oct 2017 08:10:00 GMT Here we conclude the blog series and highlight the results of Mediatek 's use of Cadence Perspec™ System Verifier for their SoC level verification. In case you missed it, Part 1 of the blog is here , and Part 2 of the blog is here . One of their key...(read more) Full Article uvm Perspec coherent perspec system verifier coherency library coherency Accellera mediatek ARM pss portable stimulus
man Specman’s Callback Coverage API By community.cadence.com Published On :: Thu, 30 Apr 2020 14:30:00 GMT Our customers’ tests have become more complex, longer, and consume more resources than before. This increases the need to optimize the regression while not compromising on coverage. Some advanced... [[ Click on the title to access the full blog on the Cadence Community site. ]] Full Article
man BoardSurfers: Training Insights: Placing Parts Manually Using Design for Assembly (DFA) Rules By community.cadence.com Published On :: Fri, 08 May 2020 14:41:00 GMT If I talk about my life, it was much simpler when I used to live with my parents. They took good care of whatever I wanted - in fact, they still do. But now, I am living alone, and sometimes I buy... [[ Click on the title to access the full blog on the Cadence Community site. ]] Full Article
man Specman: Analyze Your Coverage with Python By feedproxy.google.com Published On :: Wed, 06 Nov 2019 13:31:00 GMT In the former blog about Python and Specman: Specman: Python Is here!, we described the technical information around Specman-Python integration. Since Python provides so many easy to use existing libraries in various fields, it is very tempting to leverage these cool Python apps. Coverage has always been the center of the verification methodology, however in the last few years it gets even more focus as people develop advanced utilities, usually using Machine Learning aids. Anyhow, any attempt to leverage your coverage usually starts with some analysis of the behavior and trends of some typical tests. Visualizing the data makes it easier to understand, analyze, and communicate. Fortunately, Python has many Visualization libraries. In this blog, we show an example of how you can use the plotting Python library (matplotlib) to easily display coverage information during a run. In this blog, we use the Specman Coverage API to extract coverage data, and a Python module to display coverage grades interactively during a single run and the way to connect both. Before we look at the example, if you have read the former blog about Specman and Python and were concerned about the fact that python3 is not supported, we are glad to update that in Specman 19.09, Python3 is now supported (in addition to Python2). The TestcaseLet’s say I have a stable verification environment and I want to make it more efficient. For example: I want to check whether I can make the tests shorter while hardly harming the coverage. I am not sure exactly how to attack this task, so a good place to start is to visually analyze the behavior of the coverage on some typical test I chose. The first thing we need to do is to extract the coverage information of the interesting entities. This can be done using the old Coverage API. Coverage APICoverage API is a simple interface to extract coverage information at a certain point. It is implemented through a predefined struct type named user_cover_struct. To use it, you need to do the following: Define a child of user_cover_structusing like inheritance (my_cover_struct below). Extend its relevant methods (in our example we extend only the end_group() method) and access the relevant members (you can read about the other available methods and members in cdnshelp). Create an instance of the user_cover_structchild and call the predefined scan_cover() method whenever you want to query the data (even in every cycle). Calling this method will result in calling the methods you extended in step 2. The code example below demonstrates these three steps. We chose to extend the end_group() method and we keep the group grade in some local variable. Note that we divide it by 100,000,000 to get a number between 0 to 1 since the grade in this API is an integer from 0 to 100,000,000. struct my_cover_struct like user_cover_struct { !cur_group_grade:real; //Here we extend user_cover_struct methods end_group() is also { cur_group_grade = group_grade/100000000; }}; extend sys{ !cover_info : my_cover_struct; run() is also { start monitor_cover (); }; monitor_cover() @any is { cover_info = new; while(TRUE) { // wait some delay, for example – wait [10000] * cycles; // scan the packet.packet_cover cover group compute cover_info.scan_cover("packet.packet_cover"); };//while };// monitor_cover};//sys Pass the Data to a Python ModuleAfter we have extracted the group grade, we need to pass the grade along with the cycle and the coverage group name (assuming there are a few) to a Python module. We will take a look at the Python module itself later. For now, we will first take a look at how to pass the information from the e code to Python. Note that in addition to passing the grade at certain points (addVal method), we need an initialization method (init_plot) with the number of cycles, so that the X axis can be drawn at the beginning, and end_plot() to mark interesting points on the plot at the end. But to begin with, let’s have empty methods on the Python side and make sure we can just call them from the e code. # plot_i.pydef init_plot(numCycles): print (numCycles)def addVal(groupName,cycle,grade): print (groupName,cycle,grade)def end_plot(): print ("end_plot") And add the calls from e code: struct my_cover_struct like user_cover_struct { @import_python(module_name="plot_i", python_name="addVal") addVal(groupName:string, cycle:int,grade:real) is imported; !cur_group_grade:real; //Here we extend user_cover_struct methods end_group() is also { cur_group_grade = group_grade/100000000; //Pass the values to the Python module addVal(group_name,sys.time, cur_group_grade); } //end_group};//user_cover_struct extend sys{ @import_python(module_name="plot_i", python_name="init_plot" init_plot(numCycles:int) is imported; @import_python(module_name="plot_i", python_name="end_plot") end_plot() is imported; !cover_info : my_cover_struct; run() is also { start scenario(); }; scenario() @any is { //initialize the plot in python init_plot(numCycles); while(sys.time<numCycles) { //Here you add your logic //get the current coverage information for packet cover_info = new; var num_items:= cover_info.scan_cover("packet.packet_cover"); //Here you add your logic };//while //Finish the plot in python end_plot(); }//scenario}//sys The green lines define the methods as they are called from the e The blue lines are pre-defined annotations that state that the method in the following line is imported from Python and define the Python module and the name of the method in it. The red lines are the calls to the Python methods. Before running this, note that you need to ensure that Specman finds the Python include and lib directories, and Python finds our Python module. To do this, you need to define a few environment variables: SPECMAN_PYTHON_INCLUDE_DIR, SPECMAN_PYTHON_LIB_DIR, and PYTHONPATH. The Python Module to Draw the PlotAfter we extracted the coverage information and ensured that we can pass it to a Python module, we need to display this data in the Python module. There are many code examples out there for drawing a graph with Python, especially with matplotlib. You can either accumulate the data and draw a graph at the end of the run or draw a graph interactively during the run itself- which is very useful especially for long runs. Below is a code that draws the coverage grade of multiple groups interactively during the run and at the end of the run it prints circles around the maximum point and adds some text to it. I am new to Python so there might be better or simpler ways to do so, but it does the work. The cool thing is that there are so many examples to rely on that you can produce this kind of code very fast. # plot_i.pyimport matplotlibimport matplotlib.pyplot as plt plt.style.use('bmh') #set interactive modeplt.ion() fig = plt.figure(1)ax = fig.add_subplot(111) # Holds a specific cover groupclass CGroup: def __init__(self, name, cycle,grade ): self.name = name self.XCycles=[] self.XCycles.append(cycle) self.YGrades=[] self.YGrades.append(grade) self.line_Object= ax.plot(self.XCycles, self.YGrades,label=name)[-1] self.firstMaxCycle=cycle self.firstMaxGrade=grade def add(self,cycle,grade): self.XCycles.append(cycle) self.YGrades.append(grade) if grade>self.firstMaxGrade: self.firstMaxGrade=grade self.firstMaxCycle=cycle self.line_Object.set_xdata(self.XCycles) self.line_Object.set_ydata(self.YGrades) plt.legend(shadow=True) fig.canvas.draw() #Holds all the data of all cover groups class CData: groupsList=[] def add (self,groupName,cycle,grade): found=0 for group in self.groupsList: if groupName in group.name: group.add(cycle,grade) found=1 break if found==0: obj=CGroup(groupName,cycle,grade) self.groupsList.append(obj) def drawFirstMaxGrade(self): for group in self.groupsList: left, right = plt.xlim() x=group.firstMaxCycle y=group.firstMaxGrade #draw arrow #ax.annotate("first maximum grade", xy=(x,y), #xytext=(right-50, 0.4),arrowprops=dict(facecolor='blue', shrink=0.05),) #mark the points on the plot plt.scatter(group.firstMaxCycle, group.firstMaxGrade,color=group.line_Object.get_color()) #Add text next to the point text='cycle:'+str(x)+' grade:'+str(y) plt.text(x+3, y-0.1, text, fontsize=9, bbox=dict(boxstyle='round4',color=group.line_Object.get_color())) #Global datamyData=CData() #Initialize the plot, should be called oncedef init_plot(numCycles): plt.xlabel('cycles') plt.ylabel('grade') plt.title('Grade over time') plt.ylim(0,1) plt.xlim(0,numCycles) #Add values to the plotdef addVal(groupName,cycle,grade): myData.add(groupName,cycle,grade) #Mark interesting points on the plot and keep it showndef end_plot(): plt.ioff(); myData.drawFirstMaxGrade(); #Make sure the plot is being shown plt.show(); #uncomment the following lines to run this script with simple example to make sure #it runs properly regardless of the Specman interaction #init_plot(300)#addVal("xx",1,0)#addVal("yy",1,0)#addVal("xx",50,0.3)#addVal("yy",60,0.4)#addVal("xx",100,0.8)#addVal("xx",120,0.8)#addVal("xx",180,0.8)#addVal("yy",200,0.9)#addVal("yy",210,0.9)#addVal("yy",290,0.9)#end_plot() In the example we used, we had two interesting entities: packet and state_machine, thus we had two equivalent coverage groups. When running our example connecting to the Python module, we get the following graph which is displayed interactively during the run. When analyzing this specific example, we can see two things. First, packet gets to a high coverage quite fast and significant part of the run does not contribute to its coverage. On the other hand, something interesting happens relating to state_machine around cycle 700 which suddenly boosts its coverage. The next step would be to try to dump graphic information relating to other entities and see if something noticeable happens around cycle 700. To run a complete example, you can download the files from: https://github.com/okirsh/Specman-Python/ Do you feel like analyzing the coverage behavior in your environment? We will be happy to hear about your outcomes and other usages of the Python interface. Orit KirshenbergSpecman team Full Article Specman Specman coverage engine coverage Python Functional Verification Specman e e e language specman elite functional coverage
man A Specman/e Syntax for Sublime Text 3 By feedproxy.google.com Published On :: Wed, 05 Feb 2020 17:01:00 GMT We're happy to have guest blogger Thorsten Dworzak, Principal Consultant at Verilab GmbH, describe how he added Specman/e syntax to Sublime Text 3: According to the 2018 StackOverflow Developer Survey, the popularity of development environments (IDEs, Text Editors) among software developers shows the following ranking: Visual Studio Code 34.9% Visual Studio 34.3% Notepad++ 34.2% Sublime Text 28.9% Vim 25.8% IntelliJ 24.9% Android Studio 19.3% (DVT) Eclipse 18.9% … Emacs 4.1% Of these, only Vim, (DVT) Eclipse, and Emacs support editing in e-language (at least, last time I checked). Kate, which comes with KDE and also has a Specman mode, is not on this list. I started using Sublime Text 3 some time ago. It offers packages that support a number of programming languages. Though there is an e-language syntax available from Tsvi Mostovicz, it is unfinished work, and there are many syntactic constructs are missing. So, I created a fork of his project and finished it (it will eventually be merged back here). It is a never-ending task because my code base for testing is limited and e is still undergoing development. The project is available through ST3's Package Control and you can contribute to it via Github. I am eagerly waiting for your pull requests and/or comments and contributions! Full Article Specman Specman/e Specman e Sublime Text specman elite
man Specman’s Callback Coverage API By feedproxy.google.com Published On :: Thu, 30 Apr 2020 14:30:00 GMT Our customers’ tests have become more complex, longer, and consume more resources than before. This increases the need to optimize the regression while not compromising on coverage. Some advanced customers of Specman use Machine Learning based solutions to optimize the regressions while some use simpler solutions. Based on a request of an advanced customer, we added a new Coverage API in Specman 19.09 called Coverage Callback. In 20.03, we have further enhanced this API by adding more options. Now there are two Coverage APIs that provide coverage information during the run (the old scan_cover API and this new Callback API). This blog presents these two APIs and compares between them while focusing on the newer one. Before we get into the specifics of each API, let’s discuss what is common between these APIs and why we need them. Typically, people observe the coverage model after the test ends, and get to know the overall contribution of the test to the coverage. With these two APIs, you can observe the coverage model during the test, and hence, get more insight into the test progress. Are you wondering about what you can do with this information? Let’s look at some examples. Recognize cases when the test continues to run long after it already reached its coverage goal. View the performance of the coverage curve. If a test is “stuck” at the same grade for a long time, this might indicate that the test is not very good and is just a waste of resource. These analyses can be performed in the test itself, and then a test can decide to either stop the run, or change something in it configuration, or – post run. You can also present them visually for some analysis, as shown in the blog: Analyze Your Coverage with Python. scan_cover API (or “Scanning the Coverage Model”) With this API you can get the current status for any cover group or item you are interested in at any point in time during the test (by calling scan_cover()). It is very simple to use; however it has performance penalty. For getting the coverage grade of any cover group during the test, you should1. Trigger the scan_cover at any time when you want the coverage model to be scanned.2. Implement the scan_cover related methods, such as start_item() and end_bucket(). In these methods, you can query the current grade of group/item/bucket.The blog mentioned earlier: Analyze Your Coverage with Python describes the details and provides an example. Callback API The Callback API enables you to get a callback for a desired cover group(s), whenever it is sampled. This API also provides various query methods for getting coverage related information such as what the current sampled value is. So, in essence, it is similar to scan_cover API, but as the phrase says: “same same but different”: Callback API has almost no performance penalty while scan_cover API does. Callback API contains a richer set of query methods that provide a lot of information about the current sampled value (vs just the grade with scan_cover). Using scan_cover API, you decide when you want to query the coverage information (you call scan_cover), while with the Callback API you query the coverage information when the coverage is sampled (from do_callback). So, scan_cover gives you more flexibility, but you do need to find the right timing for this call. There is no absolute advantage of either of these APIs, this only depends on what you want to do. Callback API details The Callback API is based on a predefined struct called: cover_sampling_callback. In order to use this API, you need to: Define a struct inheriting cover_sampling_callback (cover_cb_save_data below) Extend the predefined do_callback() method. This method is a hook being called whenever any of the cover groups that are registered to the cover_sampling_callback instance is being sampled. From do_callback() you can access coverage data by using queries such as: is_currently_per_type(), get_current_group_grade() and get_current_cover_group() (as in the example below) and many more such as: get_relevant_group_layers() and get_simple_cross_sampled_bucket_name(). Register the desired cover group(s) to this struct instance using the register() method. Take a look at the following code: // Define a coverage callback.// Its behavior – print to screen the current grade.struct cover_cb_save_data like cover_sampling_callback { do_callback() is only { // In this example, we care only about the per_type grade, and not per_instance if is_currently_per_type() { var cur_grade : real = get_current_group_grade(); sys.save_data (get_current_cover_group().get_name(), cur_grade); };//if };//do_callback()};// cover_cb_send_dataextend sys { !cb : cover_cb_save_data; // Instantiate the coverage callback, and register to it two of my coverage groups run() is also { cb = new with { var gr1:=rf_manager.get_struct_by_name("packet").get_cover_group("packet_cover"); .register(gr1); var gr2:=rf_manager.get_struct_by_name("sys").get_cover_group("mem_cover"); .register(gr2); };//new };//run() save_data(group_name : string, group_grade : real) is { //here you either print the values to the screen, update a graph you show or save to a db };// save_data};//sys In the blog Analyze Your Coverage with Python mentioned above, we show an example of how you can use the scan_cover API to extract coverage information during the run, and then use the Specman-Python API to display the coverage interactively during the run (using plotting Python library - matplotlib). If you find this usage interesting and you want to use the same example, by the Callback API instead of the scan_cover API, you can download the full example from GIT from here: https://github.com/efratcdn/cover_callback. Specman Team Full Article Specman/e Specman coverage engine coverage Specman e specman elite Coverage Driven Verification